Python Discord.py黑名单Json命令
我正在使用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])
命令引发异常: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)