Discord.Net 刷新用户角色

Discord.Net Refresh user role

所以,我正在研究 Discord.Net 并希望了解用户是否具有特定角色
我写了这段代码:

public bool IsAlreadyHasAffiliation(SocketGuildUser user)
{
    IReadOnlyCollection<SocketRole> roles = user.Roles;
    foreach(SocketRole role in roles)
    {
        if (SpecifiedRoles.ContainsValue(role.Id)) return true;
    }
    return false;
}

它工作正常但有一些问题:在机器人启动后没有获得机器人添加的角色。

例如,在我通过机器人添加“Role1”并执行上述功能后,它就像用户没有 Role1 一样工作。 我怎样才能实时更新机器人中的角色?

如果您注意到与用户相关的奇怪行为(您确实如此),那么很可能是最近的特权意图更新所致。 Discord.NET 缓存(下载)用户并使用诸如 GuildUserUpdated 之类的事件来使此缓存在后台保持最新。没有 Guild Members intent Discord.NET 无法保持其用户缓存是最新的,导致诸如此类的问题。

要解决此问题,请在 Discord 开发人员门户上的机器人页面的机器人选项卡上启用公会成员特权意图。

如果这不起作用,则使用 Discord.NET 的夜间版本,并在 DiscordSocketConfig. To use the nightly versions, add https://www.myget.org/F/discord-net/api/v3/index.json 中指定您需要的所有意图作为 NuGet 包管理器上的包源。

这是一个指定网关意图的 DiscordSocketConfig(仅适用于夜间):

new DiscordSocketConfig 
{
    GatewayIntents = 
        GatewayIntents.Guilds |
        GatewayIntents.GuildMembers |
        GatewayIntents.GuildMessageReactions | 
        GatewayIntents.GuildMessages | 
        GatewayIntents.GuildVoiceStates,
    ...
});