From c0ae850fb8ca53f3fbf5286f77c7c301756119a5 Mon Sep 17 00:00:00 2001 From: Octol1ttle Date: Tue, 18 Oct 2022 22:55:16 +0500 Subject: [PATCH] Guild blacklist implementation --- Boyfriend/Boyfriend.cs | 11 +- Boyfriend/Boyfriend.csproj | 2 +- Boyfriend/CommandProcessor.cs | 10 + Boyfriend/Commands/SelfBanCommand.cs | 2 +- Boyfriend/EventHandler.cs | 64 ++- Boyfriend/Messages.Designer.cs | 20 +- Boyfriend/Messages.resx | 768 ++++++++++++++------------- Boyfriend/Messages.ru.resx | 750 +++++++++++++------------- Boyfriend/Utils.cs | 5 + 9 files changed, 843 insertions(+), 789 deletions(-) diff --git a/Boyfriend/Boyfriend.cs b/Boyfriend/Boyfriend.cs index ec670e9..df38768 100644 --- a/Boyfriend/Boyfriend.cs +++ b/Boyfriend/Boyfriend.cs @@ -60,7 +60,7 @@ public static class Boyfriend { await Client.StartAsync(); await Client.SetActivityAsync(Activity); - new EventHandler().InitEvents(); + EventHandler.InitEvents(); await Task.Delay(-1); } @@ -128,9 +128,12 @@ public static class Boyfriend { public static SocketGuild FindGuild(ulong channel) { if (GuildCache.ContainsKey(channel)) return GuildCache[channel]; foreach (var guild in Client.Guilds) { - if (guild.Channels.All(x => x.Id != channel)) continue; - GuildCache.Add(channel, guild); - return guild; + // ReSharper disable once LoopCanBeConvertedToQuery + foreach (var x in guild.Channels) + if (x.Id == channel) { + GuildCache.Add(channel, guild); + return guild; + } } throw new Exception("Could not find guild by channel!"); diff --git a/Boyfriend/Boyfriend.csproj b/Boyfriend/Boyfriend.csproj index bb143c7..a578853 100644 --- a/Boyfriend/Boyfriend.csproj +++ b/Boyfriend/Boyfriend.csproj @@ -24,7 +24,7 @@ - + diff --git a/Boyfriend/CommandProcessor.cs b/Boyfriend/CommandProcessor.cs index bac4013..b9e4562 100644 --- a/Boyfriend/CommandProcessor.cs +++ b/Boyfriend/CommandProcessor.cs @@ -29,6 +29,7 @@ public sealed class CommandProcessor { private readonly List _tasks = new(); public readonly SocketCommandContext Context; + private bool _serverBlacklisted; public bool ConfigWriteScheduled = false; @@ -56,6 +57,11 @@ public sealed class CommandProcessor { var cleanList = Context.Message.CleanContent.Split("\n"); for (var i = 0; i < list.Length; i++) { RunCommandOnLine(list[i], cleanList[i], regex); + if (_serverBlacklisted) { + await Context.Message.ReplyAsync(Messages.ServerBlacklisted); + return; + } + if (_stackedReplyMessage.Length > 0) _ = Context.Channel.TriggerTypingAsync(); var member = Boyfriend.Client.GetGuild(Context.Guild.Id) .GetUser(Context.User.Id); // Getting an up-to-date copy @@ -79,6 +85,10 @@ public sealed class CommandProcessor { if (lineNoMention == line || !command.Aliases.Contains(lineNoMention.Trim().ToLower().Split()[0])) continue; + if (Utils.IsServerBlacklisted(Context.Guild)) { + _serverBlacklisted = true; + return; + } var args = line.Split().Skip(lineNoMention.StartsWith(" ") ? 2 : 1).ToArray(); var cleanArgs = cleanLine.Split().Skip(lineNoMention.StartsWith(" ") ? 2 : 1).ToArray(); diff --git a/Boyfriend/Commands/SelfBanCommand.cs b/Boyfriend/Commands/SelfBanCommand.cs index e5b1cbe..aca49a4 100644 --- a/Boyfriend/Commands/SelfBanCommand.cs +++ b/Boyfriend/Commands/SelfBanCommand.cs @@ -1,7 +1,7 @@ namespace Boyfriend.Commands; public sealed class SelfBanCommand : ICommand { - public string[] Aliases { get; } = { "grantoverseer", "grant", "overseer", "voooo", "overseergrant", "special" }; + public string[] Aliases { get; } = { "cavepleaselisten" }; public async Task RunAsync(CommandProcessor cmd, string[] args, string[] cleanArgs) { await BanCommand.BanUser(cmd, cmd.Context.User, TimeSpan.FromMilliseconds(-1), ""); diff --git a/Boyfriend/EventHandler.cs b/Boyfriend/EventHandler.cs index d4eb73e..2818ba1 100644 --- a/Boyfriend/EventHandler.cs +++ b/Boyfriend/EventHandler.cs @@ -1,36 +1,42 @@ -using Boyfriend.Commands; -using Discord; +using Discord; using Discord.Rest; using Discord.WebSocket; +using Humanizer; namespace Boyfriend; -public sealed class EventHandler { - private readonly DiscordSocketClient _client = Boyfriend.Client; +public static class EventHandler { + private static readonly DiscordSocketClient Client = Boyfriend.Client; + private static bool _sendReadyMessages = true; - public void InitEvents() { - _client.Ready += ReadyEvent; - _client.MessageDeleted += MessageDeletedEvent; - _client.MessageReceived += MessageReceivedEvent; - _client.MessageUpdated += MessageUpdatedEvent; - _client.UserJoined += UserJoinedEvent; - _client.GuildScheduledEventCreated += ScheduledEventCreatedEvent; - _client.GuildScheduledEventCancelled += ScheduledEventCancelledEvent; - _client.GuildScheduledEventStarted += ScheduledEventStartedEvent; - _client.GuildScheduledEventCompleted += ScheduledEventCompletedEvent; + public static void InitEvents() { + Client.Ready += ReadyEvent; + Client.MessageDeleted += MessageDeletedEvent; + Client.MessageReceived += MessageReceivedEvent; + Client.MessageUpdated += MessageUpdatedEvent; + Client.UserJoined += UserJoinedEvent; + Client.GuildScheduledEventCreated += ScheduledEventCreatedEvent; + Client.GuildScheduledEventCancelled += ScheduledEventCancelledEvent; + Client.GuildScheduledEventStarted += ScheduledEventStartedEvent; + Client.GuildScheduledEventCompleted += ScheduledEventCompletedEvent; } - private static async Task ReadyEvent() { + private static Task ReadyEvent() { + if (!_sendReadyMessages) return Task.CompletedTask; var i = Utils.Random.Next(3); - foreach (var guild in Boyfriend.Client.Guilds) { + foreach (var guild in Client.Guilds) { var config = Boyfriend.GetGuildConfig(guild.Id); var channel = guild.GetTextChannel(Convert.ToUInt64(config["BotLogChannel"])); Utils.SetCurrentLanguage(guild.Id); - if (config["ReceiveStartupMessages"] is not "true" || channel == null) continue; - await channel.SendMessageAsync(string.Format(Messages.Ready, Utils.GetBeep(i))); + if (config["ReceiveStartupMessages"] is not "true" || channel == null || + Utils.IsServerBlacklisted(guild)) continue; + _ = channel.SendMessageAsync(string.Format(Messages.Ready, Utils.GetBeep(i))); } + + _sendReadyMessages = false; + return Task.CompletedTask; } private static async Task MessageDeletedEvent(Cacheable message, @@ -39,6 +45,7 @@ public sealed class EventHandler { if (msg is null or ISystemMessage || msg.Author.IsBot) return; var guild = Boyfriend.FindGuild(channel.Value.Id); + if (Utils.IsServerBlacklisted(guild)) return; Utils.SetCurrentLanguage(guild.Id); @@ -62,13 +69,6 @@ public sealed class EventHandler { Utils.SetCurrentLanguage(guild.Id); - if ((message.MentionedUsers.Count > 3 || message.MentionedRoles.Count > 2) && - !user.GuildPermissions.MentionEveryone) { - await BanCommand.BanUser(new CommandProcessor(message), user, TimeSpan.FromMilliseconds(-1), - Messages.AutobanReason); - return; - } - var prev = ""; var prevFailsafe = ""; var prevs = await message.Channel.GetMessagesAsync(3).FlattenAsync(); @@ -92,20 +92,22 @@ public sealed class EventHandler { if (msg is null or ISystemMessage || msg.CleanContent == messageSocket.CleanContent || msg.Author.IsBot) return; - var guildId = Boyfriend.FindGuild(channel.Id).Id; + var guild = Boyfriend.FindGuild(channel.Id); + if (Utils.IsServerBlacklisted(guild)) return; - Utils.SetCurrentLanguage(guildId); + Utils.SetCurrentLanguage(guild.Id); var isLimitedSpace = msg.CleanContent.Length + messageSocket.CleanContent.Length < 1940; await Utils.SendFeedbackAsync( string.Format(Messages.CachedMessageEdited, Utils.MentionChannel(channel.Id), Utils.Wrap(msg.CleanContent, isLimitedSpace), Utils.Wrap(messageSocket.CleanContent, isLimitedSpace)), - guildId, msg.Author.Mention); + guild.Id, msg.Author.Mention); } private static async Task UserJoinedEvent(SocketGuildUser user) { var guild = user.Guild; + if (Utils.IsServerBlacklisted(guild)) return; var config = Boyfriend.GetGuildConfig(guild.Id); if (config["SendWelcomeMessages"] is "true") @@ -118,6 +120,7 @@ public sealed class EventHandler { private static async Task ScheduledEventCreatedEvent(SocketGuildEvent scheduledEvent) { var guild = scheduledEvent.Guild; + if (Utils.IsServerBlacklisted(guild)) return; var eventConfig = Boyfriend.GetGuildConfig(guild.Id); var channel = guild.GetTextChannel(Convert.ToUInt64(eventConfig["EventCreatedChannel"])); @@ -139,6 +142,7 @@ public sealed class EventHandler { private static async Task ScheduledEventCancelledEvent(SocketGuildEvent scheduledEvent) { var guild = scheduledEvent.Guild; + if (Utils.IsServerBlacklisted(guild)) return; var eventConfig = Boyfriend.GetGuildConfig(guild.Id); var channel = guild.GetTextChannel(Convert.ToUInt64(eventConfig["EventCancelledChannel"])); if (channel != null) @@ -148,6 +152,7 @@ public sealed class EventHandler { private static async Task ScheduledEventStartedEvent(SocketGuildEvent scheduledEvent) { var guild = scheduledEvent.Guild; + if (Utils.IsServerBlacklisted(guild)) return; var eventConfig = Boyfriend.GetGuildConfig(guild.Id); var channel = guild.GetTextChannel(Convert.ToUInt64(eventConfig["EventStartedChannel"])); @@ -170,10 +175,11 @@ public sealed class EventHandler { private static async Task ScheduledEventCompletedEvent(SocketGuildEvent scheduledEvent) { var guild = scheduledEvent.Guild; + if (Utils.IsServerBlacklisted(guild)) return; var eventConfig = Boyfriend.GetGuildConfig(guild.Id); var channel = guild.GetTextChannel(Convert.ToUInt64(eventConfig["EventCompletedChannel"])); if (channel != null) await channel.SendMessageAsync(string.Format(Messages.EventCompleted, Utils.Wrap(scheduledEvent.Name), - Utils.Wrap(scheduledEvent.StartTime.Subtract(DateTimeOffset.Now).Negate().ToString()))); + Utils.Wrap(scheduledEvent.StartTime.Subtract(DateTimeOffset.Now).Negate().Humanize()))); } } diff --git a/Boyfriend/Messages.Designer.cs b/Boyfriend/Messages.Designer.cs index ad39dc1..c4ab511 100644 --- a/Boyfriend/Messages.Designer.cs +++ b/Boyfriend/Messages.Designer.cs @@ -248,6 +248,15 @@ namespace Boyfriend { } } + /// + /// Looks up a localized string similar to We do not support hate towards our fellow members. And sometimes, we are not able to ban the offender.. + /// + internal static string CommandDescriptionCavepleaselisten { + get { + return ResourceManager.GetString("CommandDescriptionCavepleaselisten", resourceCulture); + } + } + /// /// Looks up a localized string similar to Deletes a specified amount of messages in this channel. /// @@ -285,7 +294,7 @@ namespace Boyfriend { } /// - /// Looks up a localized string similar to Shows latency to Discord servers (not counting local processing time). + /// Looks up a localized string similar to Shows (inaccurate) latency. /// internal static string CommandDescriptionPing { get { @@ -707,6 +716,15 @@ namespace Boyfriend { } } + /// + /// Looks up a localized string similar to This feature is unavailable because this guild is currently blacklisted.. + /// + internal static string ServerBlacklisted { + get { + return ResourceManager.GetString("ServerBlacklisted", resourceCulture); + } + } + /// /// Looks up a localized string similar to That setting doesn't exist!. /// diff --git a/Boyfriend/Messages.resx b/Boyfriend/Messages.resx index 88ab26c..cbb20ea 100644 --- a/Boyfriend/Messages.resx +++ b/Boyfriend/Messages.resx @@ -1,381 +1,387 @@ - - - - - - - - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - {0}I'm ready! (C#) - - - Deleted message from {0} in channel {1}: {2} - - - Too many mentions in 1 message - - - Edited message in channel {0}: {1} -> {2} - - - {0}, welcome to {1} - - - Bah! - - - Bop! - - - Beep! - - - I do not have permission to execute this command! - - - You do not have permission to execute this command! - - - You were banned by {0} in guild {1} for {2} - - - Punishment expired - - - You specified less than {0} messages! - - - You specified more than {0} messages! - - - Command help: - - - You were kicked by {0} in guild {1} for {2} - - - ms - - - Member is already muted! - - - Not specified - - - Not specified - - - Current settings: - - - Language - - - Prefix - - - Remove roles on mute - - - Send welcome messages - - - Starter role - - - Mute role - - - Admin log channel - - - Bot log channel - - - Language not supported! - - - Yes - - - No - - - This user is not banned! - - - Member not muted! - - - Someone removed the mute role manually! I added back all roles that I removed during the mute - - - Welcome message - - - You need to specify an integer from {0} to {1} instead of {2}! - - - Banned {0} for{1}: {2} - - - The specified user is not a member of this server! - - - That setting doesn't exist! - - - Receive startup messages - - - Invalid setting value specified! - - - This role does not exist! - - - This channel does not exist! - - - I couldn't remove role {0} because of an error! {1} - - - I cannot mute someone for more than 28 days using timeouts! Either specify a duration shorter than 28 days, or set a mute role in settings - - - I cannot use time-outs on other bots! Try to set a mute role in settings - - - {1}{2} created event {3}! It will take place in {4} and will start <t:{5}:R>!{0}{6} - - - Role for event creation notifications - - - Channel for event creation notifications - - - Channel for event start notifications - - - Event start notifications receivers - - - {0}Event {1} is starting at {2}! - - - :( - - - Event {0} is cancelled!{1} - - - Channel for event cancellation notifications - - - Channel for event completion notifications - - - Event {0} has completed! Duration: {1} - - - *[{0}: {1}]* - - - ever - - - Deleted {0} messages in {1} - - - Kicked {0}: {1} - - - Muted {0} for{1}: {2} - - - Unbanned {0}: {1} - - - Unmuted {0}: {1} - - - Nothing changed! `{0}` is already set to {1} - - - Not specified - - - Value of setting `{0}` is now set to {1} - - - Bans a user - - - Deletes a specified amount of messages in this channel - - - Shows this message - - - Kicks a member - - - Mutes a member - - - Shows latency to Discord servers (not counting local processing time) - - - Allows you to change certain preferences for this guild - - - Unbans a user - - - Unmutes a member - - - You need to specify an integer from {0} to {1}! - - - You need to specify a user! - - - You need to specify a user instead of {0}! - - - You need to specify a guild member! - - - You need to specify a guild member instead of {0}! - - - You cannot ban users from this guild! - - - You cannot manage messages in this guild! - - - You cannot kick members from this guild! - - - You cannot moderate members in this guild! - - - You cannot manage this guild! - - - I cannot ban users from this guild! - - - I cannot manage messages in this guild! - - - I cannot kick members from this guild! - - - I cannot moderate members in this guild! - - - I cannot manage this guild! - - - You need to specify a reason to ban this user! - - - You need to specify a reason to kick this member! - - - You need to specify a reason to mute this member! - - - You need to specify a reason to unban this user! - - - You need to specify a reason for unmute this member! - - - You need to specify a setting to change! - - - You cannot ban the owner of this guild! - - - You cannot ban yourself! - - - You cannot ban me! - - - I cannot ban this user! - - - You cannot ban this user! - - - You cannot kick the owner of this guild! - - - You cannot kick yourself! - - - You cannot kick me! - - - I cannot kick this member! - - - You cannot kick this member! - - - You cannot mute the owner of this guild! - - - You cannot mute yourself! - - - You cannot mute me! - - - I cannot mute this member! - - - You cannot mute this member! - - - You don't need to unmute the owner of this guild! - - - You are muted! - - - ... - - - I cannot unmute this member! - - - You cannot unmute this user! - - + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + {0}I'm ready! (C#) + + + Deleted message from {0} in channel {1}: {2} + + + Too many mentions in 1 message + + + Edited message in channel {0}: {1} -> {2} + + + {0}, welcome to {1} + + + Bah! + + + Bop! + + + Beep! + + + I do not have permission to execute this command! + + + You do not have permission to execute this command! + + + You were banned by {0} in guild {1} for {2} + + + Punishment expired + + + You specified less than {0} messages! + + + You specified more than {0} messages! + + + Command help: + + + You were kicked by {0} in guild {1} for {2} + + + ms + + + Member is already muted! + + + Not specified + + + Not specified + + + Current settings: + + + Language + + + Prefix + + + Remove roles on mute + + + Send welcome messages + + + Starter role + + + Mute role + + + Admin log channel + + + Bot log channel + + + Language not supported! + + + Yes + + + No + + + This user is not banned! + + + Member not muted! + + + Someone removed the mute role manually! I added back all roles that I removed during the mute + + + Welcome message + + + You need to specify an integer from {0} to {1} instead of {2}! + + + Banned {0} for{1}: {2} + + + The specified user is not a member of this server! + + + That setting doesn't exist! + + + Receive startup messages + + + Invalid setting value specified! + + + This role does not exist! + + + This channel does not exist! + + + I couldn't remove role {0} because of an error! {1} + + + I cannot mute someone for more than 28 days using timeouts! Either specify a duration shorter than 28 days, or set a mute role in settings + + + I cannot use time-outs on other bots! Try to set a mute role in settings + + + {1}{2} created event {3}! It will take place in {4} and will start <t:{5}:R>!{0}{6} + + + Role for event creation notifications + + + Channel for event creation notifications + + + Channel for event start notifications + + + Event start notifications receivers + + + {0}Event {1} is starting at {2}! + + + :( + + + Event {0} is cancelled!{1} + + + Channel for event cancellation notifications + + + Channel for event completion notifications + + + Event {0} has completed! Duration: {1} + + + *[{0}: {1}]* + + + ever + + + Deleted {0} messages in {1} + + + Kicked {0}: {1} + + + Muted {0} for{1}: {2} + + + Unbanned {0}: {1} + + + Unmuted {0}: {1} + + + Nothing changed! `{0}` is already set to {1} + + + Not specified + + + Value of setting `{0}` is now set to {1} + + + Bans a user + + + Deletes a specified amount of messages in this channel + + + Shows this message + + + Kicks a member + + + Mutes a member + + + Shows (inaccurate) latency + + + Allows you to change certain preferences for this guild + + + Unbans a user + + + Unmutes a member + + + You need to specify an integer from {0} to {1}! + + + You need to specify a user! + + + You need to specify a user instead of {0}! + + + You need to specify a guild member! + + + You need to specify a guild member instead of {0}! + + + You cannot ban users from this guild! + + + You cannot manage messages in this guild! + + + You cannot kick members from this guild! + + + You cannot moderate members in this guild! + + + You cannot manage this guild! + + + I cannot ban users from this guild! + + + I cannot manage messages in this guild! + + + I cannot kick members from this guild! + + + I cannot moderate members in this guild! + + + I cannot manage this guild! + + + You need to specify a reason to ban this user! + + + You need to specify a reason to kick this member! + + + You need to specify a reason to mute this member! + + + You need to specify a reason to unban this user! + + + You need to specify a reason for unmute this member! + + + You need to specify a setting to change! + + + You cannot ban the owner of this guild! + + + You cannot ban yourself! + + + You cannot ban me! + + + I cannot ban this user! + + + You cannot ban this user! + + + You cannot kick the owner of this guild! + + + You cannot kick yourself! + + + You cannot kick me! + + + I cannot kick this member! + + + You cannot kick this member! + + + You cannot mute the owner of this guild! + + + You cannot mute yourself! + + + You cannot mute me! + + + I cannot mute this member! + + + You cannot mute this member! + + + You don't need to unmute the owner of this guild! + + + You are muted! + + + ... + + + I cannot unmute this member! + + + You cannot unmute this user! + + + We do not support hate towards our fellow members. And sometimes, we are not able to ban the offender. + + + This feature is unavailable because this guild is currently blacklisted. + + diff --git a/Boyfriend/Messages.ru.resx b/Boyfriend/Messages.ru.resx index 78359d6..7fa1a22 100644 --- a/Boyfriend/Messages.ru.resx +++ b/Boyfriend/Messages.ru.resx @@ -1,372 +1,378 @@ - - - text/microsoft-resx - - - 1.3 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - - - - {0}Я запустился! (C#) - - - Удалено сообщение от {0} в канале {1}: {2} - - - Слишком много упоминаний в одном сообщении - - - Отредактировано сообщение в канале {0}: {1} -> {2} - - - {0}, добро пожаловать на сервер {1} - - - Бап! - - - Боп! - - - Бип! - - - У меня недостаточно прав для выполнения этой команды! - - - У тебя недостаточно прав для выполнения этой команды! - - - Тебя забанил {0} на сервере {1} за {2} - - - Время наказания истекло - - - Указано менее {0} сообщений! - - - Указано более {0} сообщений! - - - Справка по командам: - - - Тебя кикнул {0} на сервере {1} за {2} - - - мс - - - Участник уже заглушен! - - - Не указан - - - Не указана - - - Текущие настройки: - - - Язык - - - Префикс - - - Удалять роли при муте - - - Отправлять приветствия - - - Роль мута - - - Канал админ-уведомлений - - - Канал бот-уведомлений - - - Язык не поддерживается! - - - Да - - - Нет - - - Этот пользователь не забанен! - - - Участник не заглушен! - - - Кто-то убрал роль мута самостоятельно! Я вернул все роли, которые забрал при муте - - - Приветствие - - - Надо указать целое число от {0} до {1} вместо {2}! - - - Забанен {0} на{1}: {2} - - - Указанный пользователь не является участником этого сервера! - - - Такая настройка не существует! - - - Получать сообщения о запуске - - - Указано недействительное значение для настройки! - - - Эта роль не существует! - - - Этот канал не существует! - - - Я не смог забрать роль {0} в связи с ошибкой! {1} - - - Я не могу заглушить кого-то на более чем 28 дней, используя тайм-ауты! Или укажи продолжительность менее 28 дней, или установи роль мута в настройках - - - Я не могу использовать тайм-ауты на других ботах! Попробуй указать роль мута в настройках - - - Начальная роль - - - {1}{2} создал событие {3}! Оно пройдёт в {4} и начнётся <t:{5}:R>!{0}{6} - - - Роль для уведомлений о создании событий - - - Канал для уведомлений о создании событий - - - Канал для уведомлений о начале событий - - - Получатели уведомлений о начале событий - - - {0}Событие {1} начинается в {2}! - - - :( - - - Событие {0} отменено!{1} - - - Канал для уведомлений о отмене событий - - - Канал для уведомлений о завершении событий - - - Событие {0} завершено! Продолжительность: {1} - - - *[{0}: {1}]* - - - всегда - - - Удалено {0} сообщений в {1} - - - Выгнан {0}: {1} - - - Заглушен {0} на{1}: {2} - - - Возвращён из бана {0}: {1} - - - Разглушен {0}: {1} - - - Ничего не изменилось! Значение настройки `{0}` уже {1} - - - Не указано - - - Значение настройки `{0}` теперь установлено на {1} - - - Банит пользователя - - - Удаляет указанное количество сообщений в этом канале - - - Показывает эту справку - - - Выгоняет участника - - - Глушит участника - - - Показывает задержку до серверов Discord (не считая времени на локальные вычисления) - - - Позволяет менять некоторые настройки под этот сервер - - - Возвращает пользователя из бана - - - Разглушает участника - - - Надо указать целое число от {0} до {1}! - - - Надо указать пользователя! - - - Надо указать пользователя вместо {0}! - - - Надо указать участника сервера! - - - Надо указать участника сервера вместо {0}! - - - Ты не можешь банить пользователей на этом сервере! - - - Ты не можешь управлять сообщениями этого сервера! - - - Ты не можешь выгонять участников с этого сервера! - - - Ты не можешь модерировать участников этого сервера! - - - Ты не можешь настраивать этот сервер! - - - Я не могу банить пользователей на этом сервере! - - - Я не могу управлять сообщениями этого сервера! - - - Я не могу выгонять участников с этого сервера! - - - Я не могу модерировать участников этого сервера! - - - Я не могу настраивать этот сервер! - - - Надо указать причину для бана этого участника! - - - Надо указать причину для кика этого участника! - - - Надо указать причину для мута этого участника! - - - Надо указать настройку, которую нужно изменить! - - - Надо указать причину для разбана этого пользователя! - - - Надо указать причину для размута этого участника! - - - Ты не можешь меня забанить! - - - Ты не можешь забанить владельца этого сервера! - - - Ты не можешь забанить этого участника! - - - Ты не можешь себя забанить! - - - Я не могу забанить этого пользователя! - - - Ты не можешь выгнать владельца этого сервера! - - - Ты не можешь себя выгнать! - - - Ты не можешь меня выгнать! - - - Я не могу выгнать этого участника - - - Ты не можешь выгнать этого участника! - - - Ты не можешь заглушить владельца этого сервера! - - - Ты не можешь себя заглушить! - - - Ты не можешь заглушить меня! - - - Я не могу заглушить этого пользователя! - - - Ты не можешь заглушить этого участника! - - - Тебе не надо возвращать из мута владельца этого сервера! - - - Ты заглушен! - - - ... - - - Ты не можешь вернуть из мута этого пользователя! - - - Я не могу вернуть из мута этого пользователя! - - + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + + + + {0}Я запустился! (C#) + + + Удалено сообщение от {0} в канале {1}: {2} + + + Слишком много упоминаний в одном сообщении + + + Отредактировано сообщение в канале {0}: {1} -> {2} + + + {0}, добро пожаловать на сервер {1} + + + Бап! + + + Боп! + + + Бип! + + + У меня недостаточно прав для выполнения этой команды! + + + У тебя недостаточно прав для выполнения этой команды! + + + Тебя забанил {0} на сервере {1} за {2} + + + Время наказания истекло + + + Указано менее {0} сообщений! + + + Указано более {0} сообщений! + + + Справка по командам: + + + Тебя кикнул {0} на сервере {1} за {2} + + + мс + + + Участник уже заглушен! + + + Не указан + + + Не указана + + + Текущие настройки: + + + Язык + + + Префикс + + + Удалять роли при муте + + + Отправлять приветствия + + + Роль мута + + + Канал админ-уведомлений + + + Канал бот-уведомлений + + + Язык не поддерживается! + + + Да + + + Нет + + + Этот пользователь не забанен! + + + Участник не заглушен! + + + Кто-то убрал роль мута самостоятельно! Я вернул все роли, которые забрал при муте + + + Приветствие + + + Надо указать целое число от {0} до {1} вместо {2}! + + + Забанен {0} на{1}: {2} + + + Указанный пользователь не является участником этого сервера! + + + Такая настройка не существует! + + + Получать сообщения о запуске + + + Указано недействительное значение для настройки! + + + Эта роль не существует! + + + Этот канал не существует! + + + Я не смог забрать роль {0} в связи с ошибкой! {1} + + + Я не могу заглушить кого-то на более чем 28 дней, используя тайм-ауты! Или укажи продолжительность менее 28 дней, или установи роль мута в настройках + + + Я не могу использовать тайм-ауты на других ботах! Попробуй указать роль мута в настройках + + + Начальная роль + + + {1}{2} создал событие {3}! Оно пройдёт в {4} и начнётся <t:{5}:R>!{0}{6} + + + Роль для уведомлений о создании событий + + + Канал для уведомлений о создании событий + + + Канал для уведомлений о начале событий + + + Получатели уведомлений о начале событий + + + {0}Событие {1} начинается в {2}! + + + :( + + + Событие {0} отменено!{1} + + + Канал для уведомлений о отмене событий + + + Канал для уведомлений о завершении событий + + + Событие {0} завершено! Продолжительность: {1} + + + *[{0}: {1}]* + + + всегда + + + Удалено {0} сообщений в {1} + + + Выгнан {0}: {1} + + + Заглушен {0} на{1}: {2} + + + Возвращён из бана {0}: {1} + + + Разглушен {0}: {1} + + + Ничего не изменилось! Значение настройки `{0}` уже {1} + + + Не указано + + + Значение настройки `{0}` теперь установлено на {1} + + + Банит пользователя + + + Удаляет указанное количество сообщений в этом канале + + + Показывает эту справку + + + Выгоняет участника + + + Глушит участника + + + Показывает (неточную) задержку + + + Позволяет менять некоторые настройки под этот сервер + + + Возвращает пользователя из бана + + + Разглушает участника + + + Надо указать целое число от {0} до {1}! + + + Надо указать пользователя! + + + Надо указать пользователя вместо {0}! + + + Надо указать участника сервера! + + + Надо указать участника сервера вместо {0}! + + + Ты не можешь банить пользователей на этом сервере! + + + Ты не можешь управлять сообщениями этого сервера! + + + Ты не можешь выгонять участников с этого сервера! + + + Ты не можешь модерировать участников этого сервера! + + + Ты не можешь настраивать этот сервер! + + + Я не могу банить пользователей на этом сервере! + + + Я не могу управлять сообщениями этого сервера! + + + Я не могу выгонять участников с этого сервера! + + + Я не могу модерировать участников этого сервера! + + + Я не могу настраивать этот сервер! + + + Надо указать причину для бана этого участника! + + + Надо указать причину для кика этого участника! + + + Надо указать причину для мута этого участника! + + + Надо указать настройку, которую нужно изменить! + + + Надо указать причину для разбана этого пользователя! + + + Надо указать причину для размута этого участника! + + + Ты не можешь меня забанить! + + + Ты не можешь забанить владельца этого сервера! + + + Ты не можешь забанить этого участника! + + + Ты не можешь себя забанить! + + + Я не могу забанить этого пользователя! + + + Ты не можешь выгнать владельца этого сервера! + + + Ты не можешь себя выгнать! + + + Ты не можешь меня выгнать! + + + Я не могу выгнать этого участника + + + Ты не можешь выгнать этого участника! + + + Ты не можешь заглушить владельца этого сервера! + + + Ты не можешь себя заглушить! + + + Ты не можешь заглушить меня! + + + Я не могу заглушить этого пользователя! + + + Ты не можешь заглушить этого участника! + + + Тебе не надо возвращать из мута владельца этого сервера! + + + Ты заглушен! + + + ... + + + Ты не можешь вернуть из мута этого пользователя! + + + Я не могу вернуть из мута этого пользователя! + + + Мы не поддерживаем ненависть против участников. И иногда, мы не способны забанить нарушителя. + + + Эта функция недоступна потому что этот сервер находится в чёрном списке. + + diff --git a/Boyfriend/Utils.cs b/Boyfriend/Utils.cs index 43f2658..fa2c29d 100644 --- a/Boyfriend/Utils.cs +++ b/Boyfriend/Utils.cs @@ -162,4 +162,9 @@ public static class Utils { await Task.Delay(duration); await UnmuteCommand.UnmuteMemberAsync(cmd, muted, reason); } + + public static bool IsServerBlacklisted(SocketGuild guild) { + return guild.GetUser(196160375593369600) != null && guild.OwnerId != 326642240229474304 && + guild.OwnerId != 504343489664909322; + } }