【问题标题】:How do you make a command which restarts your bot in discord.js?你如何在 discord.js 中创建一个重启你的机器人的命令?
【发布时间】:2018-07-14 01:31:09
【问题描述】:

我正在 discord.js 中制作一个机器人。如何创建重启机器人的命令?

【问题讨论】:

  • 信息不够,重启是什么意思?比如在某个服务器上重新启动你的 nodeJS 实例,或者让机器人重新启动它的初始化/当前数据?
  • 我想要一个可以关闭机器人,然后再重新开启的命令。
  • 如果你在 Heroku 这样的服务上运行你的机器人,如果你简单地结束这个过程,它会自动重启
  • 我的答案是使用评论中所说的 Heroku 之类的东西,但我相信有一种方法可以在您的 js 代码中执行此操作,使用批处理文件启动您的机器人,然后调用它然后使用 client.destroy();我不确定您应该使用什么,但请考虑从您的机器人中运行批处理文件。

标签: javascript node.js discord.js


【解决方案1】:

您可以使用client.destroy() 方法重置机器人,然后再次调用.login。试试这样的:

// set message listener 
client.on('message', message => {
    switch(message.content.toUpperCase()) {
        case '?RESET':
            resetBot(message.channel);
            break;

        // ... other commands
    }
});

// Turn bot off (destroy), then turn it back on
function resetBot(channel) {
    // send channel a message that you're resetting bot [optional]
    channel.send('Resetting...')
    .then(msg => client.destroy())
    .then(() => client.login(<your bot token here>));
}

如果您在机器人中设置了就绪侦听器,您将看到ready 事件触发了两次。我像这样设置了一个现成的监听器:

client.on('ready', () => {
    console.log('I am ready!');
});

【讨论】:

  • 这会扰乱您在机器人上运行的定期任务。我认为可以使用一些在机器人之外工作的命令来完成,比如pm2 restart 或类似的东西。
  • 这不适用于以后的更新,因为client.destroy() 会杀死整个客户端并返回。因此,client.login() 将永远不会被调用,并且客户端将保持销毁状态。
猜你喜欢
  • 2021-08-17
  • 1970-01-01
  • 2021-01-01
  • 2021-09-13
  • 2021-01-07
  • 2020-06-30
  • 2020-05-24
  • 2021-03-17
  • 2020-08-21
相关资源
最近更新 更多