es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando recuperar información del archivo infractions.json para un miembro específico, pero la información no se está recuperando correctamente.

    En tu bloque try, estás usando member.id para acceder a la información correspondiente en el diccionario users. Sin embargo, en tu función createinfraction, estás almacenando la información usando user.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ón createinfraction:

    users[str(user.id)] = {}
    

    a:

    users[str(member.id)] = {} # cambiar por users[str(member.id)] = {}
    

    Además, en tu bucle for, cambia:

    for user in users:
        if user == member.id:
    

    a:

    for userid in users:
        if userid == str(member.id):
    

    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.

Comments are closed.