Discord.py黑名单Json命令

2024-05-23 18:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

  @blacklist.command(aliases=['member'])
  async def user(self,ctx,*,user:typing.Union[discord.Member, discord.User]):
    with open("jsons/blacklistj.json", "r") as f:
        data = json.load(f.read())
    data["blacklisted"].append(user.id)
    print(data)
    with open("jsons/blacklistj.json", "w") as a:
      json.dump(data, a)
    await ctx.send('blacklisted'+ user.id)

我正在使用JSON制作一个黑名单命令。它不工作,并给出一个错误Command raised an exception: AttributeError: 'dict' object has no attribute 'append'。它还删除JsonThis是Json内部的样子


Tags: idjsondataaswithopencommandctx
2条回答

您不能以这种方式附加到JSON文件。我们首先必须确保"blacklisted"已经存在

我做了一个稍微不同的代码,但它的工作方式是相同的

查看以下代码:

@blacklist.command(aliases=['member'])
async def user(self, ctx, *, user: typing.Union[discord.Member, discord.User]):
    with open("jsons/blacklistj.json", "r") as f:
        data = json.load(f)
        print("Opened the JSON file.")
    try:
        data[str("Blacklist:")].append(str(user.id))
        await ctx.send("Success, added new ID.")
    except KeyError:
        data[str("Blacklist:")] = [str(user.id)]
        await ctx.send("Blacklist was created as there was no entry.")

    with open("jsons/blacklistj.json", "w") as f:
        json.dump(data, f)
  • 请注意,同一ID可以多次使用。然后您必须自己包含一段代码来检查user.id是否已经存在于JSON中
  • 为了简化,您还可以将user.id定义为带有id = str(user.id)str,然后在任何地方插入id

一个小提示:您不必使用str,也可以只使用user.id,如您的示例所示

我明白了为什么你的代码不起作用。这可能是正确的解决方案:

您的JSON文件应如下所示:

{"blacklisted":[]}

以及您应该如何读取并向其添加值:

with open("jsons/blacklistj.json", "r") as f:
    data = json.loads(f.read())
data["blacklisted"].append("test")
with open("jsons/blacklistj.json", "w") as a:
    json.dump(data, a, indent=4)

相关问题 更多 >