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

Discord Bot /clear命令批量删除无响应问题求助

问题分析与解决方案

核心问题

你的/clear命令在删除2条及以上消息时无法给用户返回响应,但日志能正常记录,根源是Discord要求交互类命令必须在3秒内给出响应。当删除多条消息时,purge操作加上await asyncio.sleep(1)的延迟,会导致超出3秒的响应窗口,交互过期后就无法再通过interaction.response.send_message发送回复。

修复步骤

  1. 提前发送延迟响应:在执行耗时的消息删除操作前,先告知Discord需要处理时间,避免交互超时。
  2. 替换响应方式:延迟响应后,需用followup.send代替response.send_message发送最终回复,原响应通道已无法使用。
  3. 移除不必要延迟:删除await asyncio.sleep(1),减少处理时间消耗。
  4. 清理重复逻辑:前面已经验证过how_many的范围,后面重复的if how_many > 100判断可以直接删除。

修复后的完整代码

@bot.tree.command(name="clear", description="Nachrichten löschen")
@commands.has_any_role('Dev', 'Admin')
async def clear(interaction: discord.Interaction, how_many: int):

    if how_many <= 0 or how_many > 100:
        error_embed = discord.Embed(
            title='Fehler',
            description='Die Anzahl der zu löschenden Nachrichten muss zwischen 1 und 100 liegen.',
            color=16711680,
        )
        await interaction.response.send_message(embed=error_embed, ephemeral=True)
        return
    
    user_used = interaction.user

    # 发送延迟响应,避免交互超时
    await interaction.response.defer(ephemeral=True)

    # 执行消息删除操作
    deleted = await interaction.channel.purge(limit=how_many)  

    clear_embed = discord.Embed(
        title='Nachrichten Gelöscht',
        description=f'Es wurden {len(deleted)} Nachricht(en) gelöscht.',  
        color=16711680,
        timestamp=datetime.datetime.now()
    )

    clear_embed.set_footer(text='Nachricht wird in #logs gespeichert!')

    # 发送日志消息
    log_channel = bot.get_channel(1113853971556225064)
    clear_who_embed = discord.Embed(
        title="Löschung!",
        description=f"Es wurden {len(deleted)} Nachricht(en) gelöscht!",  
        color=16711680,
        timestamp=datetime.datetime.now()
    )
    clear_who_embed.add_field(
        name="Benutzer:",
        value=f"{user_used}"
    )

    await log_channel.send(embed=clear_who_embed)
    # 使用followup发送最终响应
    await interaction.followup.send("Erfolgreich!", ephemeral=True)

额外优化说明

  • 日志描述改用len(deleted)代替how_many,因为实际删除的消息数量可能少于请求值(比如频道剩余消息不足),让日志记录更准确。
  • 合并重复的日志频道获取代码,减少冗余操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 04:12:23