diff --git a/locale/Messages.tt-ru.resx b/locale/Messages.tt-ru.resx
deleted file mode 100644
index 13f12bf..0000000
--- a/locale/Messages.tt-ru.resx
+++ /dev/null
@@ -1,801 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- я родился!
-
-
- сообщение {0} вырезано:
-
-
- сообщение {0} переделано:
-
-
- {0}, добро пожаловать на сервер {1}
-
-
- вииимо!
-
-
- вуууми!
-
-
- нгьес!
-
-
- вы были забанены
-
-
- время бана закончиловсь
-
-
- вы были кикнуты
-
-
- мс
-
-
- *тут ничего нет*
-
-
- нъет
-
-
- язык
-
-
- префикс
-
-
- удалять звание при муте
-
-
- разглашать о том что пришел новый шизоид
-
-
- звание замученного
-
-
- такого языка нету...
-
-
- да
-
-
- нъет
-
-
- шизик не забанен
-
-
- шизоид не замучен!
-
-
- здравствуйте (типо настройка)
-
-
- {0} забанен
-
-
- получать инфу о старте бота
-
-
- криво настроил прикол, давай по новой
-
-
- ты шо, мутить больше чем на 28 дней таймаут не разрешает, вот настроишь роль мута, тогда поговорим
-
-
- я не могу замутить ботов, сделай что нибудь
-
-
- роль для уведомлений о создании движухи
-
-
- канал для уведомлений о движухах
-
-
- получатели уведомлений о начале движух
-
-
- движуха "{0}" начинается
-
-
- движуха "{0}" отменена!
-
-
- движуха "{0}" завершена!
-
-
- вырезано {0} забавных сообщений
-
-
- ты все сломал! значение прикола `{0}` и так {1}
-
-
- нъет
-
-
- укажи самого шизика
-
-
- бан
-
-
- тебе нельзя иметь власть над сообщениями шизоидов
-
-
- кик шизиков нельзя
-
-
- тебе нельзя мутить шизоидов
-
-
- тебе нельзя раззамучивать шизоидов
-
-
- тебе нельзя редактировать дурку
-
-
- я не могу ваще никого банить чел.
-
-
- я не могу исправлять орфографический кринж участников, сделай что нибудь.
-
-
- я не могу ваще никого кикать чел.
-
-
- я не могу контроллировать за всеми ними, сделай что нибудь.
-
-
- я не могу этому серверу хоть че либо нибудь изменить, сделай что нибудь.
-
-
- ээбля френдли фаер огонь по своим
-
-
- бан админу нельзя
-
-
- бан этому шизику нельзя
-
-
- самобан нельзя
-
-
- я не могу его забанить...
-
-
- кик админу нельзя
-
-
- самокик нельзя
-
-
- ээбля френдли фаер огонь по своим
-
-
- я не могу его кикнуть...
-
-
- кик этому шизику нельзя
-
-
- мут админу нельзя
-
-
- самомут нельзя
-
-
- ээбля френдли фаер огонь по своим
-
-
- я не могу его замутить...
-
-
- мут этому шизику нельзя
-
-
- сильно
-
-
- ты замучен.
-
-
- ...
-
-
- тебе нельзя раззамучивать
-
-
- я не могу его раззамутить...
-
-
- движуха "{0}" начнется {1}!
-
-
- заранее пнуть в минутах до начала движухи
-
-
- у нас такого шизоида нету, проверь, валиден ли ID уважаемого (я забываю о шизоидах если они ливнули минимум месяц назад)
-
-
- дефолтное звание
-
-
- канал для секретных уведомлений
-
-
- канал для не секретных уведомлений
-
-
- вернуть звания при переподключении в дурку
-
-
- автоматом стартить движухи
-
-
- ответственный
-
-
- {0} создает новое событие:
-
-
- движуха произойдет {0} в канале {1}
-
-
- движуха будет происходить с {0} до {1} в {2}
-
-
- открыть ивент
-
-
- все это длилось `{0}`
-
-
- движуха происходит в {0}
-
-
- движуха происходит в {0} до {1}
-
-
- этот шизоид уже лежит в бане
-
-
- {0} раззабанен
-
-
- {0} в муте
-
-
- {0} в размуте
-
-
- этого шизоида никто не мутил.
-
-
- у нас такого шизоида нету...
-
-
- {0} вышел с посторонней помощью
-
-
- причина: {0}
-
-
- до: {0}
-
-
- этот шизоид УЖЕ замучился
-
-
- от {0}
-
-
- девелоперы:
-
-
- репа Octobot (тык)
-
-
- немного об {0}
-
-
- скучный девелопер + дизайнер создавший Octobot's Wiki
-
-
- ВАЖНЫЙ соучастник кодинг-стримов @Octol1ttle
-
-
- САМЫЙ ВАЖНЫЙ чел написавший кода больше всех (99.99%)
-
-
- напоминалка для {0} скрафченА
-
-
- напоминалка для {0}
-
-
- ты хотел чтоб я напомнил тебе {0}
-
-
- приколы Octobot
-
-
- прикол редактирован
-
-
- прикол сдох
-
-
- стало
-
-
- переобувать шизоидов пытающихся поднять себя в табе
-
-
- это страница
-
-
- если я был бы html, я бы сказал 404
-
-
- ну а если быть точнее, тут всего {0} страниц(-ы)
-
-
- следующее
-
-
- предыдущее
-
-
- напоминалки {0}
-
-
- у тебя нет напоминалки на этом номере!
-
-
- напоминалка уничтожена
-
-
- ты еще не крафтил напоминалки
-
-
- {0} откачен к заводским
-
-
- откатываемся к заводским...
-
-
- чекнуть сообщение: {0}
-
-
- чекнуть канал: {0}
-
-
- номер в списке: {0}
-
-
- время отправки: {0}
-
-
- че там в напоминалке: {0}
-
-
- дисплейнейм
-
-
- деанон {0}
-
-
- замучен
-
-
- юзер Discord со времен
-
-
- забанен
-
-
- приколы полученные по заслугам
-
-
- пермабан
-
-
- вышел из сервера
-
-
- замучен таймаутом
-
-
- замучен ролькой
-
-
- участник сервера со времен
-
-
- сервернейм
-
-
- рольки
-
-
- бустит сервер со времен
-
-
- рандомное число {0}:
-
-
- ну чувак...
-
-
- наибольшее: {0}
-
-
- наименьшее: {0}
-
-
- (дефолт)
-
-
- таймштамп для {0}:
-
-
- офсет: {0}
-
-
- дескрипшон гильдии
-
-
- создался
-
-
- админ гильдии
-
-
- буст гильдии
-
-
- уровень
-
-
- кол-во бустов
-
-
- алло а чё мне удалять-то
-
-
- вырезано {0} забавных сообщений от {1}
-
-
- произошёл тотальный разнос в гилддате.
-
-
- возможно всё съедет с крыши, но знай, что я больше ничё не сохраню.
-
-
- произошёл тотальный разнос в команде, удачи.
-
-
- если ты это читаешь второй раз за сегодня, пиши разрабам
-
-
- зарепортить баг
-
-
- ну, мы потеряли {0}
-
-
- до свидания (типо настройка)
-
-
- ты там правильно напиши таймспан
-
-
- кикнут
-
-
- напоминалка подправлена
-
-
- абсолютли
-
-
- заявлено
-
-
- ваще не сомневайся
-
-
- 100% да
-
-
- будь в этом уверен
-
-
- я считаю что да
-
-
- ну вполне вероятно
-
-
- ну выглядит нормально
-
-
- мне сказали ок
-
-
- мгм
-
-
- ну-ка попробуй снова
-
-
- давай позже
-
-
- щас пока не скажу
-
-
- я не могу сейчас предсказать
-
-
- ну сконцентрируйся и давай еще раз
-
-
- даже не думай
-
-
- мое завление это нет
-
-
- я тут посчитал, короче нет
-
-
- выглядит такое себе
-
-
- чот сомневаюсь
-
-
- правильно пишут так: `1h30m`
-
-
- {0}
-
-
- канал куда говорить здравствуйте
-
-
- вот иди сам и почини что сломал
-
-
- вики Octobot (жмак)
-
-
- звание админа
-
-
- {0} схлопотал варн
-
-
- {0} получил амнистию
-
-
- вы схлопотали варн
-
-
- вы получили карт-бланш
-
-
- варнов: {0}
-
-
- его еще никто ни в чем не обвинял
-
-
- схлопотал много варнов
-
-
- сколько времени держать варновый бан
-
-
- тип варнового бана
-
-
- сколько варнов чтобы потом бан
-
-
- хаха, смотри {0}, это все ты заслужил:
-
-
- ого, да на тебя еще нет претензий!
-
-
- получил {0}
-
-
- варн {0} снят с {1}
-
-
- вы получили амнистию
-
-
- да нету такого варна вроде
-
-
- ээбля френдли фаер огонь по своим
-
-
- самовар нельзя
-
-
- варн этому шизику нельзя
-
-
- варн админу нельзя
-
-
- ну, к сожалению тебе этого не дано
-
-
- разварн админу нельзя
-
-
- разварн этому шизику нельзя
-
-
- саморазвар нельзя
-
-
- я не могу его заварить...
-
-
- я не могу его разварить...
-
-
- я не могу ваще никого варить...
-
-
- тебе нельзя варить шизоидов
-
-
- тебе нельзя разваривать шизоидов
-
-
- а ты специально указал себя когда мог этого не делать?
-
-
- тебе нельзя чекать варны шизоидов
-
-
- чекать варны админа нельзя
-
-
- чекать варны бота нельзя
-
-
- чекать варты этого шизика нельзя
-
-
- самовары {0}:
-
-
- тип бана: {0}
-
-
- мы дошли до лимита варнов. ({0})
-
-
- наказание что было установлено хочет установленную ддлительность в настройках
-
-
- лимит стоит, а наказания нет.
-
-
diff --git a/src/Commands/AboutCommandGroup.cs b/src/Commands/AboutCommandGroup.cs
index 027e7f8..02384f8 100644
--- a/src/Commands/AboutCommandGroup.cs
+++ b/src/Commands/AboutCommandGroup.cs
@@ -100,21 +100,21 @@ public class AboutCommandGroup : CommandGroup
.WithSmallTitle(string.Format(Messages.AboutBot, bot.Username), bot)
.WithDescription(builder.ToString())
.WithColour(ColorsList.Cyan)
- .WithImageUrl("https://i.ibb.co/fS6wZhh/octobot-banner.png")
+ .WithImageUrl("https://raw.githubusercontent.com/TeamOctolings/Octobot/HEAD/docs/octobot-banner.png")
.WithFooter(string.Format(Messages.Version, BuildInfo.Version))
.Build();
var repositoryButton = new ButtonComponent(
ButtonComponentStyle.Link,
Messages.ButtonOpenRepository,
- new PartialEmoji(Name: "🌐"),
+ new PartialEmoji(Name: "\ud83c\udf10"), // 'GLOBE WITH MERIDIANS' (U+1F310)
URL: BuildInfo.RepositoryUrl
);
var wikiButton = new ButtonComponent(
ButtonComponentStyle.Link,
Messages.ButtonOpenWiki,
- new PartialEmoji(Name: "📖"),
+ new PartialEmoji(Name: "\ud83d\udcd6"), // 'OPEN BOOK' (U+1F4D6)
URL: BuildInfo.WikiUrl
);
@@ -123,7 +123,7 @@ public class AboutCommandGroup : CommandGroup
BuildInfo.IsDirty
? Messages.ButtonDirty
: Messages.ButtonReportIssue,
- new PartialEmoji(Name: "⚠️"),
+ new PartialEmoji(Name: "\u26a0\ufe0f"), // 'WARNING SIGN' (U+26A0)
URL: BuildInfo.IssuesUrl,
IsDisabled: BuildInfo.IsDirty
);
diff --git a/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs b/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs
index 5fa2ea8..551c2d0 100644
--- a/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs
+++ b/src/Commands/Events/ErrorLoggingPostExecutionEvent.cs
@@ -73,7 +73,7 @@ public class ErrorLoggingPostExecutionEvent : IPostExecutionEvent
BuildInfo.IsDirty
? Messages.ButtonDirty
: Messages.ButtonReportIssue,
- new PartialEmoji(Name: "⚠️"),
+ new PartialEmoji(Name: "\u26a0\ufe0f"), // 'WARNING SIGN' (U+26A0)
URL: BuildInfo.IssuesUrl,
IsDisabled: BuildInfo.IsDirty
);
diff --git a/src/Data/Options/LanguageOption.cs b/src/Data/Options/LanguageOption.cs
index 464c61b..22f98df 100644
--- a/src/Data/Options/LanguageOption.cs
+++ b/src/Data/Options/LanguageOption.cs
@@ -11,8 +11,7 @@ public sealed class LanguageOption : Option
private static readonly Dictionary CultureInfoCache = new()
{
{ "en", new CultureInfo("en-US") },
- { "ru", new CultureInfo("ru-RU") },
- { "mctaylors-ru", new CultureInfo("tt-RU") }
+ { "ru", new CultureInfo("ru-RU") }
};
public LanguageOption(string name, string defaultValue) : base(name, CultureInfoCache[defaultValue]) { }
diff --git a/src/Responders/GuildLoadedResponder.cs b/src/Responders/GuildLoadedResponder.cs
index b03fd3f..55e9673 100644
--- a/src/Responders/GuildLoadedResponder.cs
+++ b/src/Responders/GuildLoadedResponder.cs
@@ -114,7 +114,7 @@ public class GuildLoadedResponder : IResponder
BuildInfo.IsDirty
? Messages.ButtonDirty
: Messages.ButtonReportIssue,
- new PartialEmoji(Name: "⚠️"),
+ new PartialEmoji(Name: "\u26a0\ufe0f"), // 'WARNING SIGN' (U+26A0)
URL: BuildInfo.IssuesUrl,
IsDisabled: BuildInfo.IsDirty
);
diff --git a/src/Services/GuildDataService.cs b/src/Services/GuildDataService.cs
index c9458a0..e503d22 100644
--- a/src/Services/GuildDataService.cs
+++ b/src/Services/GuildDataService.cs
@@ -78,7 +78,7 @@ public sealed class GuildDataService : BackgroundService
var settingsPath = $"{path}/Settings.json";
var scheduledEventsPath = $"{path}/ScheduledEvents.json";
- MigrateGuildData(guildId, path);
+ MigrateDataDirectory(guildId, path);
Directory.CreateDirectory(path);
@@ -106,6 +106,11 @@ public sealed class GuildDataService : BackgroundService
dataLoadFailed = true;
}
+ if (jsonSettings is not null)
+ {
+ FixJsonSettings(jsonSettings);
+ }
+
await using var eventsStream = File.OpenRead(scheduledEventsPath);
Dictionary? events = null;
try
@@ -155,7 +160,7 @@ public sealed class GuildDataService : BackgroundService
return finalData;
}
- private void MigrateGuildData(Snowflake guildId, string newPath)
+ private void MigrateDataDirectory(Snowflake guildId, string newPath)
{
var oldPath = $"{guildId}";
@@ -169,6 +174,15 @@ public sealed class GuildDataService : BackgroundService
}
}
+ private static void FixJsonSettings(JsonNode settings)
+ {
+ var language = settings[GuildSettings.Language.Name]?.GetValue();
+ if (language is "mctaylors-ru")
+ {
+ settings[GuildSettings.Language.Name] = "ru";
+ }
+ }
+
public async Task GetSettings(Snowflake guildId, CancellationToken ct = default)
{
return (await GetData(guildId, ct)).Settings;
diff --git a/src/Services/Update/ScheduledEventUpdateService.cs b/src/Services/Update/ScheduledEventUpdateService.cs
index 8168fc1..cb87779 100644
--- a/src/Services/Update/ScheduledEventUpdateService.cs
+++ b/src/Services/Update/ScheduledEventUpdateService.cs
@@ -223,7 +223,7 @@ public sealed class ScheduledEventUpdateService : BackgroundService
var button = new ButtonComponent(
ButtonComponentStyle.Link,
Messages.ButtonOpenEventInfo,
- new PartialEmoji(Name: "📋"),
+ new PartialEmoji(Name: "\ud83d\udccb"), // 'CLIPBOARD' (U+1F4CB)
URL: $"https://discord.com/events/{scheduledEvent.GuildID}/{scheduledEvent.ID}"
);
diff --git a/src/Services/Update/SongUpdateService.cs b/src/Services/Update/SongUpdateService.cs
index 53cc59b..41d5bf3 100644
--- a/src/Services/Update/SongUpdateService.cs
+++ b/src/Services/Update/SongUpdateService.cs
@@ -32,6 +32,11 @@ public sealed class SongUpdateService : BackgroundService
("Off the Hook", "Fly Octo Fly ~ Ebb & Flow (Octo)", new TimeSpan(0, 3, 5))
];
+ private static readonly (string Author, string Name, TimeSpan Duration)[] SpecialSongList =
+ [
+ ("Squid Sisters", "Maritime Memory", new TimeSpan(0, 2, 47))
+ ];
+
private readonly List _activityList = [new Activity("with Remora.Discord", ActivityType.Game)];
private readonly DiscordGatewayClient _client;
@@ -54,19 +59,33 @@ public sealed class SongUpdateService : BackgroundService
while (!ct.IsCancellationRequested)
{
- var nextSong = SongList[_nextSongIndex];
+ var nextSong = NextSong();
_activityList[0] = new Activity($"{nextSong.Name} / {nextSong.Author}",
ActivityType.Listening);
_client.SubmitCommand(
new UpdatePresence(
UserStatus.Online, false, DateTimeOffset.UtcNow, _activityList));
- _nextSongIndex++;
- if (_nextSongIndex >= SongList.Length)
- {
- _nextSongIndex = 0;
- }
await Task.Delay(nextSong.Duration, ct);
}
}
+
+ private (string Author, string Name, TimeSpan Duration) NextSong()
+ {
+ var today = DateTime.Today;
+ // Discontinuation of Online Services for Nintendo Wii U
+ if (today.Day is 8 or 9 && today.Month is 4)
+ {
+ return SpecialSongList[0]; // Maritime Memory / Squid Sisters
+ }
+
+ var nextSong = SongList[_nextSongIndex];
+ _nextSongIndex++;
+ if (_nextSongIndex >= SongList.Length)
+ {
+ _nextSongIndex = 0;
+ }
+
+ return nextSong;
+ }
}