diff --git a/src/modules/core/index.ts b/src/modules/core/index.ts index 1cdc46a..fe1c1ff 100644 --- a/src/modules/core/index.ts +++ b/src/modules/core/index.ts @@ -33,6 +33,7 @@ export default class CoreModule implements IModule { this.nadenade(msg) || this.kawaii(msg) || this.suki(msg) || + this.hug(msg) || this.humu(msg) || this.batou(msg) || this.ponkotu(msg) @@ -223,6 +224,20 @@ export default class CoreModule implements IModule { return true; } + private hug = (msg: MessageLike): boolean => { + if (!msg.or(['ぎゅ'])) return false; + + // メッセージのみ + if (!msg.isMessage) return true; + + msg.reply( + msg.friend.love >= 5 ? serifs.core.hug.love : + msg.friend.love <= -3 ? serifs.core.hug.hate : + serifs.core.hug.normal); + + return true; + } + private humu = (msg: MessageLike): boolean => { if (!msg.includes(['踏んで'])) return false; diff --git a/src/serifs.ts b/src/serifs.ts index 35269e2..acc45a6 100644 --- a/src/serifs.ts +++ b/src/serifs.ts @@ -54,6 +54,14 @@ export default { hate: null }, + hug: { + normal: 'ぎゅー...', + + love: 'ぎゅー♪', + + hate: '離れてください...' + }, + humu: { normal: 'え、えっと…… ふみふみ……… どうですか…?', diff --git a/src/utils/or.ts b/src/utils/or.ts index 8b957ca..3358f4f 100644 --- a/src/utils/or.ts +++ b/src/utils/or.ts @@ -3,18 +3,32 @@ import { hiraganaToKatagana, hankakuToZenkaku } from './japanese'; export default function(text: string, words: string[]): boolean { if (text == null) return false; - text = cleanup(hankakuToZenkaku(hiraganaToKatagana(text))); + text = hankakuToZenkaku(hiraganaToKatagana(text)); words = words.map(word => hiraganaToKatagana(word)); - return words.some(word => text == word); + return words.some(word => { + /** + * テキストの余分な部分を取り除く + * 例えば「藍ちゃん好き!」のようなテキストを「好き」にする + */ + function cleanup(text: string): string { + return text.trim() + .replace(/[!!]+$/, '') + // 末尾の ー を除去 + // 例えば「おはよー」を「おはよ」にする + // ただそのままだと「セーラー」などの本来「ー」が含まれているワードも「ー」が除去され + // 「セーラ」になり、「セーラー」を期待している場合はマッチしなくなり期待する動作にならなくなるので、 + // 期待するワードの末尾にもともと「ー」が含まれている場合は(対象のテキストの「ー」をすべて除去した後に)「ー」を付けてあげる + .replace(/ー+$/, '') + (word[word.length - 1] == 'ー' ? 'ー' : '') + .replace(/ッ+$/, '') + .replace(/。$/, '') + .replace(/デス$/, '') + .replace(/^藍/, '') + .replace(/^チャン/, '') + .replace(/、+$/, ''); + } + + return (text == word) || (cleanup(text) == word); + }); } -function cleanup(text: string): string { - return text.trim() - .replace(/[!!]+$/, '') - .replace(/。$/, '') - .replace(/デス$/, '') - .replace(/^藍/, '') - .replace(/^チャン/, '') - .replace(/、+$/, ''); -}