Python Discord.py黑名单Json命令

Python Discord.py黑名单Json命令,python,discord,discord.py,Python,Discord,Discord.py,我正在使用JSON制作一个黑名单命令。它不工作并发出错误命令引发异常:AttributeError:'dict'对象没有属性'append'。它还擦除Json。是Json内部的样子。我找到了代码不起作用的原因。这可能是正确的解决方案: 您的JSON文件应如下所示: @blacklist.command(aliases=['member']) async def user(self,ctx,*,user:typing.Union[discord.Member, discord.User])

我正在使用JSON制作一个黑名单命令。它不工作并发出错误
命令引发异常:AttributeError:'dict'对象没有属性'append'
。它还擦除Json。是Json内部的样子。

我找到了代码不起作用的原因。这可能是正确的解决方案:

您的JSON文件应如下所示:

  @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)
以及您应该如何读取并向其添加值:

{"blacklisted":[]}

您不能以这种方式附加到JSON文件。我们首先必须确保
“黑名单”
已经存在

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

查看以下代码:

@blacklist.command(别名=['member'])
异步定义用户(self,ctx,*,用户:键入.Union[discord.Member,discord.user]):
以open(“jsons/blacklistj.json”,“r”)作为f:
data=json.load(f)
打印(“打开了JSON文件”)
尝试:
数据[str(“黑名单”)].append(str(user.id))
等待ctx.send(“成功,添加新ID”)
除KeyError外:
数据[str(“黑名单”)]=[str(user.id)]
wait ctx.send(“由于没有条目而创建了黑名单”)
以open(“jsons/blacklistj.json”,“w”)作为f:
json.dump(数据,f)
  • 请注意,同一ID可以多次使用。然后,您必须自己包含一段代码,检查JSON中是否已经存在
    user.id
  • 为了使其更简单,您还可以使用
    id=str(user.id)
    user.id
    定义为
    str
    ,然后在所有位置插入
    id

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

在JSON中,列入黑名单的
键应该在“双引号”中,就像在Python中声明它一样。我认为这不会解决您的问题,但这仍然是一个问题。您在装饰器中也有一个输入错误:
alises
,而不是
alias
。此外,您可能希望使用适当的数据库,如SQLite,因为它不太容易受到竞争条件的影响,文件被一段代码覆盖而另一段代码仍在运行。加载JSON后尝试打印
数据
,看看它的形状。我做了所有这些,起初它工作并打印了
{'blacklisted':[myidthatimmnotgonnaputher]}
,当我第二次这样做时,它又给了我错误。然后,当我关闭它时,它删除了Json。我将Json文件内部更改为
黑名单=[]
并更改了
数据
,它仍然无法处理错误
Json.decoder.JSONDecodeError:期望值:第1行第1列(char 0)
我想我知道您的代码为什么不能工作。我编辑了答案。试试看
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)