Discord. net проблем с созданием, добавлением и удалением ролей - PullRequest
1 голос
/ 03 августа 2020

, поэтому я работаю над командой отключения звука и включения звука, и я хочу, чтобы она выполняла поиск, есть ли на сервере роль с именем "Muted", если она есть, а затем предоставьте пользователю эту роль, если ее нет. создайте роль с необходимыми разрешениями. Я пробовал возиться с разрешениями ботов, разрешениями ролей и иерархией, но он ничего не делает. Мне не сообщается об ошибке через консоль, и нет ошибки в тексте, просто кажется, что ничего не делает, что бы я ни пытался, может ли кто-нибудь увидеть, что я делаю неправильно? Я создал уже существующую роль под названием «Без звука», и даже с предварительно примененной ролью она не добавляла ее. Он также не работает при попытке удалить роль, если я вручную добавил ее пользователю. Вот что у меня есть:

   [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;
        }

Если бы кто-нибудь мог мне помочь, это было бы здорово, ура!

...