如何记住启用机器人的频道

时间:2021-01-18 07:50:31

标签: javascript node.js discord.js

我正在使用 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],保存字符串化对象只会保存属性而不保存类型,因此我无法调用与该对象关联的函数。

1 个答案:

答案 0 :(得分:0)

我个人会使用 SQLite 数据库,并在数据库中保存一个用户输入通道,然后循环遍历并向他们发送消息。

https://www.npmjs.com/package/better-sqlite3 这是一个更快、更简单的 sqlite 包 - 文档将帮助您处理任何您需要的事情