3.0.0-Cake #5
9 changed files with 130 additions and 18 deletions
9
.pnp.cjs
generated
9
.pnp.cjs
generated
|
@ -52,6 +52,7 @@ const RAW_RUNTIME_STATE =
|
||||||
["ts-node", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:10.9.2"],\
|
["ts-node", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:10.9.2"],\
|
||||||
["tsup", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.1.0"],\
|
["tsup", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.1.0"],\
|
||||||
["typescript", "patch:typescript@npm%3A5.5.2#optional!builtin<compat/typescript>::version=5.5.2&hash=379a07"],\
|
["typescript", "patch:typescript@npm%3A5.5.2#optional!builtin<compat/typescript>::version=5.5.2&hash=379a07"],\
|
||||||
|
["undici", "npm:6.19.2"],\
|
||||||
["ws", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.17.1"]\
|
["ws", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.17.1"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "SOFT"\
|
"linkType": "SOFT"\
|
||||||
|
@ -2948,6 +2949,7 @@ const RAW_RUNTIME_STATE =
|
||||||
["ts-node", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:10.9.2"],\
|
["ts-node", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:10.9.2"],\
|
||||||
["tsup", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.1.0"],\
|
["tsup", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.1.0"],\
|
||||||
["typescript", "patch:typescript@npm%3A5.5.2#optional!builtin<compat/typescript>::version=5.5.2&hash=379a07"],\
|
["typescript", "patch:typescript@npm%3A5.5.2#optional!builtin<compat/typescript>::version=5.5.2&hash=379a07"],\
|
||||||
|
["undici", "npm:6.19.2"],\
|
||||||
["ws", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.17.1"]\
|
["ws", "virtual:df417fa6ed58592061b3cdd25305c567cb83e355f566a3f712cecb8d4e6c4814c3ed842a030a9c3a51e2de30e93ecf82143ea19accc29756c7a7ac08166c7416#npm:8.17.1"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "SOFT"\
|
"linkType": "SOFT"\
|
||||||
|
@ -3890,6 +3892,13 @@ const RAW_RUNTIME_STATE =
|
||||||
["undici", "npm:6.13.0"]\
|
["undici", "npm:6.13.0"]\
|
||||||
],\
|
],\
|
||||||
"linkType": "HARD"\
|
"linkType": "HARD"\
|
||||||
|
}],\
|
||||||
|
["npm:6.19.2", {\
|
||||||
|
"packageLocation": "./.yarn/cache/undici-npm-6.19.2-a9aa1269bb-f4895c0c1e.zip/node_modules/undici/",\
|
||||||
|
"packageDependencies": [\
|
||||||
|
["undici", "npm:6.19.2"]\
|
||||||
|
],\
|
||||||
|
"linkType": "HARD"\
|
||||||
}]\
|
}]\
|
||||||
]],\
|
]],\
|
||||||
["undici-types", [\
|
["undici-types", [\
|
||||||
|
|
BIN
.yarn/cache/undici-npm-6.19.2-a9aa1269bb-f4895c0c1e.zip
vendored
Normal file
BIN
.yarn/cache/undici-npm-6.19.2-a9aa1269bb-f4895c0c1e.zip
vendored
Normal file
Binary file not shown.
|
@ -13,5 +13,8 @@
|
||||||
"password": "",
|
"password": "",
|
||||||
"database": "",
|
"database": "",
|
||||||
"port": 3306
|
"port": 3306
|
||||||
|
},
|
||||||
|
"api": {
|
||||||
|
"opendict": ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "muffinbot",
|
"name": "muffinbot",
|
||||||
"version": "3.0.0-cake.d240626b",
|
"version": "3.0.0-cake.d240713a",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -13,6 +13,7 @@
|
||||||
"discord.js": "^14.15.3",
|
"discord.js": "^14.15.3",
|
||||||
"dokdo": "^0.6.2",
|
"dokdo": "^0.6.2",
|
||||||
"mysql2": "^3.10.1",
|
"mysql2": "^3.10.1",
|
||||||
|
"undici": "^6.19.2",
|
||||||
"ws": "^8.17.1"
|
"ws": "^8.17.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { SapphireClient, container, LogLevel } from '@sapphire/framework'
|
import { SapphireClient, container, LogLevel } from '@sapphire/framework'
|
||||||
import { GatewayIntentBits, type Snowflake } from 'discord.js'
|
import { GatewayIntentBits, Partials, type Snowflake } from 'discord.js'
|
||||||
import { ChatBot, NODE_ENV, MaaDatabase } from './modules'
|
import { ChatBot, NODE_ENV, MaaDatabase } from './modules'
|
||||||
import { version } from '../package.json'
|
import { version } from '../package.json'
|
||||||
import config from '../config.json'
|
import config from '../config.json'
|
||||||
|
@ -26,9 +26,9 @@ export default class MuffinBot extends SapphireClient {
|
||||||
},
|
},
|
||||||
allowedMentions: {
|
allowedMentions: {
|
||||||
roles: [],
|
roles: [],
|
||||||
users: [],
|
|
||||||
repliedUser: true,
|
repliedUser: true,
|
||||||
},
|
},
|
||||||
|
partials: [Partials.Message, Partials.ThreadMember],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,6 +60,9 @@ declare module '@sapphire/pieces' {
|
||||||
database: string
|
database: string
|
||||||
port: number
|
port: number
|
||||||
}
|
}
|
||||||
|
api: {
|
||||||
|
opendict: string
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
25
src/Commands/wordRelay.ts
Normal file
25
src/Commands/wordRelay.ts
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
import { type Message, PermissionFlagsBits } from 'discord.js'
|
||||||
|
import { ApplyOptions } from '@sapphire/decorators'
|
||||||
|
import { Command } from '@sapphire/framework'
|
||||||
|
import { WordRelay } from '../modules'
|
||||||
|
|
||||||
|
@ApplyOptions<Command.Options>({
|
||||||
|
name: '끝말잇기',
|
||||||
|
aliases: ['끄투', '끄투리오'],
|
||||||
|
description: '머핀봇이랑 끝말잇기를 해보ㅅ세요.',
|
||||||
|
detailedDescription: {
|
||||||
|
usage: '머핀아 끝말잇기'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
export default class extends Command {
|
||||||
|
public async messageRun(msg: Message<true>) {
|
||||||
|
if (
|
||||||
|
!msg.guild.members.me?.permissions.has(
|
||||||
|
PermissionFlagsBits.CreatePublicThreads,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return msg.reply('제게 공개 스레드 만들기 권한ㅇ이 없어요.')
|
||||||
|
|
||||||
|
new WordRelay().startGame(msg)
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,13 +1,16 @@
|
||||||
import ChatBot from './ChatBot'
|
|
||||||
import { ResponseData, NSFWData, LearnData, MaaDatabase } from './database'
|
import { ResponseData, NSFWData, LearnData, MaaDatabase } from './database'
|
||||||
import noPerm from './noPerm'
|
import { WordRelay } from './wordRelay'
|
||||||
import { NODE_ENV } from './env'
|
import { NODE_ENV } from './env'
|
||||||
|
import ChatBot from './ChatBot'
|
||||||
|
import noPerm from './noPerm'
|
||||||
|
|
||||||
export {
|
export {
|
||||||
ChatBot,
|
|
||||||
noPerm,
|
|
||||||
ResponseData,
|
ResponseData,
|
||||||
NODE_ENV,
|
|
||||||
NSFWData,
|
|
||||||
LearnData,
|
|
||||||
MaaDatabase,
|
MaaDatabase,
|
||||||
|
LearnData,
|
||||||
|
WordRelay,
|
||||||
|
NODE_ENV,
|
||||||
|
ChatBot,
|
||||||
|
NSFWData,
|
||||||
|
noPerm,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,72 @@
|
||||||
import { type Message, PermissionFlagsBits } from 'discord.js'
|
import { container } from '@sapphire/framework'
|
||||||
|
import { type Message } from 'discord.js'
|
||||||
|
import { request } from 'undici'
|
||||||
|
|
||||||
export class WordRelay {
|
export class WordRelay {
|
||||||
public async startGame(msg: Message<true>) {
|
private _url = 'https://opendict.korean.go.kr/api/search'
|
||||||
if (
|
private _usedWords: string[] = []
|
||||||
msg.guild.members.me?.permissions.has(
|
|
||||||
PermissionFlagsBits.CreatePublicThreads,
|
public async validWord(word: string): Promise<boolean> {
|
||||||
|
const res: any = await request(`${this._url}`, {
|
||||||
|
query: {
|
||||||
|
key: container.config.api.opendict,
|
||||||
|
req_type: 'json',
|
||||||
|
advanced: 'y',
|
||||||
|
type1: 'all',
|
||||||
|
type3: 'general',
|
||||||
|
q: word,
|
||||||
|
},
|
||||||
|
}).then(res => res.body.json())
|
||||||
|
|
||||||
|
if (res.channel.total === 0) return true
|
||||||
|
else return false
|
||||||
|
}
|
||||||
|
|
||||||
|
public startGame(msg: Message<true>) {
|
||||||
|
/**
|
||||||
|
* @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 (await this.validWord(message.content)) {
|
||||||
|
collector.stop(MAAWR_COLLECTED)
|
||||||
|
} else {
|
||||||
|
await message.reply(
|
||||||
|
'해당 단어는 일치하지 않아요. 다시 한ㅂ번 입력해주세요.',
|
||||||
)
|
)
|
||||||
return msg.reply('제게 공개 스레드 만들기 권한ㅇ이 없어요.')
|
}
|
||||||
|
})
|
||||||
|
.on('end', (collected, reason) => {
|
||||||
|
if (reason === 'time') {
|
||||||
|
thread.send(
|
||||||
|
`<@${userID}>님, 60초동안 시작단어를 입력하지 않아 자동ㅇ으로 게임이 종료되었어요.`,
|
||||||
|
)
|
||||||
|
} else if (reason === MAAWR_COLLECTED) {
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public getWord() {}
|
||||||
|
}
|
||||||
|
|
|
@ -2420,6 +2420,7 @@ __metadata:
|
||||||
ts-node: "npm:^10.9.2"
|
ts-node: "npm:^10.9.2"
|
||||||
tsup: "npm:^8.1.0"
|
tsup: "npm:^8.1.0"
|
||||||
typescript: "npm:^5.5.2"
|
typescript: "npm:^5.5.2"
|
||||||
|
undici: "npm:^6.19.2"
|
||||||
ws: "npm:^8.17.1"
|
ws: "npm:^8.17.1"
|
||||||
languageName: unknown
|
languageName: unknown
|
||||||
linkType: soft
|
linkType: soft
|
||||||
|
@ -3270,6 +3271,13 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"undici@npm:^6.19.2":
|
||||||
|
version: 6.19.2
|
||||||
|
resolution: "undici@npm:6.19.2"
|
||||||
|
checksum: 10/f4895c0c1e2fcde18076ac98965c231875811b8e14ceab1a7b19e940ed1a2fce69e0864e1186bfdc9347dffe0f39a00daf6dd5e7c0169b2b33de59a859dc2f1d
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"unique-filename@npm:^3.0.0":
|
"unique-filename@npm:^3.0.0":
|
||||||
version: 3.0.0
|
version: 3.0.0
|
||||||
resolution: "unique-filename@npm:3.0.0"
|
resolution: "unique-filename@npm:3.0.0"
|
||||||
|
|
Loading…
Reference in a new issue