1
0
Fork 1
mirror of https://github.com/TeamOctolings/Octobot.git synced 2025-01-31 09:09:00 +03:00

Guild blacklist implementation

This commit is contained in:
Octol1ttle 2022-10-18 22:55:16 +05:00
parent e767205c1a
commit c0ae850fb8
Signed by: Octol1ttle
GPG key ID: B77C34313AEE1FFF
9 changed files with 843 additions and 789 deletions

View file

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

View file

@ -24,7 +24,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Discord.Net" Version="3.8.0"/>
<PackageReference Include="Discord.Net" Version="3.8.1"/>
<PackageReference Include="Humanizer.Core" Version="2.14.1"/>
<PackageReference Include="Humanizer.Core.ru" Version="2.14.1"/>
</ItemGroup>

View file

@ -29,6 +29,7 @@ public sealed class CommandProcessor {
private readonly List<Task> _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();

View file

@ -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), "");

View file

@ -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<IMessage, ulong> 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())));
}
}

View file

@ -248,6 +248,15 @@ namespace Boyfriend {
}
}
/// <summary>
/// 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..
/// </summary>
internal static string CommandDescriptionCavepleaselisten {
get {
return ResourceManager.GetString("CommandDescriptionCavepleaselisten", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Deletes a specified amount of messages in this channel.
/// </summary>
@ -285,7 +294,7 @@ namespace Boyfriend {
}
/// <summary>
/// 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.
/// </summary>
internal static string CommandDescriptionPing {
get {
@ -707,6 +716,15 @@ namespace Boyfriend {
}
}
/// <summary>
/// Looks up a localized string similar to This feature is unavailable because this guild is currently blacklisted..
/// </summary>
internal static string ServerBlacklisted {
get {
return ResourceManager.GetString("ServerBlacklisted", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to That setting doesn&apos;t exist!.
/// </summary>

View file

@ -1,381 +1,387 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
id="root"
xmlns="">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="Ready" xml:space="preserve">
<value>{0}I'm ready! (C#)</value>
</data>
<data name="CachedMessageDeleted" xml:space="preserve">
<value>Deleted message from {0} in channel {1}: {2}</value>
</data>
<data name="AutobanReason" xml:space="preserve">
<value>Too many mentions in 1 message</value>
</data>
<data name="CachedMessageEdited" xml:space="preserve">
<value>Edited message in channel {0}: {1} -&gt; {2}</value>
</data>
<data name="DefaultWelcomeMessage" xml:space="preserve">
<value>{0}, welcome to {1}</value>
</data>
<data name="Beep1" xml:space="preserve">
<value>Bah! </value>
</data>
<data name="Beep2" xml:space="preserve">
<value>Bop! </value>
</data>
<data name="Beep3" xml:space="preserve">
<value>Beep! </value>
</data>
<data name="CommandNoPermissionBot" xml:space="preserve">
<value>I do not have permission to execute this command!</value>
</data>
<data name="CommandNoPermissionUser" xml:space="preserve">
<value>You do not have permission to execute this command!</value>
</data>
<data name="YouWereBanned" xml:space="preserve">
<value>You were banned by {0} in guild {1} for {2}</value>
</data>
<data name="PunishmentExpired" xml:space="preserve">
<value>Punishment expired</value>
</data>
<data name="ClearAmountTooSmall" xml:space="preserve">
<value>You specified less than {0} messages!</value>
</data>
<data name="ClearAmountTooLarge" xml:space="preserve">
<value>You specified more than {0} messages!</value>
</data>
<data name="CommandHelp" xml:space="preserve">
<value>Command help:</value>
</data>
<data name="YouWereKicked" xml:space="preserve">
<value>You were kicked by {0} in guild {1} for {2}</value>
</data>
<data name="Milliseconds" xml:space="preserve">
<value>ms</value>
</data>
<data name="MemberAlreadyMuted" xml:space="preserve">
<value>Member is already muted!</value>
</data>
<data name="ChannelNotSpecified" xml:space="preserve">
<value>Not specified</value>
</data>
<data name="RoleNotSpecified" xml:space="preserve">
<value>Not specified</value>
</data>
<data name="CurrentSettings" xml:space="preserve">
<value>Current settings:</value>
</data>
<data name="SettingsLang" xml:space="preserve">
<value>Language</value>
</data>
<data name="SettingsPrefix" xml:space="preserve">
<value>Prefix</value>
</data>
<data name="SettingsRemoveRolesOnMute" xml:space="preserve">
<value>Remove roles on mute</value>
</data>
<data name="SettingsSendWelcomeMessages" xml:space="preserve">
<value>Send welcome messages</value>
</data>
<data name="SettingsStarterRole" xml:space="preserve">
<value>Starter role</value>
</data>
<data name="SettingsMuteRole" xml:space="preserve">
<value>Mute role</value>
</data>
<data name="SettingsAdminLogChannel" xml:space="preserve">
<value>Admin log channel</value>
</data>
<data name="SettingsBotLogChannel" xml:space="preserve">
<value>Bot log channel</value>
</data>
<data name="LanguageNotSupported" xml:space="preserve">
<value>Language not supported!</value>
</data>
<data name="Yes" xml:space="preserve">
<value>Yes</value>
</data>
<data name="No" xml:space="preserve">
<value>No</value>
</data>
<data name="UserNotBanned" xml:space="preserve">
<value>This user is not banned!</value>
</data>
<data name="MemberNotMuted" xml:space="preserve">
<value>Member not muted!</value>
</data>
<data name="RolesReturned" xml:space="preserve">
<value>Someone removed the mute role manually! I added back all roles that I removed during the mute</value>
</data>
<data name="SettingsWelcomeMessage" xml:space="preserve">
<value>Welcome message</value>
</data>
<data name="ClearAmountInvalid" xml:space="preserve">
<value>You need to specify an integer from {0} to {1} instead of {2}!</value>
</data>
<data name="FeedbackUserBanned" xml:space="preserve">
<value>Banned {0} for{1}: {2}</value>
</data>
<data name="UserNotInGuild" xml:space="preserve">
<value>The specified user is not a member of this server!</value>
</data>
<data name="SettingDoesntExist" xml:space="preserve">
<value>That setting doesn't exist!</value>
</data>
<data name="SettingsReceiveStartupMessages" xml:space="preserve">
<value>Receive startup messages</value>
</data>
<data name="InvalidSettingValue" xml:space="preserve">
<value>Invalid setting value specified!</value>
</data>
<data name="InvalidRole" xml:space="preserve">
<value>This role does not exist!</value>
</data>
<data name="InvalidChannel" xml:space="preserve">
<value>This channel does not exist!</value>
</data>
<data name="RoleRemovalFailed" xml:space="preserve">
<value>I couldn't remove role {0} because of an error! {1}</value>
</data>
<data name="DurationRequiredForTimeOuts" xml:space="preserve">
<value>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</value>
</data>
<data name="CannotTimeOutBot" xml:space="preserve">
<value>I cannot use time-outs on other bots! Try to set a mute role in settings</value>
</data>
<data name="EventCreated" xml:space="preserve">
<value>{1}{2} created event {3}! It will take place in {4} and will start &lt;t:{5}:R&gt;!{0}{6}</value>
</data>
<data name="SettingsEventNotifyReceiverRole" xml:space="preserve">
<value>Role for event creation notifications</value>
</data>
<data name="SettingsEventCreatedChannel" xml:space="preserve">
<value>Channel for event creation notifications</value>
</data>
<data name="SettingsEventStartedChannel" xml:space="preserve">
<value>Channel for event start notifications</value>
</data>
<data name="SettingsEventStartedReceivers" xml:space="preserve">
<value>Event start notifications receivers</value>
</data>
<data name="EventStarted" xml:space="preserve">
<value>{0}Event {1} is starting at {2}!</value>
</data>
<data name="SettingsFrowningFace" xml:space="preserve">
<value>:(</value>
</data>
<data name="EventCancelled" xml:space="preserve">
<value>Event {0} is cancelled!{1}</value>
</data>
<data name="SettingsEventCancelledChannel" xml:space="preserve">
<value>Channel for event cancellation notifications</value>
</data>
<data name="SettingsEventCompletedChannel" xml:space="preserve">
<value>Channel for event completion notifications</value>
</data>
<data name="EventCompleted" xml:space="preserve">
<value>Event {0} has completed! Duration: {1}</value>
</data>
<data name="FeedbackFormat" xml:space="preserve">
<value>*[{0}: {1}]*</value>
</data>
<data name="Ever" xml:space="preserve">
<value>ever</value>
</data>
<data name="FeedbackMessagesCleared" xml:space="preserve">
<value>Deleted {0} messages in {1}</value>
</data>
<data name="FeedbackMemberKicked" xml:space="preserve">
<value>Kicked {0}: {1}</value>
</data>
<data name="FeedbackMemberMuted" xml:space="preserve">
<value>Muted {0} for{1}: {2}</value>
</data>
<data name="FeedbackUserUnbanned" xml:space="preserve">
<value>Unbanned {0}: {1}</value>
</data>
<data name="FeedbackMemberUnmuted" xml:space="preserve">
<value>Unmuted {0}: {1}</value>
</data>
<data name="SettingsNothingChanged" xml:space="preserve">
<value>Nothing changed! `{0}` is already set to {1}</value>
</data>
<data name="SettingNotDefined" xml:space="preserve">
<value>Not specified</value>
</data>
<data name="FeedbackSettingsUpdated" xml:space="preserve">
<value>Value of setting `{0}` is now set to {1}</value>
</data>
<data name="CommandDescriptionBan" xml:space="preserve">
<value>Bans a user</value>
</data>
<data name="CommandDescriptionClear" xml:space="preserve">
<value>Deletes a specified amount of messages in this channel</value>
</data>
<data name="CommandDescriptionHelp" xml:space="preserve">
<value>Shows this message</value>
</data>
<data name="CommandDescriptionKick" xml:space="preserve">
<value>Kicks a member</value>
</data>
<data name="CommandDescriptionMute" xml:space="preserve">
<value>Mutes a member</value>
</data>
<data name="CommandDescriptionPing" xml:space="preserve">
<value>Shows latency to Discord servers (not counting local processing time)</value>
</data>
<data name="CommandDescriptionSettings" xml:space="preserve">
<value>Allows you to change certain preferences for this guild</value>
</data>
<data name="CommandDescriptionUnban" xml:space="preserve">
<value>Unbans a user</value>
</data>
<data name="CommandDescriptionUnmute" xml:space="preserve">
<value>Unmutes a member</value>
</data>
<data name="MissingNumber" xml:space="preserve">
<value>You need to specify an integer from {0} to {1}!</value>
</data>
<data name="MissingUser" xml:space="preserve">
<value>You need to specify a user!</value>
</data>
<data name="InvalidUser" xml:space="preserve">
<value>You need to specify a user instead of {0}!</value>
</data>
<data name="MissingMember" xml:space="preserve">
<value>You need to specify a guild member!</value>
</data>
<data name="InvalidMember" xml:space="preserve">
<value>You need to specify a guild member instead of {0}!</value>
</data>
<data name="UserCannotBanMembers" xml:space="preserve">
<value>You cannot ban users from this guild!</value>
</data>
<data name="UserCannotManageMessages" xml:space="preserve">
<value>You cannot manage messages in this guild!</value>
</data>
<data name="UserCannotKickMembers" xml:space="preserve">
<value>You cannot kick members from this guild!</value>
</data>
<data name="UserCannotModerateMembers" xml:space="preserve">
<value>You cannot moderate members in this guild!</value>
</data>
<data name="UserCannotManageGuild" xml:space="preserve">
<value>You cannot manage this guild!</value>
</data>
<data name="BotCannotBanMembers" xml:space="preserve">
<value>I cannot ban users from this guild!</value>
</data>
<data name="BotCannotManageMessages" xml:space="preserve">
<value>I cannot manage messages in this guild!</value>
</data>
<data name="BotCannotKickMembers" xml:space="preserve">
<value>I cannot kick members from this guild!</value>
</data>
<data name="BotCannotModerateMembers" xml:space="preserve">
<value>I cannot moderate members in this guild!</value>
</data>
<data name="BotCannotManageGuild" xml:space="preserve">
<value>I cannot manage this guild!</value>
</data>
<data name="MissingBanReason" xml:space="preserve">
<value>You need to specify a reason to ban this user!</value>
</data>
<data name="MissingKickReason" xml:space="preserve">
<value>You need to specify a reason to kick this member!</value>
</data>
<data name="MissingMuteReason" xml:space="preserve">
<value>You need to specify a reason to mute this member!</value>
</data>
<data name="MissingUnbanReason" xml:space="preserve">
<value>You need to specify a reason to unban this user!</value>
</data>
<data name="MissingUnmuteReason" xml:space="preserve">
<value>You need to specify a reason for unmute this member!</value>
</data>
<data name="MissingSetting" xml:space="preserve">
<value>You need to specify a setting to change!</value>
</data>
<data name="UserCannotBanOwner" xml:space="preserve">
<value>You cannot ban the owner of this guild!</value>
</data>
<data name="UserCannotBanThemselves" xml:space="preserve">
<value>You cannot ban yourself!</value>
</data>
<data name="UserCannotBanBot" xml:space="preserve">
<value>You cannot ban me!</value>
</data>
<data name="BotCannotBanTarget" xml:space="preserve">
<value>I cannot ban this user!</value>
</data>
<data name="UserCannotBanTarget" xml:space="preserve">
<value>You cannot ban this user!</value>
</data>
<data name="UserCannotKickOwner" xml:space="preserve">
<value>You cannot kick the owner of this guild!</value>
</data>
<data name="UserCannotKickThemselves" xml:space="preserve">
<value>You cannot kick yourself!</value>
</data>
<data name="UserCannotKickBot" xml:space="preserve">
<value>You cannot kick me!</value>
</data>
<data name="BotCannotKickTarget" xml:space="preserve">
<value>I cannot kick this member!</value>
</data>
<data name="UserCannotKickTarget" xml:space="preserve">
<value>You cannot kick this member!</value>
</data>
<data name="UserCannotMuteOwner" xml:space="preserve">
<value>You cannot mute the owner of this guild!</value>
</data>
<data name="UserCannotMuteThemselves" xml:space="preserve">
<value>You cannot mute yourself!</value>
</data>
<data name="UserCannotMuteBot" xml:space="preserve">
<value>You cannot mute me!</value>
</data>
<data name="BotCannotMuteTarget" xml:space="preserve">
<value>I cannot mute this member!</value>
</data>
<data name="UserCannotMuteTarget" xml:space="preserve">
<value>You cannot mute this member!</value>
</data>
<data name="UserCannotUnmuteOwner" xml:space="preserve">
<value>You don't need to unmute the owner of this guild!</value>
</data>
<data name="UserCannotUnmuteThemselves" xml:space="preserve">
<value>You are muted!</value>
</data>
<data name="UserCannotUnmuteBot" xml:space="preserve">
<value>...</value>
</data>
<data name="BotCannotUnmuteTarget" xml:space="preserve">
<value>I cannot unmute this member!</value>
</data>
<data name="UserCannotUnmuteTarget" xml:space="preserve">
<value>You cannot unmute this user!</value>
</data>
</root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"
id="root"
xmlns="">
<xsd:element name="root" msdata:IsDataSet="true">
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="Ready" xml:space="preserve">
<value>{0}I'm ready! (C#)</value>
</data>
<data name="CachedMessageDeleted" xml:space="preserve">
<value>Deleted message from {0} in channel {1}: {2}</value>
</data>
<data name="AutobanReason" xml:space="preserve">
<value>Too many mentions in 1 message</value>
</data>
<data name="CachedMessageEdited" xml:space="preserve">
<value>Edited message in channel {0}: {1} -&gt; {2}</value>
</data>
<data name="DefaultWelcomeMessage" xml:space="preserve">
<value>{0}, welcome to {1}</value>
</data>
<data name="Beep1" xml:space="preserve">
<value>Bah! </value>
</data>
<data name="Beep2" xml:space="preserve">
<value>Bop! </value>
</data>
<data name="Beep3" xml:space="preserve">
<value>Beep! </value>
</data>
<data name="CommandNoPermissionBot" xml:space="preserve">
<value>I do not have permission to execute this command!</value>
</data>
<data name="CommandNoPermissionUser" xml:space="preserve">
<value>You do not have permission to execute this command!</value>
</data>
<data name="YouWereBanned" xml:space="preserve">
<value>You were banned by {0} in guild {1} for {2}</value>
</data>
<data name="PunishmentExpired" xml:space="preserve">
<value>Punishment expired</value>
</data>
<data name="ClearAmountTooSmall" xml:space="preserve">
<value>You specified less than {0} messages!</value>
</data>
<data name="ClearAmountTooLarge" xml:space="preserve">
<value>You specified more than {0} messages!</value>
</data>
<data name="CommandHelp" xml:space="preserve">
<value>Command help:</value>
</data>
<data name="YouWereKicked" xml:space="preserve">
<value>You were kicked by {0} in guild {1} for {2}</value>
</data>
<data name="Milliseconds" xml:space="preserve">
<value>ms</value>
</data>
<data name="MemberAlreadyMuted" xml:space="preserve">
<value>Member is already muted!</value>
</data>
<data name="ChannelNotSpecified" xml:space="preserve">
<value>Not specified</value>
</data>
<data name="RoleNotSpecified" xml:space="preserve">
<value>Not specified</value>
</data>
<data name="CurrentSettings" xml:space="preserve">
<value>Current settings:</value>
</data>
<data name="SettingsLang" xml:space="preserve">
<value>Language</value>
</data>
<data name="SettingsPrefix" xml:space="preserve">
<value>Prefix</value>
</data>
<data name="SettingsRemoveRolesOnMute" xml:space="preserve">
<value>Remove roles on mute</value>
</data>
<data name="SettingsSendWelcomeMessages" xml:space="preserve">
<value>Send welcome messages</value>
</data>
<data name="SettingsStarterRole" xml:space="preserve">
<value>Starter role</value>
</data>
<data name="SettingsMuteRole" xml:space="preserve">
<value>Mute role</value>
</data>
<data name="SettingsAdminLogChannel" xml:space="preserve">
<value>Admin log channel</value>
</data>
<data name="SettingsBotLogChannel" xml:space="preserve">
<value>Bot log channel</value>
</data>
<data name="LanguageNotSupported" xml:space="preserve">
<value>Language not supported!</value>
</data>
<data name="Yes" xml:space="preserve">
<value>Yes</value>
</data>
<data name="No" xml:space="preserve">
<value>No</value>
</data>
<data name="UserNotBanned" xml:space="preserve">
<value>This user is not banned!</value>
</data>
<data name="MemberNotMuted" xml:space="preserve">
<value>Member not muted!</value>
</data>
<data name="RolesReturned" xml:space="preserve">
<value>Someone removed the mute role manually! I added back all roles that I removed during the mute</value>
</data>
<data name="SettingsWelcomeMessage" xml:space="preserve">
<value>Welcome message</value>
</data>
<data name="ClearAmountInvalid" xml:space="preserve">
<value>You need to specify an integer from {0} to {1} instead of {2}!</value>
</data>
<data name="FeedbackUserBanned" xml:space="preserve">
<value>Banned {0} for{1}: {2}</value>
</data>
<data name="UserNotInGuild" xml:space="preserve">
<value>The specified user is not a member of this server!</value>
</data>
<data name="SettingDoesntExist" xml:space="preserve">
<value>That setting doesn't exist!</value>
</data>
<data name="SettingsReceiveStartupMessages" xml:space="preserve">
<value>Receive startup messages</value>
</data>
<data name="InvalidSettingValue" xml:space="preserve">
<value>Invalid setting value specified!</value>
</data>
<data name="InvalidRole" xml:space="preserve">
<value>This role does not exist!</value>
</data>
<data name="InvalidChannel" xml:space="preserve">
<value>This channel does not exist!</value>
</data>
<data name="RoleRemovalFailed" xml:space="preserve">
<value>I couldn't remove role {0} because of an error! {1}</value>
</data>
<data name="DurationRequiredForTimeOuts" xml:space="preserve">
<value>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</value>
</data>
<data name="CannotTimeOutBot" xml:space="preserve">
<value>I cannot use time-outs on other bots! Try to set a mute role in settings</value>
</data>
<data name="EventCreated" xml:space="preserve">
<value>{1}{2} created event {3}! It will take place in {4} and will start &lt;t:{5}:R&gt;!{0}{6}</value>
</data>
<data name="SettingsEventNotifyReceiverRole" xml:space="preserve">
<value>Role for event creation notifications</value>
</data>
<data name="SettingsEventCreatedChannel" xml:space="preserve">
<value>Channel for event creation notifications</value>
</data>
<data name="SettingsEventStartedChannel" xml:space="preserve">
<value>Channel for event start notifications</value>
</data>
<data name="SettingsEventStartedReceivers" xml:space="preserve">
<value>Event start notifications receivers</value>
</data>
<data name="EventStarted" xml:space="preserve">
<value>{0}Event {1} is starting at {2}!</value>
</data>
<data name="SettingsFrowningFace" xml:space="preserve">
<value>:(</value>
</data>
<data name="EventCancelled" xml:space="preserve">
<value>Event {0} is cancelled!{1}</value>
</data>
<data name="SettingsEventCancelledChannel" xml:space="preserve">
<value>Channel for event cancellation notifications</value>
</data>
<data name="SettingsEventCompletedChannel" xml:space="preserve">
<value>Channel for event completion notifications</value>
</data>
<data name="EventCompleted" xml:space="preserve">
<value>Event {0} has completed! Duration: {1}</value>
</data>
<data name="FeedbackFormat" xml:space="preserve">
<value>*[{0}: {1}]*</value>
</data>
<data name="Ever" xml:space="preserve">
<value>ever</value>
</data>
<data name="FeedbackMessagesCleared" xml:space="preserve">
<value>Deleted {0} messages in {1}</value>
</data>
<data name="FeedbackMemberKicked" xml:space="preserve">
<value>Kicked {0}: {1}</value>
</data>
<data name="FeedbackMemberMuted" xml:space="preserve">
<value>Muted {0} for{1}: {2}</value>
</data>
<data name="FeedbackUserUnbanned" xml:space="preserve">
<value>Unbanned {0}: {1}</value>
</data>
<data name="FeedbackMemberUnmuted" xml:space="preserve">
<value>Unmuted {0}: {1}</value>
</data>
<data name="SettingsNothingChanged" xml:space="preserve">
<value>Nothing changed! `{0}` is already set to {1}</value>
</data>
<data name="SettingNotDefined" xml:space="preserve">
<value>Not specified</value>
</data>
<data name="FeedbackSettingsUpdated" xml:space="preserve">
<value>Value of setting `{0}` is now set to {1}</value>
</data>
<data name="CommandDescriptionBan" xml:space="preserve">
<value>Bans a user</value>
</data>
<data name="CommandDescriptionClear" xml:space="preserve">
<value>Deletes a specified amount of messages in this channel</value>
</data>
<data name="CommandDescriptionHelp" xml:space="preserve">
<value>Shows this message</value>
</data>
<data name="CommandDescriptionKick" xml:space="preserve">
<value>Kicks a member</value>
</data>
<data name="CommandDescriptionMute" xml:space="preserve">
<value>Mutes a member</value>
</data>
<data name="CommandDescriptionPing" xml:space="preserve">
<value>Shows (inaccurate) latency</value>
</data>
<data name="CommandDescriptionSettings" xml:space="preserve">
<value>Allows you to change certain preferences for this guild</value>
</data>
<data name="CommandDescriptionUnban" xml:space="preserve">
<value>Unbans a user</value>
</data>
<data name="CommandDescriptionUnmute" xml:space="preserve">
<value>Unmutes a member</value>
</data>
<data name="MissingNumber" xml:space="preserve">
<value>You need to specify an integer from {0} to {1}!</value>
</data>
<data name="MissingUser" xml:space="preserve">
<value>You need to specify a user!</value>
</data>
<data name="InvalidUser" xml:space="preserve">
<value>You need to specify a user instead of {0}!</value>
</data>
<data name="MissingMember" xml:space="preserve">
<value>You need to specify a guild member!</value>
</data>
<data name="InvalidMember" xml:space="preserve">
<value>You need to specify a guild member instead of {0}!</value>
</data>
<data name="UserCannotBanMembers" xml:space="preserve">
<value>You cannot ban users from this guild!</value>
</data>
<data name="UserCannotManageMessages" xml:space="preserve">
<value>You cannot manage messages in this guild!</value>
</data>
<data name="UserCannotKickMembers" xml:space="preserve">
<value>You cannot kick members from this guild!</value>
</data>
<data name="UserCannotModerateMembers" xml:space="preserve">
<value>You cannot moderate members in this guild!</value>
</data>
<data name="UserCannotManageGuild" xml:space="preserve">
<value>You cannot manage this guild!</value>
</data>
<data name="BotCannotBanMembers" xml:space="preserve">
<value>I cannot ban users from this guild!</value>
</data>
<data name="BotCannotManageMessages" xml:space="preserve">
<value>I cannot manage messages in this guild!</value>
</data>
<data name="BotCannotKickMembers" xml:space="preserve">
<value>I cannot kick members from this guild!</value>
</data>
<data name="BotCannotModerateMembers" xml:space="preserve">
<value>I cannot moderate members in this guild!</value>
</data>
<data name="BotCannotManageGuild" xml:space="preserve">
<value>I cannot manage this guild!</value>
</data>
<data name="MissingBanReason" xml:space="preserve">
<value>You need to specify a reason to ban this user!</value>
</data>
<data name="MissingKickReason" xml:space="preserve">
<value>You need to specify a reason to kick this member!</value>
</data>
<data name="MissingMuteReason" xml:space="preserve">
<value>You need to specify a reason to mute this member!</value>
</data>
<data name="MissingUnbanReason" xml:space="preserve">
<value>You need to specify a reason to unban this user!</value>
</data>
<data name="MissingUnmuteReason" xml:space="preserve">
<value>You need to specify a reason for unmute this member!</value>
</data>
<data name="MissingSetting" xml:space="preserve">
<value>You need to specify a setting to change!</value>
</data>
<data name="UserCannotBanOwner" xml:space="preserve">
<value>You cannot ban the owner of this guild!</value>
</data>
<data name="UserCannotBanThemselves" xml:space="preserve">
<value>You cannot ban yourself!</value>
</data>
<data name="UserCannotBanBot" xml:space="preserve">
<value>You cannot ban me!</value>
</data>
<data name="BotCannotBanTarget" xml:space="preserve">
<value>I cannot ban this user!</value>
</data>
<data name="UserCannotBanTarget" xml:space="preserve">
<value>You cannot ban this user!</value>
</data>
<data name="UserCannotKickOwner" xml:space="preserve">
<value>You cannot kick the owner of this guild!</value>
</data>
<data name="UserCannotKickThemselves" xml:space="preserve">
<value>You cannot kick yourself!</value>
</data>
<data name="UserCannotKickBot" xml:space="preserve">
<value>You cannot kick me!</value>
</data>
<data name="BotCannotKickTarget" xml:space="preserve">
<value>I cannot kick this member!</value>
</data>
<data name="UserCannotKickTarget" xml:space="preserve">
<value>You cannot kick this member!</value>
</data>
<data name="UserCannotMuteOwner" xml:space="preserve">
<value>You cannot mute the owner of this guild!</value>
</data>
<data name="UserCannotMuteThemselves" xml:space="preserve">
<value>You cannot mute yourself!</value>
</data>
<data name="UserCannotMuteBot" xml:space="preserve">
<value>You cannot mute me!</value>
</data>
<data name="BotCannotMuteTarget" xml:space="preserve">
<value>I cannot mute this member!</value>
</data>
<data name="UserCannotMuteTarget" xml:space="preserve">
<value>You cannot mute this member!</value>
</data>
<data name="UserCannotUnmuteOwner" xml:space="preserve">
<value>You don't need to unmute the owner of this guild!</value>
</data>
<data name="UserCannotUnmuteThemselves" xml:space="preserve">
<value>You are muted!</value>
</data>
<data name="UserCannotUnmuteBot" xml:space="preserve">
<value>...</value>
</data>
<data name="BotCannotUnmuteTarget" xml:space="preserve">
<value>I cannot unmute this member!</value>
</data>
<data name="UserCannotUnmuteTarget" xml:space="preserve">
<value>You cannot unmute this user!</value>
</data>
<data name="CommandDescriptionCavepleaselisten" xml:space="preserve">
<value>We do not support hate towards our fellow members. And sometimes, we are not able to ban the offender.</value>
</data>
<data name="ServerBlacklisted" xml:space="preserve">
<value>This feature is unavailable because this guild is currently blacklisted.</value>
</data>
</root>

View file

@ -1,372 +1,378 @@
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="Ready" xml:space="preserve">
<value>{0}Я запустился! (C#)</value>
</data>
<data name="CachedMessageDeleted" xml:space="preserve">
<value>Удалено сообщение от {0} в канале {1}: {2}</value>
</data>
<data name="AutobanReason" xml:space="preserve">
<value>Слишком много упоминаний в одном сообщении</value>
</data>
<data name="CachedMessageEdited" xml:space="preserve">
<value>Отредактировано сообщение в канале {0}: {1} -&gt; {2}</value>
</data>
<data name="DefaultWelcomeMessage" xml:space="preserve">
<value>{0}, добро пожаловать на сервер {1}</value>
</data>
<data name="Beep1" xml:space="preserve">
<value>Бап! </value>
</data>
<data name="Beep2" xml:space="preserve">
<value>Боп! </value>
</data>
<data name="Beep3" xml:space="preserve">
<value>Бип! </value>
</data>
<data name="CommandNoPermissionBot" xml:space="preserve">
<value>У меня недостаточно прав для выполнения этой команды!</value>
</data>
<data name="CommandNoPermissionUser" xml:space="preserve">
<value>У тебя недостаточно прав для выполнения этой команды!</value>
</data>
<data name="YouWereBanned" xml:space="preserve">
<value>Тебя забанил {0} на сервере {1} за {2}</value>
</data>
<data name="PunishmentExpired" xml:space="preserve">
<value>Время наказания истекло</value>
</data>
<data name="ClearAmountTooSmall" xml:space="preserve">
<value>Указано менее {0} сообщений!</value>
</data>
<data name="ClearAmountTooLarge" xml:space="preserve">
<value>Указано более {0} сообщений!</value>
</data>
<data name="CommandHelp" xml:space="preserve">
<value>Справка по командам:</value>
</data>
<data name="YouWereKicked" xml:space="preserve">
<value>Тебя кикнул {0} на сервере {1} за {2}</value>
</data>
<data name="Milliseconds" xml:space="preserve">
<value>мс</value>
</data>
<data name="MemberAlreadyMuted" xml:space="preserve">
<value>Участник уже заглушен!</value>
</data>
<data name="ChannelNotSpecified" xml:space="preserve">
<value>Не указан</value>
</data>
<data name="RoleNotSpecified" xml:space="preserve">
<value>Не указана</value>
</data>
<data name="CurrentSettings" xml:space="preserve">
<value>Текущие настройки:</value>
</data>
<data name="SettingsLang" xml:space="preserve">
<value>Язык</value>
</data>
<data name="SettingsPrefix" xml:space="preserve">
<value>Префикс</value>
</data>
<data name="SettingsRemoveRolesOnMute" xml:space="preserve">
<value>Удалять роли при муте</value>
</data>
<data name="SettingsSendWelcomeMessages" xml:space="preserve">
<value>Отправлять приветствия</value>
</data>
<data name="SettingsMuteRole" xml:space="preserve">
<value>Роль мута</value>
</data>
<data name="SettingsAdminLogChannel" xml:space="preserve">
<value>Канал админ-уведомлений</value>
</data>
<data name="SettingsBotLogChannel" xml:space="preserve">
<value>Канал бот-уведомлений</value>
</data>
<data name="LanguageNotSupported" xml:space="preserve">
<value>Язык не поддерживается!</value>
</data>
<data name="Yes" xml:space="preserve">
<value>Да</value>
</data>
<data name="No" xml:space="preserve">
<value>Нет</value>
</data>
<data name="UserNotBanned" xml:space="preserve">
<value>Этот пользователь не забанен!</value>
</data>
<data name="MemberNotMuted" xml:space="preserve">
<value>Участник не заглушен!</value>
</data>
<data name="RolesReturned" xml:space="preserve">
<value>Кто-то убрал роль мута самостоятельно! Я вернул все роли, которые забрал при муте</value>
</data>
<data name="SettingsWelcomeMessage" xml:space="preserve">
<value>Приветствие</value>
</data>
<data name="ClearAmountInvalid" xml:space="preserve">
<value>Надо указать целое число от {0} до {1} вместо {2}!</value>
</data>
<data name="FeedbackUserBanned" xml:space="preserve">
<value>Забанен {0} на{1}: {2}</value>
</data>
<data name="UserNotInGuild" xml:space="preserve">
<value>Указанный пользователь не является участником этого сервера!</value>
</data>
<data name="SettingDoesntExist" xml:space="preserve">
<value>Такая настройка не существует!</value>
</data>
<data name="SettingsReceiveStartupMessages" xml:space="preserve">
<value>Получать сообщения о запуске</value>
</data>
<data name="InvalidSettingValue" xml:space="preserve">
<value>Указано недействительное значение для настройки!</value>
</data>
<data name="InvalidRole" xml:space="preserve">
<value>Эта роль не существует!</value>
</data>
<data name="InvalidChannel" xml:space="preserve">
<value>Этот канал не существует!</value>
</data>
<data name="RoleRemovalFailed" xml:space="preserve">
<value>Я не смог забрать роль {0} в связи с ошибкой! {1}</value>
</data>
<data name="DurationRequiredForTimeOuts" xml:space="preserve">
<value>Я не могу заглушить кого-то на более чем 28 дней, используя тайм-ауты! Или укажи продолжительность менее 28 дней, или установи роль мута в настройках</value>
</data>
<data name="CannotTimeOutBot" xml:space="preserve">
<value>Я не могу использовать тайм-ауты на других ботах! Попробуй указать роль мута в настройках</value>
</data>
<data name="SettingsStarterRole" xml:space="preserve">
<value>Начальная роль</value>
</data>
<data name="EventCreated" xml:space="preserve">
<value>{1}{2} создал событие {3}! Оно пройдёт в {4} и начнётся &lt;t:{5}:R&gt;!{0}{6}</value>
</data>
<data name="SettingsEventNotifyReceiverRole" xml:space="preserve">
<value>Роль для уведомлений о создании событий</value>
</data>
<data name="SettingsEventCreatedChannel" xml:space="preserve">
<value>Канал для уведомлений о создании событий</value>
</data>
<data name="SettingsEventStartedChannel" xml:space="preserve">
<value>Канал для уведомлений о начале событий</value>
</data>
<data name="SettingsEventStartedReceivers" xml:space="preserve">
<value>Получатели уведомлений о начале событий</value>
</data>
<data name="EventStarted" xml:space="preserve">
<value>{0}Событие {1} начинается в {2}!</value>
</data>
<data name="SettingsFrowningFace" xml:space="preserve">
<value>:( </value>
</data>
<data name="EventCancelled" xml:space="preserve">
<value>Событие {0} отменено!{1}</value>
</data>
<data name="SettingsEventCancelledChannel" xml:space="preserve">
<value>Канал для уведомлений о отмене событий</value>
</data>
<data name="SettingsEventCompletedChannel" xml:space="preserve">
<value>Канал для уведомлений о завершении событий</value>
</data>
<data name="EventCompleted" xml:space="preserve">
<value>Событие {0} завершено! Продолжительность: {1}</value>
</data>
<data name="FeedbackFormat" xml:space="preserve">
<value>*[{0}: {1}]* </value>
</data>
<data name="Ever" xml:space="preserve">
<value>всегда</value>
</data>
<data name="FeedbackMessagesCleared" xml:space="preserve">
<value>Удалено {0} сообщений в {1}</value>
</data>
<data name="FeedbackMemberKicked" xml:space="preserve">
<value>Выгнан {0}: {1}</value>
</data>
<data name="FeedbackMemberMuted" xml:space="preserve">
<value>Заглушен {0} на{1}: {2}</value>
</data>
<data name="FeedbackUserUnbanned" xml:space="preserve">
<value>Возвращён из бана {0}: {1}</value>
</data>
<data name="FeedbackMemberUnmuted" xml:space="preserve">
<value>Разглушен {0}: {1}</value>
</data>
<data name="SettingsNothingChanged" xml:space="preserve">
<value>Ничего не изменилось! Значение настройки `{0}` уже {1}</value>
</data>
<data name="SettingNotDefined" xml:space="preserve">
<value>Не указано</value>
</data>
<data name="FeedbackSettingsUpdated" xml:space="preserve">
<value>Значение настройки `{0}` теперь установлено на {1}</value>
</data>
<data name="CommandDescriptionBan" xml:space="preserve">
<value>Банит пользователя</value>
</data>
<data name="CommandDescriptionClear" xml:space="preserve">
<value>Удаляет указанное количество сообщений в этом канале</value>
</data>
<data name="CommandDescriptionHelp" xml:space="preserve">
<value>Показывает эту справку</value>
</data>
<data name="CommandDescriptionKick" xml:space="preserve">
<value>Выгоняет участника</value>
</data>
<data name="CommandDescriptionMute" xml:space="preserve">
<value>Глушит участника</value>
</data>
<data name="CommandDescriptionPing" xml:space="preserve">
<value>Показывает задержку до серверов Discord (не считая времени на локальные вычисления)</value>
</data>
<data name="CommandDescriptionSettings" xml:space="preserve">
<value>Позволяет менять некоторые настройки под этот сервер</value>
</data>
<data name="CommandDescriptionUnban" xml:space="preserve">
<value>Возвращает пользователя из бана</value>
</data>
<data name="CommandDescriptionUnmute" xml:space="preserve">
<value>Разглушает участника</value>
</data>
<data name="MissingNumber" xml:space="preserve">
<value>Надо указать целое число от {0} до {1}!</value>
</data>
<data name="MissingUser" xml:space="preserve">
<value>Надо указать пользователя!</value>
</data>
<data name="InvalidUser" xml:space="preserve">
<value>Надо указать пользователя вместо {0}!</value>
</data>
<data name="MissingMember" xml:space="preserve">
<value>Надо указать участника сервера!</value>
</data>
<data name="InvalidMember" xml:space="preserve">
<value>Надо указать участника сервера вместо {0}!</value>
</data>
<data name="UserCannotBanMembers" xml:space="preserve">
<value>Ты не можешь банить пользователей на этом сервере!</value>
</data>
<data name="UserCannotManageMessages" xml:space="preserve">
<value>Ты не можешь управлять сообщениями этого сервера!</value>
</data>
<data name="UserCannotKickMembers" xml:space="preserve">
<value>Ты не можешь выгонять участников с этого сервера!</value>
</data>
<data name="UserCannotModerateMembers" xml:space="preserve">
<value>Ты не можешь модерировать участников этого сервера!</value>
</data>
<data name="UserCannotManageGuild" xml:space="preserve">
<value>Ты не можешь настраивать этот сервер!</value>
</data>
<data name="BotCannotBanMembers" xml:space="preserve">
<value>Я не могу банить пользователей на этом сервере!</value>
</data>
<data name="BotCannotManageMessages" xml:space="preserve">
<value>Я не могу управлять сообщениями этого сервера!</value>
</data>
<data name="BotCannotKickMembers" xml:space="preserve">
<value>Я не могу выгонять участников с этого сервера!</value>
</data>
<data name="BotCannotModerateMembers" xml:space="preserve">
<value>Я не могу модерировать участников этого сервера!</value>
</data>
<data name="BotCannotManageGuild" xml:space="preserve">
<value>Я не могу настраивать этот сервер!</value>
</data>
<data name="MissingBanReason" xml:space="preserve">
<value>Надо указать причину для бана этого участника!</value>
</data>
<data name="MissingKickReason" xml:space="preserve">
<value>Надо указать причину для кика этого участника!</value>
</data>
<data name="MissingMuteReason" xml:space="preserve">
<value>Надо указать причину для мута этого участника!</value>
</data>
<data name="MissingSetting" xml:space="preserve">
<value>Надо указать настройку, которую нужно изменить!</value>
</data>
<data name="MissingUnbanReason" xml:space="preserve">
<value>Надо указать причину для разбана этого пользователя!</value>
</data>
<data name="MissingUnmuteReason" xml:space="preserve">
<value>Надо указать причину для размута этого участника!</value>
</data>
<data name="UserCannotBanBot" xml:space="preserve">
<value>Ты не можешь меня забанить!</value>
</data>
<data name="UserCannotBanOwner" xml:space="preserve">
<value>Ты не можешь забанить владельца этого сервера!</value>
</data>
<data name="UserCannotBanTarget" xml:space="preserve">
<value>Ты не можешь забанить этого участника!</value>
</data>
<data name="UserCannotBanThemselves" xml:space="preserve">
<value>Ты не можешь себя забанить!</value>
</data>
<data name="BotCannotBanTarget" xml:space="preserve">
<value>Я не могу забанить этого пользователя!</value>
</data>
<data name="UserCannotKickOwner" xml:space="preserve">
<value>Ты не можешь выгнать владельца этого сервера!</value>
</data>
<data name="UserCannotKickThemselves" xml:space="preserve">
<value>Ты не можешь себя выгнать!</value>
</data>
<data name="UserCannotKickBot" xml:space="preserve">
<value>Ты не можешь меня выгнать!</value>
</data>
<data name="BotCannotKickTarget" xml:space="preserve">
<value>Я не могу выгнать этого участника</value>
</data>
<data name="UserCannotKickTarget" xml:space="preserve">
<value>Ты не можешь выгнать этого участника!</value>
</data>
<data name="UserCannotMuteOwner" xml:space="preserve">
<value>Ты не можешь заглушить владельца этого сервера!</value>
</data>
<data name="UserCannotMuteThemselves" xml:space="preserve">
<value>Ты не можешь себя заглушить!</value>
</data>
<data name="UserCannotMuteBot" xml:space="preserve">
<value>Ты не можешь заглушить меня!</value>
</data>
<data name="BotCannotMuteTarget" xml:space="preserve">
<value>Я не могу заглушить этого пользователя!</value>
</data>
<data name="UserCannotMuteTarget" xml:space="preserve">
<value>Ты не можешь заглушить этого участника!</value>
</data>
<data name="UserCannotUnmuteOwner" xml:space="preserve">
<value>Тебе не надо возвращать из мута владельца этого сервера!</value>
</data>
<data name="UserCannotUnmuteThemselves" xml:space="preserve">
<value>Ты заглушен!</value>
</data>
<data name="UserCannotUnmuteBot" xml:space="preserve">
<value>... </value>
</data>
<data name="UserCannotUnmuteTarget" xml:space="preserve">
<value>Ты не можешь вернуть из мута этого пользователя!</value>
</data>
<data name="BotCannotUnmuteTarget" xml:space="preserve">
<value>Я не могу вернуть из мута этого пользователя!</value>
</data>
</root>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089
</value>
</resheader>
<data name="Ready" xml:space="preserve">
<value>{0}Я запустился! (C#)</value>
</data>
<data name="CachedMessageDeleted" xml:space="preserve">
<value>Удалено сообщение от {0} в канале {1}: {2}</value>
</data>
<data name="AutobanReason" xml:space="preserve">
<value>Слишком много упоминаний в одном сообщении</value>
</data>
<data name="CachedMessageEdited" xml:space="preserve">
<value>Отредактировано сообщение в канале {0}: {1} -&gt; {2}</value>
</data>
<data name="DefaultWelcomeMessage" xml:space="preserve">
<value>{0}, добро пожаловать на сервер {1}</value>
</data>
<data name="Beep1" xml:space="preserve">
<value>Бап! </value>
</data>
<data name="Beep2" xml:space="preserve">
<value>Боп! </value>
</data>
<data name="Beep3" xml:space="preserve">
<value>Бип! </value>
</data>
<data name="CommandNoPermissionBot" xml:space="preserve">
<value>У меня недостаточно прав для выполнения этой команды!</value>
</data>
<data name="CommandNoPermissionUser" xml:space="preserve">
<value>У тебя недостаточно прав для выполнения этой команды!</value>
</data>
<data name="YouWereBanned" xml:space="preserve">
<value>Тебя забанил {0} на сервере {1} за {2}</value>
</data>
<data name="PunishmentExpired" xml:space="preserve">
<value>Время наказания истекло</value>
</data>
<data name="ClearAmountTooSmall" xml:space="preserve">
<value>Указано менее {0} сообщений!</value>
</data>
<data name="ClearAmountTooLarge" xml:space="preserve">
<value>Указано более {0} сообщений!</value>
</data>
<data name="CommandHelp" xml:space="preserve">
<value>Справка по командам:</value>
</data>
<data name="YouWereKicked" xml:space="preserve">
<value>Тебя кикнул {0} на сервере {1} за {2}</value>
</data>
<data name="Milliseconds" xml:space="preserve">
<value>мс</value>
</data>
<data name="MemberAlreadyMuted" xml:space="preserve">
<value>Участник уже заглушен!</value>
</data>
<data name="ChannelNotSpecified" xml:space="preserve">
<value>Не указан</value>
</data>
<data name="RoleNotSpecified" xml:space="preserve">
<value>Не указана</value>
</data>
<data name="CurrentSettings" xml:space="preserve">
<value>Текущие настройки:</value>
</data>
<data name="SettingsLang" xml:space="preserve">
<value>Язык</value>
</data>
<data name="SettingsPrefix" xml:space="preserve">
<value>Префикс</value>
</data>
<data name="SettingsRemoveRolesOnMute" xml:space="preserve">
<value>Удалять роли при муте</value>
</data>
<data name="SettingsSendWelcomeMessages" xml:space="preserve">
<value>Отправлять приветствия</value>
</data>
<data name="SettingsMuteRole" xml:space="preserve">
<value>Роль мута</value>
</data>
<data name="SettingsAdminLogChannel" xml:space="preserve">
<value>Канал админ-уведомлений</value>
</data>
<data name="SettingsBotLogChannel" xml:space="preserve">
<value>Канал бот-уведомлений</value>
</data>
<data name="LanguageNotSupported" xml:space="preserve">
<value>Язык не поддерживается!</value>
</data>
<data name="Yes" xml:space="preserve">
<value>Да</value>
</data>
<data name="No" xml:space="preserve">
<value>Нет</value>
</data>
<data name="UserNotBanned" xml:space="preserve">
<value>Этот пользователь не забанен!</value>
</data>
<data name="MemberNotMuted" xml:space="preserve">
<value>Участник не заглушен!</value>
</data>
<data name="RolesReturned" xml:space="preserve">
<value>Кто-то убрал роль мута самостоятельно! Я вернул все роли, которые забрал при муте</value>
</data>
<data name="SettingsWelcomeMessage" xml:space="preserve">
<value>Приветствие</value>
</data>
<data name="ClearAmountInvalid" xml:space="preserve">
<value>Надо указать целое число от {0} до {1} вместо {2}!</value>
</data>
<data name="FeedbackUserBanned" xml:space="preserve">
<value>Забанен {0} на{1}: {2}</value>
</data>
<data name="UserNotInGuild" xml:space="preserve">
<value>Указанный пользователь не является участником этого сервера!</value>
</data>
<data name="SettingDoesntExist" xml:space="preserve">
<value>Такая настройка не существует!</value>
</data>
<data name="SettingsReceiveStartupMessages" xml:space="preserve">
<value>Получать сообщения о запуске</value>
</data>
<data name="InvalidSettingValue" xml:space="preserve">
<value>Указано недействительное значение для настройки!</value>
</data>
<data name="InvalidRole" xml:space="preserve">
<value>Эта роль не существует!</value>
</data>
<data name="InvalidChannel" xml:space="preserve">
<value>Этот канал не существует!</value>
</data>
<data name="RoleRemovalFailed" xml:space="preserve">
<value>Я не смог забрать роль {0} в связи с ошибкой! {1}</value>
</data>
<data name="DurationRequiredForTimeOuts" xml:space="preserve">
<value>Я не могу заглушить кого-то на более чем 28 дней, используя тайм-ауты! Или укажи продолжительность менее 28 дней, или установи роль мута в настройках</value>
</data>
<data name="CannotTimeOutBot" xml:space="preserve">
<value>Я не могу использовать тайм-ауты на других ботах! Попробуй указать роль мута в настройках</value>
</data>
<data name="SettingsStarterRole" xml:space="preserve">
<value>Начальная роль</value>
</data>
<data name="EventCreated" xml:space="preserve">
<value>{1}{2} создал событие {3}! Оно пройдёт в {4} и начнётся &lt;t:{5}:R&gt;!{0}{6}</value>
</data>
<data name="SettingsEventNotifyReceiverRole" xml:space="preserve">
<value>Роль для уведомлений о создании событий</value>
</data>
<data name="SettingsEventCreatedChannel" xml:space="preserve">
<value>Канал для уведомлений о создании событий</value>
</data>
<data name="SettingsEventStartedChannel" xml:space="preserve">
<value>Канал для уведомлений о начале событий</value>
</data>
<data name="SettingsEventStartedReceivers" xml:space="preserve">
<value>Получатели уведомлений о начале событий</value>
</data>
<data name="EventStarted" xml:space="preserve">
<value>{0}Событие {1} начинается в {2}!</value>
</data>
<data name="SettingsFrowningFace" xml:space="preserve">
<value>:( </value>
</data>
<data name="EventCancelled" xml:space="preserve">
<value>Событие {0} отменено!{1}</value>
</data>
<data name="SettingsEventCancelledChannel" xml:space="preserve">
<value>Канал для уведомлений о отмене событий</value>
</data>
<data name="SettingsEventCompletedChannel" xml:space="preserve">
<value>Канал для уведомлений о завершении событий</value>
</data>
<data name="EventCompleted" xml:space="preserve">
<value>Событие {0} завершено! Продолжительность: {1}</value>
</data>
<data name="FeedbackFormat" xml:space="preserve">
<value>*[{0}: {1}]* </value>
</data>
<data name="Ever" xml:space="preserve">
<value>всегда</value>
</data>
<data name="FeedbackMessagesCleared" xml:space="preserve">
<value>Удалено {0} сообщений в {1}</value>
</data>
<data name="FeedbackMemberKicked" xml:space="preserve">
<value>Выгнан {0}: {1}</value>
</data>
<data name="FeedbackMemberMuted" xml:space="preserve">
<value>Заглушен {0} на{1}: {2}</value>
</data>
<data name="FeedbackUserUnbanned" xml:space="preserve">
<value>Возвращён из бана {0}: {1}</value>
</data>
<data name="FeedbackMemberUnmuted" xml:space="preserve">
<value>Разглушен {0}: {1}</value>
</data>
<data name="SettingsNothingChanged" xml:space="preserve">
<value>Ничего не изменилось! Значение настройки `{0}` уже {1}</value>
</data>
<data name="SettingNotDefined" xml:space="preserve">
<value>Не указано</value>
</data>
<data name="FeedbackSettingsUpdated" xml:space="preserve">
<value>Значение настройки `{0}` теперь установлено на {1}</value>
</data>
<data name="CommandDescriptionBan" xml:space="preserve">
<value>Банит пользователя</value>
</data>
<data name="CommandDescriptionClear" xml:space="preserve">
<value>Удаляет указанное количество сообщений в этом канале</value>
</data>
<data name="CommandDescriptionHelp" xml:space="preserve">
<value>Показывает эту справку</value>
</data>
<data name="CommandDescriptionKick" xml:space="preserve">
<value>Выгоняет участника</value>
</data>
<data name="CommandDescriptionMute" xml:space="preserve">
<value>Глушит участника</value>
</data>
<data name="CommandDescriptionPing" xml:space="preserve">
<value>Показывает (неточную) задержку</value>
</data>
<data name="CommandDescriptionSettings" xml:space="preserve">
<value>Позволяет менять некоторые настройки под этот сервер</value>
</data>
<data name="CommandDescriptionUnban" xml:space="preserve">
<value>Возвращает пользователя из бана</value>
</data>
<data name="CommandDescriptionUnmute" xml:space="preserve">
<value>Разглушает участника</value>
</data>
<data name="MissingNumber" xml:space="preserve">
<value>Надо указать целое число от {0} до {1}!</value>
</data>
<data name="MissingUser" xml:space="preserve">
<value>Надо указать пользователя!</value>
</data>
<data name="InvalidUser" xml:space="preserve">
<value>Надо указать пользователя вместо {0}!</value>
</data>
<data name="MissingMember" xml:space="preserve">
<value>Надо указать участника сервера!</value>
</data>
<data name="InvalidMember" xml:space="preserve">
<value>Надо указать участника сервера вместо {0}!</value>
</data>
<data name="UserCannotBanMembers" xml:space="preserve">
<value>Ты не можешь банить пользователей на этом сервере!</value>
</data>
<data name="UserCannotManageMessages" xml:space="preserve">
<value>Ты не можешь управлять сообщениями этого сервера!</value>
</data>
<data name="UserCannotKickMembers" xml:space="preserve">
<value>Ты не можешь выгонять участников с этого сервера!</value>
</data>
<data name="UserCannotModerateMembers" xml:space="preserve">
<value>Ты не можешь модерировать участников этого сервера!</value>
</data>
<data name="UserCannotManageGuild" xml:space="preserve">
<value>Ты не можешь настраивать этот сервер!</value>
</data>
<data name="BotCannotBanMembers" xml:space="preserve">
<value>Я не могу банить пользователей на этом сервере!</value>
</data>
<data name="BotCannotManageMessages" xml:space="preserve">
<value>Я не могу управлять сообщениями этого сервера!</value>
</data>
<data name="BotCannotKickMembers" xml:space="preserve">
<value>Я не могу выгонять участников с этого сервера!</value>
</data>
<data name="BotCannotModerateMembers" xml:space="preserve">
<value>Я не могу модерировать участников этого сервера!</value>
</data>
<data name="BotCannotManageGuild" xml:space="preserve">
<value>Я не могу настраивать этот сервер!</value>
</data>
<data name="MissingBanReason" xml:space="preserve">
<value>Надо указать причину для бана этого участника!</value>
</data>
<data name="MissingKickReason" xml:space="preserve">
<value>Надо указать причину для кика этого участника!</value>
</data>
<data name="MissingMuteReason" xml:space="preserve">
<value>Надо указать причину для мута этого участника!</value>
</data>
<data name="MissingSetting" xml:space="preserve">
<value>Надо указать настройку, которую нужно изменить!</value>
</data>
<data name="MissingUnbanReason" xml:space="preserve">
<value>Надо указать причину для разбана этого пользователя!</value>
</data>
<data name="MissingUnmuteReason" xml:space="preserve">
<value>Надо указать причину для размута этого участника!</value>
</data>
<data name="UserCannotBanBot" xml:space="preserve">
<value>Ты не можешь меня забанить!</value>
</data>
<data name="UserCannotBanOwner" xml:space="preserve">
<value>Ты не можешь забанить владельца этого сервера!</value>
</data>
<data name="UserCannotBanTarget" xml:space="preserve">
<value>Ты не можешь забанить этого участника!</value>
</data>
<data name="UserCannotBanThemselves" xml:space="preserve">
<value>Ты не можешь себя забанить!</value>
</data>
<data name="BotCannotBanTarget" xml:space="preserve">
<value>Я не могу забанить этого пользователя!</value>
</data>
<data name="UserCannotKickOwner" xml:space="preserve">
<value>Ты не можешь выгнать владельца этого сервера!</value>
</data>
<data name="UserCannotKickThemselves" xml:space="preserve">
<value>Ты не можешь себя выгнать!</value>
</data>
<data name="UserCannotKickBot" xml:space="preserve">
<value>Ты не можешь меня выгнать!</value>
</data>
<data name="BotCannotKickTarget" xml:space="preserve">
<value>Я не могу выгнать этого участника</value>
</data>
<data name="UserCannotKickTarget" xml:space="preserve">
<value>Ты не можешь выгнать этого участника!</value>
</data>
<data name="UserCannotMuteOwner" xml:space="preserve">
<value>Ты не можешь заглушить владельца этого сервера!</value>
</data>
<data name="UserCannotMuteThemselves" xml:space="preserve">
<value>Ты не можешь себя заглушить!</value>
</data>
<data name="UserCannotMuteBot" xml:space="preserve">
<value>Ты не можешь заглушить меня!</value>
</data>
<data name="BotCannotMuteTarget" xml:space="preserve">
<value>Я не могу заглушить этого пользователя!</value>
</data>
<data name="UserCannotMuteTarget" xml:space="preserve">
<value>Ты не можешь заглушить этого участника!</value>
</data>
<data name="UserCannotUnmuteOwner" xml:space="preserve">
<value>Тебе не надо возвращать из мута владельца этого сервера!</value>
</data>
<data name="UserCannotUnmuteThemselves" xml:space="preserve">
<value>Ты заглушен!</value>
</data>
<data name="UserCannotUnmuteBot" xml:space="preserve">
<value>... </value>
</data>
<data name="UserCannotUnmuteTarget" xml:space="preserve">
<value>Ты не можешь вернуть из мута этого пользователя!</value>
</data>
<data name="BotCannotUnmuteTarget" xml:space="preserve">
<value>Я не могу вернуть из мута этого пользователя!</value>
</data>
<data name="CommandDescriptionCavepleaselisten" xml:space="preserve">
<value>Мы не поддерживаем ненависть против участников. И иногда, мы не способны забанить нарушителя.</value>
</data>
<data name="ServerBlacklisted" xml:space="preserve">
<value>Эта функция недоступна потому что этот сервер находится в чёрном списке.</value>
</data>
</root>

View file

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