如何获取从文本文件中读取的多个变量并将其放入数组

时间:2019-05-11 04:47:48

标签: javascript node.js discord discord.js

使用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');

1 个答案:

答案 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')

如您所见,您获得的代码行更少,可读性更好。

要总结更改,请使用对象数组定义文件namepath,然后在发生消息事件时,使用{{1}查找并读取正确的文件}方法来比较文件.find()与用户name并将文件内容值返回给用户。

您可以在the article中很好地了解es6功能。