@asssdas

Как сделать так что бы вк бот на Pyton «работал» отдельно для каждого пользователя?

Бот собирает данные и потом считает их по формуле, а если в момент сбора напишет кто то другой то данные меняются.
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 3
NeiroNx
@NeiroNx
Программист
Ну подумайте как бот поймет что написал кто-то другой? Как идентифифировать пользователя: по нику или всетаки по id. Потом придумайте как хранить данные отдельно, может базу завести или тупо в оперативной памяти - в словарях. Решений много.
Ответ написан
@kirillinyakin
Ну смотря, какую библиотеку используете, а вообще в общем случае надо запоминать шаги для каждого пользователя и потом смотреть на каком шаге пользовательн
Ответ написан
Комментировать
@efters
Общее решение - создать структуру данных о пользователе с введёнными числами и состоянием, каждый раз при получении сообщения проверять состояние пользователя, состояния лучше хранить как Enum

Если Вы используете pyTelegramBotApi, то можно использовать bot.register_next_step_handler, официальный пример: https://github.com/eternnoir/pyTelegramBotAPI/blob...

Пример простой реализации с системой состояний

from enum import Enum

class UserStates(Enum):
	PARAM_1 = 0
	PARAM_2 = 1

class UserInfo:
	state = UserStates.PARAM_1
	param_1 = 0
	param_2 = 0

users = {}

# обработчик текстового сообщения от пользователя
# userId - любой спосо идентификации пользователя (TG User ID / Chat ID / etc)

if (users.has_key(userId)):
	if (users[user_id].state == UserStates.PARAM_1):
		# нам отправили первое число
		users[user_id].param_1 = # int (сообщение)
		# зпросить второе число
		users[user_id].state = UserStates.PARAM_2

	elif (users[user_id].state == UserStates.PARAM_2):
		# отправили 2е число
		users[user_id].param_2 = # int (сообщение)
		#результат
		result = users[user_id].param_1 + users[user_id].param_2
		# готовы снова принять первый параметр для нового вычисления
		users[user_id].state = UserStates.PARAM_1
else:
	users[user_id] = UserInfo()

Ответ написан
Комментировать
Ваш ответ на вопрос

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

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