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 кнопку, по нажатию изменяем содержимое + вызываем функцию для сбора\проверки данных.