Discord.NET 比较角色的更好方法

因此,在我的 Discord 机器人中,我正在创建一个完整的审核系统,其中具有适当权限的用户可以向其他用户发出警告,这些将被记录,一旦发出 3 个警告,用户就会被静音一段时间,这可能发生 5他们被长时间静音的次数,当用户达到 3 次以上警告时,第五次静音后,他们将被永久禁止。所以我几乎已经完成了对用户历史查看器等没有问题的整个事情,但我遇到的问题是比较角色。我找到了一个解决方案,我不确定从长远来看它是否能正常工作,但这是我能想到的唯一方法。我希望它不允许用户警告比自己级别高的人。这是我的代码:


public class Warn : ModuleBase<SocketCommandContext>

    {

        [Command("Warn")]

        public async Task WarnMain([Remainder, Summary("Warn a user for a reason.")] IGuildUser user, string warnInfo)

        {

            var userRole = -1;

            var victimRole = -1;

            var counter = 0;

            foreach(var role in Context.Guild.Roles)

            {

                if (Context.Guild.GetUser(Context.User.Id).Roles.Contains(role) && userRole == -1)

                {

                    userRole = counter;

                }

                if (Context.Guild.GetUser(user.Id).Roles.Contains(role) && victimRole == -1)

                {

                    victimRole = counter;

                }

            }

            if (userRole < victimRole)

            // blah blah

        }

    }

如果您知道这样做的更好方法或更有效的方法,请分享,将不胜感激。谢谢。


紫衣仙女
浏览 172回答 3
3回答

汪汪一只猫

据我所知,我这样做的方式似乎是实际比较角色的唯一方法。花了最后 4 个小时寻找替代品,但没有遇到任何事情。我的方法是简单地遍历每个角色并进行比较,我相信 API 已经将角色从高到低排序。然后,您可以使用计数器比较找到分配给用户的最高角色的数字。比较权限并不总是有效,尤其是在我的情况下,因此我也无法使用该方法。这似乎最适合我。如果有人有更好的东西可以随时分享,我很想看看我如何改进它。

守候你守候我

如果将用户转换为 SocketGuilderUser,则可以比较 Hierarchy 属性。它基本上与您已经在做的事情相同,只是避免了角色循环。
打开App,查看更多内容
随时随地看视频慕课网APP