由于某种原因,我无法再从该机器人所在的公会中获取任何成员。
为了确保有用户,我用
构造它 DiscordSocketConfig config = new DiscordSocketConfig { AlwaysDownloadUsers = true };
client = new DiscordSocketClient(config);
我响应的事件在连接后很长时间。它将从机器人所在的公会中的渠道本身中获取消息,因此该机器人已连接,正常运行,并且可以看到所有成员。
我遍历了所有成员,并尝试使用一些调试代码将它们打印出来:
Console.WriteLine("Users:");
foreach (IGuildUser? u in Guild.GetUsersAsync().Result)
Console.WriteLine($" {u.Username} ({u.Id})");
并且仅打印自身。
我在代码中使用此代码的方式如下:
Guild.GetUserAsync(user.Id) // user is valid, this is empty for anyone who is not the bot
公会对象上的私有字段_members
有1个元素(它本身就是机器人),但其他所有东西(例如:_emojis
,_channels
,以及其他任何缓存的的东西)全部被填充。该bot可以在频道中与所有用户交谈,也可以在频道中与所有用户接收消息,因此我不知道为什么它无法获得所有成员。
最让我困惑的是,这一切都在起作用,然后魔术般地停止了一整夜的工作。公会已经有100多个成员了,所以我不明白为什么它现在突然失败了。
最重要的是,该机器人具有我所拥有的所有角色,因此它不可能神奇地无法看到成员。我可以排除机器人的视觉问题。
有什么办法可以调试吗?我想念什么吗?我如何让行会的所有成员重新工作?
答案 0 :(得分:1)
这是不和谐强制执行intents的结果。
意图允许您选择加入某些网关事件。当前,GUILD_MEMBERS和GUILD_PRESENCES意图是“特权意图”,并且具有以下效果:
默认情况下禁用特权意图。要启用它们:
如果您的漫游器超过100个行会,则需要验证您的漫游器:https://dis.gd/bot-verification。如果您的漫游器已经过验证,但需要请求意图许可,请与Discord支持人员联系:https://dis.gd/contact。