Статья Проверяем подписку на канал в телеграм боте | Telebot

Добрый

Member
Местный
18 Ноя 2020
9
6
Сегодня мы научимся проверять присутствие человека в канале через бота на Python.
Библиотека - pytelegrambotapi

Думаю все видели таких ботов которых нельзя использовать без подписки на канал,теперь и у нас будет такой бот ;)

Первым делом импортируем нужные библиотеки:

Python:
import telebot
from telebot import types

Дальше токен бота и ссылка на канал(p.s.работает только с открытым каналом):
Python:
token = "здесь токен бота"
channel = "ссылка на канал"

Теперь пишем кнопку которая будет проверять подписку на канал и хэндлер для старта бота:
Python:
check = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
but1 = types.KeyboardButton("Проверить подписку")
check.add(but1)

bot = telebot.TeleBot(token)
@bot.message_handler(commands=['start'])
def welcome(message):
  bot.send_message(message.chat.id,   text = "Подпишись на канал t.me/testimbota3 для использования бота", reply_markup=check)

Добавляем обработчик текста и самое главное,проверку подписки на канал:
Python:
@bot.message_handler(func=lambda message: True, content_types=['text'])
def handle_text(message):
  if message.text == "Проверить подписку":
    status = ['creator', 'administrator', 'member']
    for i in status:
      if i == bot.get_chat_member(chat_id=channel, user_id=message.from_user.id).status:
        chat_id = message.chat.id
        bot.send_message(chat_id, "Доступ получен✅")
        break

    else:
      chat_id = message.chat.id
      bot.send_message(chat_id, text = "Нету подписки")
bot.polling(none_stop=True)

Цикл for проверяет значения из переменной status,и если находит совпадение,бот работает дальше,если нет то просит подписаться на канал

Как выглядит запуск бота и проверка на подписку:





Мне лень делать гитхаб,поэтому код залью на анонфайл
Просмотр скрытого контента доступен для зарегистрированных пользователей!
Спасибо за прочтение🙂
 
Последнее редактирование:

iiieba

Beginner
1 Фев 2021
2
0
Подскажите как исправить?
Код:
C:\Users\Admin\Desktop>py 1.py
  File "1.py", line 22
    status = ['creator', 'administrator', 'member']
    ^
IndentationError: expected an indented block
 

admin

Администратор
Команда форума
1 Дек 2019
858
16
840
ovnl.in
Подскажите как исправить?
Код:
C:\Users\Admin\Desktop>py 1.py
  File "1.py", line 22
    status = ['creator', 'administrator', 'member']
    ^
IndentationError: expected an indented block
Наверное убрать попробовать все пробелы перед status в 22ой строке, но не факт, кода не видел.
 
  • Симпатия
Реакции: iiieba

iiieba

Beginner
1 Фев 2021
2
0
Наверное убрать попробовать все пробелы перед status в 22ой строке, но не факт, кода не видел.
Помогло, теперь только когда запускаю скрипт и в боте нажимаю проверить подписку выдает такую ошибку
Код:
C:\Users\Admin\Desktop>py 1.py
2021-02-01 13:47:03,796 (__init__.py:515 MainThread) ERROR - TeleBot: "A request
 to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request
: chat not found"
ид канало вроде указал верно в формате
channel = "-1001194290564"