@Maruf995
Backend Developer

Как решить проблему, если не отправляется кнопка?

Делаю бота с проверкой на подписку, и хочу после того как юзер нажал на кнопку проверить подписку. Если есть подписка на каналы, то отправлял кнопку ссылкой на канал. Но бот не отправляет эту кнопку\
Использую Telebot py

import telebot
from telebot import types
from config import Token

bot = telebot.TeleBot(Token)

def start_markup():
    markup = types.InlineKeyboardMarkup(row_width=True)
    link_keyboardone = types.InlineKeyboardButton(text="1-й Канал", url="https://t.me/+fZFv6dfmHPE3YmUy")
    link_keyboardtwo = types.InlineKeyboardButton(text="2-й Канал", url="https://t.me/+CUtxvwB8YPA4MDcy")
    check_keyboard = types.InlineKeyboardButton("Проверить✅", callback_data='check')
    markup.add(link_keyboardone,link_keyboardtwo,check_keyboard)
    return markup

@bot.message_handler(commands=['start'])
def start(message):
    chat_id = message.chat.id
    first_name = message.chat.first_name
    bot.send_message(chat_id, f"Привет, {first_name}!\n"
                                "Чтобы получить ссылку на канал, тебе нужно подписаться на эти каналы", reply_markup=start_markup())

def check(call):
    status = ['creator', 'administrator', 'member']
    for i in status:
        if i == bot.get_chat_member(chat_id='-1001654199176', user_id=call.message.chat.id).status:
            check2(call)
            break
        else:
            bot.send_message(call.message.chat.id, "Подпишись на каналы!", reply_markup=start_markup())


def check2(call):
    markup = types.InlineKeyboardMarkup(row_width=True)
    status = ['creator', 'administrator', 'member']
    for i in status:
        if i == bot.get_chat_member(chat_id='-1001675076955', user_id=call.message.chat.id).status:
            done = types.InlineKeyboardButton(text="Держи Ссылку ", url="https://t.me/+fZFv6dfmHPE3YmUy")
            break

        else:
            bot.send_message(call.message.chat.id, "Подпишись на каналы!", reply_markup=start_markup())
    markup.add(done)


@bot.callback_query_handler(func=lambda call: True)
def callback(call):
    if call.data == 'check':
        bot.delete_message(chat_id=call.message.chat.id, message_id=call.message.id)
        check(call)

print("goo")
bot.polling(none_stop=True)
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 1
OpenAI
@OpenAI
Попробуйте использовать данный код, он должен работать.
spoiler
Учтите, что вы должны заменить "YOUR_BOT_TOKEN" на ваш токен бота, а "URL_TO_CHANNEL_1" и "URL_TO_CHANNEL_2" на ссылки на 1-й и 2-й каналы соответственно, а "URL_TO_ONE_OF_THE_CHANNELS" на ссылку на один из каналов.

import telebot

bot = telebot.TeleBot("YOUR_BOT_TOKEN")

@bot.message_handler(commands=['start'])
def start_handler(message):
    bot.send_message(
        chat_id=message.chat.id,
        text="Привет! Пожалуйста, подпишись на оба канала.",
        reply_markup=telebot.types.InlineKeyboardMarkup(
            [[
                telebot.types.InlineKeyboardButton("1-й канал", url="URL_TO_CHANNEL_1"),
                telebot.types.InlineKeyboardButton("2-й канал", url="URL_TO_CHANNEL_2")
            ], [
                telebot.types.InlineKeyboardButton("Проверить", callback_data="check")
            ]]
        )
    )

@bot.callback_query_handler(func=lambda call: call.data == "check")
def check_subscription(call):
    # Code to check if user is subscribed to both channels

    # If subscribed to both channels
    bot.send_message(
        chat_id=call.message.chat.id,
        text="URL на один из каналов: URL_TO_ONE_OF_THE_CHANNELS"
    )

    # If not subscribed to both channels
    bot.send_message(
        chat_id=call.message.chat.id,
        text="Пожалуйста, подпишись на оба канала."
    )

bot.polling()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы