#python #json #discord.py
#питон #json #discord.py
Вопрос:
Итак, я создаю некоторую систему подсчета очков в python с помощью json и discord.py , это его код:
import json
def getPoints(bot, user):
f = open('points.json', 'r')
points = json.load(f)
name = str(user)
f.close()
return points.get(name)
#later on down the line
@bot.group()
async def pointSystem(ctx):
pass
@pointSystem.command()
async def enable(ctx):
f = open('points.json', 'r')
points = json.load(f)
if points.get(str(ctx.author)) != None:
await ctx.send('Already enabled for this user!')
return
io = await ui.prompt(ctx, 'This command enables the point systemnAre you sure you want to enable this?')
if io == 'yes':
await ctx.send('Ok, enabling...')
points[str(ctx.author)] = 0
f.close()
f = open('points.json', 'w')
json.dump(points, f, indent=4)
f.close()
await ctx.send('Enabled for this user!')
else:
await ctx.send('Alright, stopping command execution...')
f.close()
в points.json я должен иметь:
{}
И это то, что я изначально туда вставил, но иногда я заглядываю в points.json и вижу строку с каким-то случайным словом в ней. Он не выдает никакой ошибки, он просто делает то, что я описал, что не имеет особого смысла, потому что я не думаю, что у меня есть какой-либо код, который установил бы его в строку любого вида. У меня нет кода воспроизведения, поскольку я не знаю настоящего виновника этой проблемы, я бы посоветовал вам сделать что-то вроде того, что я сделал, то есть создать discord-бота с этой системой подсчета очков, но я действительно не думаю, что даже это могло бы воспроизвести его.
Редактировать: Хорошо, это становится действительно странным. 3 месяца спустя, с совершенно новым кодом, у меня все еще есть файл с именем «points.json» в моем корневом каталоге, и он содержит случайную строку, о которой я упоминал выше, что буквально не имеет смысла. Даже когда я удаляю его, через пару недель он вернется.
Комментарии:
1. У вас есть асинхронный код, но вы, например, не блокируете файл, в который вы пишете, когда вы его пишете, поэтому две или более задачи могут одновременно загружать в него JSON…
2. В целом, было бы лучше провести рефакторинг вашего кода, чтобы все операции с файлами обрабатывались отдельными функциями, а не материалом, смешанным с другими вашими функциями бота.
3. Блокировка файла не исправила это, я использую portalocker для его блокировки, поскольку fcntl отсутствует в Windows. Файл JSON по-прежнему превращается в строку случайных слов.
4. Пожалуйста, приведите нам пример «строки случайных слов».
5. Это текущий: «MrNateBro»