为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
紫衣仙女 2021-07-02 14:05:26
因此,在我的 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        }    }如果您知道这样做的更好方法或更有效的方法,请分享,将不胜感激。谢谢。
查看完整描述

3 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

据我所知,我这样做的方式似乎是实际比较角色的唯一方法。花了最后 4 个小时寻找替代品,但没有遇到任何事情。

我的方法是简单地遍历每个角色并进行比较,我相信 API 已经将角色从高到低排序。然后,您可以使用计数器比较找到分配给用户的最高角色的数字。

比较权限并不总是有效,尤其是在我的情况下,因此我也无法使用该方法。这似乎最适合我。如果有人有更好的东西可以随时分享,我很想看看我如何改进它。


查看完整回答
反对 回复 2021-07-18
?
守候你守候我

TA贡献1802条经验 获得超10个赞

如果将用户转换为 SocketGuilderUser,则可以比较 Hierarchy 属性。它基本上与您已经在做的事情相同,只是避免了角色循环。


查看完整回答
反对 回复 2021-07-18
  • 3 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信