您如何开启和关闭漫游器反应?

时间:2020-06-22 05:24:54

标签: bots discord discord.js

我一直在研究一个机器人(使用js),该机器人对发送的每条消息都做出反应,并且一直在尝试打开和关闭命令。关于机器人的反应,有没有办法打开和关闭命令? 这就是我所拥有的:

顶部:

var emojissetting = 0

打开/关闭(尝试将变量更改为0或1):

if (msg === prefix + 'START'){
emojisetting = 1;
message.channel.send("Snoopy is now reading the chat. :book:");
}

if (msg === prefix + 'STOP'){
    emojisetting = 0;
    message.channel.send("Snoopy has stopped reading the chat. :blue_book:");
}

底部:

bot.on('message', message => {

    if(emojisetting = 0){
        if (message) {
            return;
          }
    }
    if(emojisetting = 1){
            if (message) {
              emojirandom = emojisnop[Math.floor(Math.random() * emojisnop.length)]
                message.react(emojirandom)
            }
    }
});

1 个答案:

答案 0 :(得分:0)

首先,如果您的机器人要在多个服务器上运行,则可能会禁止API,因为您将超出向消息添加响应的速率限制,如果我没记错的话,该限制可能是1个反应每0.25秒。

无论如何,您所做的是正确的,但仅适用于一台服务器,因为'emojisetting'是机器人的全局变量。您可以创建一个对象数组来存储每个服务器的设置,例如:

emojisettings = [
    {
        guildID = 5365657435245;
        enabled = true;
    }

        guildID = 3543265356345;
        enabled = false;
    }
]

在此示例中,我们为两个不同的服务器存储了两个设置,这些设置由它们的ID标识。另外,我们使用true和false代替0/1,因为它更理想并且更易于处理。

然后,我们将需要让用户使用命令来处理此设置,例如:

if (msg === prefix + 'START' || msg === prefix + 'STOP'){
    //Define if enabling or not the bot 
    let enabling = true;
    if(msg === prefix + 'STOP') enabling = false;

    //Let's get the guild ID from the msg
    let guildID = msg.guild.ID;
    //Find the corresponding object in the array of the settings
    let index = emojisettings.findIndex(element => element.guildID === guildID);

    //If we found the guild setting
    if(index >-1){
       emojisettings[index].enabled = enabling;
    }
    //If not found that means the guild isn't stored in the array, so we need to create a new object for it
    else{
        emojisettings = emojisettings.push({guildID = msg.guild.ID, enabled = enabling});
    }
    //Reply to the message
    if(enabling) message.channel.send("Snoopy is now reading the chat. :book:");
    else message.channel.send("Snoopy is not reading the chat. :book:");
}

请记住,如果僵尸程序停止运行,此设置将丢失,因此,如果僵尸程序停止运行,则所有这些设置都将丢失,因此,如果要永久保留此设置,则需要一个数据库,建议您mongoDB,但是还有很多其他的东西,如果您的机器人不在很多服务器中,即使有时不是最佳的并且有风险,您甚至可以使用一个简单的json文件。

此后,我们可以简单地检查设置是否已启用,是否对消息做出反应:

bot.on('message', message => {
        //Check if message was received in a server and not in DMs
        if(message.channel.type !== 'text') return;

        //Check if the setting is enabled for the server where you received the message
        let enabled = emojisettings.find(element => element.guildID === message.guild.ID).enabled;

        //If setting is enabled, react to the message
        if (enabled) {
                  emojirandom = emojisnop[Math.floor(Math.random() * emojisnop.length)]
                    message.react(emojirandom)
                }
        }
    });