Improve AI

This commit is contained in:
syuilo 2018-09-02 23:40:03 +09:00
parent 9872ef158b
commit 53a07d0d06
6 changed files with 25 additions and 20 deletions

View file

@ -71,7 +71,7 @@ export default class MessageLike {
return includes(this.text, words); return includes(this.text, words);
} }
public or = (words: string[]): boolean => { public or = (words: (string | RegExp)[]): boolean => {
return or(this.text, words); return or(this.text, words);
} }
} }

View file

@ -225,7 +225,7 @@ export default class CoreModule implements IModule {
} }
private hug = (msg: MessageLike): boolean => { private hug = (msg: MessageLike): boolean => {
if (!msg.or(['ぎゅ'])) return false; if (!msg.or(['ぎゅ', /^はぐ(し(て|よ|よう)?)?$/])) return false;
// メッセージのみ // メッセージのみ
if (!msg.isMessage) return true; if (!msg.isMessage) return true;

View file

@ -1,10 +1,10 @@
import { hiraganaToKatagana, hankakuToZenkaku } from './japanese'; import { katakanaToHiragana, hankakuToZenkaku } from './japanese';
export default function(text: string, words: string[]): boolean { export default function(text: string, words: string[]): boolean {
if (text == null) return false; if (text == null) return false;
text = hankakuToZenkaku(hiraganaToKatagana(text)); text = katakanaToHiragana(hankakuToZenkaku(text));
words = words.map(word => hiraganaToKatagana(word)); words = words.map(word => katakanaToHiragana(word));
return words.some(word => text.includes(word)); return words.some(word => text.includes(word));
} }

View file

@ -1,6 +1,12 @@
// Utilities for Japanese // Utilities for Japanese
const kanaMap: string[][] = [ const kanaMap: string[][] = [
['ガ', 'ガ'], ['ギ', 'ギ'], ['グ', 'グ'], ['ゲ', 'ゲ'], ['ゴ', 'ゴ'],
['ザ', 'ザ'], ['ジ', 'ジ'], ['ズ', 'ズ'], ['ゼ', 'ゼ'], ['ゾ', 'ゾ'],
['ダ', 'ダ'], ['ヂ', 'ヂ'], ['ヅ', 'ヅ'], ['デ', 'デ'], ['ド', 'ド'],
['バ', 'バ'], ['ビ', 'ビ'], ['ブ', 'ブ'], ['ベ', 'ベ'], ['ボ', 'ボ'],
['パ', 'パ'], ['ピ', 'ピ'], ['プ', 'プ'], ['ペ', 'ペ'], ['ポ', 'ポ'],
['ヴ', 'ヴ'], ['ヷ', 'ヷ'], ['ヺ', 'ヺ'],
['ア', 'ア'], ['イ', 'イ'], ['ウ', 'ウ'], ['エ', 'エ'], ['オ', 'オ'], ['ア', 'ア'], ['イ', 'イ'], ['ウ', 'ウ'], ['エ', 'エ'], ['オ', 'オ'],
['カ', 'カ'], ['キ', 'キ'], ['ク', 'ク'], ['ケ', 'ケ'], ['コ', 'コ'], ['カ', 'カ'], ['キ', 'キ'], ['ク', 'ク'], ['ケ', 'ケ'], ['コ', 'コ'],
['サ', 'サ'], ['シ', 'シ'], ['ス', 'ス'], ['セ', 'セ'], ['ソ', 'ソ'], ['サ', 'サ'], ['シ', 'シ'], ['ス', 'ス'], ['セ', 'セ'], ['ソ', 'ソ'],
@ -11,12 +17,6 @@ const kanaMap: string[][] = [
['ヤ', 'ヤ'], ['ユ', 'ユ'], ['ヨ', 'ヨ'], ['ヤ', 'ヤ'], ['ユ', 'ユ'], ['ヨ', 'ヨ'],
['ラ', 'ラ'], ['リ', 'リ'], ['ル', 'ル'], ['レ', 'レ'], ['ロ', 'ロ'], ['ラ', 'ラ'], ['リ', 'リ'], ['ル', 'ル'], ['レ', 'レ'], ['ロ', 'ロ'],
['ワ', 'ワ'], ['ヲ', 'ヲ'], ['ン', 'ン'], ['ワ', 'ワ'], ['ヲ', 'ヲ'], ['ン', 'ン'],
['ガ', 'ガ'], ['ギ', 'ギ'], ['グ', 'グ'], ['ゲ', 'ゲ'], ['ゴ', 'ゴ'],
['ザ', 'ザ'], ['ジ', 'ジ'], ['ズ', 'ズ'], ['ゼ', 'ゼ'], ['ゾ', 'ゾ'],
['ダ', 'ダ'], ['ヂ', 'ヂ'], ['ヅ', 'ヅ'], ['デ', 'デ'], ['ド', 'ド'],
['バ', 'バ'], ['ビ', 'ビ'], ['ブ', 'ブ'], ['ベ', 'ベ'], ['ボ', 'ボ'],
['パ', 'パ'], ['ピ', 'ピ'], ['プ', 'プ'], ['ペ', 'ペ'], ['ポ', 'ポ'],
['ヴ', 'ヴ'], ['ヷ', 'ヷ'], ['ヺ', 'ヺ'],
['ァ', 'ァ'], ['ィ', 'ィ'], ['ゥ', 'ゥ'], ['ェ', 'ェ'], ['ォ', 'ォ'], ['ァ', 'ァ'], ['ィ', 'ィ'], ['ゥ', 'ゥ'], ['ェ', 'ェ'], ['ォ', 'ォ'],
['ッ', 'ッ'], ['ャ', 'ャ'], ['ュ', 'ュ'], ['ョ', 'ョ'], ['ッ', 'ッ'], ['ャ', 'ャ'], ['ュ', 'ュ'], ['ョ', 'ョ'],
['ー', 'ー'] ['ー', 'ー']

View file

@ -1,10 +1,10 @@
import { hiraganaToKatagana, hankakuToZenkaku } from './japanese'; import { hankakuToZenkaku, katakanaToHiragana } from './japanese';
export default function(text: string, words: string[]): boolean { export default function(text: string, words: (string | RegExp)[]): boolean {
if (text == null) return false; if (text == null) return false;
text = hankakuToZenkaku(hiraganaToKatagana(text)); text = katakanaToHiragana(hankakuToZenkaku(text));
words = words.map(word => hiraganaToKatagana(word)); words = words.map(word => typeof word == 'string' ? katakanaToHiragana(word) : word);
return words.some(word => { return words.some(word => {
/** /**
@ -19,16 +19,20 @@ export default function(text: string, words: string[]): boolean {
// ただそのままだと「セーラー」などの本来「ー」が含まれているワードも「ー」が除去され // ただそのままだと「セーラー」などの本来「ー」が含まれているワードも「ー」が除去され
// 「セーラ」になり、「セーラー」を期待している場合はマッチしなくなり期待する動作にならなくなるので、 // 「セーラ」になり、「セーラー」を期待している場合はマッチしなくなり期待する動作にならなくなるので、
// 期待するワードの末尾にもともと「ー」が含まれている場合は(対象のテキストの「ー」をすべて除去した後に)「ー」を付けてあげる // 期待するワードの末尾にもともと「ー」が含まれている場合は(対象のテキストの「ー」をすべて除去した後に)「ー」を付けてあげる
.replace(/ー+$/, '') + (word[word.length - 1] == 'ー' ? 'ー' : '') .replace(/ー+$/, '') + ((typeof word == 'string' && word[word.length - 1] == 'ー') ? 'ー' : '')
.replace(/+$/, '') .replace(/+$/, '')
.replace(/。$/, '') .replace(/。$/, '')
.replace(/デス$/, '') .replace(/です$/, '')
.replace(/^藍/, '') .replace(/^藍/, '')
.replace(/^チャン/, '') .replace(/^ちゃん/, '')
.replace(/、+$/, ''); .replace(/、+$/, '');
} }
if (typeof word == 'string') {
return (text == word) || (cleanup(text) == word); return (text == word) || (cleanup(text) == word);
} else {
return (word.test(text)) || (word.test(cleanup(text)));
}
}); });
} }

View file

@ -52,6 +52,7 @@ PONGを返します。生存確認にどうぞ
### その他反応するフレーズ ### その他反応するフレーズ
* かわいい * かわいい
* 好き (メッセージのみ) * 好き (メッセージのみ)
* ぎゅー (メッセージのみ)
* 罵って (メッセージのみ) * 罵って (メッセージのみ)
* 踏んで (メッセージのみ) * 踏んで (メッセージのみ)