Discord机器人Kick命令执行后无法踢出指定用户求助
问题解决:Discord Kick命令无法踢人
你的代码里踢人功能失效的核心原因是没有正确调用踢人方法并传入目标用户参数,具体问题和修复方案如下:
问题点分析
- 你将
user.guild.kick方法赋值给kick变量后,仅执行await kick并没有实际触发踢人操作——这个写法只是等待方法对象,缺少必须的目标用户参数,也没有传递可选的踢人原因。 - 另外需要确保机器人本身在服务器中拥有踢人权限,不过你已经检查了命令执行者的权限,这部分无需调整。
修复后的代码
@bot.tree.command(name='kick', description='Kicks a user from the server [S]') async def embed(interaction : discord.Interaction, user : discord.Member, reason : str = None): permissions = interaction.user.guild_permissions is_admin = permissions.kick_members if is_admin: # 直接调用Member对象的kick方法,传入目标用户和原因 await user.kick(reason=reason) embed = discord.Embed(title='Kick Command', color=discord.Color.blurple(), description='Kicks a user.') embed.set_author(name=f'{interaction.user}', icon_url=f'{interaction.user.display_avatar}') embed.add_field(name='Username', value=str(user.mention), inline=True) embed.add_field(name='Reason', value=reason or 'No reason provided', inline=True) embed.add_field(name='Moderation', value='User kicked successfully.', inline=True) embed.set_footer(text=f"Command called by: {interaction.user}") embed.set_image(url='image') await interaction.response.send_message(embed=embed)
关键修改说明
- 移除多余的
kick = user.guild.kick赋值,直接使用await user.kick(reason=reason)——这是Discord.py中踢人更简洁的写法,Member对象自带kick方法。 - 处理了
reason为None的场景,默认显示No reason provided,避免输出None影响观感。 - 简化
if is_admin == True为if is_admin,Python中布尔值可直接作为判断条件,代码更简洁。
内容的提问来源于stack exchange,提问作者HaxDX
相关产品推荐
相关产品推荐

