В боте есть реферальная система, и система проверки подписки на канал
Чтобы система проверки на подписку канала заработала нужно в свой канал пригласить вашего бота и дать админа ему
Чтобы система проверки на подписку канала заработала нужно в свой канал пригласить вашего бота и дать админа ему
Python:
import telebot
from telebot import types
import json
BOT_TOKEN = 'токен'
CHANNEL_ID = '@канал_на_который_должны_подписаться'
VIP_CHANNEL_ID = 'канал_с_ответами_можете_просто_убрать_и_все'
bot = telebot.TeleBot(BOT_TOKEN)
INVITED_USERS_FILE = 'invited_users.json'
try:
with open(INVITED_USERS_FILE, 'r') as f:
invited_users = json.load(f)
except FileNotFoundError:
invited_users = {}
def check_subscription(chat_id):
try:
member = bot.get_chat_member(CHANNEL_ID, chat_id)
return member.status in ['member', 'creator', 'administrator']
except telebot.apihelper.ApiException:
return False
def handle_invitation(user_id, referral_id):
user_id = str(user_id)
referral_id = str(referral_id)
if referral_id not in invited_users:
invited_users[referral_id] = {"invited_count": 0, "used_links": []}
if user_id not in invited_users[referral_id]["used_links"]:
invited_users[referral_id]["invited_count"] += 1
invited_users[referral_id]["used_links"].append(user_id)
bot.send_message(referral_id,
f"🎉 Вы пригласили ещё одного пользователя!\n"
f"Всего приглашено: {invited_users[referral_id]['invited_count']} / 15")
if invited_users[referral_id]["invited_count"] >= 15:
bot.send_message(referral_id,
f"🥳 Вы пригласили 15 человек! "
f"Вот ссылка на VIP канал: {VIP_CHANNEL_ID}")
with open(INVITED_USERS_FILE, 'w') as f:
json.dump(invited_users, f)
else:
bot.send_message(user_id, "Вы уже переходили по этой реферальной ссылке.")
@bot.message_handler(commands=['start'])
def start(message):
chat_id = message.chat.id
user_id = str(chat_id)
referral_id = None
if len(message.text.split()) > 1:
referral_id = message.text.split()[1]
if referral_id:
handle_invitation(user_id, referral_id)
if not referral_id and not check_subscription(chat_id):
keyboard = types.InlineKeyboardMarkup(row_width=1)
check_button = types.InlineKeyboardButton(text="Проверить подписку ✅", callback_data='check_subscription')
subscribe_button = types.InlineKeyboardButton(text="Подписаться на канал 📢", url=f"https://t.me/{CHANNEL_ID[1:]}")
keyboard.add(check_button, subscribe_button)
bot.send_message(chat_id, 'Для продолжения работы с ботом подпишись на наш канал!', reply_markup=keyboard)
else:
show_referral_info(message)
@bot.callback_query_handler(func=lambda call: True)
def handle_callback(call):
chat_id = call.message.chat.id
if call.data == 'check_subscription':
if check_subscription(chat_id):
bot.delete_message(chat_id, call.message.message_id)
show_referral_info(call.message)
else:
bot.answer_callback_query(call.id, text="Ты всё ещё не подписался на канал. Попробуй снова!", show_alert=True)
def show_referral_info(message):
chat_id = message.chat.id
user_id = str(chat_id)
if user_id not in invited_users:
invited_users[user_id] = {"invited_count": 0, "used_links": []}
referral_link = f"https://t.me/ссылка_на_вашего_бота?start={user_id}"
message_text = (
f"Приведи 15 человек по ссылке ниже и тогда тебе дадут бесплатный доступ в VIP ОГЭ\n\n"
f"Приглашено: {invited_users[user_id]['invited_count']} / 15\n\n"
f"Твоя персональная ссылка: {referral_link}"
)
bot.send_message(chat_id, message_text)
with open(INVITED_USERS_FILE, 'w') as f:
json.dump(invited_users, f)
@bot.message_handler(func=lambda message: True)
def handle_message(message):
pass
bot.polling(none_stop=True)