Discord建议机器人:发送Webhook后删除用户原始消息的实现求助
解决Discord建议机器人删除用户原始消息的问题
看起来你离实现目标只差一步啦!要删除用户发送的原始消息其实很简单,直接利用on_message事件里的message对象就行,不需要额外通过ID查找。我帮你修改代码并解释关键点:
关键修改点
- 补上缺失的核心导入:原代码漏了
import discord,这会导致discord.Client()无法正常运行。 - 修复嵌入标题的语法错误:原代码里
{.author}是格式错误,改成{message.author}才能正确显示发送建议的用户名称。 - 添加删除原始消息的逻辑:在Webhook发送完成后,调用
await message.delete()即可直接删除用户的原始消息。 - 新增异常处理:避免因权限不足、消息已被删除等情况导致机器人崩溃。
修改后的完整代码
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
相关产品推荐
相关产品推荐

