Discord.py机器人实现幽灵Ping后无法自动删除消息的问题求助
解决Discord机器人幽灵Ping无法删除消息的问题
嘿,我一眼就看到你代码里的小问题啦,咱们一步步解决:
1. 修复核心语法错误
你写的await response.delete少了括号!delete()是一个异步方法,必须通过括号调用才能执行删除操作。这是最直接导致消息删不掉的原因。
2. 确保机器人拥有正确权限
别忘了检查你的机器人在目标频道(ID: 870236465681010708)是否拥有管理消息权限——哪怕是删除自己发的消息,Discord也要求机器人具备这个权限哦。
3. 可选:添加延迟优化体验
如果希望用户能收到Ping提醒后消息再消失,可以加个短延迟(比如1秒),避免消息刚发送就被删除导致用户没收到通知。需要先导入asyncio模块。
修正后的完整代码示例
import asyncio # 假设你的其他代码(client定义、prefix等)已经正确设置 @client.event async def on_message(message): username = message.author.mention # 确保这里是正确的用户提及格式,能触发Ping user_message = message.content prefix = '!' # 替换成你的实际前缀 if user_message.lower() == prefix + 'partners': general_channel = client.get_channel(870236465681010708) # 发送Ping消息 response = await general_channel.send(username) # 验证消息是机器人发送的(其实这里可以省略,因为是我们刚发的) if response.author == client.user: # 添加1秒延迟(可选,根据需求调整时长) await asyncio.sleep(1) # 调用delete方法删除消息 await response.delete() # 别忘了处理默认的命令逻辑,避免覆盖其他功能 await client.process_commands(message)
额外说明
- 确保
username变量是正确的用户提及格式(比如用message.author.mention),这样才能成功Ping到用户。 - 如果还是删不掉消息,去Discord服务器的角色设置里,确认机器人角色的“管理消息”权限是开启状态,并且该角色在目标频道的权限没有被单独禁用。
内容的提问来源于stack exchange,提问作者Beluga




