Я в программировании полный ноль, но появилась задача которую нужно решить. Создать телеграм бота, который после нажатия кнопки /start проверял у меня подписку на телеграм канал. Если подписки нет, выводил информацию о том что нужно подписаться на канал и предлагал бы заново нажать на кнопку /start. Если подписка появилась, или она была, выводилось приветсвенное сообщение и на выбор две кнопки "Скачать файл" "Написать админу"
Весь код выглядит у меня так
После проверки кода на подписание бот завис и не работает. Не знаю в чем может быть проблема. может где то в логике ошибка, или я не правильно выход из условия прописал в случае если подписка на канал есть
Весь код выглядит у меня так
Python:
import telebot
from telebot import types
import config as cfg
# в сonfig положил массив с инфой по каналу на котором нужно проверить подписку
# и константу с сообщенем
#CHANNEL = [
# ['Канал 1', '-00000000', 'https://t.me']
#]
#NOT_SUB_MESSAGE = "Подпишитесь на канал чтобы получить руководство"
bot = telebot.TeleBot('13131')
def get_keyboard():
keyboard = types.ReplyKeyboardMarkup(resize_keyboard=True)
keyboard.add(types.KeyboardButton("Получить гайд"))
keyboard.add(types.KeyboardButton("Связаться с экспертом"))
keyboard.add(types.KeyboardButton("Подписаться на канал"))
def check_sub(channels, user_id):
for channel in channels:
chat_member = bot.get_chat_member(chat_id=channel[1], user_id=user_id)
if chat_member.status == 'left':
return False
return True
@bot.message_handler(commands=['start'])
def start_message(message):
user_id = message.from_user.id
subscribed = check_sub(cfg.CHANNEL, user_id)
if not subscribed:
bot.send_message(message.from_user.id, cfg.NOT_SUB_MESSAGE, reply_markup=get_keyboard())
@bot.message_handler(func=lambda message: True)
def on_click(message):
user_id = message.from_user.id
subscribed = check_sub(cfg.CHANNEL, user_id)
if message.text == "Подписаться на канал":
if not subscribed:
bot.send_message(message.chat.id, 'Подписывайтесь на наш канал: https://t.me')
bot.send_message(message.chat.id, 'Для начала снова воспользуйтесь командой /start')
else:
bot.send_message(message.chat.id, 'Вы уже подписаны на канал.')
elif not subscribed:
bot.send_message(message.chat.id, 'Для получения подарка подпишитесь на телеграмм канал')
elif message.text == "Получить гайд":
bot.send_document(message.chat.id, open(r'file.pdf', 'rb'))
elif message.text == "Связаться с экспертом":
bot.send_message(message.chat.id, "t.me/link", parse_mode='html')
bot.send_message(message.chat.id, 'Выберите действие:', reply_markup=get_keyboard())
bot.infinity_polling()