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)}!"); }
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)}!"); }
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)}!"); }
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)}!"); }
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)}!"); }
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)}!"); }