Загрузка...

Срочно aiogram машина состояний

Тема в разделе Python создана пользователем xestak 16 янв 2025. 176 просмотров

  1. xestak
    xestak Автор темы 16 янв 2025 0 23 дек 2024
    Каким образом мне засунуть данные, которые ввёл человек в боте, в bot.forward_message??? Если кто-то не понял: у бота есть репоай кнопка, на которую он нажимает и вводит данные, а дальше эти данные должны скинуться мне в специальный чат. Например: человек нажал на клавишу "a", которая попросила его отправить фото и описать его, после чего, сохранив эти данные бот перекинул мне в группу, как это реализовать? На помощь, гении!!
     
  2. Shuvaloff_PAW
    1. ChatGPT
      Shuvaloff_PAW, привет! Чтобы реализовать такую функциональность в aiogram, тебе нужно будет использовать машину состояний для управления процессом взаимодействия с пользователем. Вот пример, как это можно сделать:

      1. **Создай машину состояний**: Определите состояния, которые будут управлять процессом. Например, состояние ожидания фото и состояние ожидания описания.

      2. **Обработай нажатие кнопки**: Когда пользователь нажимает на кнопку, переведи его в состояние ожидания фото.

      3. **Обработай получение фото**: Когда пользователь отправляет фото, сохрани его и переведи пользователя в состояние ожидания описания.

      4. **Обработай получение описания**: Когда пользователь отправляет описание, сохрани его и отправь фото и описание в нужный чат.

      Вот пример кода:

      Python

      from aiogram import Bot, Dispatcher, types
      from aiogram.contrib.fsm_storage.memory import MemoryStorage
      from aiogram.dispatcher import FSMContext
      from aiogram.dispatcher.filters.state import State, StatesGroup
      from aiogram.types import ParseMode
      from aiogram.utils import executor

      API_TOKEN = 'YOUR_API_TOKEN'

      bot = Bot(token=API_TOKEN)
      storage = MemoryStorage()
      dp = Dispatcher(bot, storage=storage)

      class Form(StatesGroup):
      waiting_for_photo = State()
      waiting_for_description = State()

      @dp.message_handler(commands='start')
      async def start(message: types.Message):
      await message.answer("Нажмите кнопку 'a' для начала.")
      # Здесь добавьте код для создания кнопки

      @dp.message_handler(lambda message: message.text == 'a')
      async def process_button_a(message: types.Message):
      await Form.waiting_for_photo.set()
      await message.reply("Пожалуйста, отправьте фото.")

      @dp.message_handler(content_types=['photo'], state=Form.waiting_for_photo)
      async def process_photo(message: types.Message, state: FSMContext):
      await state.update_data(photo=message.photo[-1].file_id)
      await Form.waiting_for_description.set()
      await message.reply("Теперь отправьте описание.")

      @dp.message_handler(state=Form.waiting_for_description)
      async def process_description(message: types.Message, state: FSMContext):
      user_data = await state.get_data()
      photo = user_data['photo']
      description = message.text

      # Отправка фото и описания в специальный чат
      chat_id = 'YOUR_CHAT_ID'
      await bot.send_photo(chat_id, photo, caption=description)

      await message.reply("Ваши данные отправлены.")
      await state.finish()

      if __name__ == '__main__':
      executor.start_polling(dp, skip_updates=True)
      Не забудь заменить `'YOUR_API_TOKEN'` и `'YOUR_CHAT_ID'` на свои значения. Этот код создаёт простую машину состояний, которая обрабатывает фото и описание, а затем отправляет их в указанный чат. Если у тебя возникнут вопросы или что-то будет непонятно, не стесняйся спрашивать!
  3. Hollywood
    Hollywood 16 янв 2025 э 20 248 28 окт 2020
    aaa = message.text
    Оно?
     
    16 янв 2025 Изменено
  4. КОЛЯН_ФАРТОВЫЙ
    Со state работай, и будет тебе счастье. Самое простое решение, которое я использую в том числе в своих мелких проектах.
     
Top
Загрузка...