Загрузка...

Aiogram. как дополнить код, чтобы получился листающийся каталог в тг бот?

Тема в разделе Python создана пользователем ssshelfiqwe123 16 ноя 2024. 303 просмотра

  1. ssshelfiqwe123
    ssshelfiqwe123 Автор темы 16 ноя 2024 2 12 окт 2023
    elif callback.data == 'clothes_models':
    global current_product_index

    if callback.data == "prev":
    current_product_index -= 1
    elif callback.data == "next":
    current_product_index += 1

    Если кто-то умеет делать корзину напишите пожалуйста.
     
  2. Salomchik
    Salomchik 16 ноя 2024 Заблокирован(а) 65 20 июн 2024
    ChatGPT дополнить код, чтобы получился листающийся каталог
     
    1. ChatGPT
      Привет, Salomchik! Давай попробуем дополнить код для создания листающегося каталога в Telegram-боте с использованием библиотеки Aiogram. Основная идея заключается в том, чтобы использовать кнопки для навигации между элементами каталога. Вот пример, как это можно сделать:

      Python

      from aiogram import Bot, Dispatcher, types
      from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
      from aiogram.utils import executor

      API_TOKEN = 'YOUR_API_TOKEN'

      bot = Bot(token=API_TOKEN)
      dp = Dispatcher(bot)

      # Пример списка продуктов
      products = ["Product 1", "Product 2", "Product 3"]
      current_product_index = 0

      # Функция для создания клавиатуры
      def get_keyboard():
      keyboard = InlineKeyboardMarkup()
      keyboard.add(InlineKeyboardButton("Previous", callback_data='prev'))
      keyboard.add(InlineKeyboardButton("Next", callback_data='next'))
      return keyboard

      # Обработчик команды /start
      @dp.message_handler(commands=['start'])
      async def send_welcome(message: types.Message):
      global current_product_index
      current_product_index = 0
      await message.answer(products[current_product_index], reply_markup=get_keyboard())

      # Обработчик нажатий на кнопки
      @dp.callback_query_handler(lambda c: c.data in ['prev', 'next'])
      async def process_callback(callback_query: types.CallbackQuery):
      global current_product_index

      if callback_query.data == 'prev':
      current_product_index = (current_product_index - 1) % len(products)
      elif callback_query.data == 'next':
      current_product_index = (current_product_index + 1) % len(products)

      await bot.answer_callback_query(callback_query.id)
      await bot.edit_message_text(products[current_product_index],
      callback_query.from_user.id,
      callback_query.message.message_id,
      reply_markup=get_keyboard())

      if __name__ == '__main__':
      executor.start_polling(dp, skip_updates=True)
      В этом коде мы создаем список продуктов и используем глобальную переменную `current_product_index` для отслеживания текущего элемента. Клавиатура с кнопками "Previous" и "Next" позволяет пользователю перемещаться по каталогу. Обработчик `process_callback` обновляет индекс текущего продукта и редактирует сообщение, чтобы отобразить новый продукт.

      Не забудь заменить `'YOUR_API_TOKEN'` на токен твоего бота. Если у тебя возникнут вопросы или потребуется помощь, дай знать!
    2. ssshelfiqwe123 Автор темы
  3. derkown
    aiogram_dialog
     
    1. ssshelfiqwe123 Автор темы
    2. KasperIX
  4. REDKLAUS
    REDKLAUS 16 ноя 2024 Заблокирован(а)
    aiogram==3.14.0

    Python
    import asyncio
    import logging
    import sys

    from aiogram import Bot, Dispatcher, F
    from aiogram.client.default import DefaultBotProperties
    from aiogram.enums import ParseMode
    from aiogram.filters import CommandStart
    from aiogram.fsm.context import FSMContext
    from aiogram.types import InlineKeyboardMarkup
    from aiogram.types import Message, CallbackQuery
    from aiogram.utils.keyboard import InlineKeyboardBuilder

    TOKEN = "<TOKEN>"
    dp = Dispatcher()
    my_list = ["text1", "text2", "text3"]


    def create_left_right_buttons(now_page_state: int) -> InlineKeyboardMarkup:
    builder = InlineKeyboardBuilder()
    builder.button(text="left", callback_data=f"left:{now_page_state - 1}")
    builder.button(text="right", callback_data=f"right:{now_page_state + 1}")
    return builder.as_markup()


    @dp.message(CommandStart())
    async def command_start_handler(message: Message, state: FSMContext, bot: Bot) -> None:
    now_list_state = 0
    await state.update_data({"pageState": now_list_state})
    await send_page(message.from_user.id, bot, state)


    async def send_page(user_id: int, bot: Bot, state: FSMContext):
    state_data = await state.get_data()
    page_state: int = state_data["pageState"]
    await bot.send_message(user_id, f"Hello, now list state: {page_state}. List data: {my_list[page_state]}",
    reply_markup=create_left_right_buttons(page_state))


    @dp.callback_query(F.data.startswith("left:") | F.data.startswith("right:"))
    async def left_right_callback_handler(callback: CallbackQuery, state: FSMContext, bot: Bot):
    next_index = int(callback.data.split(':')[-1])
    if next_index < 0:
    await callback.answer("Unknown page")
    return
    try:
    my_list[next_index]
    except IndexError:
    await callback.answer("Unknown page")
    return

    await state.update_data({"pageState": next_index})
    await send_page(callback.from_user.id, bot, state)

    async def main() -> None:
    bot = Bot(token=TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
    await dp.start_polling(bot)


    if __name__ == "__main__":
    logging.basicConfig(level=logging.INFO, stream=sys.stdout)
    asyncio.run(main())
    [IMG]
     
    16 ноя 2024 Изменено
    1. REDKLAUS
      REDKLAUS, подредачь под себя я быстренько накидал
  5. OpulentDark
    OpulentDark 16 ноя 2024 Разработка - https://zelenka.guru/threads/6727259/ 448 14 фев 2020
    фабрика калбекоы
     
  6. рандомли
    рандомли 16 ноя 2024 Заблокирован(а) 836 23 апр 2023
Top
Загрузка...