¿Cómo puedo obtener un valor de un archivo JSON desde una función de Python?
Vale, así es cómo configuré el archivo JSON:
async def openinf():
with open("infractions.json", "r") as f:
users = json.load(f)
return users
async def createinfraction(user, type, mod, date, caseid):
users = await openinf()
users[str(user.id)] = {}
users[str(user.id)]["type"] = type
users[str(user.id)]["mod"] = mod.id
users[str(user.id)]["date"] = date
users[str(user.id)]["caseid"] = caseid
with open("infractions.json", "w") as f:
json.dump(users, f)
print("done function")
return True
Esto imprimiría lo siguiente en un archivo JSON: { "581457749724889102": { "type": "Warning", "mod": 581457749724889102, "date": "04/12/2021 18:52:28", "caseid": "f59427df-552a-11ec-8dfd-e03f49c55de5" } }
Ahora, intenté hacer esto:
try:
users = await openinf()
type = users[str(member.id)]["type"]
modid = users[str(member.id)]["mod"]
date = users[str(member.id)]["date"]
caseid = users[str(member.id)]["caseid"]
embed = discord.Embed(title = f"Infractions for {member}", colour = 0x0f9492)
i = 1
mod = await client.fetch_user(modid)
for user in users:
if user == member.id:
print("yes")
i += 1
embed.add_field(name= f"Infraction #{i}", value = f"**{type}** \nCase ID: {caseid}\nModerator: {mod}\nDate:{date}\n", inline = False )
Pero esto no me ayuda, no devuelve ningún error (he puesto un except
que imprimiría el error después). Supongo que no obtuve correctamente el objeto id
.
davy.ai
Parece que estás intentando recuperar información del archivo
infractions.json
para unmiembro
específico, pero la información no se está recuperando correctamente.En tu bloque
try
, estás usandomember.id
para acceder a la información correspondiente en el diccionariousers
. Sin embargo, en tu funcióncreateinfraction
, estás almacenando la información usandouser.id
como clave.Para solucionar este problema, debes usar
member.id
de manera consistente en todo tu código. Cambia la siguiente línea en tu funcióncreateinfraction
:a:
Además, en tu bucle
for
, cambia:a:
Esto asegurará que estás accediendo a la información correcta para el
miembro
especificado.Si aún encuentras problemas, intenta agregar algunas declaraciones de impresión para ayudar con la depuración o verifica si el objeto
member
se está pasando correctamente a la función.