首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角色创建后为空。

角色创建后为空。
EN

Stack Overflow用户
提问于 2022-03-12 17:26:06
回答 1查看 59关注 0票数 0

我现在正在编写一个带阴影的命令,这段代码造成了问题,即使在创建了shadowban角色之后,var角色也将为null。

这可能是一个非常愚蠢的错误,我造成了某种形式,但我就是搞不明白。

代码语言:javascript
复制
if (!Context.Guild.Roles.Any(x => x.Name == shadowRoleName))
   {
    await Context.Guild.CreateRoleAsync(shadowRoleName, null, Color.DarkerGrey, false, null);
   }
var role = Context.Guild.Roles.FirstOrDefault(x => x.Name == shadowRoleName);

我不知道我的代码的其他部分是否会导致这种情况发生,所以这里的整个命令

代码语言:javascript
复制
    [Command("shadowron")]
    [RequireUserPermission(GuildPermission.Administrator, ErrorMessage = "Koa adminrechte, nt aroun")]
    public async Task ShadowBanUserAsync(SocketGuildUser user = null)
    {
        const string shadowRoleName = "shadowron";
        bool alreadyShadowBanned = false;

        if (user == null)
        {
            await ReplyAsync("wer soll shadowbanned wöra?");
            return;
        }

        if (!Context.Guild.Roles.Any(x => x.Name == shadowRoleName))
        {
            await Context.Guild.CreateRoleAsync(shadowRoleName, null, Color.DarkerGrey, false, null);
        }
        var role = Context.Guild.Roles.FirstOrDefault(x => x.Name == shadowRoleName);

        foreach (SocketRole userRole in user.Roles)
        {
            if (userRole.Name == shadowRoleName)
            {
                alreadyShadowBanned = true;
                continue;
            }

            if (userRole.IsEveryone)
            {
                continue;
            }
            await user.RemoveRoleAsync(userRole.Id);
        }

        if (alreadyShadowBanned)
        {
            await ReplyAsync($"Da {user.Mention} isch scho shadowbanned rip");
            return;
        }

        await ReplyAsync($"Da {user.Mention} isch jetz shadowbanned uff");
        await user.AddRoleAsync(role);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-12 22:14:44

create角色函数返回创建的角色。只需存储它,而不是尝试从角色列表中获取它。创建新角色时,在触发角色创建事件之前,缓存不会被更新,因此在创建之后尝试立即获取缓存总是失败的。

代码语言:javascript
复制
IRole role = Context.Guild.Roles.FirstOrDefault(x => x.Name == shadowRoleName);

if (role == null) 
    role = await Context.Guild.CreateRoleAsync(shadowRoleName, null, Color.DarkerGrey, false, null);

// rest of code...

await user.AddRoleAsync(role);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71451827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档