Как сделать проверку на подписку в боте Телеграм

Пишу Telegram бота при помощи библиотеки aiogram, хочу чтобы бот проверял подписан ли человек на Telegram канал, в противном случае предлагал подписаться. Не знаю как это реализовать, помогите пожалуйста!

Отслеживать
задан 28 июл 2020 в 14:33
German Shtukmaister German Shtukmaister
89 1 1 золотой знак 1 1 серебряный знак 7 7 бронзовых знаков

2 ответа 2

Сортировка: Сброс на вариант по умолчанию
Отслеживать
51.4k 194 194 золотых знака 56 56 серебряных знаков 232 232 бронзовых знака
ответ дан 26 сен 2021 в 19:12
26 1 1 бронзовый знак
Ваш вариант лучше, спасибо!

30 сен 2021 в 14:39

Вроде разобрался! Для решения проблемы использовал метод «GetChatMember», который возвращает строку с данными о пользователе (причем не важно, подписан ли человек на интересующий канал или нет, в конце строки будет статус пользователя, который нам и нужен!). В общем получили мы эту строку, что делать дальше? Я разбил ее на элементы при помощи библиотеки ‘re’ (user_channel_status — та самая строка)

Как сделать проверку подписки на канал через Телеграм бот


user_channel_status = re.findall(r»w*», str(user_channel_status))

Далее на нужно вытащить уже из разбитой строки статус, здесь нужно помнить, что не у всех пользователей есть фамилия, так что нужно сделать условие для всех возможных случаев!

try: #Это для тех у кого есть фамилия #из-за этого элемент со статусом находится дальше if user_channel_status[70] != ‘left’: await bot.send_message(message.from_user.id, ») #Пользователь уже подписан else: await bot.send_message(message.chat.id, ») #Требуем подписки except: #Для тех кто без фамилии if user_channel_status[60] != ‘left’: await bot.send_message(message.from_user.id, ») #подписан else: await bot.send_message(message.from_user.id, ») #Требуем подписки

Еще по теме:  Как сохранить весь чат в Телеграмме

Собственно ниже будет весь код:

user_channel_status = await bot.get_chat_member(chat_id=id_канала, user_id=message.chat.id) user_channel_status = re.findall(r»w*», str(user_channel_status)) try: if user_channel_status[70] != ‘left’: #Условие для «подписанных» else: await bot.send_message(message.chat.id, ») #Условие для тех, кто не подписан except: if user_channel_status[60] != ‘left’: await bot.send_message(message.from_user.id, ») #Условие для «подписанных» else: await bot.send_message(message.from_user.id, ») #Условие для тех, кто не подписан

Источник: ru.stackoverflow.com

MegaHubTelegram

Перевод представленных материалов на ваш родной язык может быть автоматически осуществлен при помощи переводчика Google. Перейдите по ссылке и выберите нужный язык в заголовке:

Телеграмм бот с функцией проверки Подписки на каналы


https://translate.googleusercontent.com/translate_c?depth=1tl=es#128272;Админ | Расширения | Защита Бота | Базовая Проверка Подписки

⬛ Настройка бота на проверку Подписки.

Чтобы бот мог проверить подписку пользователя, вам нужно добавить своего бота в группу или канал, подписку на который вы хотите проверять.

Включение проверки подписки

Перейдите в свой бот:

☞ Админ | Проверка Подписки.

Настроить Группу/Канал

Добавьте своего бота в группу или канал, где вы хотите проверять подписку. Если вы этого не сделаете — добавление канала и проверка подписки будут невозможны!

Используйте один из методов, чтобы установить канал или группу.

2. Так же для добавления ПУБЛИЧНОГО канала/группы можно переслать одно изсообщений из этого канала/группы.

Сообщение о Подписке

Установите сообщение, которое будет показано пользователю, и сообщит ему о необходимости подписаться.

Тут можно использовать любые типы сообщений которые используются в меню.

Сообщение если юзер НЕ подписан

(в некотором смысле — сообщение об ошибке)

Добавляется аналогичным образом как и сообщение о необходимости подписаться в разделе выше. Это сообщение будет показано если юзер попытается воспользоваться защищенным функционалом не подписавшись не канал или группу.

Кнопка «Задать Пустым» очистит существующее сообщение, а юзеру будет показано сообщение по умолчанию.

Проверка подписки для новых юзеров

