Telegram comment moderation: what actually works (2026)
Spam under a post is a different problem from spam at the door. What the filters match, when a mute turns into a ban, and what none of it catches.
TL;DR. A join gate and a comment filter solve different problems. At the door you judge an account; under a post you judge a message, and the sender is already inside. AdminHub moderates the linked discussion group with six pattern filters, a duplicate catcher, silent escalation to mute and ban, and an AI pass over whatever the rules let through. Every action lands in a log. It matches patterns rather than meaning, and the link filter’s default is stricter than most channels want.
The join queue is the famous problem. Comments are the one that actually eats your evening.
The difference is structural. At the door you are judging an account: how old it is, whether it passes a captcha, whether it shows up in a spam database. Under a post you are judging a message — and the account behind it may be a three-month subscriber who has never done anything wrong until today. A gate cannot help you, because the sender is already inside. This is why channels that fixed their join-request problem still find crypto links under every post.
Everything below is about that second problem. For the door itself, see protecting a channel from spam and bots.
Comments live in a group, not in the channel
A Telegram channel has no comment section of its own. What you see under a post is a linked discussion group, and the comment button opens a thread inside it. Every comment is a group message.
Three consequences follow, and they decide what is possible before you configure anything.
No linked group, nothing to moderate. If comments are switched off, there is no chat, and no filter has anything to read.
The bot has to be an admin in the group, not only in the channel. Channel rights let it post. Group rights let it see messages and delete them. AdminHub detects the discussion chat automatically from the channel’s linked-chat id, but granting the rights is yours to do.
A ban is a group ban. Someone banned for comment spam keeps their subscription to the channel and loses only the ability to write under posts. Which is usually exactly what you wanted.
Six filters, and what each one really matches
Two are on by default, because between them they cover most of what arrives.
- Invite links — the
t.me/+andt.me/joinchat/forms in any spelling. This is the join-my-channel spam. - Links — any http or https URL, with an allowed-domains list you fill in. Matching is by exact domain or a genuine subdomain, so allowing example.com does not quietly permit evil-example.com.
Four more stay off until you turn them on.
- Forwards — any forwarded message, whatever it contains.
- Mentions — an @username of four characters or more. Email addresses are excluded on purpose: matching the @gmail inside an address used to delete legitimate messages.
- Phone numbers — a run of digits long enough to be a phone. It cannot tell a phone number from an order id.
- Stop-words — your own list, matched as plain substrings, case-insensitive. Substring means cash fires inside cashmere. Pick words you would delete on sight, and few of them.
They run in that order, the first match wins, and deletion is immediate and silent. Nobody is told why their message disappeared.
The same message, three times
Separately from the filters: identical text from the same person three times within five minutes is deleted, and the account is muted for five minutes.
The comparison is exact — trimmed, lowercased, hashed. One changed character makes two messages different. So it stops copy-paste and a stuck keyboard, and it will not stop someone rotating a template.
The five-minute window matters, and it is a correction we had to ship. Without it, three occurrences of “thanks” — ever, across weeks — were enough to mute a regular.
There is no rate limit here: nothing counts messages per second regardless of content. Telegram’s own slow mode does that natively in the group settings, and does it better.
What happens after the third violation
Every filter hit adds one to a counter kept per person, per chat. Three numbers are yours to set: mute after N violations (3 by default), ban after N (6, after which the counter resets), and how long the mute lasts (one hour by default, anything from a minute to a day).
The escalation is silent as well. Nothing is announced in the chat before or after. A first-time offender loses one message; a persistent one loses the ability to write, and then the group.
One property is worth knowing: those counters live in memory rather than in the database, so a restart or a deploy clears them. Escalation is therefore a running-session behaviour rather than a permanent record — which cuts both ways, and mostly in the member’s favour.
Two optional windows sit alongside it. New-member restrictions block links and forwards for the first N hours after someone joins. Night mode blocks links and media between two UTC hours, for the stretch when nobody is watching. Both are off by default.
The AI pass at the end
The rules run first because they are instant. Whatever survives them goes to an AI check, and this is the part that catches what a pattern structurally cannot: a well-written promotional message with no link in it at all.
The check receives the message text — the first 500 characters — your channel title as context, and any extra rules you typed into a single free-text field, such as “we discuss cars, anything about betting is spam”. It answers with spam or ok. Spam means silent deletion plus one violation on the counter.
Two properties matter more than the model behind it.
It reads text only. A photo with no caption is invisible to it. So is a sticker.
It fails open. If the check errors or times out, the message stays. An outage makes moderation weaker, never trigger-happy.
What the owner sees
Every action — delete, mute, ban — is written to a log with the rule that caused it, the first 500 characters of the message, and a timestamp. The panel shows totals by action, which filters fire most often, and the recent entries.
That log is what makes strict settings survivable. A rule that is too aggressive shows up within a day as a run of deletions you disagree with, instead of as subscribers quietly concluding that the comments are dead.
Members can also reply /report to a message. That writes an entry for you and does nothing else — no automatic deletion, no action taken on a stranger’s say-so.
Where this will not help
- Patterns, not meaning. Stop-words are substrings, the phone filter counts digits, the mention filter sees any @name. None of them read context. The AI pass does, within 500 characters of text, and that is a judgement rather than a guarantee.
- The link default is stricter than most channels want. Left alone, it deletes every URL from everyone, regulars included. Fill in the allowed domains before you rely on it.
- Media without text goes unjudged. An image is checked against the forward and new-member rules, and against nothing else.
- Edited messages are not re-checked. A clean comment edited afterwards to add a link stays up.
- Comments posted as a channel are skipped. Only messages from real user accounts are examined. Someone commenting under their own channel’s identity sits outside all of this.
- It does not replace a person on a heated thread. It removes junk. Arguments, brigading and merely tedious off-topic are still yours to handle.
What to do now
- Turn moderation on in the Mini App and check that the discussion group was detected.
- Give the bot admin rights in that group — delete and restrict, at minimum.
- Fill in the allowed-domains list before leaving the link filter on.
- Add three or four stop-words you would delete on sight. Not thirty.
- Read the log after a day, then change exactly one setting.
The full feature list lives on the channel protection page, and the door side of the same tool is covered in protecting a channel from spam and bots. If the comments are quiet for the other reason — nothing worth commenting on — automating channel content is the other half of the job.
What people usually ask
- Why do I need comment moderation if the join gate already screens people?
- Because they solve different problems. At the door you judge an account — its age, its history, whether it passes a captcha. Under a post you judge a message, and the account behind it is often a real subscriber who has never done anything wrong. The gate cannot help you there, because the sender is already inside.
- Which comment filters are on by default?
- Two: invite links and ordinary links. Forwards, mentions, phone numbers and your stop-word list are off until you switch them on. The link filter is the one to configure first — on default settings it deletes every URL from everyone, including regulars sharing a source, until you fill in the allowed-domains list.
- What gets someone muted or banned in the comments?
- Each filter hit adds one violation to a counter kept per person per chat. Three violations mute the account for an hour, six ban it from the discussion group; both numbers and the mute duration are yours to set. Separately, the same text sent three times inside five minutes is deleted and muted for five minutes.
- Does the AI check see everything?
- No. It runs last, only on messages the rules let through, and only on text — the first 500 characters of a comment or a caption. A photo with no caption is invisible to it, and so is a sticker. If the check errors out, the message stays rather than being deleted.
- Will it delete comments from real people?
- Sometimes, and that is why the log exists. Stop-words match as substrings, the phone filter counts digits, and the link filter does not know a source from an ad. Every deletion, mute and ban is written down with the rule that caused it, so a setting that is too strict shows up as a run of deletions you disagree with rather than as a comment section that quietly died.