diff --git a/locale/Messages.resx b/locale/Messages.resx index 60e6e07..1387edf 100644 --- a/locale/Messages.resx +++ b/locale/Messages.resx @@ -585,4 +585,7 @@ Report an issue + + Kicked + diff --git a/locale/Messages.ru.resx b/locale/Messages.ru.resx index 4b9492c..572c0b2 100644 --- a/locale/Messages.ru.resx +++ b/locale/Messages.ru.resx @@ -585,4 +585,7 @@ Сообщить о проблеме + + Выгнан + diff --git a/locale/Messages.tt-ru.resx b/locale/Messages.tt-ru.resx index de1f39f..e8c1b25 100644 --- a/locale/Messages.tt-ru.resx +++ b/locale/Messages.tt-ru.resx @@ -585,4 +585,7 @@ зарепортить баг + + кикнут + diff --git a/src/Commands/KickCommandGroup.cs b/src/Commands/KickCommandGroup.cs index ee94b93..a278fb4 100644 --- a/src/Commands/KickCommandGroup.cs +++ b/src/Commands/KickCommandGroup.cs @@ -151,7 +151,9 @@ public class KickCommandGroup : CommandGroup return Result.FromError(kickResult.Error); } - data.GetOrCreateMemberData(target.ID).Roles.Clear(); + var memberData = data.GetOrCreateMemberData(target.ID); + memberData.Roles.Clear(); + memberData.Kicked = true; var title = string.Format(Messages.UserKicked, target.GetTag()); var description = MarkdownExtensions.BulletPoint(string.Format(Messages.DescriptionActionReason, reason)); diff --git a/src/Commands/ToolsCommandGroup.cs b/src/Commands/ToolsCommandGroup.cs index f04ddf6..397dabf 100644 --- a/src/Commands/ToolsCommandGroup.cs +++ b/src/Commands/ToolsCommandGroup.cs @@ -124,30 +124,19 @@ public class ToolsCommandGroup : CommandGroup var isMuted = (memberData.MutedUntil is not null && DateTimeOffset.UtcNow <= memberData.MutedUntil) || communicationDisabledUntil is not null; + var wasBanned = memberData.BannedUntil is not null; + var wasKicked = memberData.Kicked; - var existingBanResult = await _guildApi.GetGuildBanAsync(guildId, target.ID, ct); - - if (isMuted || existingBanResult.IsDefined()) + if (isMuted || wasBanned || wasKicked) { builder.Append("### ") .AppendLine(Markdown.Bold(Messages.UserInfoPunishments)); + + embedColor = AppendPunishmentsInformation(isMuted, wasKicked, wasBanned, memberData, + builder, embedColor, communicationDisabledUntil); } - if (isMuted) - { - AppendMuteInformation(memberData, communicationDisabledUntil, builder); - - embedColor = ColorsList.Red; - } - - if (existingBanResult.IsDefined()) - { - AppendBanInformation(memberData, builder); - - embedColor = ColorsList.Black; - } - - if (!guildMemberResult.IsSuccess && !existingBanResult.IsDefined()) + if (!guildMemberResult.IsSuccess || !wasBanned || !wasKicked) { builder.Append("### ") .AppendLine(Markdown.Bold(Messages.UserInfoNotOnGuild)); @@ -166,6 +155,29 @@ public class ToolsCommandGroup : CommandGroup return await _feedback.SendContextualEmbedResultAsync(embed, ct: ct); } + private static Color AppendPunishmentsInformation(bool isMuted, bool wasKicked, bool wasBanned, + MemberData memberData, StringBuilder builder, Color embedColor, DateTimeOffset? communicationDisabledUntil) + { + if (isMuted) + { + AppendMuteInformation(memberData, communicationDisabledUntil, builder); + embedColor = ColorsList.Red; + } + + if (wasKicked) + { + builder.AppendBulletPointLine(Messages.UserInfoKicked); + } + + if (wasBanned) + { + AppendBanInformation(memberData, builder); + embedColor = ColorsList.Black; + } + + return embedColor; + } + private static Color AppendGuildInformation(Color color, IGuildMember guildMember, StringBuilder builder) { if (guildMember.Nickname.IsDefined(out var nickname)) diff --git a/src/Data/MemberData.cs b/src/Data/MemberData.cs index 0b0cfb2..8e23e54 100644 --- a/src/Data/MemberData.cs +++ b/src/Data/MemberData.cs @@ -18,6 +18,7 @@ public sealed class MemberData public ulong Id { get; } public DateTimeOffset? BannedUntil { get; set; } public DateTimeOffset? MutedUntil { get; set; } + public bool Kicked { get; set; } public List Roles { get; set; } = []; public List Reminders { get; } = []; } diff --git a/src/Messages.Designer.cs b/src/Messages.Designer.cs index 767bd5b..8dad3dc 100644 --- a/src/Messages.Designer.cs +++ b/src/Messages.Designer.cs @@ -1036,5 +1036,13 @@ namespace Octobot { return ResourceManager.GetString("ButtonReportIssue", resourceCulture); } } + + internal static string UserInfoKicked + { + get + { + return ResourceManager.GetString("UserInfoKicked", resourceCulture); + } + } } } diff --git a/src/Responders/GuildMemberJoinedResponder.cs b/src/Responders/GuildMemberJoinedResponder.cs index 66faa28..eee93b6 100644 --- a/src/Responders/GuildMemberJoinedResponder.cs +++ b/src/Responders/GuildMemberJoinedResponder.cs @@ -43,6 +43,8 @@ public class GuildMemberJoinedResponder : IResponder var cfg = data.Settings; var memberData = data.GetOrCreateMemberData(user.ID); + memberData.Kicked = false; + var returnRolesResult = await TryReturnRolesAsync(cfg, memberData, gatewayEvent.GuildID, user.ID, ct); if (!returnRolesResult.IsSuccess) {