<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[虾宝 Xiabao]]></title><description><![CDATA[虾宝 Xiabao]]></description><link>https://xiabao.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Fri, 23 Oct 2026 09:13:07 GMT</lastBuildDate><atom:link href="https://xiabao.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Using Telegram's "Recent Actions" Log to Investigate Moderation Incidents]]></title><description><![CDATA[Something went wrong in your Telegram group overnight. Messages are missing, a few long-time members say they were removed, and nobody on the admin team…]]></description><link>https://xiabao.hashnode.dev/using-telegram-s-recent-actions-log-to-investigate-moderation-incidents</link><guid isPermaLink="true">https://xiabao.hashnode.dev/using-telegram-s-recent-actions-log-to-investigate-moderation-incidents</guid><category><![CDATA[Moderation]]></category><category><![CDATA[telegram]]></category><dc:creator><![CDATA[虾宝 Xiabao]]></dc:creator><pubDate>Wed, 14 Oct 2026 20:04:28 GMT</pubDate><content:encoded><![CDATA[<p>Something went wrong in your Telegram group overnight. Messages are missing, a few long-time members say they were removed, and nobody on the admin team remembers doing anything. Before guessing, open the one tool built exactly for this situation: the <strong>Recent Actions</strong> log (also called the admin log or event log).</p>
<p>This tutorial explains what the log records, how to filter it, and how to turn it into a simple, repeatable incident review.</p>
<h2>What Recent Actions records</h2>
<p>Recent Actions is available in supergroups and channels to admins. It keeps a record of administrative events from roughly the <strong>last 48 hours</strong>, including:</p>
<ul>
<li><p>Messages deleted by admins or bots (with the original content)</p>
</li>
<li><p>Messages edited (old and new versions)</p>
</li>
<li><p>Members joining, leaving, being restricted, banned or unbanned</p>
</li>
<li><p>Admin rights granted, changed or removed</p>
</li>
<li><p>Changes to group title, photo, description, username and invite links</p>
</li>
<li><p>Pinned and unpinned messages</p>
</li>
<li><p>Changes to permissions and slow mode</p>
</li>
</ul>
<p>It does not record ordinary messages that nobody touched, and it does not keep anything older than about two days. That second point matters: <strong>if you want to investigate something, do it quickly or take screenshots.</strong></p>
<h2>How to open it</h2>
<ol>
<li><p>Open the group and tap its name to see the profile.</p>
</li>
<li><p>Tap <strong>Edit</strong> (or the pencil icon on desktop).</p>
</li>
<li><p>Choose <strong>Recent Actions</strong>.</p>
</li>
</ol>
<p>On desktop clients the log is often under the group's management menu with the same name.</p>
<h2>Filtering: the key to making the log useful</h2>
<p>In a busy group the raw log is long. Use the filter button at the top:</p>
<ul>
<li><p><strong>By event type</strong>: e.g. only "Deleted messages" or only "Members and admins".</p>
</li>
<li><p><strong>By admin</strong>: show only what one specific admin (or bot) did.</p>
</li>
</ul>
<p>A good habit is to start broad (all events in the time window you care about), then narrow to the specific admin or event type once you see a pattern.</p>
<h2>Common investigations and how to approach them</h2>
<h3>"A member says they were banned for no reason"</h3>
<ol>
<li><p>Filter by <strong>Members</strong> and search for the person's name.</p>
</li>
<li><p>Find the ban or restriction event; note <strong>which admin or bot</strong> did it and when.</p>
</li>
<li><p>Look a few lines above: was a message from that member deleted just before? The log shows the original text, so you can see what triggered it.</p>
</li>
<li><p>If it was a mistake, unban, apologize briefly, and note the pattern so it doesn't repeat.</p>
</li>
</ol>
<h3>"Messages disappeared"</h3>
<ol>
<li><p>Filter by <strong>Deleted messages</strong>.</p>
</li>
<li><p>Check who deleted them. If it was a bot, the cause is likely a filter rule; if it was an admin, ask them directly.</p>
</li>
<li><p>Restore important content by reposting it (the log shows the original text).</p>
</li>
</ol>
<h3>"Someone changed the group description / pinned a strange link"</h3>
<ol>
<li><p>Filter by <strong>Group info</strong> and <strong>Pinned messages</strong>.</p>
</li>
<li><p>Identify the account that made the change. If it's an admin who claims they didn't do it, treat it as a possible <strong>compromised account</strong>: remove that admin's rights first, investigate after.</p>
</li>
</ol>
<h3>"We were raided and need to know who got in"</h3>
<ol>
<li><p>Filter by <strong>New members</strong> for the time window of the raid.</p>
</li>
<li><p>Note the join timestamps; accounts that joined within a minute or two of each other are usually the raid batch.</p>
</li>
<li><p>Use this list to ban the remaining accounts that weren't caught yet.</p>
</li>
</ol>
<h2>Turning the log into an incident review</h2>
<p>For anything bigger than a single mistaken ban, write a short review in your admin chat. A template:</p>
<pre><code class="language-plaintext">Incident: [one line]
Time window: [start – end, timezone]
What the log shows: [key events, who/what did them]
Impact: [members removed, messages lost, links exposed]
Fixed: [what was restored or reversed]
Prevent next time: [one or two changes]
</code></pre>
<p>Five minutes of writing this up saves the next admin from repeating the same investigation.</p>
<h2>Using the log to tune your bots</h2>
<p>Bots appear in Recent Actions like any admin. Once a week, filter by your anti-spam bot and skim its deletions:</p>
<ul>
<li><p><strong>False positives</strong>: legitimate messages deleted. Adjust rules or whitelist trusted members.</p>
</li>
<li><p><strong>Missed spam</strong>: ads deleted manually by humans that the bot let through. These show where your filters are weak.</p>
</li>
</ul>
<p>If you find that most manual deletions are ads written with tricks such as spaced-out letters or look-alike characters, a keyword list will keep losing. A semantic anti-spam bot like <a href="https://xiabao.org">Xiabao</a> (@xiabaotg_bot), which is free for group owners, is designed for exactly that kind of disguised ad, and its actions show up in the same log so you can audit them.</p>
<h2>Limitations to keep in mind</h2>
<ul>
<li><p><strong>48-hour window</strong>: investigate promptly or export screenshots.</p>
</li>
<li><p><strong>Only admin-visible</strong>: regular members can't see it, so they can't verify what happened. Communicate outcomes clearly.</p>
</li>
<li><p><strong>Not a full chat archive</strong>: if you need long-term records, use a logging bot or export chat history from Telegram Desktop.</p>
</li>
</ul>
<h2>Quick checklist</h2>
<ul>
<li><p>[ ] All admins know where Recent Actions is</p>
</li>
<li><p>[ ] Incidents are checked within 48 hours</p>
</li>
<li><p>[ ] Filters used by event type and by admin</p>
</li>
<li><p>[ ] Short written review for serious incidents</p>
</li>
<li><p>[ ] Weekly skim of bot actions for false positives and misses</p>
</li>
</ul>
<p>The Recent Actions log turns "something weird happened" into a clear timeline. Used regularly, it also becomes the best data you have for improving your moderation setup.</p>
]]></content:encoded></item><item><title><![CDATA[Keyword Filters vs. Semantic Detection for Telegram Spam: An Honest Comparison]]></title><description><![CDATA[If you run a Telegram group long enough, you end up with a keyword blocklist hundreds of entries long, and spam still gets through. This post compares the…]]></description><link>https://xiabao.hashnode.dev/keyword-filters-vs-semantic-detection-for-telegram-spam-an-honest-comparison</link><guid isPermaLink="true">https://xiabao.hashnode.dev/keyword-filters-vs-semantic-detection-for-telegram-spam-an-honest-comparison</guid><category><![CDATA[Security]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[telegram]]></category><dc:creator><![CDATA[虾宝 Xiabao]]></dc:creator><pubDate>Wed, 14 Oct 2026 13:07:28 GMT</pubDate><content:encoded><![CDATA[<p>If you run a Telegram group long enough, you end up with a keyword blocklist hundreds of entries long, and spam still gets through. This post compares the two main approaches to automated ad filtering so you can decide what fits your group.</p>
<h2>Keyword / regex filtering</h2>
<p><strong>How it works:</strong> messages matching listed words or patterns are deleted.</p>
<p><strong>Strengths</strong></p>
<ul>
<li>Predictable and transparent: you know exactly why something was removed.</li>
<li>Zero latency, easy to run yourself.</li>
<li>Great for fixed, high-confidence strings (a known scam domain, a competitor's handle).</li>
</ul>
<p><strong>Weaknesses</strong></p>
<ul>
<li>Trivially bypassed: inserted spaces, homoglyphs, emoji between characters, text in images.</li>
<li>False positives grow with the list ("free" in a normal conversation).</li>
<li>Constant maintenance; the list only ever grows.</li>
</ul>
<h2>Semantic / intent-based detection</h2>
<p><strong>How it works:</strong> a model looks at what the message is trying to do (promote, redirect, recruit) instead of exact words, often combined with signals like account age, links, buttons, and forwarded sources.</p>
<p><strong>Strengths</strong></p>
<ul>
<li>Robust to spelling tricks and rewording.</li>
<li>Can catch ads with no obvious keyword at all ("DM me for the thing we talked about 👀").</li>
<li>Less manual list-keeping.</li>
</ul>
<p><strong>Weaknesses</strong></p>
<ul>
<li>Less transparent; you need logs to understand decisions.</li>
<li>Edge cases in groups where promotion is partly allowed (marketplaces) need tuning.</li>
</ul>
<h2>A quick side-by-side</h2>
<table>
<thead>
<tr>
<th></th>
<th>Keywords</th>
<th>Semantic</th>
</tr>
</thead>
<tbody><tr>
<td>Split-character ads</td>
<td>Misses</td>
<td>Usually catches</td>
</tr>
<tr>
<td>Hidden links / buttons</td>
<td>Only if you parse them</td>
<td>Usually included</td>
</tr>
<tr>
<td>False positives</td>
<td>Rise with list size</td>
<td>Lower, but not zero</td>
</tr>
<tr>
<td>Maintenance</td>
<td>High</td>
<td>Low</td>
</tr>
<tr>
<td>Explainability</td>
<td>High</td>
<td>Medium (needs logs)</td>
</tr>
</tbody></table>
<h2>What actually works: layer them</h2>
<ol>
<li>Keep a <strong>short</strong> keyword list for certain-bad items only.</li>
<li>Put semantic detection in front for everything else.</li>
<li>Review the deletion log weekly and whitelist mistakes.</li>
</ol>
<p>For the semantic layer, <a href="https://xiabao.org">虾宝 (Xiabao)</a> is an anti-ad bot that's free for Telegram group owners; it focuses on disguised and rewritten ads, which is where keyword lists fail first. Whatever tool you use, the layered setup is the part that matters.</p>
]]></content:encoded></item></channel></rss>