Example #1
0
        public async Task FleetPurge(CommandContext ctx, DiscordUser member, string duration = "1d", [RemainingText] string reason = "Не указана") //Блокирует возможность принять правила на время
        {
            var isFleetCaptain = ctx.Member.Roles.Contains(ctx.Guild.GetRole(Bot.BotSettings.FleetCaptainRole)) &&
                                 !Bot.IsModerator(ctx.Member) && !ctx.Member.Roles.Any(x => x.Id == Bot.BotSettings.HelperRole); //Только капитаны рейда, модераторы и хелперы не учитываются

            var durationTimeSpan = Utility.TimeSpanParse(duration);
            var id = RandomString.NextString(6);

            if (durationTimeSpan.TotalDays > 3 && isFleetCaptain) //Максимальное время блокировки капитанам 1day
            {
                durationTimeSpan = new TimeSpan(3, 0, 0, 0);
            }

            var reportEnd = DateTime.Now + durationTimeSpan;

            ReportSQL fleetPurge = null;
            var       reports    = ReportSQL.GetForUser(member.Id, ReportType.FleetPurge);

            if (reports.Any() && reports.First().ReportEnd > DateTime.Now)
            {
                fleetPurge           = reports.First();
                fleetPurge.ReportEnd = reportEnd;
            }
            else
            {
                fleetPurge = ReportSQL.Create(id,
                                              member.Id,
                                              ctx.Member.Id,
                                              reason,
                                              DateTime.Now,
                                              reportEnd,
                                              ReportType.FleetPurge);

                if (fleetPurge.ReportDuration.TotalSeconds < 1)
                {
                    await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Не удалось определить время!");

                    return;
                }
            }

            //Отправка в журнал
            await ctx.Channel.Guild.GetChannel(Bot.BotSettings.ModlogChannel).SendMessageAsync(
                "**Блокировка принятия правил рейда**\n\n" +
                $"**Модератор:** {ctx.Member}\n" +
                $"**Пользователь:** {member}\n" +
                $"**Дата:** {DateTime.Now:HH:mm:ss dd.MM.yyyy}\n" +
                $"**Снятие через:** {Utility.FormatTimespan(fleetPurge.ReportDuration)} | {fleetPurge.ReportEnd::HH:mm:ss dd.MM.yyyy}\n" +
                $"**Причина:** {reason}\n" +
                $"**ID:** {id}");

            //Ответное сообщение в чат
            await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно отобрано право принять правила рейда {member.Mention}. " +
                                   $"Снятие через: {Utility.FormatTimespan(fleetPurge.ReportDuration)}!");
        }
Example #2
0
        public async Task Purge(CommandContext ctx, DiscordUser member, string duration, [RemainingText] string reason = "Не указана") //Блокирует возможность принять правила на время
        {
            if (!Bot.IsModerator(ctx.Member))
            {
                await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} У вас нет доступа к этой команде!");

                return;
            }

            var       id        = RandomString.NextString(6);
            var       reportEnd = DateTime.Now + Utility.TimeSpanParse(duration);
            ReportSQL purge     = null;

            //Возможна только одна блокировка, если уже существует то перезаписываем
            var reports = ReportSQL.GetForUser(member.Id, ReportType.CodexPurge);

            if (reports.Any() && reports.First().ReportEnd > DateTime.Now)
            {
                purge           = reports.First();
                purge.ReportEnd = reportEnd;
            }
            else
            {
                purge = ReportSQL.Create(id,
                                         member.Id,
                                         ctx.Member.Id,
                                         reason,
                                         DateTime.Now,
                                         reportEnd,
                                         ReportType.CodexPurge);

                if (purge.ReportDuration.TotalSeconds < 1)
                {
                    await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Не удалось определить время!");

                    return;
                }
            }

            //Отправка в журнал
            await ctx.Channel.Guild.GetChannel(Bot.BotSettings.ModlogChannel).SendMessageAsync(
                "**Блокировка доступа к рейдам**\n\n" +
                $"**Модератор:** {ctx.Member}\n" +
                $"**Пользователь:** {member}\n" +
                $"**Дата:** {DateTime.Now:HH:mm:ss dd.MM.yyyy}\n" +
                $"**Снятие через:** {Utility.FormatTimespan(purge.ReportDuration)} | {reportEnd:HH:mm:ss dd.MM.yyyy}\n" +
                $"**Причина:** {reason}\n" +
                $"**ID:** {id}");

            //Ответное сообщение в чат
            await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно заблокирован доступ к рейдам {member.Mention}. " +
                                   $"Снятие через {Utility.FormatTimespan(purge.ReportDuration)}!");
        }
