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 @@
   <data name="ButtonReportIssue" xml:space="preserve">
       <value>Report an issue</value>
   </data>
+  <data name="UserInfoKicked" xml:space="preserve">
+      <value>Kicked</value>
+  </data>
 </root>
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 @@
   <data name="ButtonReportIssue" xml:space="preserve">
       <value>Сообщить о проблеме</value>
   </data>
+  <data name="UserInfoKicked" xml:space="preserve">
+      <value>Выгнан</value>
+  </data>
 </root>
diff --git a/locale/Messages.tt-ru.resx b/locale/Messages.tt-ru.resx
index de1f39f..d20c358 100644
--- a/locale/Messages.tt-ru.resx
+++ b/locale/Messages.tt-ru.resx
@@ -502,7 +502,7 @@
     <value>приколы полученные по заслугам</value>
   </data>
   <data name="UserInfoBannedPermanently" xml:space="preserve">
-    <value>забанен</value>
+    <value>пермабан</value>
   </data>
   <data name="UserInfoNotOnGuild" xml:space="preserve">
     <value>вышел из сервера</value>
@@ -585,4 +585,7 @@
   <data name="ButtonReportIssue" xml:space="preserve">
       <value>зарепортить баг</value>
   </data>
+  <data name="UserInfoKicked" xml:space="preserve">
+      <value>кикнут</value>
+  </data>
 </root>
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/MuteCommandGroup.cs b/src/Commands/MuteCommandGroup.cs
index 522c7f7..c7b21f6 100644
--- a/src/Commands/MuteCommandGroup.cs
+++ b/src/Commands/MuteCommandGroup.cs
@@ -300,9 +300,9 @@ public class MuteCommandGroup : CommandGroup
         }
 
         var memberData = data.GetOrCreateMemberData(target.ID);
-        var isMuted = memberData.MutedUntil is not null || communicationDisabledUntil is not null;
+        var wasMuted = memberData.MutedUntil is not null || communicationDisabledUntil is not null;
 
-        if (!isMuted)
+        if (!wasMuted)
         {
             var failedEmbed = new EmbedBuilder().WithSmallTitle(Messages.UserNotMuted, bot)
                 .WithColour(ColorsList.Red).Build();
diff --git a/src/Commands/ToolsCommandGroup.cs b/src/Commands/ToolsCommandGroup.cs
index f04ddf6..1dbf72d 100644
--- a/src/Commands/ToolsCommandGroup.cs
+++ b/src/Commands/ToolsCommandGroup.cs
@@ -122,32 +122,21 @@ public class ToolsCommandGroup : CommandGroup
             embedColor = AppendGuildInformation(embedColor, guildMember, builder);
         }
 
-        var isMuted = (memberData.MutedUntil is not null && DateTimeOffset.UtcNow <= memberData.MutedUntil) ||
-                      communicationDisabledUntil is not null;
+        var wasMuted = (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 (wasMuted || wasBanned || wasKicked)
         {
             builder.Append("### ")
                 .AppendLine(Markdown.Bold(Messages.UserInfoPunishments));
+
+            embedColor = AppendPunishmentsInformation(wasMuted, 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)
         {
             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 wasMuted, bool wasKicked, bool wasBanned,
+        MemberData memberData, StringBuilder builder, Color embedColor, DateTimeOffset? communicationDisabledUntil)
+    {
+        if (wasMuted)
+        {
+            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<ulong> Roles { get; set; } = [];
     public List<Reminder> 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<IGuildMemberAdd>
         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)
         {