diff --git a/src/service/command/meme/index.ts b/src/service/command/meme/index.ts index 1d8c8e4d..fc492ead 100644 --- a/src/service/command/meme/index.ts +++ b/src/service/command/meme/index.ts @@ -9,6 +9,7 @@ import { nigetane } from './nigetane.js'; import { nine } from './nine.js'; import { ojaru } from './ojaru.js'; import { takopi } from './takopi.js'; +import { tsureteike } from './tsureteike.js'; import { web3 } from './web3.js'; export const memes = [ @@ -23,5 +24,6 @@ export const memes = [ kenjou, koume, ojaru, - nine + nine, + tsureteike ]; diff --git a/src/service/command/meme/test/tsureteike.test.ts b/src/service/command/meme/test/tsureteike.test.ts new file mode 100644 index 00000000..5de32384 --- /dev/null +++ b/src/service/command/meme/test/tsureteike.test.ts @@ -0,0 +1,47 @@ +import { describe, expect, it } from 'vitest'; +import { Meme } from '../../meme.js'; + +import { createMockMessage } from '../../command-message.js'; +import { parseStringsOrThrow } from '../../../../adaptor/proxy/command/schema.js'; + +describe('meme', () => { + const responder = new Meme(); + + it('use case of tsureteike', async () => { + await responder.on( + createMockMessage( + parseStringsOrThrow( + [ + 'tsureteike', + 'プログラマ', + 'Rustは知っているか?', + 'ゲームですか?', + '錆のこと?', + '🦀' + ], + responder.schema + ), + (message) => { + expect(message).toStrictEqual({ + description: + '「この中にプログラマはいるか」\nA,B,C「いません」\n「Rustは知っているか?」\nA「ゲームですか?」\nB「錆のこと?」\nC「🦀」\n「いたぞ、Cを連れて行け」' + }); + } + ) + ); + }); + + it('args null (tsureteike)', async () => { + await responder.on( + createMockMessage( + parseStringsOrThrow(['tsureteike'], responder.schema), + (message) => { + expect(message).toStrictEqual({ + title: '引数が不足してるみたいだ。', + description: '構文ミスだ、問答無用で連れて行け' + }); + } + ) + ); + }); +}); diff --git a/src/service/command/meme/tsureteike.ts b/src/service/command/meme/tsureteike.ts new file mode 100644 index 00000000..621f1f36 --- /dev/null +++ b/src/service/command/meme/tsureteike.ts @@ -0,0 +1,33 @@ +import type { MemeTemplate } from '../../../model/meme-template.js'; + +export const tsureteike: MemeTemplate = { + commandNames: ['tsureteike', 'hunt'], + description: + '「この中に〜はいるか 連れて行け」\nex.) `!tsureteike プログラマ Rustは知っているか? ゲームですか? 錆のこと? 🦀`', + flagsKeys: [], + optionsKeys: [], + errorMessage: '構文ミスだ、問答無用で連れて行け', + generate(args) { + const [target, question, a, b, c] = args.body.split(' '); + const option = { + target, + question, + a, + b, + c + }; + return makeTureteike(option); + } +}; + +interface TsureteikeArgs { + target: string; + question: string; + a: string; + b: string; + c: string; +} + +function makeTureteike({ target, question, a, b, c }: TsureteikeArgs) { + return `「この中に${target}はいるか」\nA,B,C「いません」\n「${question}」\nA「${a}」\nB「${b}」\nC「${c}」\n「いたぞ、Cを連れて行け」`; +}