如果未在代码中将GuildID列入白名单,如何使Discord.js(Commando)机器人离开服务器(加入)?

时间:2019-08-26 20:09:17

标签: javascript bots discord discord.js

我有一个机器人,需要付费订阅。我希望能够将客户想要的代码中的特定行会ID列入白名单。我将如何去做呢?除非我的代码中将其列入白名单,否则它将自发地离开它加入的每个服务器。我已经尝试过一些东西。

client.on('guildCreate', (guild) => {

  let premiumServers = ['ID1', 'ID2']; // Obviously I replaced ID1, ID2 etc with actual guild IDs
  let Premium = true;
  for (var i in premiumServers) {
    if (guild.id !== premiumServers[i]) Premium = false;
  }

  if(Premium = false) {
    guild.leave();
  }

});

没有任何错误消息。除非服务器ID在白名单上,否则该僵尸应该将其邀请的任何服务器留在服务器上。

2 个答案:

答案 0 :(得分:1)

如果公会的ID与Premium中ID数组的全部不匹配,您的循环会将premiumServer设置为false。

如果行会的ID与ID数组的任何匹配,则可能要设置Premium为true。
例如:

// Assume that the guild is not premium first.
let Premium = false;
for (var i in premiumServers) {
  // Check if the guild is premium
  if (guild.id == premiumServers[i]) {
    // Set to true and stop the loop.
    Premium = true;
    break;
  }
}

最后,您在if语句中进行了赋值,而不是相等性测试。

if(Premium = false) // <-- the statement inside does an assignment
{
  guild.leave();
}

改为使用Premium == false!Premium

答案 1 :(得分:1)

看起来像这样的东西可以做得最好:

let premiumServers = ['ID1', 'ID2'];
client.on('guildCreate', (guild) => {
    if(!premiumServers.includes(guild.id)) return guild.leave();
});

您的Bot在崩溃或脱机时仍可以加入服务器而不会离开服务器,因此请考虑使用:

const premiumServers = ['ID1', 'ID2'];

client.on('guildCreate', (guild) => {
    if(!premiumServers.includes(guild.id)) return guild.leave();
});

client.on('ready', () => {
    client.guilds.forEach(guild => {
        if(!premiumServers.incudes(guild.id)) guild.leave();
    });
    console.log(`${client.user.username} is now online...`);
});