如何解决Discord.js:具有动态命令处理的参数
我正在尝试用discord.js编写Discord机器人。我使用official guide在index.js文件中设置了动态命令处理。您可以在此处阅读命令处理程序:
const fs = require('fs');
const lobby = require('./scripts/lobby');
const context = require('./context');
const { token,prefix } = require('./context');
client.on('message',message => {
if (!message.content.startsWith(prefix) || message.author.bot) return;
const args = message.content.slice(prefix.length).trim().split(/ +/);
const command = args.shift().toLowerCase();
if (!client.commands.has(command)) return;
try {
client.commands.get(command).execute(
message,args,client,lobby,context
);
} catch (error) {
console.error(error);
message.reply('There was an error executing that command.');
}
});
命令作为JavaScript模块存储在单独的文件中。一个简单的例子是ping命令:
module.exports = {
name: 'ping',description: 'Ping!',execute(message,context) {
console.log(context.activeLang.ping[0]);
},};
当我将console.log(context.activeLang.ping[0])
登录到index.js文件中的控制台时,它将记录正确的值。当我在ping模块中这样做时,节点崩溃并显示以下TypeError:
TypeError: Cannot read property 'ping' of undefined
我不明白为什么我的命令脚本显然不能正确访问context.js。如果有人对如何解决此问题有建议,我将非常感激!
解决方法
现在context
实际上正在填充args
参数。参数名称(在这种情况下为message
和context
只是相应自变量的占位符)。它们的值不是根据它们的名称计算的,而是它们出现的顺序。
// example:
// this function,command,will trigger the given
// function and pass the argument b (1)
function command(func) {
var b = 1
func(b)
};
command((a,b,c) => {
// even though the arguments name was b,it's value is still tied to a
console.log(a)
});
即使您的参数名为 context
,它实际上仍与args
绑定。
使用:
execute(message,args,client,lobby,context)
相反,所有内容都将绑定到正确的参数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。