Когда запускаю код и в телеграм боте нажимаю кнопку "проверить" подписку то бот просто грузит и в итоге не отправляет нкиакого сообщения в овтет
import telebot
from telebot import types
bot = telebot.TeleBot('Токен скрыл, в нем нет ошибки')
@bot.message_handler(commands=['start'])
def main(message):
markup = types.InlineKeyboardMarkup()
btn1 = types.InlineKeyboardButton('1win', url='https://1wowei.xyz/casino/list?open=register#lp1t')
markup.row(btn1)
btn2 = types.InlineKeyboardButton('Продолжить', callback_data='delete')
markup.row(btn2)
bot.send_message(message.chat.id, "Привет, чтобы продолжить зарегистрируйся на 1win", reply_markup=markup)
@bot.callback_query_handler(func=lambda call:True)
def callback(call):
if call.message:
if call.data == 'delete':
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.id, text='Отлично! Теперь напиши команду /next')
def start_markup():
markup = types.InlineKeyboardMarkup(row_width=True)
link_keyboard1 = types.InlineKeyboardButton("Канал", url="https://t.me/winteam777")
check_keyboard = types.InlineKeyboardButton("Проверить✅", callback_data="check")
markup.add(link_keyboard1, check_keyboard)
return markup
@bot.message_handler(commands=['next'])
def start(message):
chat_id = message.chat.id
bot.send_message(chat_id, "Чтобы продолжить подпишись на наш канал!", reply_markup=start_markup())
def check(call):
status = ['creator', 'administrator', 'member']
for i in status:
if i == bot.get_chat_member(chat_id="-1002022836960", user_id=call.message.chat.id).status:
bot.send_message(call.message.chat.id, "Вы успешно подписались на канал!")
break
else:
bot.send_message(call.message.chat.id, "Подписка на канал обязательна!", reply_markup=start_markup())
@bot.callback_query_handler(func=lambda call:True)
def callback_handler(call):
if call.data == "check":
check(call)
bot.polling(none_stop=True)
Ответы (1 шт):
Автор решения: Nqweqweqwe
→ Ссылка
В функции check в chat_id нужно заменить на call.message.chat.id или call.message.from_user.id. Вот измененный код:
def check(call):
status = ['creator', 'administrator', 'member']
for i in status:
if i == bot.get_chat_member(chat_id=call.message.chat.id, user_id=call.message.chat.id).status:
bot.send_message(call.message.chat.id, "Вы успешно подписались на канал!")
break
else:
bot.send_message(call.message.chat.id, "Подписка на канал обязательна!", reply_markup=start_markup())
Если не помогло то проверьте добавили вы бота в канал, на который нужно подписаться? Если да, то при нажатии на аватар канала будет видно вашего бота. Если нет, то добавьте его по инструкции ниже:
- Откройте ТГ перейти в нужный канал
- Коснитесь аватарки канала и выберите строку Администраторы, а далее добавить администратора
- Наберите символ собачки
@и введите название бота, например@test - В появившемся списке найдите своего бота, нажмите по нему и поставьте галочки на против всех функций, но если нужно только проверка подписки, то хватит и одной галки Администратор.
И возможно, если вы будете в chat_id писать user_id в формате string, а не integer, то может вызываться ошибка, если память не подводит