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

如何用Discord.py创建清理指令?代码无报错但机器人无响应

解决Discord.py清理指令无响应的问题

看起来你遇到的问题主要来自几个方面——API版本过时、权限配置缺失,还有逻辑上的小疏漏,我来帮你一步步解决:

问题根源分析

你当前的代码用的是Discord.py v0.16.x的旧版API(比如client.send_message、client.logs_from这些方法),这些方法在新版Discord.py(v1.0+)里已经被弃用了。另外还有几个关键问题:

  • 没有启用消息内容意图(Message Content Intent),导致机器人接收不到消息指令
  • 缺少权限检查,机器人或用户没有管理消息的权限时无法执行操作
  • 没有限制清理消息的数量,可能导致操作超时,而且会把机器人自己发的提示消息也删掉,让你误以为没响应

修复后的代码

我推荐使用commands.Bot来开发命令(比直接用discord.Client更适合命令场景),以下是修复后的完整代码:

import discord
from discord.ext import commands

# 启用必要的网关意图,必须开启message_content才能接收消息
intents = discord.Intents.default()
intents.message_content = True

# 初始化Bot,设置命令前缀为!
bot = commands.Bot(command_prefix='!', intents=intents)

@bot.event
async def on_ready():
    print(f'机器人已登录:{bot.user.name}')

@bot.command(name='purge')
async def purge_command(ctx, amount: int = 10):
    # 检查用户是否有管理消息的权限
    if not ctx.author.guild_permissions.manage_messages:
        await ctx.send("抱歉,你没有管理消息的权限!")
        return
    # 检查机器人自身是否有管理消息的权限
    if not ctx.me.guild_permissions.manage_messages:
        await ctx.send("我没有管理消息的权限,请给我分配权限后再试!")
        return

    # 发送清理提示
    status_msg = await ctx.send(f'正在清理{amount}条消息...')
    # 收集要删除的消息:包括提示消息+指定数量的历史消息
    messages_to_delete = [status_msg]
    async for msg in ctx.channel.history(limit=amount):
        messages_to_delete.append(msg)
    
    # 批量删除消息(注意:只能删除14天以内的消息)
    await ctx.channel.delete_messages(messages_to_delete)
    # 发送清理完成提示,5秒后自动删除
    await ctx.send(f'已成功清理{amount}条消息!', delete_after=5)

# 替换成你的机器人令牌
bot.run('YOUR_BOT_TOKEN_HERE')

关键修改说明

  • 使用commands.Bot:专门为命令开发设计,自带命令前缀解析、权限检查等功能,比discord.Client更高效
  • 启用消息内容意图:在Discord开发者门户的Bot选项卡下,找到Privileged Gateway Intents,开启Message Content Intent,否则机器人收不到消息
  • 权限检查:提前验证用户和机器人的权限,避免无意义的操作并给出明确提示
  • 批量删除消息:用delete_messages代替逐条删除,更高效且不容易超时
  • 可配置清理数量:默认清理10条,用户也可以通过!purge 20这样的指令指定清理20条
  • 自动消失的提示:清理完成的提示会在5秒后自动删除,避免刷屏

额外注意事项

  1. 确保安装最新版的Discord.py(或Py-Cord,因为Discord.py官方已停止维护):
    pip install -U discord.py
    # 或者用Py-Cord
    pip install -U py-cord
    
  2. 在Discord服务器中,给机器人分配管理消息的权限
  3. 批量删除只能处理14天以内的消息,超过期限的消息需要逐条删除(可以在代码里添加判断逻辑)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:16:14