Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Python telebot как сделать проверку на подписку на канал

python2009monster Ученик (47), на голосовании 10 месяцев назад
?
Голосование за лучший ответ
Мистер Мистерович Гуру (4925) 11 месяцев назад
Для проверки на то, подписан ли пользователь на определенный канал, можно использовать метод get_chat_member().

Например:

 import telebot 

bot = telebot.TeleBot('YOUR_BOT_TOKEN')

channel_id = '@your_channel_username'

@bot.message_handler(commands=['start'])
def start(message):
user_id = message.from_user.id

try:
chat_member = bot.get_chat_member(channel_id, user_id)

if chat_member.status != 'left':
bot.reply_to(message, "Вы подписаны на канал!")
else:
bot.reply_to(message, "Вы не подписаны на канал. Пожалуйста, подпишитесь, чтобы продолжить.")
except Exception as e:

bot.reply_to(message, "Произошла ошибка при проверке подписки на канал.")

bot.polling()
У бота должны быть права администратора в канале, в котором он будет проверять подписку.
python2009monsterУченик (47) 11 месяцев назад
выдает ошибку:
 File "D:\IVAN_\NOMEROK\main.py", line 27, in start1 
chat_member=bot.get_chat_member(channel_id, user_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
python2009monsterУченик (47) 11 месяцев назад
вот код (только та часть в корой вы мне написали):
 @bot.message_handler(commands=['start1']) 
def start1(message):
user_id=message.chat.id

chat_member=bot.get_chat_member(channel_id, user_id)
if chat_member.status!='left':
bot.send_message(message.chat.id, 'вы подписаны на канал')
else:
bot.send_message(message.chat.id, 'вы не подписаны на канал')
Мистер Мистерович Гуру (4925) python2009monster, попробуй так: import telebot from telebot.apihelper import ApiTelegramException bot = telebot.TeleBot("BOT_TOKEN") CHANNEL_USERNAME = '@your_channel_username' def is_subscribed(channel_username, user_id): try: bot.get_chat_member(channel_username, user_id) return True except ApiTelegramException as e: return False @bot.message_handler(commands=['start']) def start_command(message): user_id = message.from_ user.id if not is_subscribed(CHANNEL_USERNAME, user_id): bot.reply_to(message, f'Подпишитесь на канал {CHANNEL_USERNAME}, чтобы продолжить.') else: bot.reply_to(message, f'Вы подписаны на канал {CHANNEL_USERNAME}. Добро пожаловать!') bot.polling()
python2009monsterУченик (47) 11 месяцев назад
вот код (я не весь код вставлял а только ту часть которая нужна):
 channel_username='-1002022328830' 

try:
@bot.message_handler(commands=['start1'])
def start1(message):
def is_sub(channel_username, user_id):
bot.get_chat_member(channel_username=channel_username, user_id=message.chat.id)
return True

user_id=message.chat.id
if not is_sub(channel_username, user_id):
bot.reply_to(message, 'подпишитесь на канал')
else:
bot.reply_to(message, 'вы подписаны')
Исмагил Рустемович Профи (786) 11 месяцев назад
Для проверки подписки на Telegram каналы через Python Telebot можно использовать следующий код.

import telebot

# Замените значение на ваш токен от BotFather
TOKEN = 'your_token_here'

# Создаем бота
bot = telebot.TeleBot(TOKEN)

@bot.message_handler(commands=['start'])
def start(message):
chat_id = message.chat.id
bot.send_message(chat_id, 'Привет! Для проверки подписки на канал отправьте мне название канала.')

@bot.message_handler(func=lambda message: True)
def check_subscription(message):
chat_id = message.chat.id
channel_name = message.text

# Проверка подписки
if channel_name.startswith('@'):
try:
bot.send_message(chat_id, f'Вы подписаны на канал {channel_name}')
except Exception as e:
bot.send_message(chat_id, f'Ошибка: {e}')
else:
bot.send_message(chat_id, 'Название канала должно начинаться с @')

bot.polling()


Этот код создает Telegram бота, который принимает название канала от пользователя и проверяет его подписку на этот канал. Пожалуйста, не забудьте заменить `'your_token_here'` на ваш реальный токен бота.
Исмагил РустемовичПрофи (786) 11 месяцев назад
отступы сам доделай только
Серёжа МартУченик (107) 11 месяцев назад
попахивает гпт
Серёжа Март, кстати да
Сильвия Борогосян Ученик (106) 4 месяца назад
Можно не делать а использовать готовый бот )
ucmoder_bot
он же антиспам и проверка подписки на ваш канал
Похожие вопросы