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