CheeseSpamBot — Admin Guide

Stop spam in your Telegram group in 30 seconds

Add @CheeseSpamBot to your group, promote it to admin, and run /admins. That’s the whole setup. Global bans, CAPTCHAs, and an AI-assisted blocklist do the rest.

@CheeseSpamBot is a multi-group Telegram moderation bot. Once added to your chat as an admin, it:

  • Watches every join, message, edit, and reaction
  • Quietly evaluates new and untrusted users in the background
  • Issues an image-based CAPTCHA when a user looks suspicious
  • Maintains a global blocklist of known spam patterns shared across all groups using the bot
  • Lets bot admins globally ban spammers with a single tap, removing them everywhere at once
  • Logs every notable event to a dedicated admin log channel, with action buttons attached
  • Provides a DM-based appeal flow so wrongly-banned users can prove they’re real

Internal detection heuristics, scoring weights, thresholds, and pattern internals are intentionally omitted — sharing them would help spammers evade detection.

Why CheeseSpamBot is Different

If you’ve used Rose, Combot, or similar moderation bots, the day-to-day feel is different:

Traditional bots CheeseSpamBot
Type slash commands to ban Tap a Yeet button on the log entry
Type commands to unban / look up Tap buttons on join and action notifications
Per-chat bans by default Global bans by default — one tap removes a spammer from every group
Manual blocklist management AI suggests a blocklist pattern after a ban; admin confirms with one tap
Each admin remembers syntax Buttons appear automatically when relevant

The intent is that 95% of moderation is button taps in the log channel. Slash commands exist for power users and edge cases.

Add @CheeseSpamBot to a group

Getting Started

Add to group

1. Add the bot

Add @CheeseSpamBot to your group. Promote it to admin with at least:

  • Delete messages
  • Ban users
  • Invite users via link (used by some features)

Run /checkrights to confirm permissions are correct.

2. Sync your admin list

Run /admins once. Group admins are exempt from spam checks and CAPTCHAs. Re-run it whenever you add or remove a chat admin.

3. (Optional) Configure settings

Run /settings to toggle per-group features via inline buttons.

Grace period: when the bot first joins a group, existing members are treated as pre-trusted for a short grace period so the bot does not CAPTCHA-blast your existing community on day one.
Add @CheeseSpamBot to your group

Per-Group Settings

/settings opens a panel of toggle buttons. Available toggles include:

  • Clean welcome messages — auto-delete Telegram’s “User joined” service messages
  • Clean leave messages — auto-delete Telegram’s “User left” service messages
  • Welcome messages — enable/disable sending a custom greeting to new members
  • Welcome message text — set the welcome template (also via /setwelcome)

Each tap immediately updates the setting and refreshes the panel. There’s no “save” step.

Welcome Messages

Set a custom welcome with /setwelcome:

/setwelcome Hi {mention}, welcome to the group! Please read the rules.
  • {mention} is replaced with a clickable link to the new user’s profile.
  • Welcome messages auto-delete after roughly half an hour to keep the chat tidy.
  • If a newly-joined user looks suspicious, the bot may attach a “Verify yourself” button to the welcome that links them to a DM CAPTCHA.
  • Welcome messages are also cleaned up automatically if the user is later yeeted.

Other forms: /setwelcome (no arguments) shows the current welcome, /setwelcome reset restores the default, and disabling via /settings turns welcomes off without losing your custom text.

How Detection Works (High-Level)

CheeseSpamBot combines several independent checks. Specifics are deliberately not published.

  1. Profile scoring at join time. When a user joins, the bot looks at multiple signals from their Telegram profile. Suspicious → CAPTCHA. Obviously a spammer → ban on sight. Looks fine → admitted silently. Established users bypass the check entirely.
  2. Blocklist matching on every message. Each new or edited message is checked against a shared blocklist of regex patterns. Text is normalized first, so tricks like invisible characters, mathematical bold (𝑌𝑍𝑘𝑝𝑛𝑔), full-width characters, or zero-width joiners do not bypass the filter.
  3. Behavioral heuristics. Repeated content, bursts of messages in a short window, or heavy reactions while still untrusted can trigger a CAPTCHA. Heuristics are tuned against real spam and are not documented in detail here.
  4. Reaction monitoring. Spammers often use emoji reactions to get attention. Untrusted users who react excessively will be challenged.
  5. Edited messages are re-checked. Editing after posting does not bypass detection — the edited text goes through the same pipeline.
  6. Rejoins are remembered. A user who was banned and then rejoins any group with the bot is auto-banned again before they can post.
  7. Bot admins and group admins are exempt from blocklist and behavioral checks.
  8. AI-assisted pattern suggestions. After a ban, the bot uses an LLM to draft a regex pattern based on the spammer’s messages, backtests it against thousands of recent messages to estimate false-positive rate, and presents a one-tap “Add to blocklist” button with the match preview.

