Discord.net在创建,添加和删除角色方面遇到问题

时间:2020-08-03 12:36:30

标签: c# discord discord.net

所以我正在处理一个静音和取消静音的命令,我要执行的操作是查找服务器中是否存在一个名为“静音”的角色,如果没有,则给用户该角色。创建具有必要权限的角色。我已经尝试过弄乱机器人权限,角色权限和层次结构,但是它什么也没做。没有通过控制台给我的错误,也没有在文本中生成错误,无论我尝试什么,它似乎只是无能为力,任何人都可以看到我在做什么吗?我创建了一个预先存在的角色,称为“静音”,即使预先应用了该角色,它也没有添加。如果我手动将角色添加到用户,则在尝试删除该角色时也无法使用。这就是我所拥有的:

   [Command("mute")]
        [Remarks("Mutes A User")]
        [RequireUserPermission(GuildPermission.MuteMembers)]
        public async Task Mute(SocketGuildUser user)
        {
            var UserCheck = Context.Guild.GetUser(Context.User.Id);

            if (!UserCheck.GuildPermissions.MuteMembers)
            {
                await Context.Message.Channel.SendMessageAsync("", false, new EmbedBuilder()
                {
                    Color = Color.LightOrange,
                    Title = "You dont have Permission!",
                    Description = $"Sorry, {Context.Message.Author.Mention} but you do not have permission to use this command",
                    Author = new EmbedAuthorBuilder()
                    {
                        Name = Context.Message.Author.ToString(),
                        IconUrl = Context.Message.Author.GetAvatarUrl(),
                        Url = Context.Message.GetJumpUrl()
                    }
                }.Build());
            }
            else
            {
                await Context.Guild.GetUser(user.Id).ModifyAsync(x => x.Mute = true);

                var muteRole = await GetMuteRole(user.Guild);
                if (!user.Roles.Any(r => r.Id == muteRole.Id))
                    await user.AddRoleAsync(muteRole);//.ConfigureAwait(false);
            }
        }



        [Command("unmute")]
        [Remarks("Unmutes A User")]
        [RequireUserPermission(GuildPermission.MuteMembers)]
        public async Task Unmute(SocketGuildUser user)
        {
            var UserCheck = Context.Guild.GetUser(Context.User.Id);

            if (!UserCheck.GuildPermissions.MuteMembers)
            {
                await Context.Message.Channel.SendMessageAsync("", false, new EmbedBuilder()
                {
                    Color = Color.LightOrange,
                    Title = "You dont have Permission!",
                    Description = $"Sorry, {Context.Message.Author.Mention} but you do not have permission to use this command",
                    Author = new EmbedAuthorBuilder()
                    {
                        Name = Context.Message.Author.ToString(),
                        IconUrl = Context.Message.Author.GetAvatarUrl(),
                        Url = Context.Message.GetJumpUrl()
                    }
                }.Build());
            }
            else
            {
                await Context.Guild.GetUser(user.Id).ModifyAsync(x => x.Mute = false).ConfigureAwait(false);

                try { await user.ModifyAsync(x => x.Mute = false);/*.ConfigureAwait(false); */} catch { ReplyAsync("no"); }
                try { await user.RemoveRoleAsync(await GetMuteRole(user.Guild));/*.ConfigureAwait(false); */} catch { ReplyAsync("No lmao"); }
            }
        }

        public async Task<IRole> GetMuteRole(IGuild guild)
        {
            const string defaultMuteRoleName = "Muted";

            var muteRoleName = "Muted";

            var muteRole = guild.Roles.FirstOrDefault(r => r.Name == muteRoleName);

            if (muteRole == null)
            {
                try
                {
                    muteRole = await guild.CreateRoleAsync(muteRoleName, GuildPermissions.None, Color.Default, false, false);//.ConfigureAwait(false);
                }
                catch
                {
                    muteRole = guild.Roles.FirstOrDefault(r => r.Name == muteRoleName) ?? await guild.CreateRoleAsync(defaultMuteRoleName, GuildPermissions.None, Color.Default, false, false);//.ConfigureAwait(false);
                }
            }

            foreach (var toOverwrite in (await guild.GetTextChannelsAsync()))
            {
                try
                {
                    if (!toOverwrite.PermissionOverwrites.Any(x => x.TargetId == muteRole.Id && x.TargetType == PermissionTarget.Role))
                    {
                        await toOverwrite.AddPermissionOverwriteAsync(muteRole, denyOverwrite);//.ConfigureAwait(false);

                        await Task.Delay(200);//.ConfigureAwait(false);
                    }
                }
                catch
                {

                }
            }
            return muteRole;
        }

如果有人能帮助我,那太好了,欢呼!

0 个答案:

没有答案
相关问题