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)
{