在 node.js/discord.js 中导出/导入

用户9309870

我目前正在使用 discord.js 制作一个不和谐的机器人,因为在我发现使用几个 js 文件非常困难之前,我没有在没有 html 文件的情况下进行编程。起初我认为使用导入和导出会起作用,但 Node 尚不支持它。我做了一些窥探,这就是我决定做的:

索引.js

const commandFunctions = require('./commands.js')();
const botconfig = require('./botconfig.json');

bot.on('message', async message => {
    if (message.author.bot) { return; }
    if (message.channel.type === 'dm') { return; }

    messageArray = message.content.split(' ');
    cmd = messageArray[0];
    arg = messageArray.slice(1);

    if (cmd.charAt(0) === prefix) {
        checkCommands(message);
    } else {
        checkForWord(message);
    }
});

function checkCommands(message) {
    botconfig.commands.forEach(command => {
        if (arg === command) {
            commandFunctions.ping();
        }
    });
}

命令.js

module.exports = function() {
    this.botinfo = function(message, bot) {
        let bicon = bot.user.displayAvatarURL;
        let botembed = new Discord.RichEmbed()
        .setColor('#DE8D9C')
        .setThumbnail(bicon)
        .addField('Bot Name', bot.user.username)
        .addField('Description', 'Inject the memes into my bloodstream')
        .addField('Created On', bot.user.createdAt.toDateString());
        return message.channel.send(botembed);
    } 

    this.roll = function(message) {
        let roll = Math.floor(Math.random() * 6) + 1;
        return message.channel.send(`${message.author.username} rolled a ${roll}`);
    }

    this.ping = function() {
        return message.channel.send('pong');
    }
}

botconfig.json

"prefix": "+",
"commands": [
     "botinfo",
     "roll",
     "ping"
]

我的目标是通过在 json 文件中添加一个单词以及在 commands.js 中连接到它的函数来使代码具有适应性。在 checkCommand 函数中,它还应该触发与命令同名的函数,现在我已经将它设置为无论我使用什么命令都触发 ping,因为我在参数方面遇到了一些问题。问题是命令函数根本没有被触发,很确定 checkCommand 函数是出错的地方。

乔纳斯·威尔姆斯

this指向函数内的返回对象,您必须使用new运算符调用它

 const commandFunctions = new require('./commands.js')();

然而,这很违反直觉,所以你只需要从“commands.js”导出一个对象:

module.exports = {
  ping: function() { /*...*/ }
  //...
};

然后可以轻松导入:

const commandFunctions = require('./commands.js');
commandFunctions.ping();

要执行命令,您不需要加载 json,只需检查命令对象中是否存在该属性,即可:

 const commands = require('./commands.js');

 function execCommand(command) {
   if(commands[command]) {
     commands[command]();
  } else {
     commands.fail();
 }
}

PS: globals ( cmd, arg) 是一个非常糟糕的主意,您应该将值作为参数传递。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

无法在Node.js中导入firebase-admin

来自分类Dev

是否可以在JavaScript(node.js)中导入变量?

来自分类Dev

如何使用PostgreSQL从Node.js中导出CSV文件

来自分类Dev

在node.js中导入sql文件并针对PostgreSQL执行

来自分类Dev

在Node.js中导入钩子

来自分类Dev

在node.js模块中导出对象

来自分类Dev

在node.js中导出函数的结果

来自分类Dev

如何在node.js中导出环境变量

来自分类Dev

使用Node.js导入/导出MongoDB

来自分类Dev

使用Node.js Gulp在Less中导入.css文件

来自分类Dev

在React.js中导出/导入组件

来自分类Dev

Node js对象导出

来自分类Dev

在Node.js中导出变量和函数

来自分类Dev

导入/导出模块-Node JS / Discord JS

来自分类Dev

导出mongodb集合数据并使用Node JS导入回去

来自分类Dev

如何在Node.js中导入util模块?

来自分类Dev

无法在Node.js中导入firebase-admin

来自分类Dev

导入和导出模块变量-Node.js

来自分类Dev

无法在Node.js中导入车把文件

来自分类Dev

如何使用PostgreSQL从Node.js中导出CSV文件到Node.js中

来自分类Dev

JavaScript需要在Node.JS中导出

来自分类Dev

在Node.js中导入钩子

来自分类Dev

如何在Node.js中导出JavaScript类?

来自分类Dev

如何在node.js中导出模块

来自分类Dev

在Node.js中的TypeScript 1.6.2中导入jQuery

来自分类Dev

在React.js中导出/导入组件

来自分类Dev

在Node.js中导出变量的推荐方法

来自分类Dev

如何在 node.js 中导入 font-awesome 以在 react.js 中使用?

来自分类Dev

在 Node.js 中导出类的正确方法