我想在某个频道中发送一条消息,指出该机器人已关闭或开启

时间:2019-06-06 02:07:21

标签: visual-studio-code command bots discord.js

所以我对制作机器人,编码和其他东西是陌生的,这可能是一个新手问题,但是无论如何,我的机器人没有托管服务器,所以我在想,也许当机器人关闭时,它会发送频道中的一条消息,但我不知道如何执行此操作或是否可能。我能够使它在机器人启动时发生,但我不知道在机器人关闭时如何发生。

我什至不知道从哪里开始。到目前为止,我输入的是node。在终端中,僵尸程序会打开,告诉控制台日志,然后告诉服务器。但是我不知道如何关闭机器人。

bot.on('ready', () =>{
bot.channels.get("488916182406004747").send("The cloud has lifted");

})

1 个答案:

答案 0 :(得分:1)

关机命令

如评论中所述,您可以创建一个简单的命令来关闭客户端,这将发送所需的消息。

示例:

// Async context required to use keyword 'await'

try {
  await message.channel.send('Goodbye');    // Send the message

  await message.delete();                   // Delete the command message
  await client.user.setStatus('invisible'); // Mark the client as offline (instead of waiting)
  await client.destroy();                   // Remove the client instance
} catch(err) {
  console.error(err);                       // Return any errors from rejected promises
}

Webhook

如果您希望在节点进程出于任何原因而退出时普遍发送消息 (即客户端注销,计算机关闭,CTRL + C,等等),您可以创建一个Webhook并将其用于流程的beforeExit事件中。

要创建Webhook,请导航至要发送消息的通道的选项。转到Webhooks,单击“创建Webhook”,自定义选项,复制Webhook URL,然后单击“保存”。在URL中,ID是仅/webhooks/之后的第一组数字,令牌位于后面的/之后。

示例:

const { id, token } = require('./webhook.json'); // json file with Webhook's ID and token 
// const Discord = require('discord.js');

// const client = new Discord.Client();
const webhook = new Discord.WebhookClient(id, token);

process.once('beforeExit', () => {
  webhook.send(`${client.user} has gone offline.`)
    .catch(console.error);
});

奖金:您还可以在ready事件中使用Webhook发送“就绪”消息。

client.once('ready', () => {
  webhook.send(`${client.user} is now online.`)
    .catch(console.error);
});

编辑:

当Node.js进程意外退出时(例如当您关闭控制台窗口时),不会发出beforeExit事件。因此,在您的客户端崩溃或在控制台窗口中使用CTRL / CMD + C时,您会发现“ Webhook”选项有用的方案。

我的建议是坚持使用关机命令。要在没有适当托管的情况下保持bot的运行,可以尝试使用流程管理器或创建Windows服务。