Skip to content

Клавиатура

Вся информация о клавиатуре есть в официальной документации ВК


Какие бывают кнопки

  • text(): Кнопка типа text
  • open_link(): Кнопка типа open_link. Нельзя установить цвет для кнопки!
  • location(): Кнопка типа location. Нельзя установить цвет для кнопки!
  • vk_pay(): Кнопка типа vk_pay. Нельзя установить цвет для кнопки!
  • open_app(): Кнопка типа open_app. Нельзя установить цвет для кнопки!
  • callback(): Кнопка типа callback

Цвета кнопок

  • .positive(): Зеленая кнопка (для обеих тем)
  • .negative(): Розовая (красная) кнопка (для обеих тем)
  • .primary(): Синяя кнопка для белой, белая для темной
  • .secondary(): Белая кнопка для светлой темы, серая для темной

Создание обычной клавиатуры

@bot.add_command(commands='команды')
async def commands(ctx: Context):
    keyboard = Keyboard(
        Button.text('Первая команда').positive(),
        Button.text('Вторая команда').negative(),
        Button.text('Третья команда').primary(),
        Button.text('Четвертая команда').secondary(),
        ...,  # чтобы перенести клавиатуру на новую строчку
        Button.text('Пятая команда').secondary(),
    )
    # чтобы добавить в последнюю строчку еще кнопку
    keyboard.add(
        Button.open_link('Профиль', 'https://vk.com/id1'),
    )
    # чтобы добавить клавиатуру с новой строчки
    keyboard.new_line()
    keyboard.add(
        Button.text('Седьмая кнопка',).secondary(),
    )

    await ctx.answer('команды', keyboard=keyboard)

Создание inline клавиатуры

Все то же самое как обычное только добавляется параметр inline=True

1
2
3
4
5
6
7
8
@bot.add_command(commands='меню')
async def commands(ctx: Context):
    keyboard = Keyboard(
        Button.text('Отмена️').secondary(),
        inline=True
    )

    await ctx.answer('команды', keyboard=keyboard)

Создание Callback кнопки

Для создания callback все тоже самое как и для других только после цвета кнопки добавляется еще функция .on_called(obj, arguments) * obj: передается образ функции (без вызова функции то есть) * arguments: передается аргументы через равно (то есть: user=123, full_name='Alex')

ниже пример

@bot.add_command(commands='меню')
async def commands(ctx: Context):
    keyboard = Keyboard(
        Button.callback('hi').secondary().on_called(
            commands, user=1
        ),
        inline=True
    )

    await ctx.answer('команды', keyboard=keyboard)

@bot.add_click_callback(callback=True)
async def info(ctx: Context, argument: dict):
    user = await ctx.user_get(user_ids=argument['user'])
    await ctx.answer(f'{user:fn}, привет!')