@lowpoli

Как добавить кнопку 'web_app=WebApp Info' в Aiogram?

from aiogram import Bot, Dispatcher, types, F
from aiogram.types.web_app_info import WebAppInfo
from aiogram.types import (CallbackQuery, InlineKeyboardButton,
                           InlineKeyboardMarkup, Message)
from aiogram.utils.keyboard import InlineKeyboardBuilder
from aiogram.filters import Command, CommandStart
from aiogram.filters import CommandStart
from aiogram.exceptions import TelegramBadRequest

BOT_TOKEN = ''

bot: Bot = Bot(BOT_TOKEN)
dp: Dispatcher = Dispatcher()


LEXICON: dict[str, str] = {
    'text': 'Кнопка 1',
    'text0': 'Назад',
    'text2': 'Кнопка 2',
    'text3': 'Кнопка 3',
    'text4': 'Кнопка 4',
    'text5': 'Кнопка 5',
    'text_1': 'Главное меню',
    'text_2': 'Описание 1',
    'text_3': 'Описание 2',
    'text_4': 'Описание 3',
    'text_5': 'Описание 4',
    'text_0': 'Описание 5',
    }

# Функция для генерации клавиатур с инлайн-кнопками
def get_markup(width: int, *args, **kwargs) -> InlineKeyboardMarkup:
    # Инициализируем билдер
    kb_builder: InlineKeyboardBuilder = InlineKeyboardBuilder()
    # Инициализируем список для кнопок
    buttons: list[InlineKeyboardButton] = []
    # Заполняем список кнопками из аргументов args и kwargs
    if args:
        for button in args:
            buttons.append(InlineKeyboardButton(
                text=LEXICON[button] if button in LEXICON else button,
                callback_data=button))

    if kwargs:
        for button, text in kwargs.items():
            buttons.append(InlineKeyboardButton(
                text=text,
                callback_data=button))


    # Распаковываем список с кнопками в билдер методом row c параметром width
    kb_builder.row(*buttons, width=width)
    # Возвращаем объект инлайн-клавиатуры
    return kb_builder.as_markup()

#---------Меняем текст на текст------------------------

# Этот хэндлер будет срабатывать на команду "/start"
@dp.message(CommandStart())
async def process_start_command(message: Message):
    markup = get_markup(2, 'text', 'text2', 'text3', 'text4', 'text5')
    await message.answer(#текст первой над кнопками повляеться
                   text=LEXICON['text_1'],
                    reply_markup=markup)

#изменение текста на кнопку "Назад"  вот это вот ТУТ.
@dp.callback_query(F.data.in_(['text0']))

async def process_button_press(callback: CallbackQuery):

    markup = get_markup(2,  'text0')
    if callback.message.text == LEXICON['text_2']:
        text = LEXICON['text_1']
        markup = get_markup(2, 'text', 'text2', 'text3', 'text4', 'text5')
    else:
        text = LEXICON['text_1']
        markup = get_markup(2, 'text', 'text2', 'text3', 'text4', 'text5')

    await callback.message.edit_text(#текст в кнопке назад
                            text=text,
                            reply_markup=markup)


# Этот хэндлер будет срабатывать на нажатие инлайн-кнопки Кнопка 1
@dp.callback_query(F.data.in_(['text'])) #текст который появляеться при нажатии на кнопку 'text'

async def process_button_press(callback: CallbackQuery):

    markup = get_markup(2,  'text0')
    if callback.message.text == LEXICON['text_1']: #текст главной кнопки меняетьяс на текст 2
        text = LEXICON['text_2']

    else:
        text = LEXICON['text_1']
        markup = get_markup(2, 'text', 'text2', 'text3', 'text4', 'text5') #главное меню (text_1) меняеться на нажатие этих кнопок


    await callback.message.edit_text(#текст в кнопке назад
                            text=text,
                            reply_markup=markup)

# Этот хэндлер будет срабатывать на команду "/start"
@dp.message(CommandStart())
async def process_start_command(message: Message):
    pass


# Этот хэндлер будет срабатывать на нажатие инлайн-кнопки
@dp.callback_query(F.data.in_(['text0',
                               ]))

@dp.callback_query(F.data.in_(['text2',
                               ]))
async def process_button_press(callback: CallbackQuery, bot: Bot):
    pass


# Этот хэндлер будет срабатывать на все остальные сообщения
@dp.message()
async def send_echo(message: Message):
    print(message)
    await message.answer(
            text='Не понимаю')


if __name__ == '__main__':
    dp.run_polling(bot)
  • Вопрос задан
  • 1410 просмотров
Пригласить эксперта
Ответы на вопрос 1
febday
@febday
InlineKeyboardButton(text="Open Webview", web_app=WebAppInfo(url="https://example.com/"))
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы