使用node.js和discord.js创建Discord机器人,这对JavaScript来说还很陌生。我已经创建了一个基本的机器人,该机器人可以按我的意愿工作,但是我希望找到更好的方法来使代码高效而简洁。我有多个从文本文件读取的变量,并被告知数组可以提供帮助,仅了解基本数组,我真的找不到如何仍使数组元素从指定文本文件读取的提示。
我对数组了解不多,所以我没有做太多尝试。有人告诉我数组可以使我的代码简洁。
const Discord = require("discord.js");
const fs = require('fs');
const client = new Discord.Client();
const colors = require("colors");
var help = fs.readFileSync("./text/help.txt", "utf8");
var FUN = fs.readFileSync("./text/fun.txt", "utf8");
var MEME = fs.readFileSync("./text/meme.txt", "utf8");
var hello = fs.readFileSync("./text/hello.txt", "utf8");
var GAMES = fs.readFileSync("./text/games.txt", "utf8");
var music = fs.readFileSync("./text/music.txt", "utf8");
client.on("ready", () => {
console.log(colors.green("Connected as " + client.user.tag));
client.user.setPresence({
'game' : {
'name' : 'Checking...',
'type' : 'Playing'
}
})
try {
client.on("message", function(message) {
var input = message.content.toUpperCase();
if(input === "!help".toUpperCase()) {
message.channel.send(help);
}
if(input === "!FUN".toUpperCase()){
message.channel.send(FUN);
}
if(input === "!MEME".toUpperCase()){
message.channel.send(MEME);
}
if(input === "!hello".toUpperCase()){
message.channel.send(hello);
}
if(input === "!GAMES".toUpperCase()){
message.channel.send(GAMES);
}
if(input === "!music".toUpperCase()){
message.channel.send(music);
}
})
}
catch(E){
console.log(E);
}
})
client.login('token');
答案 0 :(得分:1)
通过使用es6和一些逻辑重构,可以使代码更简明易懂。
const fs = require('fs')
const colors = require('colors')
const Discord = require('discord.js')
const client = new Discord.Client()
const files = [
{ name: 'help', path: './text/help.txt' },
{ name: 'fun', path: './text/fun.txt' },
{ name: 'meme', path: './text/meme.txt' },
{ name: 'hello', path: './text/hello.txt' },
{ name: 'games', path: './text/games.txt' },
{ name: 'music', path: './text/music.txt' }
]
client.on('ready', () => {
console.log(colors.green(`Connected as ${client.user.tag}`))
client.user.setPresence({
game: { name: 'Checking...', type: 'Playing' }
})
try {
client.on('message', message => {
const input = message.content.toUpperCase()
const { path } = files.find(({ name }) => name.toUpperCase() === input.substring(1))
const response = fs.readFileSync(path, 'utf8')
message.channel.send(response)
})
} catch (e) {
console.log(e)
}
})
client.login('token')
如您所见,您获得的代码行更少,可读性更好。
要总结更改,请使用对象数组定义文件name
和path
,然后在发生消息事件时,使用{{1}查找并读取正确的文件}方法来比较文件.find()
与用户name
并将文件内容值返回给用户。
您可以在the article中很好地了解es6功能。