Как передать переменную из одной функции в другую на VKBOTTLE? Python

Бот работает на либе vkbottle и он, получается, асинхронный. Хочу реализовать нормальную автооплату, но не выходит реализовать проверку платежа, ибо айди платежа лежит в другой функции. Как можно получить переменную IDE из функции "sfsg"?? памагите

Код: https://pastebin.com/8WuXBL3v


Ответы (1 шт):

Автор решения: 0xmeow

Для того, что бы получить переменную из одной "функции" в другой, нужно её сохранить где-то глобально. И желательно сохранять отдельно для каждого пользователя.

VKBottle предоставляет готовый функционал в виде state-dispenser'ов. Позволяет сохранять различные состояния для каждого пользователя, а так же сохранять произвольные данные (payload).

Решение будет выглядеть примерно так:

from vkbottle_types import BaseStateGroup
...

class MyStates(BaseStateGroup):
    IDE_STATE = 0
    ...


@bot.on.private_message(text='Сoглaceн')
async def sfsg(message:Message):
    IDE = random.randint(1,99999)
    await bot.state_dispenser.set(message.peer_id, MyStates.IDE_STATE, IDE=IDE)
    amount = 1
    ...


@bot.on.private_message(text='Проверить оплату')
async def adfusa(message:Message):
    IDE = message.state_peer.payload["IDE"]
    await message.answer(IDE)
→ Ссылка