I’m currently in the process of making a kind of ticket system. I want to do that through a reaction.
When a user clicks on the reaction, a message is sent to a specific channel. This message ID is saved in a JSON file and should be assigned to the user who clicked on the reaction. But if I save the user and the message individually in the JSON file, I don’t know which user the message belongs to. How can I assign the message ID to a user?
My Code:
@client.event async def on_raw_reaction_add(reaction): ticketmess = 716263100638035969 ticketlog = client.get_channel(716265124771397662) user = client.get_user(reaction.user_id) if reaction.message_id == ticketmess and reaction.emoji.id == 680827797165572117: with open(r'./tickets.json', 'r')as f: ticketchannels = json.load(f) if not f"{reaction.user_id}" in ticketchannels: ticketmess = await ticketlog.send('Ein User braucht Hilfe!') with open(r'./tickets.json', 'r')as f: ticketmessages = json.load(f) ticketmessages[f"{reaction.user_id}"] = f'{user} in {ticketmess.id}' with open(r'./tickets.json', 'w') as f: json.dump(ticketmessages, f, indent=4)
Advertisement
Answer
The code would look something like:
@client.event async def on_raw_reaction_add(reaction): ticketmsg = 716263100638035969 ticketlog = client.get_channel(716265124771397662) user = client.get_user(reaction.user_id) if reaction.message_id == ticketmsg and reaction.emoji.id == 680827797165572117: # you already have loaded it in once, you don't need to read it again with open("tickets.json", "r") as fp: data = json.load(fp) if f"{reaction.user_id}" not in data.keys(): ticketmsg = await ticketlog.send("Ein User braucht Hilfe!") # you can just assign the message id to the user, no need for a string data[f"{reaction.user_id}"] = ticketmsg.id with open("tickets.json", "w+") as fp: json.dump(data, fp, sort_keys=True, indent=4) # kwargs are for beautification
You don’t need the f"{user} in {ticketmsg.id}"
because you can get the user from the key. Besides, usernames can change, so putting it in the file would prove to be not very useful.
If you wish to get the user’s name, just load in the keys from the json and use client.get_user(ID_HERE)
.
If you want to search for a user based off of a specific message ID, you can iterate through a dictionary like so:
my_dict = {"key": "value", "foo": "bar"} for k, v in my_dict.items(): if v == "bar": print(k) # selecting the key based off of its value # output: # foo
I’m hoping I understood your question correctly, if not, I’ll be happy to edit my answer after some clarification.