@fufa_me

Цепочка сообщений в Vkbottle PYTHON — как сделать?

возможно ли сделать цепочку сообщений в боте ВК на библиотеке VKBOTTLE?
пытался понять конечные автоматы, но ничего толкового не узнал - ниче не работает

сам код:

bot = Bot("efbc74d441*********9477************************6f0edabf501759ff6c63bae5623ce127099")

@bot.on.private_message(text='Начать')
async def col1(message:Message):
await message.answer("Первое сообщение цепочки")

#здесь юзер должен отправить вщ любое сообщение и запустится второй ответ
@bot.on.private_message(text='msg')
async def col2(message:Message, msg):
await message.answer("Второе сообщение цепочки")

bot.run_forever()

памагити
  • Вопрос задан
  • 720 просмотров
Пригласить эксперта
Ответы на вопрос 1
igor_89squad
@igor_89squad
Python
Привет! Как понимаю тебе нужны стейты.
Информацию про них можно найти тут и ещё в ютубе, так и вводи vkbottle стейты.

from vkbottle import CtxStorage, BaseStateGroup
from vkbottle.bot import Bot, Message

"""BOT"""
bot = Bot(token="TOKEN")
# ctx будет нужен для сохранения ответов.
ctx = CtxStorage()

# class в данном случае нужен для пошагового выполнения программы.
class Reg(BaseStateGroup)
     NAME=0
     AGE=1
     ABOUT=2
     END=3 #END я добавляю чтобы стейт останавливался.

@bot.on.private_message(lev="/reg")
async def Name(message: Message):
     await bot.state_dispenser.set(message.peer_id, Reg.NAME) # Тут мы вторым аргументом предает Reg.Name, NAME у нас выступит как первый шаг.
     return "Введи свое имя..." #Это сообщение отправиться пользователю, после ему надо будет ответить.
@bot.on.private_message(state=Reg.NAME) #Проще говоря, когда мы вводим state=Reg.NAME,  мы даем понять боту эта функция включится после активации Reg.NAME, мы его активировали в предыдущем блоке
async def Age(message: Message):
     ctx.set('name', message.text) # Мы записываем ответ пользователя под ключом name
     await bot.state_dispenser.set(message.peer_id, Reg.AGE) 
     return "Сколько вам лет?"
@bot.on.private_message(state=Reg.AGE)
async def About(message: Message):
     ctx.set('age', message.text) 
     await bot.state_dispenser.set(message.peer_id, Reg.ABOUT) 
     return "Расскажи о себе...."
@bot.on.private_message(state=Reg.ABOUT)
async def finally(message: Message):
     ctx.set('about', message.text) 
     await message.answer(f"Вот твои данные:\n{ctx.get('name')}\n{ctx.get('age')}\n{ctx.get('about')}")
     return "Ваши данные сохранены"

Надеюсь понятно изъяснился, если будут ошибки пиши!
Ответ написан
Ваш ответ на вопрос

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

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