Ответы пользователя по тегу Telegram
  • Есть список фильмов, как в телеграме выводить по кнопке каждые 10, 20, 30 и тд фильмов, aiogram?

    @i_ikigai Автор вопроса
    Не знаю правильно ли так писать, но всё работает
    amount_keys = handlers.col()  # количество кнопок
    
    
    @dp.callback_query_handler(lambda c: f"{amount_keys}")
    async def process_callback_button1(callback_query: types.CallbackQuery):
        number = callback_query.data
        await bot.answer_callback_query(callback_query.id)
        keys = InlineKeyboardMarkup(resize_keyboard=True)
        for key in handlers.user_films_all().keys():
            number_button = InlineKeyboardButton(text=f"{key}", callback_data=f"{key}")
            keys.insert(number_button)
        await bot.edit_message_text(chat_id=callback_query.from_user.id, message_id=callback_query.message.message_id,
                                    text=f'{handlers.nubmer_exit(number)}',
                                    reply_markup=keys)


    Функция для количества кнопок
    def col():
        s = len(user_films_all())
        o = 'or'
        res = ["c.data == '1'"]
    
    
        for i in range(2, s+1):
            if i == s:
                res.append(o)
                res.append(f'c.data = "{i}"')
            else:
                res.append(o)
                res.append(f'c.data = "{i}"')
        r = " ".join(res)
        return r
    Ответ написан
    Комментировать
  • Как сразу добавить информацию в хранилище State (aiogram)?

    @i_ikigai
    class reg(StatesGroup):
        name = State()
        fname = State()
        age = State()
    
    
    @dp.message_handler(commands="reg", state="*")
    async def name_step(message: types.Message, state: FSMContext):
        await message.answer(text='Напиши имя ')
        await reg.name.set()
    
    
    @dp.message_handler(state=reg.name, content_types=types.ContentTypes.TEXT)
    async def fname_step(message: types.Message, state: FSMContext):
        if any(map(str.isdigit, message.text)):
            await message.reply("Пожалуйста напишите свое имя")
            return
        await state.update_data(name_user=message.text.title())
        await message.answer(text='Напиши фамилию ')
        await reg.fname.set()
    
    
    @dp.message_handler(state=reg.fname, content_types=types.ContentTypes.TEXT)
    async def age_step(message: types.Message, state: FSMContext):
        if any(map(str.isdigit, message.text)):
            await message.reply("Пожалуйста напишите свою фамилию")
            return
        await message.answer(text='Напиши возраст ')
        await state.update_data(fname_user=message.text.title())
        await reg.age.set()
    
    
    @dp.message_handler(state=reg.age, content_types=types.ContentTypes.TEXT)
    async def res_step(message: types.Message, state: FSMContext):
        if not any(map(str.isdigit, message.text)):
            await message.reply("Пожалуйста введите свой возраст")
            return
        await state.update_data(age_user=message.text.lower())
        user_data = await state.get_data()
        await state.finish()

    в моем коде в user_data записаны 3 сообщения пользователя в словарь. Оттуда их просто получать через обращение f'{user_data[name_user}}' например
    Разобрался че к чему отсюда https://mastergroosha.github.io/telegram-tutorial/...
    В ссылках на гитхаб есть рабочий пример, там он более полный и по нему проще понять
    Ответ написан
    1 комментарий