Ситуация такая: есть чат-бот, для однго человека работает хорошо, а вот для двух, начинаются проблемы. Один начал раньше другого, второй пытается что-то написать, но бот реагирует на нажатия второго и пишет их первому. Подозреваю, что надо для каждого пользователя создавать новый объект, но как это сделать, не понимаю.
Файл main.py:
# -*- coding: utf-8 -*-
import bot
import vk_api
import time
from os import listdir
import json
vk = vk_api.VkApi(token = '')
vk._auth_token()
values = {'out':0, 'count':100, 'time_offset':60}
def auth(user_id_): # DONE
#if user_in_group(user_id_):
user_id = user_id_
data_base = listdir('/workdir/data_base')
name_file = str(user_id)+".json"
values_for_user = {
"fac": None,
"id": user_id_,
"answers": [0,0,0,0,0,0,0,0,0,0,0,0,0]
}
PATH = '/workdir/data_base/'
bot_ = 0
if name_file in data_base:
print('File exist...')
print('Authorization success for '+str(user_id))
else:
print('Creating json_file for '+str(user_id))
with open(PATH+name_file, "w+") as file:
json.dump(values_for_user, file)
file.close()
print('File for '+ str(user_id) +' has been created!')
bot_ = bot.Bot(vk, values, user_id_)
# else:
# print('Authorization for '+srt(user_id_)+' failed!')
while True:
response = vk.method('messages.get', values)
if response['items']: # если items не пусто
values['last_message_id'] = response['items'][0]['id']
for item in response['items']:
# bot.send_message(item['user_id'], 'Hello')
if response['items'][0]['body'] == '1':
auth(item['user_id'])
# bot.main_menu(item['user_id'])
# else:
#bot.send_message(item['user_id'], 'What?')
time.sleep(1)
Файл bot.py:
# -*- coding: utf-8 -*-
# import neural_net
import json
import numpy as np
from os import listdir
class Bot:
vk_token = 0
vk_values = 0
def __init__(self, vk_, values_, user_id_): #DONE
self.vk_token = vk_
self.vk_values = values_
self.main_menu(user_id_)
def check_f(self, user_id_): # DONE
user_id = user_id_
data_base = listdir('/workdir/data_base')
name_file = str(user_id)+'.json'
PATH = '/workdir/data_base/'
# self.auth(user_id_)
with open(PATH+name_file, "r") as file:
user_file = json.load(file)
if user_file['fac'] == None:
print('No fac!')
return True
else:
print(str(user_id)+' has been already sorted!')
return False
# print(user_file['fac'])
def get_message(self): #DONE
res = self.vk_token.method('messages.get', self.vk_values)
if res['items']:
self.vk_values['last_message_id'] = res['items'][0]['id']
return res
def send_message(self, user_id_, msg): #DONE
self.vk_token.method('messages.send', {'user_id':user_id_, 'message':msg})
def main_menu(self, user_id_): #DONE
PATH = '/workdir/data_base/'
name_file = 'main_menu.txt'
menu = open(PATH + name_file, "r")
self.send_message(user_id_, menu)
# self.auth(user_id_)
while True:
response = self.get_message()
for item in response['items']:
if response['items'][0]['body'] == '1':
self.sort(user_id_)
return False
elif response['items'][0]['body'] == '2':
self.faq(user_id_)
return False
else:
self.send_message(user_id_, 'What?')
def faq(self, user_id_):
# TODO
# по ключевым словам нейросеть должна выдавать
# предположение о вопросе и
# предпологаемый ответ
self.send_message(user_id_, 'faq')
def sort(self, user_id_):
# TODO
# прогнать ответы через сеть
# удалить ответы из json_file
# поставить отметку о сортировке в json_file пользователя
if self.check_f(user_id_):
self.send_message(user_id_, 'sort')
name_file = str(user_id_)+".json"
PATH = '/workdir/data_base/'
response_ = self.get_message()
last_id = 0
for item in response_['items']:
last_id = response_['items'][0]['id']
id_ = last_id
i = 0
with open(PATH+name_file, "r+") as file:
json_file = json.load(file)
x = np.array([[0,0,0,0,0,0,0,0,0,0,0,0,0]])
while i < 13:
self.send_message(user_id_, 'Question N '+str(i+1))
while id_ == last_id:
#print('Now in while')
new_id = self.vk_token.method('messages.get', self.vk_values)
#print(new_id['items'][0]['id'])
if new_id['items']:
last_id = new_id['items'][0]['id']
res = self.get_message()
with open(PATH+name_file, "r+") as file:
user_file = json.load(file)
a = 0
for item in res['items']:
a = res['items'][0]['body']
user_file['answers'][i] = int(a)
# print(user_file['answers'][0][str(i+1)])
with open(PATH+name_file, "w") as file:
json.dump(user_file, file)
print('Question N'+str(i+1))
print(user_file)
id_ = last_id
i += 1
#tmp = json_file['fac']
#user_file['fac'] = 'S'
with open(PATH+name_file, "w") as file:
json.dump(user_file, file)
return False
else:
self.send_message(user_id_, 'You have been already sorted!')
# return False - сразу перекидывает в меню
# def user_in_group(self, user_id_): # MAYBE DONE
# TODO
# Сделать проверку
# Состоит ли пользователь в данной группе
# Если нет, то сказать ему об этом, и закончить разговор
# Если да, то разрешить ему пользоваться ботом
# response = self.vk_token.method('groups.getMembers',
# {'group_id':storms_ahead}
# for item in response['items']:
# if item == user_id_: # может и прокатит
# return True
# else:
# self.send_message(user_id_, "You're not here!")
# return False