Beispiel #1
0
        public async Task IAmNotAsync(IContext e)
        {
            string roleName = e.GetArgumentPack().Pack.TakeAll();

            var context = e.GetService <MikiDbContext>();

            List <IDiscordRole> roles = await GetRolesByNameAsync(e.GetGuild(), roleName);

            IDiscordRole role;

            if (roles.Count > 1)
            {
                List <LevelRole> levelRoles = await context.LevelRoles
                                              .Where(x => x.GuildId == (long)e.GetGuild().Id).ToListAsync();

                if (levelRoles.Count(
                        x => ModelExtensions.GetRoleAsync(x, e.GetGuild()).Result.Name.ToLower()
                        == roleName.ToLower()) > 1)
                {
                    await e.ErrorEmbed("two roles configured have the same name.")
                    .ToEmbed().QueueAsync(e, e.GetChannel());

                    return;
                }
                else
                {
                    role = await levelRoles
                           .FirstOrDefault(
                        x => x.GetRoleAsync(e.GetGuild()).Result.Name.ToLower()
                        == roleName.ToLower())
                           .GetRoleAsync(e.GetGuild());
                }
            }
            else
            {
                role = roles.FirstOrDefault();
            }

            if (role == null)
            {
                await e.ErrorEmbed(e.GetLocale().GetString("error_role_null"))
                .ToEmbed().QueueAsync(e, e.GetChannel());

                return;
            }

            IDiscordGuildUser author = await e.GetGuild().GetMemberAsync(e.GetAuthor().Id);

            IDiscordGuildUser me = await e.GetGuild().GetSelfAsync();

            if (!author.RoleIds.Contains(role.Id))
            {
                await e.ErrorEmbed(e.GetLocale().GetString("error_role_forbidden"))
                .ToEmbed().QueueAsync(e, e.GetChannel());

                return;
            }

            LevelRole newRole =
                await context.LevelRoles.FindAsync(e.GetGuild().Id.ToDbLong(), role.Id.ToDbLong());

            User user = await context.Users.FindAsync(e.GetAuthor().Id.ToDbLong());

            if (!await me.HasPermissionsAsync(GuildPermission.ManageRoles))
            {
                await e.ErrorEmbed(e.GetLocale().GetString("permission_error_low", "give roles"))
                .ToEmbed()
                .QueueAsync(e, e.GetChannel());

                return;
            }

            if (role.Position >= await me.GetHierarchyAsync())
            {
                await e.ErrorEmbed(e.GetLocale().GetString("permission_error_low", "give roles"))
                .ToEmbed()
                .QueueAsync(e, e.GetChannel());

                return;
            }

            await author.RemoveRoleAsync(role);

            await new EmbedBuilder()
            .SetTitle("I AM NOT")
            .SetColor(255, 128, 128)
            .SetDescription($"You're no longer a(n) {role.Name}!")
            .ToEmbed().QueueAsync(e, e.GetChannel());
        }