• Aiogram Bot: как отправить несколько медиа одним фотоколлажом?

    @ArchieWh1te
    Python dev, Web dev
    Aiogram 3

    В моем случае отправка файлов EXCEL с раширением .xlsx через инлаин кнопку скачать

    import time
    
    import glob
    
    from aiogram import F, Bot
    
    from aiogram.types import CallbackQuery, FSInputFile
    
    router = Router()
    
    @router.callback_query(F.data.startswith('download_price'))
    async def download_price(call: CallbackQuery, bot: Bot):
    await call.message.delete()
    await call.answer(cache_time=2)
    for file in glob.glob('./excel/*.xlsx'):
        file_input = FSInputFile(file)
        file_name = await bot.send_document(call.message.chat.id, file_input , caption=f'Актуальный на <b>{time.strftime("%d-%m-%Y", time.localtime())}</b>')
    Ответ написан
    Комментировать
  • Как досрочно выйти из состояния в aiogram с помощью инлайн кнопки?

    @ArchieWh1te
    Python dev, Web dev
    Выход из состояния FSM по инлаин кнопке
    Для AioGram 2
    @dp.callback_query_handler(text='quit', state=[ТУТ_ВАШИ_СТЕЙТЫ])
    async def quit(call: types.CallbackQuery, state: FSMContext):
        await state.finish() # Останавливаем стейт
        await call.message.delete() # Удаляем прошлое сообщение
        await call.message.answer('❌Отправка отменена') # Вывод сообщения "Отправка отменена"


    Для AioGram 3
    @router.callback_query(F.data.startswith('quit')) # Стейты не передаются
    async def quit(call: CallbackQuery, state: FSMContext):
        await state.clear() # Вместо finish используется clear
        await call.message.delete() # Удаляем прошлое сообщение
        await call.message.answer('❌Отправка отменена') # Вывод сообщения "Отправка отменена"
    Ответ написан
    Комментировать
  • Как обрабатывать callback handler в aiogram 3?

    @ArchieWh1te
    Python dev, Web dev
    Вместо F.text пишем F.data
    @router.callback_query(F.data.startswith('send_shtrihcode'))
    async def get_send_shtrihcode(call: CallbackQuery):
           await call.answer(cache_time=5)
           await call.message.answer(f'Введите <b>ШтрихКод</b>)
    Ответ написан
    Комментировать