The CAPTCHA Challenge

Try /start

When a user is challenged:

  • They see an image with a word rendered into it, plus a prompt.
  • They must reply with the word as plain text.
  • They get multiple attempts within a short timeout.
  • The word list is localized — users with their Telegram language set to Spanish, German, French, etc. see words in their language. 20+ languages are supported. English (Oxford 3000) is the fallback.
  • The bot accepts the current word or the previous word, in case a challenge has just been re-issued.
  • Established users bypass CAPTCHA automatically.
  • Group admins and bot admins are never challenged.

If the challenge fails or times out, the user is banned. They can still appeal in DM.

Global Bans (Yeet)

A “yeet” is a global ban. When a bot admin yeets a user (typically via the Yeet button on a log entry):

  1. The user is banned in every group the bot knows about that they are a member of.
  2. All their messages the bot has seen are deleted across all those groups.
  3. Replies the bot itself sent on their behalf (welcome messages, CAPTCHA prompts) are deleted too.
  4. The user is recorded in a global ban list; if they rejoin anywhere, they’re auto-banned again.
  5. The yeet is recorded per chat, so an unyeet later can restore exactly the right state.
  6. The action is logged, and the log entry is updated with an Undo button.

Group admins do not yeet directly. They use /fban to flag a user; bot admins decide whether to yeet.

Appeals & Self-Unban

Bans are not permanent dead-ends. A banned user can:

  1. Open a DM with @CheeseSpamBot.
  2. Send /start.
  3. Solve a CAPTCHA.

If they pass, the bot:

  • Removes them from the global ban list
  • Unbans them from every chat the original yeet recorded
  • Logs the appeal in the admin log channel

If they fail, they remain banned and can try again later.

This means real people who got caught by mistake have a self-service path back, while bots that can’t read CAPTCHA images stay out.

Admins can also reverse a yeet directly from the log channel via the Undo button, or with /unyeet.

DM @CheeseSpamBot to appeal

Group Admin Commands

Add to group

Slash commands available to chat admins in your group. (Bot-admin-only commands are not listed here.)

Command What it does
/checkrightsVerify the bot has the Telegram permissions it needs in this chat.
/adminsSync this group’s admin list from Telegram. Run after promoting/demoting admins.
/settingsOpen the toggle panel for this group (clean join/leave, welcomes, etc.).
/setwelcome [text]Set or view the welcome message. Supports {mention}. /setwelcome reset restores the default.
/fbanReply to a suspicious message to flag the user for bot-admin review. Posts a ban request with a Yeet button to the admin log channel.
/reportAny user can reply to a message with this to alert the most active admins of your group.
/helpOpen the interactive help menu.
/idIdentify the user behind a replied-to message (DB lookup, with action buttons for admins).

Most day-to-day moderation is done through buttons on log entries, not commands.

Working with the Log Channel

Every group connected to CheeseSpamBot is paired with an admin log channel where bot admins coordinate. Each notable event in your group produces a log entry — and most log entries have action buttons attached.

Typical log entries:

  • New join (suspicious or untrusted) — buttons: Yeet, OK, Untrusted, CAPTCHA, Dismiss
  • CAPTCHA failed / timed out — buttons: Yeet, Trust, Skip CAPTCHA, Dismiss
  • Blocklist hit — buttons: Yeet, Trust, Dismiss
  • /fban request from a group admin — buttons: Yeet, Dismiss
  • Yeet performed — buttons: Undo

