开发者

discord.py json report system

开发者 https://www.devze.com 2022-12-07 22:19 出处:网络
class my_modal(ui.Modal, title="Report or Suggest"): answer = ui.TextInput(label="Is this a report or a suggestion?", style=discord.TextStyle.short, required=True, placeholder=&quo
class my_modal(ui.Modal, title="Report or Suggest"):
    answer = ui.TextInput(label="Is this a report or a suggestion?", style=discord.TextStyle.short, required=True, placeholder="Report/Suggestion")
    answer2 = ui.TextInput(label="What is your report/suggestion?", style=discord.TextStyle.long, required=True, placeholder="Your Text Here")
    
    
    async def on_submit(self, interaction: discord.Interaction):
        with open("reports.json", "r") as f:
                data = json.load(f)
        if self.answer.value.lower() == "report" or self.answer.value.lower() == "suggestion":
            await interaction.response.send_message("Successfully submitted your report/suggestion.", ephemeral=True)
            print(f"{interaction.user} sent a {self.answer}: {self.answer2}")
            data["name"] = interaction.user
            data["choice"] = self.answer.value.lower()
            data["message"] = self.answer2.value.lower()
            with open("reports.json", "w") as f:
                json.dump(data, f)
                
                
        else:
            await interaction.response.send_message("You either didn't put a valid input in your first choice or didn't type it properly. Make sure you typed it properly and try again.", ephemeral=True)
            return
            
@client.tree.command()
@commands.guild_only()
async def report(interaction: discord.Interaction):
    await interaction.response.send_modal(my_modal())

I am trying to make a json db (I know it's not recommended but I am just using this for time being) and when a user makes a report or suggestion, it stores their username, whether it's a suggestion or report, and their actual suggestion/report but I am getting this error

Traceback (mos开发者_运维知识库t recent call last):
  File "/home/container/.local/lib/python3.9/site-packages/discord/ui/modal.py", line 186, in _scheduled_task
    await self.on_submit(interaction)
  File "/home/container/main.py", line 311, in on_submit
    json.dump(data, f)
  File "/usr/local/lib/python3.9/json/__init__.py", line 179, in dump
    for chunk in iterable:
  File "/usr/local/lib/python3.9/json/encoder.py", line 431, in _iterencode
    yield from _iterencode_dict(o, _current_indent_level)
  File "/usr/local/lib/python3.9/json/encoder.py", line 405, in _iterencode_dict
    yield from chunks
  File "/usr/local/lib/python3.9/json/encoder.py", line 438, in _iterencode
    o = _default(o)
  File "/usr/local/lib/python3.9/json/encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type Member is not JSON serializable


You're not storing their username, you're trying to store the entire discord.Member instance:

data["name"] = interaction.user

Docs: https://discordpy.readthedocs.io/en/stable/interactions/api.html?highlight=interaction%20user#discord.Interaction.user

Python has no idea how to turn that into something and store it in a JSON file.

If you want a user's name, use User.display_name: https://discordpy.readthedocs.io/en/stable/api.html#discord.User.display_name

Also, consider storing id's instead of names. Multiple users can have the same name, and users can change their name. This would break your whole application unnecessarily.

0

精彩评论

暂无评论...
验证码 换一张
取 消