u/Yaitzebik

▲ 1 r/TGuard

How to protect your Telegram giveaway from bots

Every time you announce a giveaway, bots show up within minutes. Not because someone manually sent them — there are accounts that specifically monitor channels for keywords like "giveaway", "prize", "winner" and auto-join the moment they see one. By the time your legitimate subscribers even notice the post, a few hundred bot accounts have already "participated".

The obvious problem: you draw a winner and it's a bot. No prize delivery, no real engagement, just embarrassment if you announce the username publicly.

The less obvious problem: inflated participant counts make your giveaway look more popular than it is, which sounds fine until a sponsor asks why 800 people "participated" but only 12 clicked the product link.

TGuard (@channel_guardian_bot) handles this before the draw. It cross-checks every participant against a database built from bot attacks across 12,000+ protected channels. If an account has been involved in raids or subscription fraud anywhere in that network, it gets flagged. You draw from the clean list — the one that reflects who actually showed up for the giveaway.

reddit.com
u/Yaitzebik — 3 days ago
▲ 1 r/u_Yaitzebik+2 crossposts

How to clear the banned users list in your Telegram channel in one click

After a bot raid, your channel's ban list fills up fast. A few hours of attack is enough to accumulate 1,000–3,000 banned accounts. They stay there permanently — Telegram doesn't clean them up automatically.

The native interface gives you a list and a per-user unban button. To clear 2,000 entries you tap each one individually: open profile, hit Unban, confirm. Most admins just leave the list as-is.

With TGuard (@channel_guardian_bot) bot one button clears the whole list. The screenshot shows two options in the bot interface: clear the full blacklist, or clear only bans from the last X hours. The second one is useful right after a raid — you surgically remove the fresh wave without touching accounts you banned manually before the attack.

u/Yaitzebik — 4 days ago
▲ 3 r/TGuard+1 crossposts

How to find fake members in your Telegram channel or group

I am building TGuard (@channel_guardian_bot). In this post I want to share what you can see from analytics table TGuard gives you as an admin.

The screenshot shows the subscriber analytics table on a real channel — 560k events, two TikTok promo links, and a bot problem hiding in plain sight. Each row is a join or leave event. Columns: name, username, gender, country, which invite link they used, and a bot score. Red rows are flagged accounts.

Three things jump out immediately from this data:

One link drove 300k of the events. Two invite links named "TikTok link" and "TikTok link 2" together account for more than half the channel's entire join history. If those links were used in a boosting order, you can see exactly which wave brought the fakes — and target the cleanup to that window only.

Country distribution doesn't match the channel. This is a Russian-language channel. Top countries in the subscriber list: India (66k), Russia (46k), United States (33k), Spain (11k). India at #1, ahead of Russia, is a hard signal. Organic Russian channels don't grow that way. Aggregate stats would never show this — the table makes it visible in seconds.

88,000 accounts flagged overnight! The bot score column goes red above the threshold. 88k rows are red here — cross-referenced against attack history from other channels under TGuard protection. Not "looks suspicious." Actual prior attack involvement.

560,000 events may looks fine until you see where they came from and who they really are.

u/Yaitzebik — 5 days ago
▲ 2 r/TGuard+1 crossposts

Telegram CAPTCHA for channels and groups — how to make it work for public and private

Adding CAPTCHA to a Telegram channel or group is possible, but the setup is completely different depending on whether your channel is public or private — and Telegram's own docs don't really explain either case. Here's how it actually works.


Private channels and groups (join requests)

This is the cleanest flow. In Telegram settings, enable join requests for your channel or group — anyone who wants in has to apply first. With @channel_guardian_bot added as admin, every incoming join request triggers a private message to the applicant with a challenge (screenshot shows how it looks).

The challenge itself is two buttons: one that says "I am human" and one that's written in leet characters to fool simple automation but readable to any real person in about half a second. Solve it right within 5 minutes → request approved. Wrong answer or timeout → declined, no retry. No admin action needed on your end.

A few things to get right for this to work smoothly:

The bot needs "Add Members" permission to auto-approve passing requests. Without it, captcha still filters — you'd just approve the human-verified requests manually, which at minimum means your queue only contains real people.

If you enabled auto-approval on your channel, the bot will approve everyone who passes the captcha automatically. If not, it holds them for your review.

After passing, you can configure a custom welcome message — useful for pointing new members to pinned posts or channel rules before they're fully in.

