#python #discord.py-rewrite
#python #discord.py
Вопрос:
У меня есть бот discord, закодированный на python. Я хочу иметь возможность сохранять пользовательские данные в файле JSON, но по какой-то причине этот код, который я написал, не работает. Вот код, который вызывает у меня проблемы.
@client.command()
async def slash(ctx):
amount = random.randint(1,10)
with open("data.json", "r") as f:
users = json.load(f)
await userupdateslash(users, ctx.author, amount)
with open("data.json", "w") as f:
json.dump(users, f, indent=4)
f.close()
embed = discord.Embed(
title = "Slash!",
description = (f"{ctx.author} slashed through a stormtrooper and gained {amount}xp"),
colour = discord.Colour.green()
)
embed.set_footer(text='Created by [VG] Xezo#6969')
embed.set_thumbnail(url='https://cdn.discordapp.com/app-icons/760648752435822613/c1d0d4451e8e3123373709d31b0bffba.png?size=128')
embed.set_author(name='Baby Yoda',
icon_url='https://cdn.discordapp.com/app-icons/760648752435822613/c1d0d4451e8e3123373709d31b0bffba.png?size=128')
await ctx.send(embed=embed)
async def userupdateslash(users, user, xp):
if user.id in users:
try:
users[user.id]["xp"] = xp
except Exception as error:
raise(error)
Комментарии:
1. Что значит «это не работает»? Не могли бы вы исправить отступ вашего блока кода для меня?
Ответ №1:
Я получил рабочий код, я реализовал on_message
событие, если у пользователя уже есть слот (xp) для data.json.
@client.event
async def on_message(message):
if message.author.bot == False:
with open('data.json', 'r') as f:
users = json.load(f)
await update_data_slash(users, message.author)
await update_slash(users, message.author, 0)
with open('data.json', 'w') as f:
json.dump(users, f, sort_keys=True, ensure_ascii=False, indent=4)
await client.process_commands(message)
async def update_data_slash(users, user):
if not f'{user.id}' in users:
users[f'{user.id}'] = {}
users[f'{user.id}']['xp'] = 0
async def update_slash(users, user, xp):
users[f'{user.id}']['xp'] = xp
@client.command()
async def slash(ctx):
amount = random.randint(1, 10)
with open('data.json', 'r') as f:
users = json.load(f)
users[f'{ctx.author.id}']['xp'] = amount
with open('data.json', 'w') as f:
json.dump(users, f, sort_keys=True, ensure_ascii=False, indent=4)
embed = discord.Embed(
title = "Slash!",
description = (f"{ctx.author} slashed through a stormtrooper and gained {amount}xp"),
colour = discord.Colour.green()
).set_footer(
text='Created by [VG] Xezo#6969'
).set_thumbnail(
url='https://cdn.discordapp.com/app-icons/760648752435822613/c1d0d4451e8e3123373709d31b0bffba.png?size=128'
).set_author(
name='Baby Yoda',
icon_url='https://cdn.discordapp.com/app-icons/760648752435822613/c1d0d4451e8e3123373709d31b0bffba.png?size=128'
)
await ctx.send(ctx.author.mention, embed=embed)
Я также улучшил пару вещей, например: он сортирует идентификатор пользователя и exp, и я изменил формат встраивания, и он будет упоминать пользователя с помощью встраивания (не во встраивании, а как бы поверх него)