@RG5000

В aiogram при импорте модуля не вызывается его функция?

Есть модуль со скриптом, который создаёт инлайн клавиатуру с пагинацией фотографий. Я его импортировал в другой модуль, в котором есть инлайн кнопка, при нажатии которой должна вызываться функция пагинации из импортированого модуля.
Вроде бы всё написал правильно, но при нажатии на кнопку функция не срабатывает. Бот не показыаает ошибок. Просто ничего не происходит.

Модуль с функцией пагинации:
from aiogram import Dispatcher, types
from aiogram.types import *
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery
from aiogram.utils.callback_data import CallbackData

from main import bot


fruits = [
    {
        "slug": "apples",
        "display_name": "Яблоки",
        "image_url": "https://cdnimg.rg.ru/img/content/199/33/68/iStock-1158470655_d_850.jpg"
    },
    {
        "slug": "oranges",
        "display_name": "Апельсини",
        "image_url": "https://www.gastronom.ru/binfiles/images/20141003/b3c0313e.jpg"
    },
    {
        "slug": "bananas",
        "display_name": "Банани",
        "image_url": "https://elorda.info/wp-content/uploads/2021/04/banana-health-big.jpg"
    },
    {
        "slug": "lemons",
        "display_name": "Лимони",
        "image_url": "https://ont.by/static/article/big/index/BWLqeb0F5qwrITqE.jpg"
    },
]

fruits_callback = CallbackData("Fruits", "page")

def get_fruits_keyboard (page: int = 0):
    keyboard = InlineKeyboardMarkup(row_width=3)
    has_next_page = len(fruits) > page + 1
   
    if has_next_page:

        if page == 0:
            show = InlineKeyboardButton(text="Спрятать", callback_data="Спрятать")
            count_list = InlineKeyboardButton(text=f"{page + 1}/{len(fruits)}", callback_data="dont_click_me")
            forward =InlineKeyboardButton(text="Вперёд >", callback_data=fruits_callback.new(page = page + 1))
            keyboard.add(show).row(count_list, forward)
        if page > 0:
            back = InlineKeyboardButton(text="< Назад", callback_data=fruits_callback.new(page = page - 1))
            show = InlineKeyboardButton(text="Сховати", callback_data="Спрятать")
            count_list = InlineKeyboardButton(text=f"{page + 1}/{len(fruits)}", callback_data="dont_click_me")
            forward =InlineKeyboardButton(text="Вперёд >", callback_data=fruits_callback.new(page = page + 1))
            keyboard.add(show).row(back, count_list, forward)
    elif not has_next_page:
        back = InlineKeyboardButton(text="< Назад", callback_data=fruits_callback.new(page = page - 1))
        show = InlineKeyboardButton(text="Сховати", callback_data="Спрятать")
        count_list = InlineKeyboardButton(text=f"{page + 1}/{len(fruits)}", callback_data="dont_click_me")
        keyboard.add(show).row(back, count_list)
 
    return keyboard

# Старт
#@dp.message_handler(text="fff")
async def fruits_index (message: Message):
  
    fruit_data = fruits[0]
    caption = f"Ви выбрали <b>{fruit_data.get('display_name')}</b>"
    keyboard = get_fruits_keyboard()

    await bot.send_photo(
        chat_id=message.chat.id,
        photo=fruit_data.get("image_url"),
        caption=caption,
        parse_mode="HTML",
        reply_markup=keyboard
    )

#@dp.callback_query_handler(fruits_callback.filter())
async def fruit_page_ (query: CallbackQuery, callback_data: dict):
    page = int(callback_data.get("page"))

    fruit_data = fruits[page]
    caption = f"Вы выбрали <b>{fruit_data.get('display_name')}</b>"
    keyboard = get_fruits_keyboard(page)

    photo = InputMedia(type="photo", media=fruit_data.get("image_url"), caption=caption)

    await query.message.edit_media(photo, keyboard)

#@dp.callback_query_handler(text = "Сховати")
async def fruit_page_handler(query: CallbackQuery):
    s = await query.message.edit_reply_markup()
    await s.delete()


#Регистрация хендлеров
def register_handler_deposit_inlines(dp : Dispatcher):
#
    dp.register_inline_handler(fruits_index)
    dp.register_callback_query_handler(fruit_page_, fruits_callback.filter())
 dp.register_callback_query_handler(fruit_page_handler, text = "Спрятать")


Модуль с инлайн кнопкой, при нажатии которой хочу вызывать функции пагинации из первого модуля
from aiogram import Dispatcher, types
from aiogram.types import *
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton, ReplyKeyboardMarkup, KeyboardButton, CallbackQuery
from aiogram.utils.callback_data import CallbackData

import pagination1
from pagination1 import fruits_index

btn1c = InlineKeyboardButton(text="Инлайн кнопка1", callback_data="btn1c")
btn2c = InlineKeyboardButton(text="Инлайн кнопка2", callback_data="btn2c")
btn3c = InlineKeyboardButton(text="Инлайн кнопка3", callback_data="btn3c")
deposbtns = InlineKeyboardMarkup(row_width=1)
deposbtns.add(btn1c, btn2c, btn3c)


#@dp.callback_query_handler(text="btn1c")
async def btn1c(call: CallbackQuery):
    await call.message.answer("Инлайн кнопка1")
    await fruits_index()


#Регистрация хендлера
def register_handler_deposit(dp : Dispatcher):
    dp.register_callback_query_handler(btn1c, text = "btn1c")
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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