我希望我的机器人使用 ;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);
答案 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);