You need to enable JavaScript to run this app. discord.py开发中如何删除用户发送的命令消息?
优惠活动
大模型
产品
解决方案
定价
更多

discord.py开发中如何删除用户发送的命令消息?

discord.py 触发命令后自动删除用户命令消息的实现方案

首先修正你现有代码的错误点:commands.command 装饰的命令函数第一个参数是 Context(上下文)对象,不是消息对象,用户发送的命令消息存储在该上下文的 message 属性中。

单命令单独配置删除逻辑

如果只需要部分命令触发后删除用户消息,直接在对应命令函数内添加删除逻辑即可,注意捕获权限异常:

import os
import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.members = True
# discord.py v2.0+ 必须开启消息内容意图才能识别前缀命令
intents.message_content = True
client = commands.Bot(command_prefix = '.', intents = intents)

@client.command(pass_context=True)
async def myCmd(ctx):
    # 删除用户发送的命令消息
    try:
        await ctx.message.delete()
    except discord.Forbidden:
        # 无删除消息权限时的兜底提示,delete_after参数表示提示消息3秒后自动删除
        await ctx.send("我没有删除消息的权限,请先授予对应权限", delete_after=3)
        return
    # 你的业务回复逻辑
    await ctx.send('Something') 

client.run("你的机器人Token")

全局命令统一配置删除逻辑

如果希望所有前缀命令触发后都自动删除用户的命令消息,可以通过on_command事件全局处理,不需要每个命令单独编写删除代码:

@client.event
async def on_command(ctx):
    # 所有命令触发时先执行该逻辑
    try:
        await ctx.message.delete()
    except discord.Forbidden:
        await ctx.send("缺少删除消息权限,无法清理命令消息", delete_after=2)

注意事项

  • 你需要在Discord开发者后台的机器人设置页面开启 Message Content Intent 权限,discord.py v2.0及以上版本必须开启该权限才能正常识别用户发送的前缀命令
  • 机器人必须在对应服务器拥有「管理消息」权限,才能删除其他用户发送的消息
  • 兜底提示添加delete_after参数可以自动清理提示消息,避免刷屏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:54:03