For private groups this is probably the lowest-friction bot protection available. People applying to join are already waiting for approval, so adding a one-button captcha costs real users essentially nothing and stops bots completely.


Public channels and groups

Harder. Telegram doesn't allow join requests on public channels — anyone can click Join with zero friction, which is exactly what bot farms take advantage of. A single boosting order can add tens of thousands of fake accounts overnight.

The workaround that actually works: a captcha-gated invite link. You generate a special link, pin it in your channel as the primary join method, and configure the bot to kick anyone who joins through any other path — Telegram's native Join button, old invite links, whatever. Kicked users get redirected to the captcha link. Once they pass, the kick is lifted.

The channel stays public. The filter just lives at the entrance instead of being built into Telegram's join flow.

One thing to get right: any old invite links you've shared in posts or bios now become secondary entry points that trigger the kick-and-redirect. Pin the captcha link prominently and update anywhere the old link was shared. Otherwise you'll have real users confused about why they're getting kicked.

There's a public test channel (@tguard_public_captcha_test) where you can see the whole flow from @channel_guardian_bot before setting it up on your own.


Is it worth it

CAPTCHA blocks nearly 100% of bot joins. The cost is one extra step for every real person. For private channels and groups with join requests already enabled, that's basically zero added friction — they were waiting for approval anyway. For public channels, it's a judgment call. Most channel owners run it during giveaways, ad campaigns, or active bot attacks, and turn it off for normal operation. Running it permanently on a public channel with organic growth will lose you some real subscribers who can't be bothered.

u/Yaitzebik — 6 days ago
▲ 1 r/TGuard+1 crossposts

How to verify a Telegram channel has real subscribers — audience quality report

We build TGuard (@channel_guardian_bot). One thing we get asked about constantly is how to prove — or check — that a channel's subscriber count isn't fake. We added a feature for this: an audience quality report that breaks down exactly what's in a channel's subscriber base. Here's the practical version of how it works.


Who actually needs this

The clearest use case is buying a channel. You're looking at a 50,000-subscriber channel and the seller sends you a screenshot of Telegram stats. That proves nothing — subscriber counts are easy to inflate with fake subscriber services, and the damage doesn't show up until after you've paid and engagement is flatlined. What you want before transferring money is the actual breakdown: how many of those accounts are bots, how many are ghost accounts that never engage, how many are deleted profiles Telegram hasn't cleaned up yet. The certificate gives you that.

Second use case is selling ads. Advertisers who've been burned before will ask for something more than channel analytics. A report generated by an independent bot that scanned your subscriber list — timestamped, tied to your channel's Telegram ID — is harder to argue with than anything you produce yourself.

Less common but worth mentioning: some owners post the report publicly as a statement that they don't inflate numbers. Useful in niches where everyone is obviously buying subscribers and you want to stand out.


What the report actually shows

Cleanness score from 0 to 100%, graded A+ through E. The cutoffs are real: A+ means ≥90% of scanned subscribers are real, A is ≥85%, and it steps down through B, C, D to E. A channel that's been kept clean and never bought fake subscribers usually sits somewhere in the B+ to A range.

Alongside the score you get raw numbers: total subscribers, bots found, ghost accounts (zero-activity, mass-registered fakes — the kind you get from any cheap subscriber service), and deleted accounts. The deleted count is often the giveaway — legitimate channels have a few, channels that bought subscribers two years ago have thousands.


The catch

The report only generates once enough subscribers have been scanned — 50% coverage minimum, or 10,000 accounts on a large channel. Connect a new channel and try to generate immediately and you'll get a "not enough data" error. Run the scan first, then wait a few hours for the score to calculate. It's a one-time setup cost.


Getting it

TGuard → your channel → Cleanness Report → Generate. Comes out as a message with a grade image attached. Forward it to whoever needs it or post it publicly.

One more thing: if you post the report on your channel or social media and send us the link, you get bonus subscription time. Mention it because it's actually worth doing — it takes 30 seconds.


Questions welcome, especially if you're trying to audit a channel before buying. The ghost vs deleted distinction trips people up and it matters for figuring out what kind of inflation you're looking at.

u/Yaitzebik — 7 days ago
▲ 1 r/TGuard

How to protect your Telegram channel or group from a bot attack — what actually works

We build TGuard (@channel_guardian_bot). Bot attacks on Telegram channels are basically our whole world, so here's what we've learned building defenses against them.


Three attack types, very different problems

