Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Как работать с callback data в Telegram на Python?

  1. Как работать с callback data в Telegram на Python?

    Ребят, привет! У меня такой вопрос: как в Telegram-боте на Python обрабатывать callback data? Нашел кучу мануалов, но что-то никак не разберусь. У меня есть кнопки с инлайн клавиатурой, они отсылают в callback какие-то данные, а как их правильно распарсить и обработать? Примеры кода крайне приветствуются. Спасибо!



  2. Ждём вас в нашем чате в Телеграмм ==>> @pythoneer_chat

    А ТАКЖЕ: Канал о Python, статьи и книги ==>>
    @pythoneer_ru

  3. Привет! Чтобы обработать callback data, можешь использовать библиотеку 'python-telegram-bot'. Вот пример, как это сделать:
    Программный код:
    from telegram.ext import UpdaterCallbackQueryHandlerCommandHandler

    def start
    (updatecontext):
        
    keyboard = [[InlineKeyboardButton(\"Option 1\", callback_data=\"1\"),
                     InlineKeyboardButton(\"Option 2\", callback_data=\"2\")]]

        reply_markup = InlineKeyboardMarkup(keyboard)
        update.message.reply_text('Please choose:', reply_markup=reply_markup)

    def button(update, context):
        query = update.callback_query
        query.answer()
        if query.data == '1':
            query.edit_message_text(text=\"Selected option: 1\")
        elif query.data == '2':
            query.edit_message_text(text=\"Selected option: 2\")

    def main():
        updater = Updater(\"TOKEN\", use_context=True)
        dp = updater.dispatcher
        dp.add_handler(CommandHandler(\"start\", start))
        dp.add_handler(CallbackQueryHandler(button))
        updater.start_polling()
        updater.idle()

    if __name__ == '__main__':
        main() 
    Надеюсь, это поможет!

  4. Цитата Сообщение от Супергерл
    Привет! Чтобы обработать callback data, можешь использовать библиотеку 'python-telegram-bot'. Вот пример, как это сделать:
    Программный код:
    from telegram.ext import UpdaterCallbackQueryHandlerCommandHandler

    def start
    (updatecontext):
        
    keyboard = [[InlineKeyboardButton(\"Option 1\", callback_data=\"1\"),
                     InlineKeyboardButton(\"Option 2\", callback_data=\"2\")]]

        reply_markup = InlineKeyboardMarkup(keyboard)
        update.message.reply_text('Please choose:', reply_markup=reply_markup)

    def button(update, context):
        query = update.callback_query
        query.answer()
        if query.data == '1':
            query.edit_message_text(text=\"Selected option: 1\")
        elif query.data == '2':
            query.edit_message_text(text=\"Selected option: 2\")

    def main():
        updater = Updater(\"TOKEN\", use_context=True)
        dp = updater.dispatcher
        dp.add_handler(CommandHandler(\"start\", start))
        dp.add_handler(CallbackQueryHandler(button))
        updater.start_polling()
        updater.idle()

    if __name__ == '__main__':
        main() 
    Надеюсь, это поможет!
    Чувак, респект! Код прям вообще айс, особенно часть с кнопками. Попробую интегрировать в свой проект, надеюсь, будет работать без багов

  5. Слушай, самый простой способ - это библиотека 'telebot'. Вот примерчик:
    Программный код:
    import telebot
    from telebot import types

    bot 
    telebot.TeleBot('YOUR_TOKEN')

    @
    bot.message_handler(commands=['start'])
    def start_message(message):
        
    markup types.InlineKeyboardMarkup()
        
    markup.add(types.InlineKeyboardButton("Option 1"callback_data="1"))
        
    markup.add(types.InlineKeyboardButton("Option 2"callback_data="2"))
        
    bot.send_message(message.chat.id'Choose an option:'reply_markup=markup)

    @
    bot.callback_query_handler(func=lambda callTrue)
    def query_handler(call):
        if 
    call.data == '1':
            
    bot.answer_callback_query(callback_query_id=call.idtext='You chose option 1')
            
    bot.send_message(call.message.chat.id'Option 1 selected')
        
    elif call.data == '2':
            
    bot.answer_callback_query(callback_query_id=call.idtext='You chose option 2')
            
    bot.send_message(call.message.chat.id'Option 2 selected')

    bot.polling() 
    Попробуй, должно зайти.

  6. Цитата Сообщение от Анатолий
    Слушай, самый простой способ - это библиотека 'telebot'. Вот примерчик:
    Программный код:
    import telebot
    from telebot import types

    bot 
    telebot.TeleBot('YOUR_TOKEN')

    @
    bot.message_handler(commands=['start'])
    def start_message(message):
        
    markup types.InlineKeyboardMarkup()
        
    markup.add(types.InlineKeyboardButton("Option 1"callback_data="1"))
        
    markup.add(types.InlineKeyboardButton("Option 2"callback_data="2"))
        
    bot.send_message(message.chat.id'Choose an option:'reply_markup=markup)

    @
    bot.callback_query_handler(func=lambda callTrue)
    def query_handler(call):
        if 
    call.data == '1':
            
    bot.answer_callback_query(callback_query_id=call.idtext='You chose option 1')
            
    bot.send_message(call.message.chat.id'Option 1 selected')
        
    elif call.data == '2':
            
    bot.answer_callback_query(callback_query_id=call.idtext='You chose option 2')
            
    bot.send_message(call.message.chat.id'Option 2 selected')

    bot.polling() 
    Попробуй, должно зайти.
    Да-да, 'telebot' вообще огонь! Просто и понятно. Сам использую, работает как часы!

  7. Если ты нормально шаришь за асинхронное программирование, то глянь, что можно сделать на aiogram:
    Программный код:
    from aiogram import BotDispatchertypes
    from aiogram
    .utils import executor

    TOKEN 
    'YOUR_TOKEN'
    bot Bot(token=TOKEN)
    dp Dispatcher(bot)

    @
    dp.message_handler(commands=['start'])
    async def send_welcome(messagetypes.Message):
        
    keyboard types.InlineKeyboardMarkup()
        
    keyboard.add(types.InlineKeyboardButton(text="Option 1"callback_data="1"))
        
    keyboard.add(types.InlineKeyboardButton(text="Option 2"callback_data="2"))
        
    await message.answer("Choose an option:"reply_markup=keyboard)

    @
    dp.callback_query_handler(lambda cc.data)
    async def process_callback(callback_querytypes.CallbackQuery):
        
    data callback_query.data
        
    if data == '1':
            
    await bot.send_message(callback_query.from_user.id'Option 1 selected')
        
    elif data == '2':
            
    await bot.send_message(callback_query.from_user.id'Option 2 selected')
        
    await bot.answer_callback_query(callback_query.id)

    if 
    __name__ == '__main__':
        
    executor.start_polling(dp
    Если код не зайдет, пиши, помогу разобраться.

  8. Цитата Сообщение от OlegSun
    Если ты нормально шаришь за асинхронное программирование, то глянь, что можно сделать на aiogram:
    Программный код:
    from aiogram import BotDispatchertypes
    from aiogram
    .utils import executor

    TOKEN 
    'YOUR_TOKEN'
    bot Bot(token=TOKEN)
    dp Dispatcher(bot)

    @
    dp.message_handler(commands=['start'])
    async def send_welcome(messagetypes.Message):
        
    keyboard types.InlineKeyboardMarkup()
        
    keyboard.add(types.InlineKeyboardButton(text="Option 1"callback_data="1"))
        
    keyboard.add(types.InlineKeyboardButton(text="Option 2"callback_data="2"))
        
    await message.answer("Choose an option:"reply_markup=keyboard)

    @
    dp.callback_query_handler(lambda cc.data)
    async def process_callback(callback_querytypes.CallbackQuery):
        
    data callback_query.data
        
    if data == '1':
            
    await bot.send_message(callback_query.from_user.id'Option 1 selected')
        
    elif data == '2':
            
    await bot.send_message(callback_query.from_user.id'Option 2 selected')
        
    await bot.answer_callback_query(callback_query.id)

    if 
    __name__ == '__main__':
        
    executor.start_polling(dp
    Если код не зайдет, пиши, помогу разобраться.
    Да, aiogram — это тема! Асинхронность сейчас везде, а тут всё достаточно просто и без заморочек.

  9. Я тут подумал, что можно проще даже на чистом requests, но всё же для удобства лучше либу взять готовую. Есть ещё pyTelegramBotAPI для тех, кто любит попроще и побыстрее. Главное в любой библиотеке - правильно хендлеры настроить

  10. Цитата Сообщение от Эовин
    Я тут подумал, что можно проще даже на чистом requests, но всё же для удобства лучше либу взять готовую. Есть ещё pyTelegramBotAPI для тех, кто любит попроще и побыстрее. Главное в любой библиотеке - правильно хендлеры настроить
    По-любому! Requests это конечно топово, но с либами всё ж удобнее и быстрее код писать

Страница 1 из 2 12 ПоследняяПоследняя