diff --git a/src/index.ts b/src/index.ts index e26bd05..6f57491 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,6 +10,7 @@ import GuessingGameModule from './modules/guessing-game'; import KeywordModule from './modules/keyword'; import WelcomeModule from './modules/welcome'; import TimerModule from './modules/timer'; +import DiceModule from './modules/dice'; import ServerModule from './modules/server'; import * as request from 'request-promise-native'; @@ -36,6 +37,7 @@ promiseRetry(retry => { new GuessingGameModule(), new ReversiModule(), new TimerModule(), + new DiceModule(), new ServerModule() ]; diff --git a/src/modules/dice/index.ts b/src/modules/dice/index.ts new file mode 100644 index 0000000..c307ca7 --- /dev/null +++ b/src/modules/dice/index.ts @@ -0,0 +1,36 @@ +import 藍 from '../../ai'; +import IModule from '../../module'; +import MessageLike from '../../message-like'; + +export default class DiceModule implements IModule { + public readonly name = 'dice'; + private ai: 藍; + + public install = (ai: 藍) => { + this.ai = ai; + } + + public onMention = (msg: MessageLike) => { + if (msg.text == null) return false; + + const query = msg.text.match(/([0-9]+)[dD]([0-9]+)/); + + if (query == null) return false; + + const times = parseInt(query[1], 10); + const dice = parseInt(query[2], 10); + + if (times < 1 || times > 10) return false; + if (dice < 2 || dice > 1000) return false; + + const results: number[] = []; + + for (let i = 0; i < times; i++) { + results.push(Math.floor(Math.random() * dice) + 1); + } + + msg.reply(results.join(' ')); + + return true; + } +} diff --git a/torisetu.md b/torisetu.md index 739c7c1..2cf81f2 100644 --- a/torisetu.md +++ b/torisetu.md @@ -22,6 +22,10 @@ Misskeyに24時間常駐している。AIなので睡眠は不要だが、たま ### 絵文字 藍に「絵文字」と言うと、藍が考えた絵文字の組み合わせを教えてくれます。 +### サイコロ +ダイスノーテーションを伝えるとサイコロを振ってくれます。 +例: "2d6" (6面サイコロを2回振る)、"3d5" (5面サイコロを3回振る) + ### 数当てゲーム 藍にメッセージで「数当てゲーム」と言うと遊べます。 藍の考えている数字を当てるゲームです。