mirror of
https://github.com/TeamOctolings/Octobot.git
synced 2025-04-19 08:23:35 +03:00
Merge branch 'master' of https://github.com/mctaylors/Boyfriend-CSharp
This commit is contained in:
commit
6b36e2c310
10 changed files with 475 additions and 34 deletions
27
.github/dependabot.yml
vendored
Normal file
27
.github/dependabot.yml
vendored
Normal file
|
@ -0,0 +1,27 @@
|
|||
# To get started with Dependabot version updates, you'll need to specify which
|
||||
# package ecosystems to update and where the package manifests are located.
|
||||
# Please see the documentation for all configuration options:
|
||||
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||
directory: "/" # Location of package manifests
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
allow:
|
||||
# Allow both direct and indirect updates for all packages
|
||||
- dependency-type: "all"
|
||||
assignees:
|
||||
- "l1ttleO"
|
||||
|
||||
- package-ecosystem: "nuget" # See documentation for possible values
|
||||
directory: "/Boyfriend" # Location of package manifests
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
allow:
|
||||
# Allow both direct and indirect updates for all packages
|
||||
- dependency-type: "all"
|
||||
# Add assignees
|
||||
assignees:
|
||||
- "l1ttleO"
|
44
.github/workflows/codeql.yml
vendored
Normal file
44
.github/workflows/codeql.yml
vendored
Normal file
|
@ -0,0 +1,44 @@
|
|||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
schedule:
|
||||
- cron: '45 7 * * 2'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'csharp' ]
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
queries: +security-extended,security-and-quality
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
with:
|
||||
category: "/language:${{matrix.language}}"
|
|
@ -83,7 +83,7 @@ public static class Boyfriend {
|
|||
if (!RemovedRolesDictionary.ContainsKey(id))
|
||||
RemovedRolesDictionary.Add(id, new Dictionary<ulong, ReadOnlyCollection<ulong>>());
|
||||
|
||||
if (GuildConfigDictionary.ContainsKey(id)) return GuildConfigDictionary[id];
|
||||
if (GuildConfigDictionary.TryGetValue(id, out var cfg)) return cfg;
|
||||
|
||||
var path = $"config_{id}.json";
|
||||
|
||||
|
@ -110,7 +110,7 @@ public static class Boyfriend {
|
|||
}
|
||||
|
||||
public static Dictionary<ulong, ReadOnlyCollection<ulong>> GetRemovedRoles(ulong id) {
|
||||
if (RemovedRolesDictionary.ContainsKey(id)) return RemovedRolesDictionary[id];
|
||||
if (RemovedRolesDictionary.TryGetValue(id, out var dict)) return dict;
|
||||
|
||||
var path = $"removedroles_{id}.json";
|
||||
|
||||
|
@ -126,7 +126,7 @@ public static class Boyfriend {
|
|||
}
|
||||
|
||||
public static SocketGuild FindGuild(ulong channel) {
|
||||
if (GuildCache.ContainsKey(channel)) return GuildCache[channel];
|
||||
if (GuildCache.TryGetValue(channel, out var gld)) return gld;
|
||||
foreach (var guild in Client.Guilds) {
|
||||
// ReSharper disable once LoopCanBeConvertedToQuery
|
||||
foreach (var x in guild.Channels)
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
<LangVersion>default</LangVersion>
|
||||
<Title>Boyfriend</Title>
|
||||
<Authors>l1ttle</Authors>
|
||||
<PackageProjectUrl>https://git.cavej376.xyz/Octol1ttle/Boyfriend-CSharp</PackageProjectUrl>
|
||||
<RepositoryUrl>https://git.cavej376.xyz/Octol1ttle/Boyfriend-CSharp</RepositoryUrl>
|
||||
<PackageProjectUrl>https://github.com/l1ttleO/Boyfriend-CSharp</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/l1ttleO/Boyfriend-CSharp</RepositoryUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
<PackageVersion>1.0.1</PackageVersion>
|
||||
<PackageLicenseUrl>https://git.cavej376.xyz/Octol1ttle/Boyfriend-CSharp/src/branch/master/LICENSE</PackageLicenseUrl>
|
||||
<PackageVersion>1.0.0</PackageVersion>
|
||||
<PackageLicenseUrl>https://github.com/l1ttleO/Boyfriend-CSharp/blob/master/LICENSE</PackageLicenseUrl>
|
||||
<NeutralLanguage>en</NeutralLanguage>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using Boyfriend.Commands;
|
||||
using Discord;
|
||||
using Discord.Commands;
|
||||
|
@ -14,14 +13,14 @@ public sealed class CommandProcessor {
|
|||
private const string NoAccess = ":no_entry_sign: ";
|
||||
private const string CantInteract = ":vertical_traffic_light: ";
|
||||
|
||||
private const string Mention = "<@855023234407333888>";
|
||||
|
||||
public static readonly ICommand[] Commands = {
|
||||
new BanCommand(), new ClearCommand(), new HelpCommand(),
|
||||
new KickCommand(), new MuteCommand(), new PingCommand(),
|
||||
new SettingsCommand(), new UnbanCommand(), new UnmuteCommand()
|
||||
};
|
||||
|
||||
private static readonly Dictionary<string, Regex> RegexCache = new();
|
||||
private static readonly Regex MentionRegex = new(Regex.Escape("<@855023234407333888>"), RegexOptions.Compiled);
|
||||
private readonly StringBuilder _stackedPrivateFeedback = new();
|
||||
private readonly StringBuilder _stackedPublicFeedback = new();
|
||||
private readonly StringBuilder _stackedReplyMessage = new();
|
||||
|
@ -46,16 +45,10 @@ public sealed class CommandProcessor {
|
|||
return;
|
||||
}
|
||||
|
||||
Regex regex;
|
||||
if (RegexCache.ContainsKey(config["Prefix"])) { regex = RegexCache[config["Prefix"]]; } else {
|
||||
regex = new Regex(Regex.Escape(config["Prefix"]), RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
RegexCache.Add(config["Prefix"], regex);
|
||||
}
|
||||
|
||||
var list = Context.Message.Content.Split("\n");
|
||||
var cleanList = Context.Message.CleanContent.Split("\n");
|
||||
for (var i = 0; i < list.Length; i++) {
|
||||
RunCommandOnLine(list[i], cleanList[i], regex);
|
||||
RunCommandOnLine(list[i], cleanList[i], config["Prefix"]);
|
||||
if (_serverBlacklisted) {
|
||||
await Context.Message.ReplyAsync(Messages.ServerBlacklisted);
|
||||
return;
|
||||
|
@ -78,20 +71,21 @@ public sealed class CommandProcessor {
|
|||
SendFeedbacks();
|
||||
}
|
||||
|
||||
private void RunCommandOnLine(string line, string cleanLine, Regex regex) {
|
||||
private void RunCommandOnLine(string line, string cleanLine, string prefix) {
|
||||
var prefixed = line[..prefix.Length] == prefix;
|
||||
if (!prefixed && line[..Mention.Length] is not Mention) return;
|
||||
foreach (var command in Commands) {
|
||||
var lineNoMention = regex.Replace(MentionRegex.Replace(line, "", 1), "", 1);
|
||||
if (lineNoMention == line
|
||||
|| !command.Aliases.Contains(lineNoMention.Trim().ToLower().Split()[0]))
|
||||
continue;
|
||||
var lineNoMention = line.Remove(0, prefixed ? prefix.Length : Mention.Length);
|
||||
if (!command.Aliases.Contains(lineNoMention.Trim().Split()[0])) continue;
|
||||
if (Utils.IsServerBlacklisted(Context.Guild)) {
|
||||
_serverBlacklisted = true;
|
||||
return;
|
||||
}
|
||||
|
||||
var args = line.Split().Skip(lineNoMention.StartsWith(" ") ? 2 : 1).ToArray();
|
||||
var args = lineNoMention.Trim().Split().Skip(1).ToArray();
|
||||
var cleanArgs = cleanLine.Split().Skip(lineNoMention.StartsWith(" ") ? 2 : 1).ToArray();
|
||||
_tasks.Add(command.RunAsync(this, args, cleanArgs));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -26,8 +26,8 @@ public sealed class MuteCommand : ICommand {
|
|||
|
||||
var rolesRemoved = Boyfriend.GetRemovedRoles(cmd.Context.Guild.Id);
|
||||
|
||||
if (rolesRemoved.ContainsKey(toMute.Id)) {
|
||||
foreach (var roleId in rolesRemoved[toMute.Id]) await toMute.AddRoleAsync(roleId);
|
||||
if (rolesRemoved.TryGetValue(toMute.Id, out var mutedRemovedRoles)) {
|
||||
foreach (var roleId in mutedRemovedRoles) await toMute.AddRoleAsync(roleId);
|
||||
rolesRemoved.Remove(toMute.Id);
|
||||
cmd.ConfigWriteScheduled = true;
|
||||
cmd.Reply(Messages.RolesReturned, ":warning: ");
|
||||
|
|
|
@ -110,10 +110,9 @@ public sealed class SettingsCommand : ICommand {
|
|||
};
|
||||
|
||||
if (value is "reset" or "default") {
|
||||
if (selectedSetting is "WelcomeMessage")
|
||||
config[selectedSetting] = Messages.DefaultWelcomeMessage;
|
||||
else
|
||||
config[selectedSetting] = Boyfriend.DefaultConfig[selectedSetting];
|
||||
config[selectedSetting] = selectedSetting is "WelcomeMessage"
|
||||
? Messages.DefaultWelcomeMessage
|
||||
: Boyfriend.DefaultConfig[selectedSetting];
|
||||
} else {
|
||||
if (value == config[selectedSetting]) {
|
||||
cmd.Reply(string.Format(Messages.SettingsNothingChanged, localizedSelectedSetting, formattedValue),
|
||||
|
|
|
@ -23,8 +23,8 @@ public sealed class UnmuteCommand : ICommand {
|
|||
if (role != null && toUnmute.Roles.Contains(role)) {
|
||||
var rolesRemoved = Boyfriend.GetRemovedRoles(cmd.Context.Guild.Id);
|
||||
|
||||
if (rolesRemoved.ContainsKey(toUnmute.Id)) {
|
||||
await toUnmute.AddRolesAsync(rolesRemoved[toUnmute.Id]);
|
||||
if (rolesRemoved.TryGetValue(toUnmute.Id, out var unmutedRemovedRoles)) {
|
||||
await toUnmute.AddRolesAsync(unmutedRemovedRoles);
|
||||
rolesRemoved.Remove(toUnmute.Id);
|
||||
cmd.ConfigWriteScheduled = true;
|
||||
}
|
||||
|
|
378
Boyfriend/Messages.mc.resx
Normal file
378
Boyfriend/Messages.mc.resx
Normal file
|
@ -0,0 +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} -> {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 дней таймаут не разрешает, вот настроишь роль мута, тогда поговорим</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} и начнётся <t:{5}:R>!{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>
|
|
@ -66,7 +66,7 @@ public static class Utils {
|
|||
|
||||
public static SocketRole? GetMuteRole(SocketGuild guild) {
|
||||
var id = ulong.Parse(Boyfriend.GetGuildConfig(guild.Id)["MuteRole"]);
|
||||
if (MuteRoleCache.ContainsKey(id)) return MuteRoleCache[id];
|
||||
if (MuteRoleCache.TryGetValue(id, out var cachedMuteRole)) return cachedMuteRole;
|
||||
SocketRole? role = null;
|
||||
foreach (var x in guild.Roles) {
|
||||
if (x.Id != id) continue;
|
||||
|
@ -89,7 +89,6 @@ public static class Utils {
|
|||
await channel.SendMessageAsync(text, false, null, null, allowRoles ? AllowRoles : AllowedMentions.None);
|
||||
}
|
||||
|
||||
|
||||
public static RequestOptions GetRequestOptions(string reason) {
|
||||
var options = RequestOptions.Default;
|
||||
options.AuditLogReason = reason;
|
||||
|
@ -99,7 +98,7 @@ public static class Utils {
|
|||
public static string GetMessage(string name) {
|
||||
var propertyName = name;
|
||||
name = $"{Messages.Culture}/{name}";
|
||||
if (ReflectionMessageCache.ContainsKey(name)) return ReflectionMessageCache[name];
|
||||
if (ReflectionMessageCache.TryGetValue(name, out var cachedMessage)) return cachedMessage;
|
||||
|
||||
var toReturn =
|
||||
typeof(Messages).GetProperty(propertyName, BindingFlags.NonPublic | BindingFlags.Static)?.GetValue(null)
|
||||
|
|
Loading…
Add table
Reference in a new issue