所以我对制作机器人,编码和其他东西是陌生的,这可能是一个新手问题,但是无论如何,我的机器人没有托管服务器,所以我在想,也许当机器人关闭时,它会发送频道中的一条消息,但我不知道如何执行此操作或是否可能。我能够使它在机器人启动时发生,但我不知道在机器人关闭时如何发生。
我什至不知道从哪里开始。到目前为止,我输入的是node。在终端中,僵尸程序会打开,告诉控制台日志,然后告诉服务器。但是我不知道如何关闭机器人。
bot.on('ready', () =>{
bot.channels.get("488916182406004747").send("The cloud has lifted");
})
答案 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服务。