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

Discord建议机器人:发送Webhook后删除用户原始消息的实现求助

解决Discord建议机器人删除用户原始消息的问题

看起来你离实现目标只差一步啦!要删除用户发送的原始消息其实很简单,直接利用on_message事件里的message对象就行,不需要额外通过ID查找。我帮你修改代码并解释关键点:

关键修改点

  1. 补上缺失的核心导入:原代码漏了import discord,这会导致discord.Client()无法正常运行。
  2. 修复嵌入标题的语法错误:原代码里{.author}是格式错误,改成{message.author}才能正确显示发送建议的用户名称。
  3. 添加删除原始消息的逻辑:在Webhook发送完成后,调用await message.delete()即可直接删除用户的原始消息。
  4. 新增异常处理:避免因权限不足、消息已被删除等情况导致机器人崩溃。

修改后的完整代码

import os
import discord  # 补上缺失的Discord库导入
from discord_webhook import DiscordWebhook, DiscordEmbed

client = discord.Client()

@client.event
async def on_ready():
    print("我们已以{0.user}身份登录".format(client))

@client.event
async def on_message(message):
    if message.author == client.user:
        return
    
    # 这里的startswith('')可以根据你的实际需求调整,比如改成特定前缀如'!建议'
    if message.content.startswith(''):
        message_text = message.content.strip()
        webhook = DiscordWebhook(url='https://discord.com/api/webhooks/826534186978115645/JIQyWHFs3-7XBdmcnsWIWQ2xKSW20v7-Nu18MUFrWnLiOZr59zDaYFYNB')
        
        # 修复标题格式错误,用f-string更直观
        embed = DiscordEmbed(title=f"新建议来自{message.author}", color='25211F')
        embed.set_thumbnail(url='https://pbs.twimg.com/profile_images/1335666008158318593/rzi-99qX_400x400.jpg')
        embed.set_footer(text='CloverPings', icon_url='https://pbs.twimg.com/profile_images/1257792878962712583/uVn8Upko_400x400.jpg')
        embed.set_timestamp()
        embed.add_embed_field(name='建议内容', value=message_text)
        
        webhook.add_embed(embed)
        response = webhook.execute()
        
        # 尝试删除用户的原始消息,并捕获可能的异常
        try:
            await message.delete()
            print(f"已删除用户{message.author}的建议消息")
        except discord.Forbidden:
            print("机器人没有删除消息的权限,请检查服务器权限设置")
        except discord.NotFound:
            print("目标消息已被删除,无需重复操作")

client.run("Mytoken")

重要注意事项

  • 权限配置:确保你的机器人在服务器中拥有管理消息的权限,否则delete()方法会抛出Forbidden错误,无法执行删除操作。
  • 执行顺序:一定要在Webhook发送完成后再删除用户消息,避免出现“消息被删但建议没转发成功”的情况。
  • 关于Message ID:其实你完全不需要单独用ID来删除消息,因为on_message事件已经直接提供了用户发送的message对象,直接调用它的delete()方法是最简便高效的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 13:02:29