The obvious one is a bots swarm — someone orders 10,000 fakes and they all hit your channel in an afternoon. Engagement craters, Telegram's algorithm notices, sponsors ask questions. Hard to miss, at least.

Worse in some ways are prize hunters: accounts built to look real — profile photo, some posts, real-ish names — created to enter giveaways and contests. They slip past naive bot filters. We see a lot of these.

Then there's the slow drip bot attack, which is the nastiest. A few hundred fakes per day. Nothing spikes, nothing looks alarming, and three weeks later your real engagement rate is half of what it was. These are the hardest to explain to a sponsor after the fact.


What we built to protect channels and groups

Antivirus. Every new subscriber gets cross-referenced against a database of accounts we've seen participating in bot attacks on other channels. Not "this looks suspicious" — actual attack history. 10M+ accounts in there. It catches prize hunters too, not just obvious bot farms, because those accounts keep showing up across multiple attacks.

Rate limiting. You set a ceiling — say, 200 new subscribers per hour based on your normal growth. A bots swarm blows past that threshold and the excess gets auto-removed. Simple and effective for mass attacks. One real gotcha: remember to raise the limit before you run ads or a giveaway.

CAPTCHA. The most aggressive way to protect a channel or group from bots — every new subscriber solves a challenge before they're in. Nearly 100% effective. The cost is friction: some real people won't bother on a public channel. We'd call it overkill for normal operation and essential if you're actively under attack. Supported for both: public and private channels and groups.

Selective cleanup. After a bot attack, you don't want to delete everyone who joined that week. The cleanup tool lets you filter the subscriber list by join date, last seen, username patterns, whatever, and remove just the junk. Surgical rather than scorched earth.

There's also an SOS mode — one button enables a default protection stack if you need cover fast and don't want to tune settings in the middle of an incident. Fine as a first response, but worth revisiting once things calm down.


Honest recommendation

For most channels: antivirus on permanently, rate limit set to normal growth plus some headroom. That's it. Handles the majority of bot attacks without touching the user experience.

CAPTCHA only if you're under real sustained attack or about to run something high-stakes where fake entrants are a specific problem.

Clean up after every major promo. There's always some leakage, and a few minutes of cleanup right after is a lot cheaper than discovering the problem months later.


Happy to answer questions, especially about slow drip attacks — that's where most people get burned without realizing it.

reddit.com
u/Yaitzebik — 8 days ago
▲ 3 r/TGuard+1 crossposts

How to remove deleted and dead accounts from your Telegram channel

If your channel shows 8,000 subscribers but each post gets 200 views, part of that gap is deleted accounts. Telegram doesn't clean up its own member lists when an account gets purged — it just empties the profile. The account stays, occupying a slot in your subscriber count forever.

TGuard bot (@channel_guardian_bot) has two tools for this, and they're not the same thing.


Deleted accounts

A deleted Telegram account has no name, no username, no profile photo — just an empty slot. Telegram itself doesn't remove these from your channel when the account disappears.

Scan for deleted is the first step. TGuard checks every subscriber and flags anyone whose account is gone. When it finishes, you get a report showing who was found.

Then there's Clear deleted subscribers, which actually removes them. TGuard goes through your member list, kicks everyone flagged as deleted, and repeats until nothing's left. The final message tells you how many were removed. You can run this once per 24 hours per channel.


Dead accounts

Dead accounts are different. The account still exists — the person just hasn't opened Telegram in months. TGuard picks this up during regular scans using Telegram's own last-seen status, and anyone who's been offline for a long time ends up in the dead report under Analytics.

There's no removal button for these, and honestly that makes sense. Someone who hasn't opened Telegram since October might be back in January. A large dead list usually points to past Telegram Ads traffic or giveaways — people who joined once and never came back.


Which one actually matters

Deleted accounts are worth clearing. They inflate your subscriber count with literally nothing. Running the cleanup takes a few minutes.

Dead accounts are a judgment call. The report shows you the scale of the problem, but mass-removing inactive accounts drops your public subscriber number — which some audiences treat as a trust signal.

Start with deleted. That's the unambiguous one.


Video walkthrough: https://www.youtube.com/watch?v=tgI5AGd9IK8

u/Yaitzebik — 9 days ago
▲ 1 r/TGuard

How to see ALL subscribers of your Telegram channel, not just the last 200

