Stop words

Stop-word lists contain blocked words and phrases. When a message in an assigned group matches an entry, the bot deletes it. One list can apply to many groups — update it once, it takes effect everywhere.

Quick answer

Stop words delete messages that contain a configured word or phrase. Create a named list, add entries, and the bot deletes matching text messages in every group the list is assigned to. One list can cover any number of groups. The only action on match is message deletion — no warnings, bans, or mutes.

What you configure
  • Named stop-word lists — create as many as you need
  • Entries: individual words or multi-word phrases
  • Group assignments — which groups each list applies to
  • Delete-on-match behavior with moderation event logging

How stop words work

A stop-word list is a named, reusable collection of blocked words and phrases. Each connected group has zero or more lists assigned to it. When the bot receives a text message or a media caption in an assigned group, it checks the content against every active list for that group. If any entry matches, the bot attempts to delete the message.

Lists are defined at the account level and can be reused across any number of groups. When you edit a list — adding or removing entries — the change applies to all groups that use it without touching group configuration.

A "Global stop words" list is created automatically for every new account and assigned to all connected groups by default. This list is the starting point for most configurations. You can edit its entries at any time. If you need different rules for different groups, create additional named lists and assign them on the Groups page.

When to use stop words

Stop words are the right tool when you want to delete specific text on sight with no exceptions:

  • Recurring spam phrases — free money, click here, earn fast
  • Promotional wording you want consistently removed — competitor names, offer slogans
  • Slurs or terms that are never acceptable in your community
  • Obfuscated versions of blocked terms — the matcher handles common character-separator obfuscation automatically
  • Cross-group policy — the same list applied to all communities in your network

Stop words are not the right tool for every case:

  • If you want to require a word or hashtag in every post, use Required words instead
  • If you want to block URLs or specific domains, use Link filter
  • If you want to restrict or ban a specific user rather than a term, use Blocked users or mass actions

Prerequisites

Stop-word moderation will not work unless all of the following are true:

  1. The group is connected. The bot must have been added to the group and the group registered in your account. Run /connect inside the group to link it.
  2. The bot has admin status. The bot must be a group administrator in Telegram. Regular member status is not enough — without admin status the bot does not receive all messages and cannot delete them.
  3. Delete messages permission is granted. In the bot's admin rights for the group, "Delete messages" must be enabled. This is the only permission required for stop-word enforcement.
  4. At least one stop-word list is assigned to the group. The Global stop words list is assigned automatically. For additional lists, assignment is managed on the Groups page.

Step-by-step setup

1. Open Stop words in the dashboard

In the dashboard sidebar, click Stop words. The index shows all existing lists with their word count and how many groups each list is assigned to. The "Global stop words" list appears here by default.

2. Create a new list or edit an existing one

To edit the existing Global stop words list, click its title. To create a new list with a different scope or name, click Create stop words list.

Give the list a name that reflects its purpose — for example Spam and ads or Network rules. The name is visible only to your team; it does not appear in Telegram.

3. Add entries

Type or paste your entries into the text area. One word or phrase per line is the most readable format, but comma and semicolon separators also work — see Bulk input for details.

As you type, a live preview shows how many entries were parsed, how many duplicates were removed, and how many empty lines were ignored.

4. Save

Click Save. The list is updated immediately. If the list is assigned to any groups, the new entries take effect in the runtime within the next cache refresh cycle (typically under one minute).

5. Check group assignments

The Global stop words list is assigned to all groups automatically — no action needed. For other lists, open the Groups page in the dashboard, select a group, and choose which lists apply to it.

The stop words index shows the assigned-group count for each list. A count of 0 means the list is inactive and will not moderate any group.

6. Test in Telegram

Send a message containing a blocked entry in an assigned group. The bot should delete it within a few seconds. If the message is not deleted, verify that the bot has admin status with the Delete messages permission in that group.

Input format

Each entry is one word or one phrase. Entries are lowercased automatically on save — you do not need to add case variants. Entries longer than 64 characters are rejected.

Surrounding single or double quotes are stripped by the parser. Phrases do not require quotes.

Input Stored as Notes
spam spam Single word
Spam spam Lowercased on save
free money free money Phrase — no quotes needed
"hey there" hey there Double quotes stripped
'good day' good day Single quotes stripped
cat* cat* Not wildcard syntax — stored literally, matches cat* only

