我正在创建一个新的bot(现在是我第三次了,但是已经有一段时间了),并且正在创建一个简单的ban命令。它与我的其他命令逐行相同,只是添加了@commands.has_permissions()
装饰器和一个嵌入以显示该禁令。但是,在添加一些打印以显示到达的位置后,它并没有经过await user.ban()
。
# ---BAN---
@client.command(name="ban", pass_ctx=True)
@commands.has_permissions(ban_members=True)
async def ban(ctx, user: discord.User=None, *, reason: str=None):
if not user:
await ctx.send("Specify a user")
return
embed = discord.Embed (
color = discord.Color.magenta()
)
embed.add_field(name=f"{user} was banned!", value=f"For reason: {reason}", inline=False)
await user.ban()
await ctx.send(embed=embed)
@ban.error
async def ban_error(ctx, error):
if isinstance(error, BadArgument):
await ctx.send("Please specify a **valid** user!")
不会引发任何错误,但只会在停止前到达await user.ban()
。我的用户以某种方式错了,还是我犯了一个明显的错误?
答案 0 :(得分:1)
'User'对象没有属性'ban',相反,您需要传递一个成员对象:
async def ban(ctx, user: discord.Member=None, *, reason: str=None):
您并没有收到任何错误,因为@ban.error
捕获了这些错误,但是仅处理了BadArgument
异常,而其余异常被忽略了。