如何通过机器人离开带有公会ID的服务器

时间:2020-12-28 18:01:40

标签: discord.js

我希望我的机器人使用 ;leave <GuildID> 离开 Discord 服务器。

下面的代码不起作用:

if (message.guild.id.size < 1)
  return message.reply("You must supply a Guild ID");
if (!message.author.id == 740603220279164939)
  return;

message.guild.leave()
  .then(g => console.log(`I left ${g}`))
  .catch(console.error);

1 个答案:

答案 0 :(得分:2)

您很可能不应该查看 message.guild.id,因为它会返回您发送消息的公会 ID。如果您想从 ;leave (guild id) 获取公会 ID ,您必须使用 .split() 之类的内容剪掉第二部分。

// When split, the result is [";leave", "guild-id"]. You can access the
// guild ID with [1] (the second item in the array).
var targetGuild = message.content.split(" ")[1];

!message.author.id 会将作者 ID(在本例中为您的机器人 ID)转换为布尔值,结果为 false(因为 ID 已设置且不是 falsy 值)。我假设您的意思是仅当作者不是机器人本身时才运行此程序,在这种情况下,您很可能会以此为目标:

// You're supposed to use strings for snowflakes. Don't use numbers.
if (message.author.id == "740603220279164939") return;

现在,您只需要使用从消息内容中获得的公会 ID 并使用它离开公会即可。为此,只需从您的 Guild 中获取 bot cache,然后调用 .leave()。总而言之,您的代码现在应该如下所示:

// Get the guild ID
var targetGuild = message.content.split(" ")[1];
if (!targetGuild) // targetGuild is undefined if an ID was not supplied
    return message.reply("You must supply a Guild ID");

if (message.author.id == "740603220279164939") // Don't listen to self.
    return;

client.guilds.cache.get(targetGuild) // Grab the guild
    .leave() // Leave
    .then(g => console.log(`I left ${g}`)) // Give confirmation after leaving
    .catch(console.error);