我一直在研究一个机器人(使用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)
}
}
});
答案 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)
}
}
});