diff --git a/package.json b/package.json index 05de2e4..771a262 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "muffinbot", - "version": "3.0.0-cake.d240728b", + "version": "3.0.0-cake.p240801a", "main": "dist/index.js", "private": true, "dependencies": { diff --git a/src/Commands/wordRelay.ts b/src/Commands/wordRelay.ts deleted file mode 100644 index 2d16a2e..0000000 --- a/src/Commands/wordRelay.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { type Message, PermissionFlagsBits } from 'discord.js' -import { ApplyOptions } from '@sapphire/decorators' -import { Command } from '@sapphire/framework' -import { WordRelay } from '../modules' - -@ApplyOptions({ - name: '끝말잇기', - aliases: ['끄투', '끄투리오'], - description: '머핀봇이랑 끝말잇기를 해보ㅅ세요.', - detailedDescription: { - usage: '머핀아 끝말잇기', - }, -}) -export default class extends Command { - public async messageRun(msg: Message) { - if ( - !msg.guild.members.me?.permissions.has( - PermissionFlagsBits.CreatePublicThreads, - ) - ) - return msg.reply('제게 공개 스레드 만들기 권한ㅇ이 없어요.') - - new WordRelay().startGame(msg) - } -} diff --git a/src/modules/wordRelay.ts b/src/modules/wordRelay.ts deleted file mode 100644 index 63eba28..0000000 --- a/src/modules/wordRelay.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { container } from '@sapphire/framework' -import { type Message } from 'discord.js' -import { request } from 'undici' - -interface APIResponse { - word: string - sense: { - target_code: number - sense_no: number - definition: string - pos: string - link: string - type: string - } -} - -export class WordRelay { - private _url = 'https://opendict.korean.go.kr/api/search' - private _key = container.config.api.opendict - private _usedWords: string[] = [] - private _reqType = 'json' - - public async validWord(word: string): Promise { - const res: any = await request(`${this._url}`, { - query: { - key: this._key, - req_type: this._reqType, - advanced: 'y', - type1: 'word', - type3: 'general', - q: word, - }, - }).then(res => res.body.json()) - - if (res.channel.total === 0) return false - else return true - } - - public startGame(msg: Message) { - /** - * @description MAAWRCollected: Muffin Ai Arujak(MAA) Collected - */ - const MAAWR_COLLECTED = 'MAAWRCollected' - const userID = msg.author.id - - try { - msg - .startThread({ - name: `${container.client.user?.username}-끝말잇기`, - }) - .then(thread => { - thread.send( - `<@${userID}>님, 여기 들어와서 시작단어를ㄹ 60초안에 입력해주세요!`, - ) - - const collector = thread.createMessageCollector({ - filter: message => message.author.id === userID, - time: 60_000, - }) - - collector - .on('collect', async message => { - if (message.content.length < 2) { - await message.reply( - '해당 단어는 너무 짧ㅇ아요. 다시 한번 입력해주세요.', - ) - } else if (!(await this.validWord(message.content))) { - await message.reply( - '해당 단어는 일치하지 않아요. 다시 한ㅂ번 입력해주세요.', - ) - } else if ( - !(await this.getWord( - message.content.slice(message.content.length - 1), - )) - ) { - await message.reply( - '시작단어가 한방단어면 안돼요. 다시 한번 입력ㅎ해주세요.', - ) - } else { - collector.stop(`${MAAWR_COLLECTED}: ${message.content}`) - } - }) - .on('end', (_, reason) => { - if (reason === 'time') { - thread.send( - `<@${userID}>님, 60초동안 시작단어를 입력하지 않아 자동ㅇ으로 게임이 종료되었어요.`, - ) - } else if (reason.startsWith(MAAWR_COLLECTED)) { - this._usedWords.push( - reason.slice(`${MAAWR_COLLECTED}: `.length), - ) - } - }) - }) - } catch (err) { - console.error(err) - } - } - - private _getrandomWord(wordList: APIResponse[] | null): APIResponse | null { - if (!wordList) return null - - const wordInfo = wordList[Math.floor(Math.random() * wordList.length)] - - if (this._usedWords.includes(wordInfo.word)) - return this._getrandomWord(wordList) - else return wordInfo - } - - public async getWord(lastWord: string): Promise { - const res: any = await request(this._url, { - query: { - key: this._key, - req_type: this._reqType, - advanced: 'y', - type1: 'word', - type3: 'general', - method: 'start', - q: lastWord, - letter_s: 2, - num: 100, - pos: 1, - }, - }).then(res => res.body.json()) - - return this._getrandomWord(res.channel.item) - } -}