TL;DR: Telegram caps the member list UI at 200, but there are actually two separate solutions depending on what you need: (1) scan your current full subscriber list by name right now, and (2) track every join/leave event going forward. Tools like @channel_guardian_bot (TGuard) do both.


If you manage a Telegram channel you've probably noticed this already: go to your subscriber list, and you see at most 200 people. You have 30,000 subscribers. You see 200.

I spent a while thinking this was a bug or a display glitch. It's not. It's a deliberate Telegram design decision — to protect subscriber privacy. Makes sense from the subscriber's side. Completely maddening from the owner's side.


Why Telegram does this

It's not a technical limitation — they could show more. They chose not to. The reasoning is that if any channel admin could export a complete member list, subscribers would have no way to keep their reading habits private. Telegram takes that seriously.

Fine. But it creates real blind spots for anyone who actually runs a channel.


What you're actually missing

Who left after a specific post. You posted something, 800 people unsubscribed that day. Telegram shows you the net number in analytics. It doesn't tell you who they were, how long they'd been subscribed, or whether they were real accounts or bots.

Recurring bots. An account that joined during a bot attack six months ago, quietly left, and is back again — you have no record of that pattern. The 200-person snapshot is always "now", never history.

Invite link retention. You ran ads on three channels with three different links. Link B brought 500 people. How many of those 500 are still subscribed 30 days later? Without historical data, you literally cannot answer that.


Solution 1: Scan your full current subscriber list right now

This one surprised me when I found out it was possible. Telegram's API (getChatMembers) lets you search channel members by name — but it caps each query at 200 results. Sounds like a dead end, but there's a workaround.

TGuard's scanner exploits this systematically:

  1. It searches the member list for every letter of the alphabet — "a", "b", "c" ... "я" — plus digits and two-character combinations
  2. If any single query returns close to 200 results, it recursively expands that prefix: "an", "ar", "as" ...
  3. It deduplicates by user ID across all queries
  4. It keeps going until it has 95–99% coverage of your actual subscriber count

The result: a near-complete snapshot of who is currently in your channel, including their name, username, premium status, bot flag, last-seen status, and join date. For a channel with tens of thousands of subscribers this takes a few minutes. The coverage isn't guaranteed at exactly 100% (Telegram's search has quirks with certain Unicode names), but in practice it's very close.

This is useful for a one-time audit — bot check, audience demographics, export for ad targeting, whatever. You run it, you get the list.


Solution 2: Track every join and leave going forward

The scan gives you a snapshot of right now. It tells you nothing about what happened yesterday or last month. For that you need an event log.

Telegram's Bot API sends a ChatMemberUpdated event every time someone joins or leaves a channel where a bot is admin. Catch those events, log them with a timestamp and the invite link used, and you build a permanent subscriber history from that point forward.

What each event record contains:

  • User ID, name, username
  • Premium / bot / deleted account status
  • Country and last-seen status
  • The specific invite link they used to join
  • Timestamp

What you can do with this over time:

Post-mortem on unsubscribe spikes. Filter exits within 24–48 hours after a specific post. See exactly who left — real accounts vs bots, country breakdown, average subscription duration. "We lost 800 people" becomes something you can actually analyze.

Bot pattern detection. Accounts doing join → leave → rejoin cycles show up clearly in the timeline. You can spot the pattern and block proactively rather than waiting for the next wave.

Invite link cohorts. For each link: how many people who came through it are still subscribed at 30, 60, 90 days? Channel B brought 600 but 60% churned in two weeks. Channel C brought 200 but 90% stayed. That's your ad budget decision made easy.


The catch with event tracking

No tool can give you history before you connect it. The Bot API only delivers events in real time. If you connect a bot today, you have data from today forward. Everything before that is gone.

The scan (Solution 1) can recover the current state. But the history of how you got there — who came, who left, when — only exists if you were logging it. The earlier you connect a bot, the more complete your record.


Practical setup

Add @channel_guardian_bot as admin with Restrict Members permission. It starts recording join/leave events immediately. Run a scan from the dashboard whenever you want a full snapshot. Both work independently — the scan is a point-in-time export, the event log is continuous.

You can also build the event logging yourself — ChatMemberUpdated in the Bot API docs is well documented. The name-search scanner is more work to implement correctly (the recursive prefix expansion with deduplication is non-trivial), but it's doable if you're into that kind of thing.


Happy to answer questions. The scan + event log combination is genuinely the most complete picture you can get of a Telegram channel audience within what the API allows.

u/Yaitzebik — 14 days ago