Discord.py InvalidArgument错误:Webhook未关联令牌导致无法删除的问题求助
解决Discord机器人删除Webhook时的"InvalidArgument: This webhook does not have a token associated with it"错误
你的问题出在遍历并删除频道内所有Webhook的操作上。当你调用ctx.channel.webhooks()时,会获取到频道里所有的Webhook——包括那些不是你的机器人创建的、或者机器人没有权限获取其Token的Webhook,这类Webhook没有关联Token,调用delete()方法自然会抛出你看到的错误。
修复方案:直接删除你刚创建的Webhook
你不需要遍历所有Webhook,因为你已经持有了刚创建的Webhook对象引用,直接对它调用delete()即可:
@client.command() async def clone(ctx, member: discord.User=None, *, message:str=None): if member == None or message == None: await ctx.send("You need to give a member (mention) and message.") return # 创建Webhook并保存对象引用 webhook = await ctx.channel.create_webhook(name=member.name) try: await webhook.send( message, username=f"{member.name} (fake)", avatar_url=member.avatar_url ) finally: # 直接删除刚创建的这个Webhook,不用遍历所有 await webhook.delete()
为什么之前的方法会出错?
ctx.channel.webhooks()返回的列表里,可能包含其他用户创建的Webhook,或者机器人没有权限访问Token的Webhook(比如部分服务器级别的Webhook)。- 只有机器人自己创建的Webhook,或者明确被授予管理权限的Webhook,才会包含可用于删除操作的Token。
用try...finally包裹发送消息和删除操作的好处是,哪怕发送消息过程中出现错误,也能确保Webhook被及时清理,不会在频道里留下无用的Webhook残留。
内容的提问来源于stack exchange,提问作者AlwaysInTheDark
相关产品推荐
相关产品推荐