You do not need to add obfuscated variants of a word. If you add spam, the matcher also catches s.p.a.m, s-p-a-m, and similar separator-based obfuscations. See Matching behavior for how this works.

Bulk input

Paste multiple entries at once into the text area. The parser splits on any of these separators:

  • newline — one entry per line (most readable)
  • , — comma
  • ; — semicolon
  • tab

Separators can be mixed in the same input.

Bulk input example
spam free money "hey there"; promo, scam
Three lines, one semicolon, two commas. Quotes are stripped.
Parsed entries (5 items)
spam free money hey there promo scam
Duplicates are removed after normalization. Empty fragments are ignored.

The preview panel below the text area updates as you type and shows word count, duplicates removed, and empty entries ignored. These counts apply to the current input only — they do not include entries already saved in a previous session.

Assignment to groups

A stop-word list does nothing until it is assigned to at least one group. The dashboard shows a coverage label for each list:

Label Meaning
0 (assigned groups) List is saved but inactive. No moderation happens.
X of N groups Assigned to X of your N connected groups. Normal partial assignment.
Used in all groups Assigned to every connected group. This is a computed display state, not a stored scope rule.

Global stop words list: The auto-created Global stop words list is assigned to all connected groups by default. You can remove individual groups from that assignment on the Groups page if needed.

Other lists: Assignments are managed per-group on the Groups page. Select a group, then choose which stop-word lists apply to it. One group can have multiple lists active simultaneously — all assigned lists are checked for every incoming message.

New groups: When you connect a new group, the Global stop words list is assigned automatically. Other lists are not assigned to new groups automatically — you must add them manually on the Groups page.

There are no global rules as a product concept. "Used in all groups" means the list currently has a concrete assignment to every connected group, nothing more.

Matching behavior

The bot checks every incoming text message and media caption against all active stop-word lists for that group. Matching has four properties:

Case-insensitive

All matching is done on lowercased text. The entry spam matches spam, Spam, SPAM, and any other case combination.

Token-aware for single words

A single-word entry matches only as a complete word token, not as a substring inside another word. This prevents false positives from words that merely contain the blocked term.

Entry: cat
big cat here → deleted (token match) category update → kept (different token) education → kept (different token) Cat lovers → deleted (case-insensitive token match)

Phrase matching as ordered token sequence

A multi-word entry matches when its words appear as consecutive tokens in the message in the same order.

Entry: free money
get free money now → deleted (consecutive in order) money free for all → kept (wrong order)

Obfuscation normalization

When characters are separated by non-letter, non-digit characters (dots, dashes, underscores, spaces) into runs of three or more single characters, the matcher collapses those runs into a single word before comparing. This handles a common obfuscation pattern without requiring you to add every variant manually.

Entry: spam
s.p.a.m → deleted (4 single chars collapsed to "spam") s-p-a-m → deleted (same collapse) s_p_a_m → deleted (same collapse) spam → deleted (direct match) s.p → kept (only 2 single chars — not collapsed)
You only need to add spam. The obfuscated forms are caught automatically.

What is checked

Text messages and media captions are checked. Photos, videos, stickers, voice messages, and other media without a text caption are not checked — there is no text content to match against.

Admin messages and messages from other bots are checked by the same rules. Only this bot's own messages are excluded from stop-word matching.

Matching table

Entry Message text Result Reason
spam SPAM offer deleted case-insensitive token match
cat big cat here deleted token match
cat category update kept "category" is a different token
cat education kept no token "cat" in message
free money get free money now deleted consecutive phrase sequence
free money money is not free kept wrong token order
spam s.p.a.m here deleted 4-char run collapsed to "spam"

After a match

When a message matches a stop-word entry:

  1. The bot attempts to delete the message. Deletion happens immediately when a match is found. If the bot lacks the Delete messages permission in that group, deletion fails silently and the message stays.
  2. A moderation event is recorded. The event is saved to the dashboard with the matched entry, message ID, and group. Recent events are visible in the dashboard.
  3. No notification is sent to the user. The message disappears without a warning or explanation from the bot.
  4. No ban or mute is applied. Stop-word action is deletion only. The user can continue posting — only the specific matched message is removed.

If deletion fails because the bot is no longer an admin or has lost Delete messages permission, check the bot's admin rights in the Telegram group settings and restore them.

