Программирование

Telegram бот: проверить приглашения друзей уникальными ссылками

Как в Telegram-боте проверить, пригласил ли пользователь друзей в канал: уникальные пригласительные ссылки (createChatInviteLink), отслеживание usage_count, лимиты (member_limit), безопасность и альтернативы вроде реферальных ссылок. Примеры на Python.

Как в Telegram-боте проверить, пригласил ли пользователь друзей в канал? Способы реализации: уникальные пригласительные ссылки, лимиты и альтернативные идеи

В Telegram-боте проверить, пригласил ли пользователь друзей в канал, можно с помощью уникальных пригласительных ссылок, созданных методом createChatInviteLink из Telegram Bot API. Бот выдаёт каждому юзеру персональную ссылку, а потом смотрит на usage_count через getChatInviteLink — это покажет точное число приглашённых. Плюс задавайте лимиты вроде member_limit, чтобы избежать спама, или комбинируйте с реферальными ссылками t.me/bot?start=code для простых случаев.


Содержание


Зачем отслеживать приглашения в Telegram-боте

Представьте: вы запускаете канал с эксклюзивным контентом, и хотите мотивировать юзеров приглашать друзей. За каждых 5 приглашённых — бонус. Но как бот поймёт, кто сколько принёс? Без трекинга это лотерея.

Уникальные пригласительные ссылки решают задачу на раз. Они позволяют строить реферальные системы, как в примере на GitHub. Плюс аналитика: откуда трафик, сколько стоит привлечение. В маркетинге это must-have — elama.ru прямо рекомендует для рекламы.

А если канал приватный? Тогда ссылки с creates_join_request заставят новичков ждать одобрения. Идеально для модерации.


Telegram Bot API даёт мощный инструмент: ChatInviteLink. Это объект с кучей полей — invite_link (сам URL), creator (кто создал, по user.id), usage_count (сколько раз использовали), member_limit (лимит юзеров).

Бот должен быть админом канала с правами can_invite_users. Без этого — ошибка 403.

Ключ: каждая createChatInviteLink генерирует новую уникальную ссылку. Храните mapping в БД: user_id → link_code. Потом по usage_count минус 1 (сам создатель) = число друзей.

Но что если юзер пригласил, а потом отписался? Usage_count считает переходы, не активных. Для точности комбинируйте с getChatMember на новых мемберах.


Давайте по шагам реализуем в Python с pyTelegramBotAPI. Сначала токен от BotFather, добавьте бота в канал как админа.

python
import telebot
from telebot.types import LabeledPrice
bot = telebot.TeleBot('YOUR_TOKEN')

@bot.message_handler(commands=['invite'])
def generate_invite(message):
 chat_id = '@your_channel' # или -100xxxxxxxxxx
 user_id = message.from_user.id
 
 # Создаём уникальную ссылку с лимитом 10
 invite = bot.create_chat_invite_link(
 chat_id=chat_id,
 member_limit=10, # Лимит приглашённых
 name=f"ref_{user_id}" # Имя для идентификации
 )
 
 # Сохраняем в БД (пример с dict, в проде — SQLite/PostgreSQL)
 db[user_id] = {'link': invite.invite_link, 'count': 0}
 
 bot.reply_to(message, f"Твоя ссылка: {invite.invite_link}\nПриглашай друзей!")

Готово! Юзер получает t.me/+abc123. Каждый клик увеличивает usage_count.

Из официальной документации: всегда новая ссылка, можно expire_date для срока.


Отслеживание и проверка usage_count

Теперь проверяем. Добавьте команду /check или таймер (cron/loop).

python
@bot.message_handler(commands=['check'])
def check_invites(message):
 user_id = message.from_user.id
 if user_id not in db:
 bot.reply_to(message, "Сначала сгенерируй ссылку!")
 return
 
 link = db[user_id]['link']
 invite = bot.get_chat_invite_link('@your_channel', link) # По ссылке
 
 invited = invite.usage_count - 1 # Минус себя
 db[user_id]['count'] = invited
 
 bot.reply_to(message, f"Ты пригласил {invited} друзей!")

Бинго. GetChatInviteLink возвращает свежие usage_count и pending_join_request_count (ожидающие).

Для реал-тайм: используйте updates с webhook. Или polling getChatInviteLinks — список всех ссылок.

Вопрос: а если кто-то спамит? revokeChatInviteLink по коду — и привет.


Лимиты и безопасность: member_limit, expire_date

Не давайте бесконечные ссылки. member_limit=5 — и ссылка умирает после 5 юзеров. Expire_date — через неделю.

В коде:

python
invite = bot.create_chat_invite_link(
 chat_id=chat_id,
 member_limit=5,
 expire_date=int(time.time()) + 7*24*3600 # 7 дней
)

Плюс creates_join_request=True — все новички в очередь админам. Избегайте self-referral: проверяйте creator.id != joiner.id.

GitHub-пример tg-inviter показывает, как комбинировать лимиты.

Безопасность: не храните ссылки вечно, ротируйте. Бот не видит, кто именно зашёл — только счётчик.


Альтернативы: Реферальные ссылки и другие идеи

Уникальные ссылки — топ, но есть проще. Реферальная система через deep linking: t.me/yourbot?start=ref_userid.

В /start:

python
if message.text.startswith('/start ref_'):
 referrer_id = int(message.text.split('_')[1])
 # Записать в БД: new_user -> referrer

Плюс: не нужны права админа. Минус: юзер должен стартануть бота, не напрямую в канал. Идеально для публичных каналов.

Другие идеи: InviteMember интеграция — готовый сервис с оплатой. Или VC.ru бот для проверки подписки через getChatMember.

StackOverflow рекомендует: комбо ссылок + webhook на joins.


Частые ошибки и как их обойти

Бот не админ? 403 Forbidden. Решение: права can_invite_users.

Usage_count=1, хотя друзей нет? Самоклик. Минусуйте 1 или блокируйте по IP/user_id.

Ссылка не уникальна? Всегда новая от API.

БД не держит маппинг? Используйте SQLite:

sql
CREATE TABLE invites (user_id INT PRIMARY KEY, link TEXT, count INT);

Из StackOverflow: проверяйте creator в getChatInviteLinks.

Тестируйте в тестовом канале — экономит нервы.


Источники

  1. Telegram Bot API — createChatInviteLink
  2. Telegram Bot API — getChatInviteLink
  3. GitHub — telegram-referral-bot
  4. Elama.ru — Пригласительные ссылки в Telegram
  5. StackOverflow — Unique invite links
  6. StackOverflow — Who sent invite link
  7. VC.ru — Бот для проверки подписки
  8. InviteMember — Telegram Integration
  9. GitHub — tg-inviter

Заключение

Telegram-бот легко проверит приглашения через уникальные ссылки createChatInviteLink + usage_count — это надёжно и масштабируемо. Добавьте member_limit для контроля, храните в БД, и реферальная система готова. Для простоты хватит deep linking, а для продвинутого — webhook + getChatMember. Начните с примера кода выше, протестируйте — и ваши юзеры сами потянут друзей. Удачи с каналом!

Авторы
Проверено модерацией
Модерация
Telegram бот: проверить приглашения друзей уникальными ссылками