当 Discord 机器人加入一个服务器时,会触发哪个事件?

18

我正在使用 Discord.js 来创建一个基础的 Discord 机器人。当机器人刚开始运行时,我运行 client.guilds.array() 来获取当前机器人已经订阅的所有服务器列表。我将这些信息保存到数据库中供其它程序使用。

然而,由于有人会添加/移除该机器人加入他们的服务器,我希望能够保持最新的服务器列表。我知道可以每分钟重新运行 clients.guilds.array(),但这样似乎不太高效。

是否有一种事件可以在您的机器人被添加到一个服务器和/或频道时触发?根据我所读的内容,guildMemberAdd 事件似乎对已经订阅服务器的所有用户/机器人都会触发。是否有这样的事件让你的机器人知道何时已被添加到一个服务器中呢?

1个回答

22

是的,有的,你可以在客户端事件中查看它:https://discord.js.org/#/docs/main/stable/class/Client。以下是使用事件更新公会数组的简单示例:

const discord = require("discord.js");
const client = new discord.Client();

let guildArray = client.guilds.array();

//joined a server
client.on("guildCreate", guild => {
    console.log("Joined a new guild: " + guild.name);
    //Your other stuff like adding to guildArray
})

//removed from a server
client.on("guildDelete", guild => {
    console.log("Left a guild: " + guild.name);
    //remove from guildArray
})

2
谢谢!我有点困惑。我以为那些事件只会在实际创建或删除公会时发生,而不是当机器人被添加/移除时。 - Hashcut
guildDelete 会在什么情况下被触发?如果机器人遇到连接问题,它会被触发吗?还是只有在机器人被用户实际移除时才会触发? - Ben
2
有时候当一些公会遇到故障时,我会遇到这个问题,它会触发guildDelete事件。为了避免这种情况,我建议在运行该事件中的任何内容之前先使用guild.available - Syntle
@syntle请问guild.available的文档在哪里?我找不到它。我正在尝试在我的机器人单一SQLite文件中删除一个月之前被踢出并且未再次邀请的特定服务器的用户数据,以减轻文件大小。 - alec wilson
@MrWinson https://discord.js.org/#/docs/main/stable/class/Guild?scrollTo=available - Syntle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接