所以我在看这个question,我不能让代码工作,我会在最初的问题帖子上推一个评论,但是我没有足够的代表
我很抱歉,如果我不知道自己在做什么,我从来没有和警告一起工作过。
当我使用warn命令时,所遇到的错误是:
Ignoring exception in command warn:
Traceback (most recent call last):
File "/home/runner/dnunus-5/venv/lib/python3.8/site-packages/discord/ext/commands/core.py", line 85, in wrapped
ret = await coro(*args, **kwargs)
File "main.py", line 123, in warn
save_warn(ctx, member)
File "main.py", line 99, in save_warn
warns[str(member.id)] += 1
KeyError: '472100676407656448'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/runner/dnunus-5/venv/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 939, in invoke
await ctx.command.invoke(ctx)
File "/home/runner/dnunus-5/venv/lib/python3.8/site-packages/discord/ext/commands/core.py", line 863, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "/home/runner/dnunus-5/venv/lib/python3.8/site-packages/discord/ext/commands/core.py", line 94, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: KeyError: '472100676407656448'def save_warn(ctx, member: discord.Member):
with open('warns.json', 'r') as f:
warns = json.load(f)
warns[str(member.id)] += 1
with open('warns.json', 'w') as f:
json.dump(warns, f)
def remove_warn(ctx, member: discord.Member, amount: int):
with open('warns.json', 'r') as f:
warns = json.load(f)
warns[str(member.id)] -= amount
with open('warns.json', 'w') as f:
json.dump(warns, f)
def warns_check(member: discord.Member):
with open('warns.json', 'r') as f:
warns = json.load(f)
warns[str(member.id)]
return warns
@bot.command()
@commands.has_permissions(kick_members=True)
async def warn(ctx, member: discord.Member, *, reason):
save_warn(ctx, member)
dm = await bot.fetch_user(member.id)
em=discord.Embed(title="Warning", description=f"Server: {ctx.guild.id}\nReason: {reason}")
await dm.send(embed=em)
@bot.command()
@commands.has_permissions(kick_members=True)
async def warnings(ctx, member: discord.Member):
warns = warns_check(member)
await ctx.send(f"{member.name} has {warns} warnings.")
@bot.command()
@commands.has_permissions(kick_members=True)
async def rmwarn(ctx, member: discord.Member, amount: int):
remove_warn(ctx, member, amount)
await ctx.send(f"Removed {amount} warnings from {member.name}!")发布于 2022-06-21 21:23:31
在尝试访问密钥之前,需要确保密钥的存在。
一种方法是,如果成员还不知道,则将警告计数设置为0。
该代码的warns_check也被破坏了。
def save_warn(ctx, member: discord.Member):
with open('warns.json', 'r') as f:
warns = json.load(f)
# if `str(member.id)` isn't in `warns`, then return 0
warns[str(member.id)] = warns.get(str(member.id), 0) + 1
with open('warns.json', 'w') as f:
json.dump(warns, f)
def remove_warn(ctx, member: discord.Member, amount: int):
with open('warns.json', 'r') as f:
warns = json.load(f)
warns[str(member.id)] = warns.get(str(member.id), 0) - amount
with open('warns.json', 'w') as f:
json.dump(warns, f)
def warns_check(member: discord.Member):
with open('warns.json', 'r') as f:
warns = json.load(f)
return warns.get(str(member.id), 0)请注意,每次需要读取输入时打开和关闭文件并不是最佳做法。最好只加载一次输入,然后定期保存,如下所示:
@tasks.loop(minutes=1.0)
async def autosave():
with open(...) as f:
json.dump(warns, f)
autosave()
with open(...) as f:
warns = json.load(f)https://stackoverflow.com/questions/72704857
复制相似问题