Helpful behaviors:

  • Log entries are consolidated per user — multiple events for the same person update a single message rather than spamming the channel.
  • Buttons retire after a few days to keep the channel from accumulating thousands of stale clickables.
  • Score factor breakdown is shown on join and CAPTCHA log entries, summarizing why the bot reacted (without giving away weights).
  • Yeet log entries include up to several distinct messages the user sent, useful for crafting a blocklist pattern.

User Reports

Any group member can use /report (in reply to a message) to flag content. This notifies up to a few of the most active admins in that group via DM. It does not take automatic action.

Use this for content that violates your group’s rules but isn’t necessarily spam.

Flagging Spam to Bot Admins (/fban)

If your group sees a spammer you want globally banned (not just kicked from your group), reply to one of their messages with /fban.

This:

  1. Posts a Ban Request to the bot-admin log channel.
  2. Includes the user’s profile, the offending message, and any history the bot has on them.
  3. Adds a Yeet button so bot admins can globally ban with one tap.

/fban is the recommended way for a chat admin to escalate. It’s faster and lower-friction than asking in the support chat.

If the user is only a problem in your specific group, prefer kicking/banning them yourself with Telegram’s built-in tools rather than /fban. Yeet is for cross-group spam patterns, scammers, and known bad actors.

Privacy & Data

To do its job, the bot stores:

  • Your group’s ID and the bot’s permissions in it
  • Group admin IDs (synced via /admins)
  • Members’ Telegram IDs, names, usernames, bios, profile photos (refreshed periodically)
  • Messages sent in groups where the bot is present (text, sender, timestamp, reply links)
  • Reactions seen on messages
  • CAPTCHA challenges and their outcomes
  • Action audit log (joins, bans, trusts, CAPTCHAs, etc.)

Stored data is used only for moderation: scoring users, deduplication, cleaning up after a yeet, generating audit logs, and running the appeal flow. It is not sold, shared, or used for anything else. Removing the bot from your group stops new data collection for that group.

If a user is permanently removed (yeeted then never appeals), their stored history remains for audit purposes but is not used outside moderation.

Frequently Asked Questions

The bot CAPTCHA’d one of my regulars.
Run /admins to make sure your admin list is synced — admins are always exempt. Long-time members with consistent activity automatically bypass CAPTCHAs. If someone was wrongly challenged, an admin can tap Trust on the log entry, or use /trust in reply to the user.
A legitimate user got banned. How do I fix it?
Either tap Undo on the yeet log entry, or tell the user to DM @CheeseSpamBot with /start and solve the CAPTCHA. Either path fully restores them.
How do I flag a spammer the bot missed?
Reply to their message with /fban. This posts a ban request to the admin log channel where bot admins can review and yeet with one tap.
Can I use the bot in multiple groups I admin?
Yes — that’s the design. Bans are global by default, so a spammer caught in one group is removed from all of them. The grace period prevents the bot from disrupting your existing community when first added.
The bot isn’t deleting “User joined” / “User left” messages.
Run /settings and turn on Clean welcome and/or Clean leave. Make sure the bot has Delete messages permission in your group.
How do I change the welcome message?
/setwelcome Your message {mention} — the {mention} placeholder becomes a clickable name. /setwelcome shows the current text. /setwelcome reset restores the default.
Does the bot work in supergroups, basic groups, channels, and threads?
Supergroups and topics (forums) are fully supported. Channels are not — the bot is for community chats. Basic groups are supported but Telegram itself recommends migrating to supergroups.
Can a user get the bot to challenge themselves?
Yes — they can DM the bot and use /start. This is also the path used by banned users to appeal.
Why doesn’t the bot explain exactly why someone was flagged?
We deliberately don’t publish the specific signals or thresholds. If we did, spammers would evade them within days. Bot admins see a high-level breakdown in the log channel; that breakdown is enough to make a decision without exposing the rules to the public.
Who runs the bot?
The bot is operated by a small team of volunteers. The support chat (linked from /help) is the place to coordinate with bot admins, request features, or report problems.

Have a question this page didn’t answer? Run /help in your group to open the interactive help menu, or reach out via the support chat linked there.

Ready to clean up your group?

Add @CheeseSpamBot as an admin, run /admins, and you’re done. Bans are global by default — one tap removes a spammer from every group running the bot.

Add to a group Open @CheeseSpamBot