【问题标题】:How to take multiple variables that read from text files and put them into an array如何获取从文本文件中读取的多个变量并将它们放入数组中
【发布时间】:2019-09-28 22:25:00
【问题描述】:

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

【问题讨论】:

标签: javascript node.js discord discord.js


【解决方案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,然后在发生消息事件时使用.find() 方法比较文件来查找并读取正确的文件name 针对用户input 并将文件内容值返回给用户。

您可以在this GitHub repository 中看到对 es6 功能的一个很好的概述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-04
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多