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

Discord机器人执行Kick命令时未发送消息的问题求助

问题排查与解决

1. 权限检查逻辑错误

你用的@commands.has_permissions(kick_members=True, administrator=True)要求执行者同时拥有这两个权限才能触发命令,但管理员权限本身就包含踢人权限,这种二选一的场景应该用has_any_permissions:

@commands.has_any_permissions(kick_members=True, administrator=True)

如果执行者没同时满足两个权限,命令根本不会触发,自然不会发消息。

2. 命令类型与回应方式不匹配

你用了inter.respond()(斜杠命令的回应方法),但命令用的是@bot.command()(前缀命令装饰器):

  • 前缀命令(比如!kick)要用await inter.send()(这里的inter其实是前缀命令的ctx对象),前缀命令的上下文没有respond方法,调用会直接报错,导致消息发不出去。
  • 要是想做斜杠命令,得把装饰器改成@bot.slash_command(),同时用await inter.response.send_message()来发送消息。

3. 无效的消息删除操作

如果是斜杠命令,inter.message这个对象根本不存在,调用delete()会抛出异常,直接中断代码执行——哪怕前面的回应命令已经执行,也可能因为异常导致交互处理失败,你看不到消息。

修正后的参考代码

前缀命令版本

@bot.command(description='Данная команда исключает пользователя из сервера')
@commands.has_any_permissions(kick_members=True, administrator=True)
async def kick(ctx, member: disnake.Member, *, reason='Нарушение правил сервера'):
    await ctx.send(f"{ctx.author.mention} исключил пользователя {member.mention}")
    await member.kick(reason=reason)
    await ctx.message.delete()

斜杠命令版本

@bot.slash_command(description='Данная команда исключает пользователя из сервера')
@commands.has_any_permissions(kick_members=True, administrator=True)
async def kick(inter, member: disnake.Member, reason: str = 'Нарушение правил сервера'):
    await inter.response.send_message(f"{inter.author.mention} исключил пользователя {member.mention}")
    await member.kick(reason=reason)
    # 斜杠命令没有可删除的用户发起消息,移除delete语句

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:52:50