如何让Discord Bot发送类似Dank Memer hack命令的动画消息并解决编辑报错
故障原因
你代码中调用的ctx.message.edit()是尝试编辑触发命令的用户发送的原始消息,Discord API明确禁止机器人编辑其他用户发送的消息,这就是你收到对应报错、功能无法运行的核心原因。
修复步骤
- 先让机器人主动发送一条初始消息,后续所有动画帧的编辑操作都针对这条机器人自己发送的消息执行即可
- 不要使用
list作为变量名,这是Python内置关键字,覆盖后会影响后续内置列表功能的正常使用 - 代码中使用的单个反斜杠需要转义,否则会触发Python语法报错
修正后的完整代码
import asyncio # 确保你已经提前导入了asyncio库 import discord from discord.ext import commands # 以下为修改后的virus方法代码 async def virus(self, ctx, user: discord.Member = None, *, virus: str = "trojan"): user54 = user or ctx.author # 替换内置关键字list为自定义变量名animation_frames animation_frames = ( f"`[▓▓▓ ] / {virus}-virus.exe Packing files.`", f"`[▓▓▓▓▓▓▓ ] - {virus}-virus.exe Packing files..`", f"`[▓▓▓▓▓▓▓▓▓▓▓▓ ] \\ {virus}-virus.exe Packing files..`", f"`[▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ] | {virus}-virus.exe Packing files..`", f"`[▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ] / {virus}-virus.exe Packing files..`", f"`[▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ] - {virus}-virus.exe Packing files..`", f"`[▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ] \\ {virus}-virus.exe Packing files..`", f"`Successfully downloaded {virus}-virus.exe`", "`Injecting virus. |`", "`Injecting virus.. /`", "`Injecting virus... -`", f"`Successfully Injected {virus}-virus.exe into {user54.name}`", ) # 先让bot发送一条初始消息,后续编辑这条自己发的消息 animation_msg = await ctx.send("加载中...") for i in animation_frames: await asyncio.sleep(1.5) await animation_msg.edit(content=i)
内容的提问来源于stack exchange,提问作者TalhaIqbal
相关产品推荐
相关产品推荐

