You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用discord.py实现Discord机器人踢人功能?报错求助

问题分析与解决

报错核心原因是Slash Command(@client.tree.command())的回调函数参数使用错误:

  • 你同时传入了传统前缀命令用的ctx和Slash Command专属的interaction,且interaction的位置与类型标注不符合Discord.py的规则。
  • Discord.py中,Slash Command的回调函数第一个参数必须是discord.Interaction对象,不需要额外的ctx参数。

修正后的代码

from typing import Optional
import discord
from discord import app_commands

@client.tree.command(name="kick", description="Kicks the specified member")
@app_commands.describe(member='The member you want to kick', reason='Reason for kicking the member')
async def kick(interaction: discord.Interaction, member: discord.Member, reason: Optional[str] = "No reason provided"):
    """Kicks the specified member from the server"""
    
    # 检查命令执行者的踢人权限
    if not interaction.user.guild_permissions.kick_members:
        await interaction.response.send_message("你没有踢人权限!", ephemeral=True)
        return
    
    # 检查机器人自身的踢人权限
    if not interaction.guild.me.guild_permissions.kick_members:
        await interaction.response.send_message("我没有踢人权限,请给我分配相应权限!", ephemeral=True)
        return
    
    # 禁止踢自己或管理员
    if member == interaction.user:
        await interaction.response.send_message("你不能踢自己!", ephemeral=True)
        return
    if member.guild_permissions.administrator:
        await interaction.response.send_message("我不能踢管理员!", ephemeral=True)
        return
    
    try:
        await member.kick(reason=reason)
        # 假设你已实现generate_unix_time_code函数返回秒级Unix时间戳
        await interaction.response.send_message(f"已将 {member.mention} 踢出服务器\n执行者:{interaction.user.mention}\n原因:{reason}\n时间:<t:{generate_unix_time_code()}:F>")
    except discord.Forbidden:
        await interaction.response.send_message(f"无法踢出 {member.mention},权限不足!", ephemeral=True)
    except discord.HTTPException as e:
        await interaction.response.send_message(f"踢人失败:{str(e)}", ephemeral=True)

关键修改说明

  1. 参数调整:
    • 移除多余的ctx参数,将interaction作为第一个参数并正确标注类型。
    • 调整参数顺序:把必填的member放在前面,reason设为可选参数并赋予默认值,符合Slash Command的参数规则。
  2. 权限校验:新增用户与机器人的权限检查,避免无权限时直接报错。
  3. 异常处理:捕获Forbidden(权限不足)和HTTPException(其他HTTP错误),给出友好提示。
  4. 信息修正:用interaction.user替代ctx.author获取命令执行者,用member.mention实现@提及效果。

额外注意事项

  • 确保generate_unix_time_code()返回正确的秒级Unix时间戳,否则时间显示会异常。
  • 机器人启动时需执行client.tree.sync()同步Slash Command,否则命令可能无法在服务器中显示。

内容的提问来源于stack exchange,提问作者Whatifyoucloseyour5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:45:27