Задать вопрос
Mamashin
@Mamashin
Лоу скилл попуск

Как реализовать любой порядок нажатий кнопок в вк?

Пишу самого простого бота, работаю с vkbottle, это мой первый вопрос на Хабре, тк ранее использовал другие источники, но сейчас хочу попробовать поактивничать любопытством здесь.

Имеем 5 рядов по 5 кнопок, одна из каждого ряда является снежинкой и имеет свой payload
Как сделать, так, чтобы при нажатии в любом состоянии, любой кнопки - код шёл дальше и по итогу на локальном балансе вышло ровно 5 снежинок?

Я лично не думаю, что нужно привязывать к каждой кнопке payload, это же миллиард строк лишнего кода одной клавиатуры.
Возможно нужно использовать стейты и классы?

Код
@bot.on.private_message(text=hello_user)
async def greeting(message: Message):
	await message.answer(f'Привет! Тут тебе нужно собирать снежинки! {snow_x}\n\nЧем больше снежинок ты соберёшь - тем лучше!\n\nЧтобы начать игру напиши "Играть"')

@bot.on.private_message(text=gaming)
@bot.on.private_message(payload={"cmd": 'mm'})
async def gaming_snow(message: Message):
	await message.answer(
    message=f"Нажимай на {snow_x}",
    keyboard=(
    Keyboard(one_time=True, inline=False)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text(f'1{snow_x}', {'cmd' : 'snow_1'}), color=KeyboardButtonColor.POSITIVE)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text(f'2{snow_x}'), color=KeyboardButtonColor.POSITIVE)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text(f'3{snow_x}'), color=KeyboardButtonColor.POSITIVE)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text(f'4{snow_x}'), color=KeyboardButtonColor.POSITIVE)
    .row()
    .add(Text(f'5{snow_x}'), color=KeyboardButtonColor.POSITIVE)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    ).get_json()
    )


@bot.on.private_message(text=f'2{snow_x}')
@bot.on.private_message(payload={'cmd' : 'snow_1'})
async def gaming_snow_2(message: Message):
	await message.answer(
	message=f"Отлично! У тебя уже 1 {snow_x}!\n\nПродолжай в том же духе!",
    keyboard=(
    Keyboard(one_time=True, inline=False)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text(f'{snow_x}', {'cmd' : 'snow_2'}), color=KeyboardButtonColor.POSITIVE)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text(f'{snow_x}'), color=KeyboardButtonColor.POSITIVE)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text(f'{snow_x}'), color=KeyboardButtonColor.POSITIVE)
    .row()
    .add(Text(f'{snow_x}'), color=KeyboardButtonColor.POSITIVE)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    ).get_json()
    )

@bot.on.private_message(payload={'cmd' : 'snow_2'})
async def gaming_snow_3(message: Message):
	await message.answer(
	message=f"Отлично! У тебя уже 2 {snow_x}!\n\nТы на верном пути!",
    keyboard=(
    Keyboard(one_time=True, inline=False)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text(f'{snow_x}', {'cmd' : 'snow_3'}), color=KeyboardButtonColor.POSITIVE)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text(f'{snow_x}'), color=KeyboardButtonColor.POSITIVE)
    .row()
    .add(Text(f'{snow_x}'), color=KeyboardButtonColor.POSITIVE)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    ).get_json()
    )


@bot.on.private_message(payload={'cmd' : 'snow_3'})
async def gaming_snow_4(message: Message):
	await message.answer(
	message=f"Отлично! У тебя уже 3 {snow_x}!\n\nТы на верном пути!",
    keyboard=(
    Keyboard(one_time=True, inline=False)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text(f'{snow_x}', {'cmd' : 'snow_4'}), color=KeyboardButtonColor.POSITIVE)
    .row()
    .add(Text(f'{snow_x}'), color=KeyboardButtonColor.POSITIVE)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    ).get_json()
    )

@bot.on.private_message(payload={'cmd' : 'snow_4'})
async def gaming_snow_5(message: Message):
	await message.answer(
	message=f"Отлично! У тебя уже 4 {snow_x}!\n\nТы на верном пути!",
    keyboard=(
    Keyboard(one_time=True, inline=False)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .row()
    .add(Text(f'{snow_x}', {'cmd' : 'snow_full'}), color=KeyboardButtonColor.POSITIVE)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    .add(Text("."), color=KeyboardButtonColor.SECONDARY)
    ).get_json()
    )


При запуске кода выше - код естественно идёт по лесенке на которой и написан.
Представим ситуацию - человек в первый раз выбрал первый ряд, а дальше например нажал на последний.
  • Вопрос задан
  • 38 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
Lunali
@Lunali
скрытна.
макросы, по этому запросу ты найдешь ответ на свой вопрос .
Или же можно просто создать последовательность из своего списка, но по сути мы получим тот же макрос

Если вопрос о просто нажатие кнопок, то макросы решают эту проблему везде где нужно просто нажаитие кнопок не зависит от того где нажимать
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы