This commit is contained in:
Siwoo Jeon 2023-02-02 22:17:58 +09:00
parent 56b3841592
commit f19e307109
Signed by: migan
GPG key ID: C4151385FFD2082A
4 changed files with 25 additions and 34 deletions

View file

@ -1,4 +1,10 @@
import { ActivityType, Client, Collection, GatewayIntentBits } from 'discord.js' import {
ActivityType,
Client,
Collection,
GatewayIntentBits,
TextChannel,
} from 'discord.js'
import { Command, noPerm, ChatBot } from './modules' import { Command, noPerm, ChatBot } from './modules'
import Dokdo from 'dokdo' import Dokdo from 'dokdo'
import { readdirSync } from 'node:fs' import { readdirSync } from 'node:fs'
@ -9,7 +15,7 @@ const prefix = '멒힌아 '
export default class MuffinAI extends Client { export default class MuffinAI extends Client {
public chatBot = new ChatBot() public chatBot = new ChatBot()
private modules: Collection<string, Command> = new Collection() #modules: Collection<string, Command> = new Collection()
public constructor() { public constructor() {
super({ super({
intents: [ intents: [
@ -26,7 +32,7 @@ export default class MuffinAI extends Client {
readdirSync(join(__dirname, 'Commands')).forEach(file => { readdirSync(join(__dirname, 'Commands')).forEach(file => {
const a = require(join(__dirname, 'Commands', file)) const a = require(join(__dirname, 'Commands', file))
const b: Command = new a.default() const b: Command = new a.default()
this.modules.set(b.name, b) this.#modules.set(b.name, b)
}) })
this.once('ready', client => { this.once('ready', client => {
@ -44,18 +50,21 @@ export default class MuffinAI extends Client {
owners: ['415135882006495242'], owners: ['415135882006495242'],
}).run(msg) }).run(msg)
if (msg.content.startsWith('머핀아 ')) { if (msg.content.startsWith('머핀아 ')) {
msg.channel.sendTyping() if (msg.channel instanceof TextChannel) {
if (msg.channel.nsfw) return
await msg.channel.sendTyping()
setTimeout( setTimeout(
async () => msg.channel.send(await this.chatBot.getResponse(msg)), async () => msg.channel.send(await this.chatBot.getResponse(msg)),
1000 1000
) )
}
} else if (msg.content.startsWith(prefix)) { } else if (msg.content.startsWith(prefix)) {
const args: string[] = msg.content const args: string[] = msg.content
.slice(prefix.length) .slice(prefix.length)
.trim() .trim()
.split('/ +/g') .split('/ +/g')
const command = this.modules.get(args.toString()) const command = this.#modules.get(args.toString())
if (!command) return if (!command) return
if (command.noPerm && msg.author.id !== '415135882006495242') if (command.noPerm && msg.author.id !== '415135882006495242')
return await noPerm(msg) return await noPerm(msg)

View file

@ -4,15 +4,7 @@ import Database from './Database'
type TrainType = 'muffinOnly' | 'All' type TrainType = 'muffinOnly' | 'All'
export default class ChatBot { export default class ChatBot {
get trainType(): TrainType {
return this._trainType
}
set trainType(value: TrainType) {
this._trainType = value
}
public db = new Database(process.env.DB_PATH!) public db = new Database(process.env.DB_PATH!)
private _trainType: TrainType = 'muffinOnly'
public async getResponse(msg: Message): Promise<string> { public async getResponse(msg: Message): Promise<string> {
const request = msg.content.replace('머핀아 ', '') const request = msg.content.replace('머핀아 ', '')
@ -21,16 +13,6 @@ export default class ChatBot {
if (!response) response = '살ㄹ려주세요' if (!response) response = '살ㄹ려주세요'
console.log(`⌨️ㅣ${request}`) console.log(`⌨️ㅣ${request}`)
console.log(`🍰ㅣ${response}`) console.log(`🍰ㅣ${response}`)
// .then(rows => {
// const request = msg.content.replace('머핀아 ', '')
// response = rows[Math.floor(Math.random() * rows.length)].text
// if (!response) response = '살ㄹ려주세요'
// if (sendMsg) {
// msg.channel.sendTyping()
// setTimeout(() => msg.channel.send(response), 1000)
// }
// })
// .catch(console.error)
return response return response
} }

View file

@ -12,16 +12,16 @@ interface ResponseData {
} }
export default class Database { export default class Database {
private sqliteDB: sqlite3.Database #sqliteDB: sqlite3.Database
public constructor(dbPath: string) { public constructor(dbPath: string) {
const a = sqlite3.verbose() const a = sqlite3.verbose()
this.sqliteDB = new a.Database(dbPath) this.#sqliteDB = new a.Database(dbPath)
} }
public all(): Promise<ResponseData[]> { public all(): Promise<ResponseData[]> {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.sqliteDB.serialize(() => { this.#sqliteDB.serialize(() => {
this.sqliteDB.all('SELECT * FROM statement;', (err, rows) => { this.#sqliteDB.all('SELECT * FROM statement;', (err, rows) => {
if (err) reject(err) if (err) reject(err)
resolve([...rows]) resolve([...rows])
}) })
@ -34,10 +34,10 @@ export default class Database {
params: any[], params: any[],
callBack: (err: Error | null) => void callBack: (err: Error | null) => void
) { ) {
this.sqliteDB.run(sql, params, callBack) this.#sqliteDB.run(sql, params, callBack)
} }
public close() { public close() {
this.sqliteDB.close() this.#sqliteDB.close()
} }
} }

View file

@ -11,7 +11,7 @@
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */ /* Language and Environment */
"target": "es2021", "target": "es2022",
/* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
// "jsx": "preserve", /* Specify what JSX code is generated. */ // "jsx": "preserve", /* Specify what JSX code is generated. */