telebot (python). Не выполняется вызов атрибута callback_data из за атрибута url в telebot.types.InlineKeyBoardButton

import telebot
from telebot import types
insertSubInline = types.InlineKeyBoardMarkup()
join = types.InlineKeyBoardButton(text="Пройти на канал", callback_data = "joinSub", url="https://t.me/namechannel")
insertSubInline.add(join)

@bot.callback_query_handler(func = lambda call: True)
def answer(call):
    pass

При использовании InlineKeyBoardButton, атрибут callback_data не срабатывает, как я понял из за того, что я указываю адрес (url) для пересылки на другой канал в атрибутах InlineKeyBoardButton. Какого причина его не правильной работы?

Мне нужно во время переадресации на другой канал вызывать определенную функцию для проверки/сбора данных

или

отдельная от InlineKeyBoardButton(без атрибута url) функция или т.п., которая будет пересылать на другой канал.


Ответы (1 шт):

Автор решения: D. Violet

как вариант:

def inline_keyboard(where_call):
    insert_subinline = types.InlineKeyboardMarkup()
    if where_call == 'start':
        join = types.InlineKeyboardButton(text="Показать ссылку на канал", callback_data="joinSub")
        insert_subinline.add(join)
        return insert_subinline
    elif where_call == 'joinSub':
        join = types.InlineKeyboardButton(text="Join", url="https://t.me/namechannel")
        insert_subinline.add(join)
        return insert_subinline


@bot.message_handler(commands=['start'])
def start(message):
    bot.send_message(message.chat.id, 'Тут кое-что интересное ?', reply_markup=inline_keyboard('start'))


@bot.callback_query_handler(func = lambda call: True)
def answer(call):
    if call.data == 'joinSub':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
                              text='namechannel', reply_markup=inline_keyboard('joinSub'))

        some_function_collect_and_check_data()

сначала отправляем inline кнопку, по нажатию изменяем содержимое + вызываем функцию для сбора\проверки данных.

→ Ссылка