Erro KeyError Python
код:
import vk_api
import random
import time
import datetime
token = ""
vk = vk_api.VkApi(token=token)
vk._auth_token()
now = datetime.datetime.now()
timeA = now.hour
def construct(id,idd,name,money,power,biznes):
p = {}
p["name"] = name
p["money"] = money
p["messegNumb"] = 0
p["power"] = power
p["biznes"] = biznes
p["idd"] = idd
data[str(id)] = p
return "normal"
def savebd():
with open("data.txt", "w") as file:
for i in data:#проходимся по data и получаем id в нем
p = str(i) + " " +str(data[i]["name"]) +" " +str(data[i]["money"])+ " " +str(data[i]["messegNumb"])+ " " +str(data[i]["power"])+ " " +str(data[i]["biznes"])+ " " +str(data[i]["idd"])
file.write(p + '\n') #записываем в data.txt построчно пользователей
def loadbd():
file = open("data.txt","r")
datas= file.read()
datas = datas.splitlines()
file.close()
data = {}
for i in datas:
i = i.split()
if len(i)>6:#проверка на полноту данных
data[str(i[0])] = {}
data[str(i[0])]["name"] = i[1]
data[str(i[0])]["money"] = i[2]
data[str(i[0])]["messegNumb"] = i[3]
data[str(i[0])]["power"] = i[4]
data[str(i[0])]["biznes"] = i[5]
data[str(i[0])]["idd"] = i[6]
return(data)
ibf = 0
def add_adq(id,ibf):
ibf = ibf + 1
data[str(id)]["idd"] = int(data[str(id)]["idd"]) + ibf
savebd()
return ibf
data =loadbd()#загружаем в переменную data информацию из функции loadbd и файла data.txt
while True:
#добавления монет каждый час пользователя
#часть игровой механики бота
now = datetime.datetime.now()
timeB = now.hour
if timeA<timeB:
timeA = timeB
for i in data:
data[i]["money"] = data[i]["money"] + data[i]["power"]
print(data)
elif (timeA>timeB) and (timeB == 0):
timeA = 0
for i in data:
data[i]["money"] = data[i]["money"] + data[i]["power"]
messages = vk.method("messages.getConversations", {"offset": 0, "count": 20, "filter": "unanswered"})
if messages["count"] >= 1:
id = messages["items"][0]["last_message"]["from_id"]
body = messages["items"][0]["last_message"]["text"]
#авторизация пользователя в боте
n = 0
for i in data:
print(i)
if str(id) == i:
n = 1
if n == 0:
user = vk.method("users.get", {"user_ids": id}) # вместо 1 подставляете айди нужного юзера
uzers = user[0]['first_name'] + ' ' + user[0]['last_name']
for i in data:
data[i]["idd"] = data[i]["idd"] + 1
print(data)
savebd()
ibfg = data[str(id)]["idd"]
construct(id,ibfg,uzers,0,10,'нету')
#простые команды
if body.lower() == "привет":
vk.method("messages.send", {"peer_id": id, "message": "Привет!", "random_id": random.randint(1, 2147483647)})
elif body.lower() == "кто я?":
vk.method("messages.send", {"peer_id": id, "message": "ты хороший человек", "random_id": random.randint(1, 2147483647)})
elif (body.lower() == "профиль" or body.lower() == "стата" or body.lower() == "stats"):
smg = "id: " + str(data[str(id)]["idd"]) + "\n"
smg = smg + "Ник: " + str(data[str(id)]["name"]) + "\n"
smg = smg + "Баланс: " + str(data[str(id)]["money"])+"$"
smg = smg + "\n" + "Энергия: " + str(data[str(id)]["power"]) + "доход/в час"
smg = smg + "\n" + "Бизнес: " + str(data[str(id)]["biznes"])
vk.method("messages.send", {"peer_id": id, "message": smg, "random_id": random.randint(1, 2147483647)})
else:
#состовные команды
bodyone = body.lower().split()
if (bodyone[0] == "ник") and (len(bodyone)>1):
data[str(id)]["name"] = bodyone[1] #меняем имя пользователя в боте на новое
vk.method("messages.send", {"peer_id": id, "message": "ник изменен на " + str(bodyone[1]), "random_id": random.randint(1, 2147483647)})
else:
#если бот не нашел команду которую он может выполнить
vk.method("messages.send", {"peer_id": id, "message": "нет такой команды", "random_id": random.randint(1, 2147483647)})
savebd()
вывод:
ibfg = data[int(id)]["idd"]
~~~~^^^^^^^^^
KeyError: 461333923
как исправить ошибку