После того, как вы все настроите, вы можете включить проверку подписки для «новых пользователей». Что касается проверки подписки на /start, вы можете установить проверку для всех новых пользователей ( New All) или только для новых рефералов — тех кто пришел по реферальной ссылке ( New Refs).

Еще по теме:  Сделать групповой звонок в Телеграмме

Текущая настройка указана на кнопке, режимы переключатся по кольцу.

⬛ Проблемы при проверке Подписки

1. Если бот сталкивается с проблемами при попытке проверить подписку, он уведомит об этом владельца бота.

Если вы получаете такое или подобные уведомления — убедитесь, что группа указана, что бот добавлен в группу/канал, перейдите в «Настроить Группу/Канал», ПЕРЕЧИТАЙТЕ ЭТО РУКОВОДСТВО — проверьте настройки и устраните проблему.

2. Если у вас нет ошибок, и кажется, что ваш бот ничего не проверяет.

Ваш бот НЕ будет проверять подписку для владельца бота и его администраторов. Поэтому, если вы, как Creator, хотите протестировать новую функцию подписки, сделайте это, используя учетную запись, которая не является ни администратором, ни создателем, ни текущим пользователем бота или пользователем группы / канала.

⬛ Доступ к кнопке только после Подписки

Если вы хотите заблокировать не весь бот, а только его часть, вы можете проверить подписку на любую кнопку. Сделайте следующее:

1. Зайдите в » Редактор Кнопок»

2. Выберите кнопку и откройте «Настройки» кнопок

3. Включите «Подписка (join)»

Включив эту опцию, вы поставите «защиту подпиской» на кнопку, и только пользователь, который подписался на канал/группу, сможет войти.

NOTE! При «базовой одноразовой проверке подписки» подписка будет совершена только один раз! Если пользователь покинул канал, ничего не произойдет. Для периодической проверки используйте опции «еженедельная проверка» и «ежедневная проверка».

⬛ Еженедельная и Ежедневная проверки Подписки

«Базовая проверка подписки» выполняет проверку один раз в месяц для каждого пользователя: первый раз при запуске для новых пользователей (или только для рефералов) или при первом нажатии на кнопку (если установлено). Следующая проверка будет осуществлена через месяц.

«Еженедельная и ежедневная проверка подписки» могут быть подключены дополнительно если вам нужно проверять ваших пользователей чаще.

Еще по теме:  Что будет если нажать удалить контакт в Телеграмме

Для подключения перейдите в свой бот:

☞ Админ | Расширения | Защита Бота | Еженед. и Ежеднев. проверка подписки

Вместе с этими расширениями вы получаете дополнительные опции.

1. В Админ | Проверка Подписки — вы получите доп. опцию » Все»:

Когда эта опция включена на весь бот, если любой пользователь (не только новый) нажимает любую кнопку, его подписка будет проверяться (один раз в неделю или один раз в день, в зависимости от типа приобретенной опции проверки).

2. Проверка на отдельной кнопке (если она уже была включена ранее) начнет автоматически проверять подписку в соответствии текущим режимом проверки — ничего отдельно для этого делать не нужно.

Источник: telegra.ph

Как проверить, подписан ли пользователь на определённый канал?

Я пишу телеграмм ботов на библиотеке PyTelegramBotApi (telebot) и мне нужно сделать так, чтобы бот работал только если юзер подписался на определенный канал. Я знаю, что бота нужно добавить в группу и сделать админом, но я не знаю как написать такой скрипт, который будет проверять, подписан ли юзер.

  • Вопрос задан более двух лет назад
  • 2545 просмотров

Комментировать
Решения вопроса 3

SoreMix

Проверять через getChatMember
Ответ написан более двух лет назад
Нравится 2 2 комментария

erniesto77

через try catch

SoreMix

Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать

MinTnt

Вот функция для указного действия.
getchatmember(chat_id, user_id)
chat_id = id нужного канала/чата
user_id = id пользователя

Если пользователь есть в чате, то оно вернёт информацию по нему, если нету, то вроде выдаст исключение, или же просто не сможет получить данных.

Так как краш программы (из-за исключения) нам не нужно, то весь нужный код вместе с getchatmember делаем вот так:

try: #getchatmember и тд. код except Exception: bot.sendmessage #Тутя записать сообщение, об ошибке, т.е. прописать код, для случая ,если пользователь не подписан

Источник: qna.habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...