【问题标题】:Discord.js command handling - Problems with variablesDiscord.js 命令处理 - 变量问题
【发布时间】:2020-04-02 23:01:36
【问题描述】:

按照有关命令处理的 Discord.js 教程 (https://discordjs.guide/command-handling/adding-features.html) 后,我找不到如何在所有文件中声明变量。

例如,这是我在 index.js 中所说的:

const Discord = require('discord.js');
const fs = require('fs');
const config = require('./config.json');
const client = new Discord.Client();
client.commands = new Discord.Collection();
const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));

const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')
const adapter = new FileSync('./db.json')
const db = low(adapter)
const adapter2 = new FileSync('./tokens.json')
const tokens = low(adapter2)
const adapter3 = new FileSync('./usedTokens.json')
const used = low(adapter3)
const prefix = config.prefix;
const version = config.version; 

如果我在 ./commands/command 中添加一个包含命令的文件,我必须重新声明之前在 index.js 中输入的所有变量:

module.exports = {
    name: 'profile',
    description: 'Checker les infos de son profil avec la commande !profile',
    execute(message, args) {
    //Déclaration de toute les variables
    const low = require('lowdb')
    const FileSync = require('lowdb/adapters/FileSync')
    const adapter = new FileSync('./db.json')
    const db = low(adapter)
    const adapter2 = new FileSync('./tokens.json')
    const tokens = low(adapter2)
    const adapter3 = new FileSync('./usedTokens.json')
    const used = low(adapter3)
    const Discord = require('discord.js');
    const version = config.version;
    var config = require('../config.json');

我正在寻找一个解决方案,这样我就不必在每个新命令文件中重新声明所有内容...

【问题讨论】:

  • 不相关,但对机器人使用FileSync 是个坏主意 - 在所有数据库操作期间,机器人将在等待文件 i/o 完成时冻结,无法执行任何进一步的命令。为了解决这个问题,你真的应该改用FileAsync

标签: javascript node.js discord.js


【解决方案1】:

您的问题似乎有 95% 是您的数据库问题。您的数据库内容应该只加载一次,然后您绝对应该将其作为“上下文”传递给您的命令。在 discord.js 中,我个人喜欢在客户端实例上粘贴这样的东西,因为它可以保证在你可能需要它的任何地方传递。

index.js:

client.db = { users: db, tokens: tokens, used: used };

./commands/command.js:

execute(message, args) {
  let client = message.client;
  let token = client.db.tokens.get(message.author.id); //for example
  //do other stuff
}

还值得注意的是:您很可能不需要无论如何都需要重新声明所有变量。您是否专门在此命令中使用versionDiscord 呢?如果您不使用它们,请不要导入它们。

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2020-12-29
    • 2020-08-24
    • 2021-11-04
    • 2020-06-16
    • 2020-01-14
    相关资源
    最近更新 更多