Добавление title и description в настройки
This commit is contained in:
Vendored
+10
-10
File diff suppressed because one or more lines are too long
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+39
-6
@@ -1,22 +1,22 @@
|
|||||||
/**
|
/**
|
||||||
* Объект настроек шутки
|
* Объект настроек шутки
|
||||||
*/
|
*/
|
||||||
export interface JokeSettings {
|
export class JokeSettings {
|
||||||
/**
|
/**
|
||||||
* Флаг блокировки срабатывания
|
* Флаг блокировки срабатывания
|
||||||
*/
|
*/
|
||||||
enabled: boolean;
|
enabled: boolean = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Вероятность срабатывания в процентах
|
* Вероятность срабатывания в процентах
|
||||||
*/
|
*/
|
||||||
chance: number;
|
chance: number = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Объект, описывающий шутку
|
* Объект, описывающий шутку
|
||||||
*/
|
*/
|
||||||
export abstract class Joke {
|
export abstract class Joke<T extends JokeSettings> {
|
||||||
/**
|
/**
|
||||||
* Идентификатор шутки
|
* Идентификатор шутки
|
||||||
*/
|
*/
|
||||||
@@ -35,7 +35,40 @@ export abstract class Joke {
|
|||||||
/**
|
/**
|
||||||
* Настройки шутки
|
* Настройки шутки
|
||||||
*/
|
*/
|
||||||
settings: JokeSettings;
|
_settings: T;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Получение полного списка настроек
|
||||||
|
*/
|
||||||
|
get settings(): T {
|
||||||
|
return this._settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Запись новых настроек
|
||||||
|
*
|
||||||
|
* @param settings
|
||||||
|
*/
|
||||||
|
set settings(settings: T) {
|
||||||
|
for (const entry of Object.entries(settings)) {
|
||||||
|
const id = entry[0];
|
||||||
|
const value = entry[1];
|
||||||
|
|
||||||
|
switch (id) {
|
||||||
|
case "name":
|
||||||
|
case "title":
|
||||||
|
this.title = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "description":
|
||||||
|
this.description = value;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
(<any>this._settings)[id] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Проверка вероятности
|
* Проверка вероятности
|
||||||
@@ -78,7 +111,7 @@ export abstract class Joke {
|
|||||||
/**
|
/**
|
||||||
* Объект, описывающий шутку, которая может быть остановлена
|
* Объект, описывающий шутку, которая может быть остановлена
|
||||||
*/
|
*/
|
||||||
export abstract class StopableJoke extends Joke {
|
export abstract class StopableJoke<T extends JokeSettings> extends Joke<T> {
|
||||||
/**
|
/**
|
||||||
* Остановка шутки, если возможно
|
* Остановка шутки, если возможно
|
||||||
*/
|
*/
|
||||||
|
|||||||
+6
-6
@@ -25,7 +25,7 @@ export class JokerClass {
|
|||||||
*
|
*
|
||||||
* @param joke Объект шутки
|
* @param joke Объект шутки
|
||||||
*/
|
*/
|
||||||
add(joke: Joke): void {
|
add(joke: Joke<any>): void {
|
||||||
this.jokes[joke.id] = joke;
|
this.jokes[joke.id] = joke;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -40,22 +40,22 @@ export class JokerClass {
|
|||||||
id: string,
|
id: string,
|
||||||
handler: Function,
|
handler: Function,
|
||||||
settings: JokeSettings | null = null
|
settings: JokeSettings | null = null
|
||||||
): Joke {
|
): Joke<JokeSettings> {
|
||||||
const joke = new (class extends Joke {
|
const joke = new (class extends Joke<JokeSettings> {
|
||||||
id = id;
|
id = id;
|
||||||
|
|
||||||
title = "Пользовательская шутка";
|
title = "Пользовательская шутка";
|
||||||
|
|
||||||
description = "Для шутки не определено описание";
|
description = "Для шутки не определено описание";
|
||||||
|
|
||||||
settings: JokeSettings = { chance: 10, enabled: true };
|
_settings = new JokeSettings();
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
handler.call(this, this.settings);
|
handler.call(this, this.settings);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
Object.assign(joke.settings, settings ?? {});
|
joke.settings = settings;
|
||||||
|
|
||||||
this.add(joke);
|
this.add(joke);
|
||||||
|
|
||||||
@@ -279,7 +279,7 @@ export class JokerClass {
|
|||||||
* Объект хранения шуток
|
* Объект хранения шуток
|
||||||
*/
|
*/
|
||||||
interface JokeMap {
|
interface JokeMap {
|
||||||
[key: string]: Joke;
|
[key: string]: Joke<any>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ import { JokerClass } from "../joker";
|
|||||||
*
|
*
|
||||||
* @author Kozhilya
|
* @author Kozhilya
|
||||||
*/
|
*/
|
||||||
export class CarnivalJoke extends Joke {
|
export class CarnivalJoke extends Joke<CarnivalJokeSettings> {
|
||||||
id = "carnival";
|
id = "carnival";
|
||||||
|
|
||||||
title = "Карнавал";
|
title = "Карнавал";
|
||||||
|
|
||||||
description = "Аватарки приобретают интересные цвета";
|
description = "Аватарки приобретают интересные цвета";
|
||||||
|
|
||||||
settings = new CarnivalJokeSettings();
|
_settings = new CarnivalJokeSettings();
|
||||||
|
|
||||||
start(): void {
|
start(): void {
|
||||||
$(this.settings.selector).each((_, elem) => {
|
$(this.settings.selector).each((_, elem) => {
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ import $ from "jquery";
|
|||||||
*
|
*
|
||||||
* @author Kozhilya
|
* @author Kozhilya
|
||||||
*/
|
*/
|
||||||
export class CrazyLettersJoke extends Joke {
|
export class CrazyLettersJoke extends Joke<CrazyLettersJokeSettings> {
|
||||||
id = "crazy_letters";
|
id = "crazy_letters";
|
||||||
|
|
||||||
title = "Мама, Я сОшЛа С уМа!";
|
title = "Мама, Я сОшЛа С уМа!";
|
||||||
|
|
||||||
description = "иМеНа ЗаБоРчИкОм";
|
description = "иМеНа ЗаБоРчИкОм";
|
||||||
|
|
||||||
settings = new CrazyLettersJokeSettings();
|
_settings = new CrazyLettersJokeSettings();
|
||||||
|
|
||||||
start(): void {
|
start(): void {
|
||||||
$(this.settings.selector).each((_, elem) => {
|
$(this.settings.selector).each((_, elem) => {
|
||||||
|
|||||||
+2
-2
@@ -12,14 +12,14 @@ const cursor_effects = require("cursor-effects");
|
|||||||
* @author Tim Holman
|
* @author Tim Holman
|
||||||
* @link https://tholman.com/cursor-effects/
|
* @link https://tholman.com/cursor-effects/
|
||||||
*/
|
*/
|
||||||
export class CursorEffectsJoke extends StopableJoke {
|
export class CursorEffectsJoke extends StopableJoke<CursorEffectsJokeSettings> {
|
||||||
id = "cursor_effects";
|
id = "cursor_effects";
|
||||||
|
|
||||||
title = "Красивый курсор";
|
title = "Красивый курсор";
|
||||||
|
|
||||||
description = "Эффекты, следующие за курсором";
|
description = "Эффекты, следующие за курсором";
|
||||||
|
|
||||||
settings = new CursorEffectsJokeSettings();
|
_settings = new CursorEffectsJokeSettings();
|
||||||
|
|
||||||
active_cursor_effect: any;
|
active_cursor_effect: any;
|
||||||
|
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ import $ from "jquery";
|
|||||||
*
|
*
|
||||||
* @author Kozhilya
|
* @author Kozhilya
|
||||||
*/
|
*/
|
||||||
export class HumanitarianHellJoke extends Joke {
|
export class HumanitarianHellJoke extends Joke<HumanitarianHellJokeSettings> {
|
||||||
id = "humanitarian_hell";
|
id = "humanitarian_hell";
|
||||||
|
|
||||||
title = "Ад гуманитария";
|
title = "Ад гуманитария";
|
||||||
|
|
||||||
description = 'Все "тся" заменяются на "ться", а все "ться" на "тся"';
|
description = 'Все "тся" заменяются на "ться", а все "ться" на "тся"';
|
||||||
|
|
||||||
settings = new HumanitarianHellJokeSettings();
|
_settings = new HumanitarianHellJokeSettings();
|
||||||
|
|
||||||
processText(text: string): string {
|
processText(text: string): string {
|
||||||
return text.replace(/(ть?ся)/g, function (fnd) {
|
return text.replace(/(ть?ся)/g, function (fnd) {
|
||||||
|
|||||||
@@ -10,14 +10,14 @@ import { JokerClass } from "../joker";
|
|||||||
*
|
*
|
||||||
* @author Kozhilya
|
* @author Kozhilya
|
||||||
*/
|
*/
|
||||||
export class LetterChaosJoke extends Joke {
|
export class LetterChaosJoke extends Joke<LetterChaosJokeSettings> {
|
||||||
id = "letter_chaos";
|
id = "letter_chaos";
|
||||||
|
|
||||||
title = "Буквенный хаос";
|
title = "Буквенный хаос";
|
||||||
|
|
||||||
description = "Все буквы в словах, кроме первой и последней, перемешены";
|
description = "Все буквы в словах, кроме первой и последней, перемешены";
|
||||||
|
|
||||||
settings = new LetterChaosJokeSettings();
|
_settings = new LetterChaosJokeSettings();
|
||||||
|
|
||||||
punctuationSymbols: string[] | null = null;
|
punctuationSymbols: string[] | null = null;
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ export class LetterChaosJoke extends Joke {
|
|||||||
private processNode(node: any) {
|
private processNode(node: any) {
|
||||||
node.textContent = node.textContent?.replace(
|
node.textContent = node.textContent?.replace(
|
||||||
/([А-Яа-яA-Za-z]+)/gm,
|
/([А-Яа-яA-Za-z]+)/gm,
|
||||||
this.shuffleLetters
|
(_: any, word: string) => this.shuffleLetters(word)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -8,14 +8,14 @@ import $ from "jquery";
|
|||||||
*
|
*
|
||||||
* @author Kozhilya
|
* @author Kozhilya
|
||||||
*/
|
*/
|
||||||
export class MirrorJoke extends Joke {
|
export class MirrorJoke extends Joke<MirrorJokeSettings> {
|
||||||
id = "mirror";
|
id = "mirror";
|
||||||
|
|
||||||
title = "Зеркало";
|
title = "Зеркало";
|
||||||
|
|
||||||
description = "Элементы форума отражаются (по крайней мере, пытаются)";
|
description = "Элементы форума отражаются (по крайней мере, пытаются)";
|
||||||
|
|
||||||
settings = new MirrorJokeSettings();
|
_settings = new MirrorJokeSettings();
|
||||||
|
|
||||||
start(): void {
|
start(): void {
|
||||||
$(".post, .post h3, .post-links, .post-author, .post-content")
|
$(".post, .post h3, .post-links, .post-author, .post-content")
|
||||||
|
|||||||
+2
-2
@@ -8,14 +8,14 @@ import $ from "jquery";
|
|||||||
*
|
*
|
||||||
* @author Kozhilya
|
* @author Kozhilya
|
||||||
*/
|
*/
|
||||||
export class ShakeJoke extends StopableJoke {
|
export class ShakeJoke extends StopableJoke<ShakeJokeSettings> {
|
||||||
id = "shake";
|
id = "shake";
|
||||||
|
|
||||||
title = "Форумо-трясение";
|
title = "Форумо-трясение";
|
||||||
|
|
||||||
description = "Страница форума начинает трястись";
|
description = "Страница форума начинает трястись";
|
||||||
|
|
||||||
settings = new ShakeJokeSettings();
|
_settings = new ShakeJokeSettings();
|
||||||
|
|
||||||
private interval_id: NodeJS.Timer;
|
private interval_id: NodeJS.Timer;
|
||||||
|
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ import { StupidTitleDefaultVariants } from "../data/stupid_title_variants";
|
|||||||
*
|
*
|
||||||
* @author Kozhilya
|
* @author Kozhilya
|
||||||
*/
|
*/
|
||||||
export class StupidTitleJoke extends Joke {
|
export class StupidTitleJoke extends Joke<StupidTitleJokeSettings> {
|
||||||
id = "stupid_title";
|
id = "stupid_title";
|
||||||
|
|
||||||
title = "Глупые статусы";
|
title = "Глупые статусы";
|
||||||
|
|
||||||
description = "Каждому пользователю даётся новый глупый статус";
|
description = "Каждому пользователю даётся новый глупый статус";
|
||||||
|
|
||||||
settings = new StupidTitleJokeSettings();
|
_settings = new StupidTitleJokeSettings();
|
||||||
|
|
||||||
private loadedGenders: any = null;
|
private loadedGenders: any = null;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -30,4 +30,4 @@ import { StupidTitleJoke } from "./jokes/stupid_title";
|
|||||||
StupidTitleJoke,
|
StupidTitleJoke,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
interface JokeClassList extends Array<new () => Joke> {}
|
interface JokeClassList extends Array<new () => Joke<any>> {}
|
||||||
|
|||||||
Reference in New Issue
Block a user