From 20ffbbaafb490d23cd17d1c72751ac877fa02566 Mon Sep 17 00:00:00 2001 From: Octol1ttle Date: Sat, 8 Jul 2023 13:19:13 +0500 Subject: [PATCH] More fixups Signed-off-by: Octol1ttle --- Commands/BanCommandGroup.cs | 1 + Commands/KickCommandGroup.cs | 4 +++- Data/MemberData.cs | 3 +++ EventResponders.cs | 28 ++++++++++++++++------------ Services/GuildUpdateService.cs | 10 ++++++---- 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/Commands/BanCommandGroup.cs b/Commands/BanCommandGroup.cs index d9c9419..1a7c38b 100644 --- a/Commands/BanCommandGroup.cs +++ b/Commands/BanCommandGroup.cs @@ -141,6 +141,7 @@ public class BanCommandGroup : CommandGroup { var memberData = data.GetMemberData(target.ID); memberData.BannedUntil = duration is not null ? DateTimeOffset.UtcNow.Add(duration.Value) : DateTimeOffset.MaxValue; + memberData.Roles.Clear(); responseEmbed = new EmbedBuilder().WithSmallTitle( string.Format(Messages.UserBanned, target.GetTag()), target) diff --git a/Commands/KickCommandGroup.cs b/Commands/KickCommandGroup.cs index 6df068f..8db60b8 100644 --- a/Commands/KickCommandGroup.cs +++ b/Commands/KickCommandGroup.cs @@ -71,7 +71,8 @@ public class KickCommandGroup : CommandGroup { if (!currentUserResult.IsDefined(out var currentUser)) return Result.FromError(currentUserResult); - var cfg = await _dataService.GetConfiguration(guildId.Value, CancellationToken); + var data = await _dataService.GetData(guildId.Value, CancellationToken); + var cfg = data.Configuration; Messages.Culture = cfg.GetCulture(); var memberResult = await _guildApi.GetGuildMemberAsync(guildId.Value, target.ID, CancellationToken); @@ -123,6 +124,7 @@ public class KickCommandGroup : CommandGroup { ct: CancellationToken); if (!kickResult.IsSuccess) return Result.FromError(kickResult.Error); + data.GetMemberData(target.ID).Roles.Clear(); responseEmbed = new EmbedBuilder().WithSmallTitle( string.Format(Messages.UserKicked, target.GetTag()), target) diff --git a/Data/MemberData.cs b/Data/MemberData.cs index 6cbf787..755fb74 100644 --- a/Data/MemberData.cs +++ b/Data/MemberData.cs @@ -2,6 +2,9 @@ using Remora.Rest.Core; namespace Boyfriend.Data; +/// +/// Stores information about a member +/// public class MemberData { public MemberData(ulong id, DateTimeOffset? bannedUntil) { Id = id; diff --git a/EventResponders.cs b/EventResponders.cs index 52c22af..d45c5f8 100644 --- a/EventResponders.cs +++ b/EventResponders.cs @@ -208,6 +208,7 @@ public class MessageEditedResponder : IResponder { /// /// Handles sending a guild's if one is set. +/// If is enabled, roles will be returned. /// /// public class GuildMemberAddResponder : IResponder { @@ -223,19 +224,22 @@ public class GuildMemberAddResponder : IResponder { } public async Task RespondAsync(IGuildMemberAdd gatewayEvent, CancellationToken ct = default) { - var guildConfiguration = await _dataService.GetConfiguration(gatewayEvent.GuildID, ct); - if (guildConfiguration.PublicFeedbackChannel is 0) - return Result.FromSuccess(); - if (guildConfiguration.WelcomeMessage is "off" or "disable" or "disabled") - return Result.FromSuccess(); - - Messages.Culture = guildConfiguration.GetCulture(); - var welcomeMessage = guildConfiguration.WelcomeMessage is "default" or "reset" - ? Messages.DefaultWelcomeMessage - : guildConfiguration.WelcomeMessage; - if (!gatewayEvent.User.IsDefined(out var user)) return Result.FromError(new ArgumentNullError(nameof(gatewayEvent.User))); + var data = await _dataService.GetData(gatewayEvent.GuildID, ct); + var cfg = data.Configuration; + if (cfg.PublicFeedbackChannel is 0 || cfg.WelcomeMessage is "off" or "disable" or "disabled") + return Result.FromSuccess(); + if (cfg.ReturnRolesOnRejoin) { + var result = await _guildApi.ModifyGuildMemberAsync( + gatewayEvent.GuildID, user.ID, roles: data.GetMemberData(user.ID).Roles, ct: ct); + if (!result.IsSuccess) return Result.FromError(result.Error); + } + + Messages.Culture = data.Culture; + var welcomeMessage = cfg.WelcomeMessage is "default" or "reset" + ? Messages.DefaultWelcomeMessage + : cfg.WelcomeMessage; var guildResult = await _guildApi.GetGuildAsync(gatewayEvent.GuildID, ct: ct); if (!guildResult.IsDefined(out var guild)) return Result.FromError(guildResult); @@ -249,7 +253,7 @@ public class GuildMemberAddResponder : IResponder { if (!embed.IsDefined(out var built)) return Result.FromError(embed); return (Result)await _channelApi.CreateMessageAsync( - guildConfiguration.PublicFeedbackChannel.ToDiscordSnowflake(), embeds: new[] { built }, + cfg.PublicFeedbackChannel.ToDiscordSnowflake(), embeds: new[] { built }, allowedMentions: Boyfriend.NoMentions, ct: ct); } } diff --git a/Services/GuildUpdateService.cs b/Services/GuildUpdateService.cs index cf3fef8..5e3f36a 100644 --- a/Services/GuildUpdateService.cs +++ b/Services/GuildUpdateService.cs @@ -146,7 +146,8 @@ public class GuildUpdateService : BackgroundService { var storedEvent = data.ScheduledEvents[scheduledEvent.ID.Value]; if (storedEvent.Status == scheduledEvent.Status) { if (DateTimeOffset.UtcNow >= scheduledEvent.ScheduledStartTime) { - if (scheduledEvent.Status is not GuildScheduledEventStatus.Active) { + if (data.Configuration.AutoStartEvents + && scheduledEvent.Status is not GuildScheduledEventStatus.Active) { var startResult = await _eventApi.ModifyGuildScheduledEventAsync( guildId, scheduledEvent.ID, status: GuildScheduledEventStatus.Active, ct: ct); @@ -155,9 +156,10 @@ public class GuildUpdateService : BackgroundService { "Error in automatic scheduled event start request.\n{ErrorMessage}", startResult.Error.Message); } - } else if (DateTimeOffset.UtcNow - >= scheduledEvent.ScheduledStartTime - data.Configuration.EventEarlyNotificationOffset - && !storedEvent.EarlyNotificationSent) { + } else if (data.Configuration.EventEarlyNotificationOffset != TimeSpan.Zero + && !storedEvent.EarlyNotificationSent + && DateTimeOffset.UtcNow + >= scheduledEvent.ScheduledStartTime - data.Configuration.EventEarlyNotificationOffset) { var earlyResult = await SendScheduledEventUpdatedMessage(scheduledEvent, data, true, ct); if (earlyResult.IsSuccess) storedEvent.EarlyNotificationSent = true;