问题描述
我正在编写一个 discord.py bot,这是警告命令,它会通过警告 cmd 记录警告! 为什么会出现关键错误?我的 JSON:
{"777618366894571530": {"1": "ROMO charged by ROMO#6714 for demo"}}
我用来获取警告的脚本:
if str(guildid) in warns:
for value in warns.items():
warnval = warns[str(guildid)][value]
if user in warnval:
embed.add_field(name=f"``Warn {value}``",value=f"{warnval}",inline=True)
else:
await ctx.send("Guild has no warns!")
我的完整警告 cmd 从 json 中获取警告:
@command()
@cooldown(9,20,BucketType.user)
async def warns(self,ctx,user : discord.Member):
guild = user.guild
guildid = user.guild.id
userid = user.id
print("LOADING")
warns = {}
guildid = ctx.guild.id
placing = (len(warns)+1)
with open("./warns.json","r") as f:
warns = json.load(f)
embed = discord.Embed(title=f"Warns",description= f"Warns for user {user}",color=0x00ff00)
if str(guildid) in warns:
for value in warns.items():
warnval = warns[str(guildid)][value]
if user in warnval:
embed.add_field(name=f"``Warn {value}``",inline=True)
else:
await ctx.send("Guild has no warns!")
embed.set_footer(text=f"These are {user.display_name}'s warns.")
await ctx.send(embed=embed)
解决方法
我认为这就是你想要的:
found_warning = False
if str(guildid) in warns:
for key,warnval in warns[str(guildid)].items():
if user.name in warnval:
embed.add_field(name=f"``Warn {key}``",value=f"{warnval}",inline=True)
found_warning = True
if not found_warning:
await ctx.send("Guild has no warns!")
items()
返回包含字典键和值的元组。您只想在值中搜索用户。您不需要再次索引字典,因为它会返回值。
使用 found_warning
变量来判断它是否在任何警告中找到了用户。