@NIKITe

У меня проблема какаята,где?

У меня там вылазит всегда разная ошибка (зависит от ид пользователя) , вот код:<
async def on_message(message):
  
  with open("user.json","r") as file:
    
    data = json.load(file)
    
    
    
    file.close
     
  if data[str(message.author.id)]["RANK"] == 999:
    
    await get(message.guild.text_channels, id=message.channel.id).send(f"Поздравляю <@{message.author.id}>,У тебя новый ранг! Продолжай в том же духе!")
    
    with open("user.json","w") as file:
      newlevel = {data[str(message.author.id)]["LEVEL"]} + 1
      data[str(message.author.id)]["LEVEL"] == newlevel
      data[str(message.author.id)]["RANK"] == 0
      json.dump(data,file,indent=4)
      file.close()
  
    
   
  


  else:
    with open("user.json","w") as file:
      data[str(message.author.id)]["RANK"] += 1
      json.dump(data,file,indent=4)
      file.close()
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
@rPman
Проверь наличие записи с искомым id в json и как то это обрабатывай, по уму подумай а есть ли .json файл вообще, проверяй ошибки записи и т.п.

А еще ты обманываешь пользователей :) ты сначала им говоришь что ранг увеличил и только потом его увеличиваешь, а если в этот момент что то произойдет?

Кстати подумай хорошо, что случится, если места для записи .json файла не хватит (или любая другая проблема) - старое содержимое будет утеряно а новое не будет записано до конца. Хорошим способом работы со своим хранилищем на файлах является подход - любую перезапись делай созданием нового временного файла с записываемым содержимым, если запись успешна - удаляешь старый файл и переименовываешь временный в итоговый... таким образом любая ошибка в этом алгоритме (если их отслеживать) не уничтожит данные, хотя бы старые.

Еще совет, сохраняй все не в один огромный файл а в много маленьких (отдельный каталог для них), заводи на каждого user_id свой файл, где этот идентификатор в имени файла. В этом случае твой код не будет тормозить при большом количестве пользователей и работать с такой "базой" гораздо удобнее (файловая система это типичная key-value база данных)

p.s. ну конечно лучше пользоваться готовыми базами данных, нет нужды изобретать паровоз, посмотри sqlite - это sql база данных на основе файла, нет никаких серверов и все просто и удобно
Ответ написан
Ваш ответ на вопрос

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

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