Detailed moderation event history is not stored for dashboard browsing. The dashboard shows recent events only.

Limitations

Input / request What happens
cat* Stored literally as cat*. Matches the exact string cat* only. No wildcard behavior.
f?ck Stored literally. No regex or single-char wildcard behavior.
/addblocklist Not implemented. Stop-word lists are managed from the dashboard only.
Per-entry ban or mute on match Not implemented. The only action is message deletion.
Stickers, voice messages, media without caption Not checked. The matcher requires text content (message text or caption).
Automatic assignment to future groups Only the Global stop words list is assigned automatically when a new group is connected. Other lists must be assigned manually.
Entry longer than 64 characters Rejected on save with an error.

Common mistakes

List created but not assigned

Symptom: Messages are not being deleted even though the list has entries.

Fix: Check the assigned-group count on the stop words index. If it shows 0, the list is inactive. Open the Groups page and assign the list to the target groups.

Bot lacks Delete messages permission

Symptom: Stop words appear to be configured correctly, but matching messages are not deleted.

Fix: Open Telegram, go to the group settings, find the bot in the administrator list, and confirm that Delete messages is enabled. Also confirm the bot has admin status, not just member status.

Expecting wildcard or regex matching

Symptom: Entries like cat* or f.ck do not match the intended patterns.

Fix: Wildcard and regex syntax are not supported. Each entry is a literal word or phrase. Add the specific forms you want to block as separate entries.

Expecting ban or mute instead of deletion

Symptom: The message is deleted but the user keeps posting the same content.

Fix: Stop words only delete the specific message. They do not restrict the user. To remove a user from groups, use Blocked users or the mass ban command.

Phrase too broad and blocking legitimate messages

Symptom: Expected messages are being deleted unintentionally.

Fix: Shorten broad phrases to more specific terms, or remove entries that are too common. Review the word list and test each entry against typical group messages before saving.

Adding obfuscated variants manually

Symptom: List grows large with entries like s.p.a.m, s-p-a-m, sp4m.

Fix: Only add the base form of the word. The matcher normalizes separator-based obfuscation automatically (3+ consecutive single-char tokens collapse to one word). Character substitution (e.g. 4 for a) is not normalized — add those variants explicitly if needed.

FAQ

Can I block phrases, not just single words?

Yes. Any entry containing a space is treated as a phrase. The matcher checks for all phrase words as a consecutive token sequence in the message. You do not need quotes — type or paste the phrase as-is.

Do I need to add case variants of blocked terms?

No. All matching is case-insensitive. Entries are lowercased when saved, and messages are lowercased before matching. A single entry catches all case combinations.

Do I need to add separator-obfuscated variants like s.p.a.m?

No. The matcher collapses runs of three or more consecutive single-character tokens into a single word before comparing. If you add spam, messages containing s.p.a.m, s-p-a-m, or s_p_a_m will also be caught.

Character substitution (for example, 4 for a) is not handled automatically. Add those variants explicitly if you need to block them.

Can I paste many words at once?

Yes. Use the text area in the list editor and paste a list of entries. The parser accepts newline, comma, semicolon, and tab as separators. You can mix them in the same paste. Duplicate entries are removed automatically, and empty lines are ignored.

Does a stop-word match ban or mute the user?

No. Stop-word action is message deletion only. The user's posting ability is not affected. If you want to restrict a user after a violation, use the Blocked users feature or run a mass ban command.

Can one list be used in many groups?

Yes. Stop-word lists are reusable. You can assign the same list to every connected group, or to any subset. Updating the list affects all groups that use it immediately — you do not need to re-apply it per group.

If I connect a new group, does it get my stop-word lists automatically?

The Global stop words list is assigned automatically when a new group is connected. Other lists you have created are not assigned automatically — open the Groups page after connecting a group and assign any additional lists you want active there.

Are global rules supported?

No. There is no "global rule" as a product concept. Lists are assigned to concrete groups. The label "Used in all groups" means the list currently has an assignment to every connected group — it is a computed display state, not a separate rule type.

Are wildcards or regex supported?

No. Entries are matched as literal words or phrases. The syntax cat* is stored and matched literally — it would only match messages containing exactly the string cat*. Regex patterns are also not supported.

Does the bot check messages from admins?

Yes. The current runtime checks messages from all senders including group admins and other bots. The only exception is messages sent by this bot itself — those are skipped.