Ответы пользователя по тегу AIOgram
  • Как выбрать когда и какие обработчики будут выполняться?

    SoreMix
    @SoreMix
    yellow
    Судя по коду, Ваша проблема решается через FSM:

    Создаете какой нибудь такой StatesGroup
    form_router = Router()
    
    class Form(StatesGroup):
        items = State()


    В первой функции активируете состояние через state.set_state
    @form_router.message(Text('Begin'))
    async def new_client_services(message: types.Message, state: FSMContext):
        builder = ReplyKeyboardBuilder()
        builder.row(
            types.KeyboardButton(text="End"),
        )
    
        await state.set_state(Form.items)
    
        await message.answer("Please write down all your items lying on the table one by one", reply_markup=builder.as_markup(resize_keyboard=True))


    А потом делаете такие декораторы, один который просто ловит все сообщения во время состояния "items", второй реагирует только в состоянии "items" с текстом "End". Там где состояние нужно завершить, вызывается "state.clear()"
    @form_router.message(Form.items, Text('End'))
    async def end_save_services(message: types.Message, state: FSMContext):
        await state.clear()
        await message.reply("Excellent", reply_markup=types.ReplyKeyboardRemove())
    
    @form_router.message(Form.items)
    async def with_puree(message: types.Message, state: FSMContext):
        await message.answer(f"Items {message.text} add✅\n")


    https://docs.aiogram.dev/en/dev-3.x/dispatcher/fin...
    Ответ написан
    Комментировать
  • При запуске телеграмм бота с нескольких устройств некорректно работает. Как это можно исправить?

    SoreMix
    @SoreMix
    yellow
    Потому что эти списки
    data = []
    right = []
    wrone = []

    одинаковы для всех юзеров. В Aiogram используется хранилище для подобных переменных: https://docs.aiogram.dev/en/latest/dispatcher/fsm.html

    Причем один из вариантов хранилища в коде у вас есть: storage = MemoryStorage(), но не используется для этих данных. Есть такой пример по FSM: https://docs.aiogram.dev/en/latest/examples/finite... где видно как нужно использовать хранилище. Ну и по хорошему бы заменить списки на простые числовые переменные, если их единственная цель - быть счетчиком.

    Должно быть что-то вроде
    async with state.proxy() as data:
        if answer == message.text:
            data['right'] += 1
        else:
            data['wrong'] += 1


    Для списка "data" аналогично
    Ответ написан
    9 комментариев
  • Читайте детали вопроса. Как получить список пользователей чата aiogram?

    SoreMix
    @SoreMix
    yellow
    У телеграма два API:
    1. Для работы с ботами
    2. Для работы с клиентом

    Клиент умеет получать пользователей в чате, поэтому
    такое есть в телетоне
    , т.к. Telethon работает как с клиентом, так и с ботами. Конкретно эта функция - клиентская

    Боты не умеют получать пользователей, поэтому
    доках айо нету
    Ответ написан
    Комментировать
  • Почему при срабатывание callback query handler вылазит ошибка?

    SoreMix
    @SoreMix
    yellow
    В dp.register_callback_query_handler первым аргументом должна передаваться функция, на которую этот callback вешается, и затем уже остальные параметры. У вас нет функции
    Ответ написан
    Комментировать
  • Как обрабатывать всю callback_data по id в определенной Inline меню?

    SoreMix
    @SoreMix
    yellow
    Желательно хоть как-то кнопки обозначить, чтобы потом не путать. Если сделать
    InlineKeyboardButton(user["playersList"][i]["name"], callback_data=f'player_{i}')

    То можно сделать хэндлер
    @dp.callback_query_handler(func=lambda c: c.data.startswith('player_'))
    Ответ написан
    Комментировать
  • Как исправить ошибку в машине состояний aiogram?

    SoreMix
    @SoreMix
    yellow
    Ошибка в использовании FSMstavka.next() везде.
    При обычном использовании FSM, оно переключает состояние на следующее, которое должно определять следующий шаг. В логике Вашей программы одно состояние отвечает за отдельную игру, которые никак не связаны между собой. Переключение на следующий стейт в каждой игре просто не нужно.
    Плюс, ругается на две функции random_nun

    Как минимум убрать
    await FSMstavka.next()
    в random_nun

    А в функции money заменить FSMstavka.next() на FSMkub.next()
    Ответ написан
    1 комментарий