Example #3
0
        public async Task Mute(CommandContext ctx, DiscordUser member, string duration, [RemainingText] string reason = "Не указана")
        {
            if (!Bot.IsModerator(ctx.Member))
            {
                await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} У вас нет доступа к этой команде!");

                return;
            }

            var durationTimeSpan = Utility.TimeSpanParse(duration);
            var id        = RandomString.NextString(6);
            var reportEnd = DateTime.Now + durationTimeSpan;

            ReportSQL mute    = null;
            var       reports = ReportSQL.GetForUser(member.Id, ReportType.Mute);

            if (reports.Any() && reports.First().ReportEnd > DateTime.Now)
            {
                mute           = reports.First();
                mute.ReportEnd = reportEnd;
            }
            else
            {
                mute = ReportSQL.Create(id,
                                        member.Id,
                                        ctx.Member.Id,
                                        reason,
                                        DateTime.Now,
                                        reportEnd,
                                        ReportType.Mute);
            }

            //Отправка в журнал
            await ctx.Channel.Guild.GetChannel(Bot.BotSettings.ModlogChannel).SendMessageAsync(
                "**Мут**\n\n" +
                $"**От:** {ctx.Member}\n" +
                $"**Кому:** {member}\n" +
                $"**Дата:** {DateTime.Now}\n" +
                $"**Снятие через:** {Utility.FormatTimespan(mute.ReportDuration)}\n" +
                $"**Причина:** {reason}\n" +
                $"**ID:** {id}");

            //Ответное сообщение в чат
            await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно выдан мут {member.Mention}. " +
                                   $"Снятие через: {Utility.FormatTimespan(mute.ReportDuration)}!");
        }
Example #4
0
        public async Task VoiceMute(CommandContext ctx, DiscordMember member, string duration, [RemainingText] string reason = "Не указана")
        {
            if (!Bot.IsModerator(ctx.Member))
            {
                await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} У вас нет доступа к этой команде!");

                return;
            }

            var durationTimeSpan = Utility.TimeSpanParse(duration);
            var id        = RandomString.NextString(6);
            var reportEnd = DateTime.Now + durationTimeSpan;

            ReportSQL mute    = null;
            var       reports = ReportSQL.GetForUser(member.Id, ReportType.VoiceMute);

            if (reports.Any() && reports.First().ReportEnd > DateTime.Now)
            {
                mute           = reports.First();
                mute.ReportEnd = reportEnd;
            }
            else
            {
                mute = ReportSQL.Create(id,
                                        member.Id,
                                        ctx.Member.Id,
                                        reason,
                                        DateTime.Now,
                                        reportEnd,
                                        ReportType.VoiceMute);
            }

            //Выдаем роль мута
            await member.GrantRoleAsync(ctx.Channel.Guild.GetRole(Bot.BotSettings.VoiceMuteRole));

            //Отправка сообщения в лс
            try
            {
                await member.SendMessageAsync(
                    $"**Вам выдан мут в голосовом чате**\n\n" +
                    $"**Снятие через:** {Utility.FormatTimespan(mute.ReportDuration)}\n" +
                    $"**Модератор:** {ctx.Member.Username}#{ctx.Member.Discriminator}\n" +
                    $"**Причина:** {reason}");
            }
            catch (UnauthorizedException)
            {
                //user can block the bot
            }

            //Отправка в журнал
            await ctx.Channel.Guild.GetChannel(Bot.BotSettings.ModlogChannel).SendMessageAsync(
                "**Мут в голосовом чате**\n\n" +
                $"**От:** {ctx.Member}\n" +
                $"**Кому:** {member}\n" +
                $"**Дата:** {DateTime.Now}\n" +
                $"**Снятие через:** {Utility.FormatTimespan(mute.ReportDuration)}\n" +
                $"**Причина:** {reason}");

            //Ответное сообщение в чат
            await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно выдан мут в голосовом чате {member.Mention}. " +
                                   $"Снятие через: {Utility.FormatTimespan(mute.ReportDuration)}!");
        }
