From a362ee90fc3e61eca7f881a43d005a7403eb5c06 Mon Sep 17 00:00:00 2001 From: Kwoth Date: Sun, 22 Sep 2024 01:51:42 +0000 Subject: [PATCH] dev: forgot to update the version in csproj, again --- CHANGELOG.md | 13 ++++ .../Administration/GreetBye/GreetService.cs | 61 +++++++++++-------- src/NadekoBot/NadekoBot.csproj | 6 +- 3 files changed, 53 insertions(+), 27 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00d185629..617669dec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,19 @@ Mostly based on [keepachangelog](https://keepachangelog.com/en/1.0.0/) except date format. a-c-f-r-o +## [5.1.9] - 21.09.2024 + +### Fixed + +- Fixed `.greettest`, and other `.*test` commands if you didn't have them enabled. +- Fixed `.greetdmtest` sending messages twice. +- Fixed a serious bug which caused greet messages to be jumbled up, and wrong ones to be sent for the wrong events. + - There is no database issue, all greet messages are safe, the cache was caching any setting every 3 seconds with no regard for the type of the event + - This also caused `.greetdm` messages to not be sent if `.greet` is enabled + - This bug was introduced in 5.1.8. PLEASE UPDATE if you are on 5.1.8 +- Selfhosters only: Fixed medusa dependency loading + - Note: Make sure to not publish any other DLLs besides the ones you are sure you will need, as there can be version conflicts which didn't happen before. + ## [5.1.8] - 19.09.2024 ### Added diff --git a/src/NadekoBot/Modules/Administration/GreetBye/GreetService.cs b/src/NadekoBot/Modules/Administration/GreetBye/GreetService.cs index ad62f0de0..cc1f78b18 100644 --- a/src/NadekoBot/Modules/Administration/GreetBye/GreetService.cs +++ b/src/NadekoBot/Modules/Administration/GreetBye/GreetService.cs @@ -75,11 +75,19 @@ public class GreetService : INService, IReadyExecutor _client.GuildMemberUpdated += ClientOnGuildMemberUpdated; - var timer = new PeriodicTimer(TimeSpan.FromSeconds(2)); - while (await timer.WaitForNextTickAsync()) + while (true) { - var (conf, user, ch) = await _greetQueue.Reader.ReadAsync(); - await GreetUsers(conf, ch, user); + try + { + var (conf, user, ch) = await _greetQueue.Reader.ReadAsync(); + await GreetUsers(conf, ch, user); + } + catch (Exception ex) + { + Log.Error(ex, "Greet Loop almost crashed. Please report this!"); + } + + await Task.Delay(2016); } } @@ -155,10 +163,11 @@ public class GreetService : INService, IReadyExecutor return Task.CompletedTask; } - private readonly TypedKey _greetSettingsKey = new("greet_settings"); + private TypedKey GreetSettingsKey(GreetType type) + => new($"greet_settings:{type}"); public async Task GetGreetSettingsAsync(ulong gid, GreetType type) - => await _cache.GetOrAddAsync(_greetSettingsKey, + => await _cache.GetOrAddAsync(GreetSettingsKey(type), () => InternalGetGreetSettingsAsync(gid, type), TimeSpan.FromSeconds(3)); @@ -217,14 +226,6 @@ public class GreetService : INService, IReadyExecutor } } - - private async Task GreetDmUser(GreetSettings conf, IGuildUser user) - { - var completionSource = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - await _greetQueue.Writer.WriteAsync((conf, user, null)); - return await completionSource.Task; - } - private async Task GreetDmUserInternal(GreetSettings conf, IGuildUser user) { try @@ -311,21 +312,28 @@ public class GreetService : INService, IReadyExecutor { try { - var conf = await GetGreetSettingsAsync(user.GuildId, GreetType.Greet); - - if (conf is not null && conf.IsEnabled && conf.ChannelId is { } channelId) + if (_enabled[GreetType.Greet].Contains(user.GuildId)) { - var channel = await user.Guild.GetTextChannelAsync(channelId); - if (channel is not null) + var conf = await GetGreetSettingsAsync(user.GuildId, GreetType.Greet); + if (conf?.ChannelId is ulong cid) { - await _greetQueue.Writer.WriteAsync((conf, user, channel)); + var channel = await user.Guild.GetTextChannelAsync(cid); + if (channel is not null) + { + await _greetQueue.Writer.WriteAsync((conf, user, channel)); + } } } - var confDm = await GetGreetSettingsAsync(user.GuildId, GreetType.GreetDm); - if (confDm?.IsEnabled ?? false) - await GreetDmUser(confDm, user); + if (_enabled[GreetType.GreetDm].Contains(user.GuildId)) + { + var confDm = await GetGreetSettingsAsync(user.GuildId, GreetType.GreetDm); + if (confDm is not null) + { + await _greetQueue.Writer.WriteAsync((confDm, user, null)); + } + } } catch { @@ -354,8 +362,8 @@ public class GreetService : INService, IReadyExecutor { await using var uow = _db.GetDbContext(); var q = uow.GetTable(); - - if(value is null) + + if (value is null) value = !_enabled[greetType].Contains(guildId); if (value is { } v) @@ -477,7 +485,8 @@ public class GreetService : INService, IReadyExecutor { if (conf.GreetType == GreetType.GreetDm) { - return await GreetDmUser(conf, user); + await _greetQueue.Writer.WriteAsync((conf, user, null)); + return true; } if (channel is not ITextChannel ch) diff --git a/src/NadekoBot/NadekoBot.csproj b/src/NadekoBot/NadekoBot.csproj index aa3c8be04..7b5d5a5c7 100644 --- a/src/NadekoBot/NadekoBot.csproj +++ b/src/NadekoBot/NadekoBot.csproj @@ -4,7 +4,7 @@ enable true en - 5.1.8 + 5.1.9 $(MSBuildProjectDirectory) @@ -131,6 +131,10 @@ + + + + false