每当我运行我的机器人时,我总是收到“TypeError:参数‘reason’在回调‘moderation.kick’中缺少类型注释”。
@app_commands.command(name='kick', description='Kicks the member of your choice if you have kick permissions.')
@has_permissions(kick_members=True)
async def kick(s, interaction:discord.Interaction, member:discord.Member, *, reason='None'):
await interaction.response.send_message(f'User {member} has been kicked.')
await member.kick(reason=reason)
@kick.error
async def kick_error(s, interaction:discord.Interaction, error):
if isinstance(error, commands.MissingPermissions):
await interaction.response.send_message('You don\'t have permission to kick people!')
我不明白我做错了什么,因为“reason”的默认值是一个字符串。我什至将代码重写为:
async def kick(s, interaction:discord.Interaction, member:discord.Member, *, reason='None') -> str:
这也没有帮助。我确信这很简单,但任何建议将不胜感激!
正如错误指出的那样:将类型注释添加到您的回调中:
async def kick(s, interaction: discord.Interaction, member: discord.Member, *, reason: str = 'None'):
await interaction.response.send_message(f'User {member} has been kicked.')
await member.kick(reason=reason)
通常 python 应该能够从默认值推断类型,但 Discord.py 似乎需要严格的类型。