Example #5
0
        public async Task FleetPurge(CommandContext ctx, DiscordMember member, string duration = "1d", [RemainingText] string reason = "Не указана") //Блокирует возможность принять правила на время
        {
            var isFleetCaptain = ctx.Member.Roles.Contains(ctx.Guild.GetRole(Bot.BotSettings.FleetCaptainRole)) &&
                                 !Bot.IsModerator(ctx.Member) && !ctx.Member.Roles.Any(x => x.Id == Bot.BotSettings.HelperRole); //Только капитаны рейда, модераторы и хелперы не учитываются

            //Проверка на кик модератора капитаном рейда
            if (Bot.IsModerator(member) && isFleetCaptain)
            {
                await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Вы не можете исключить данного пользователя! <@&514282258958385152>");

                return;
            }

            var durationTimeSpan = Utility.TimeSpanParse(duration);
            var id = RandomString.NextString(6);

            if (durationTimeSpan.TotalDays > 3 && isFleetCaptain) //Максимальное время блокировки капитанам 1day
            {
                durationTimeSpan = new TimeSpan(3, 0, 0, 0);
            }

            var reportEnd = DateTime.Now + durationTimeSpan;

            ReportSQL fleetPurge = null;
            var       reports    = ReportSQL.GetForUser(member.Id, ReportType.FleetPurge);

            if (reports.Any() && reports.First().ReportEnd > DateTime.Now)
            {
                fleetPurge           = reports.First();
                fleetPurge.ReportEnd = reportEnd;
            }
            else
            {
                fleetPurge = ReportSQL.Create(id,
                                              member.Id,
                                              ctx.Member.Id,
                                              reason,
                                              DateTime.Now,
                                              reportEnd,
                                              ReportType.FleetPurge);

                if (fleetPurge.ReportDuration.TotalSeconds < 1)
                {
                    await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Не удалось определить время!");

                    return;
                }
            }

            //Убираем роль правил
            await member.RevokeRoleAsync(ctx.Channel.Guild.GetRole(Bot.BotSettings.FleetCodexRole));

            //Отправка сообщения в лс
            try
            {
                await member.SendMessageAsync(
                    $"**Доступ к рейдам заблокирован**\n" +
                    $"**Снятие через:** {Utility.FormatTimespan(fleetPurge.ReportDuration)}\n" +
                    $"**Модератор:** {ctx.Member.Username}#{ctx.Member.Discriminator}\n" +
                    $"**Причина:** {fleetPurge.Reason}");
            }
            catch (UnauthorizedException)
            {
                //user can block the bot
            }

            //Отправка в журнал
            await ctx.Channel.Guild.GetChannel(Bot.BotSettings.ModlogChannel).SendMessageAsync(
                "**Блокировка доступа к рейдам**\n\n" +
                $"**Модератор:** {ctx.Member}\n" +
                $"**Пользователь:** {member}\n" +
                $"**Дата:** {DateTime.Now:HH:mm:ss dd.MM.yyyy}\n" +
                $"**Снятие через:** {Utility.FormatTimespan(fleetPurge.ReportDuration)} | {fleetPurge.ReportEnd::HH:mm:ss dd.MM.yyyy}\n" +
                $"**Причина:** {reason}\n" +
                $"**ID:** {id}");

            //Ответное сообщение в чат
            await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно заблокирован доступ к рейдам {member.Mention}. " +
                                   $"Снятие через: {Utility.FormatTimespan(fleetPurge.ReportDuration)}!");
        }
Example #6
0
        public async Task Purge(CommandContext ctx, DiscordMember member, string duration, [RemainingText] string reason = "Не указана") //Блокирует возможность принять правила на время
        {
            if (!Bot.IsModerator(ctx.Member))
            {
                await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} У вас нет доступа к этой команде!");

                return;
            }

            var       id        = RandomString.NextString(6);
            var       reportEnd = DateTime.Now + Utility.TimeSpanParse(duration);
            ReportSQL purge     = null;

            //Возможна только одна блокировка, если уже существует то перезаписываем
            var reports = ReportSQL.GetForUser(member.Id, ReportType.CodexPurge);

            if (reports.Any() && reports.First().ReportEnd > DateTime.Now)
            {
                purge           = reports.First();
                purge.ReportEnd = reportEnd;
            }
            else
            {
                purge = ReportSQL.Create(id,
                                         member.Id,
                                         ctx.Member.Id,
                                         reason,
                                         DateTime.Now,
                                         reportEnd,
                                         ReportType.CodexPurge);

                if (purge.ReportDuration.TotalSeconds < 1)
                {
                    await ctx.RespondAsync($"{Bot.BotSettings.ErrorEmoji} Не удалось определить время!");

                    return;
                }
            }

            //Убираем роль правил
            await member.RevokeRoleAsync(ctx.Channel.Guild.GetRole(Bot.BotSettings.CodexRole));

            await member.GrantRoleAsync(ctx.Channel.Guild.GetRole(Bot.BotSettings.PurgeCodexRole));

            //Отправка сообщения в лс
            try
            {
                await member.SendMessageAsync(
                    $"**Еще раз внимательно прочитайте правила сервера**\n\n" +
                    $"**Возможность принять правила заблокирована**\n" +
                    $"**Снятие через** {Utility.FormatTimespan(purge.ReportDuration)}\n" +
                    $"**Модератор:** {ctx.Member.Username}#{ctx.Member.Discriminator}\n" +
                    $"**Причина:** {purge.Reason}");
            }
            catch (UnauthorizedException)
            {
                //user can block the bot
            }

            //Отправка в журнал
            await ctx.Channel.Guild.GetChannel(Bot.BotSettings.ModlogChannel).SendMessageAsync(
                "**Блокировка принятия правил**\n\n" +
                $"**Модератор:** {ctx.Member}\n" +
                $"**Пользователь:** {member}\n" +
                $"**Дата:** {DateTime.Now:HH:mm:ss dd.MM.yyyy}\n" +
                $"**Снятие через:** {Utility.FormatTimespan(purge.ReportDuration)} | {reportEnd:HH:mm:ss dd.MM.yyyy}\n" +
                $"**Причина:** {reason}\n" +
                $"**ID:** {id}");

            //Ответное сообщение в чат
            await ctx.RespondAsync($"{Bot.BotSettings.OkEmoji} Успешно отобрано право принять правила {member.Mention}. " +
                                   $"Снятие через {Utility.FormatTimespan(purge.ReportDuration)}!");
        }