我正在使用 discord.js 和 node.js 制作一个 discord 机器人。
本质上,机器人需要每隔预定义的时间发送一条消息。
为了不向机器人所在的每个服务器的每个频道发送消息,我制作了一个启用-禁用系统:
当您键入 !enable 时,机器人将通道保存在一个数组中,当它需要发送消息时,对于数组中的每个通道,它会向该通道发送一条消息。
问题是当我更新/重新启动机器人时,该数组消失了,所以我必须在我需要的每个频道中重新输入 !enable。
这是处理 !enable 和 !disable 的代码
enabled_channels = [];
client.on("message", message => {
if(message.content.startsWith("!")) {
if(message.content === "!enable") {
if(!enabled_channels.includes(message.channel)) {
enabled_channels.push(message.channel);
message.channel.send("Bot enabled in this channel");
} else {
message.channel.send("Bot already enabled in this channel");
}
} else if(message.content === "!disable") {
if(enabled_channels.includes(message.channel)) {
enabled_channels.splice(enabled_channels.indexOf(message.channel), 1)
}
message.channel.send("Bot disabled in this channel");
}
}
});
这是将消息发送到所有频道的代码
function sendToAll(message) {
for(let c of enabled_channels) {
c.send(message);
}
}
setInterval(() => {
var message = functionThatGenerateTheMessageContent(); //really simplified here
sendToAll(message);
}, 5 * 60 * 1000); //5 minutes
有没有办法保存 enabled_channels
数组?我尝试使用 node-localstorage
,但我发现保存对象只会保存 [Object object]
,保存字符串化对象只会保存属性而不保存类型,因此我无法调用与该对象关联的函数。
答案 0 :(得分:0)
我个人会使用 SQLite 数据库,并在数据库中保存一个用户输入通道,然后循环遍历并向他们发送消息。
https://www.npmjs.com/package/better-sqlite3 这是一个更快、更简单的 sqlite 包 - 文档将帮助您处理任何您需要的事情