TypeError:SyncWebhook.__init__缺失必填参数session,Webhook消息发送故障
问题解决:TypeError: SyncWebhook.init() missing required 'session'参数
错误根源
你在异步代码环境中错误使用了同步适配器SyncWebhook,导致参数不匹配且无法兼容异步上下文。SyncWebhook是为同步代码设计的,不能在async with块中配合异步ClientSession使用,必须改用对应的异步适配器。
修正方案
- 替换适配器为
AsyncWebhookAdapter(需确保已正确导入) - 为无限循环添加延迟,避免触发Discord API限流
- 确保
spam_messages是合法的消息内容(字符串或符合要求的消息对象)
修正后的代码
import asyncio import aiohttp from discord_webhook import Webhook, AsyncWebhookAdapter @bot.event async def on_guild_channel_create(channel): if hook: webhook = await channel.create_webhook(name="Test") webhook_url = webhook.url async with aiohttp.ClientSession() as session: # 使用异步适配器适配异步环境 webhook = Webhook.from_url(str(webhook_url), adapter=AsyncWebhookAdapter(session)) while True: await webhook.send(spam_messages) # 每秒发送一次,可根据需求调整间隔 await asyncio.sleep(1) bot.run(token)
关键说明
AsyncWebhookAdapter是专门为异步代码设计的适配器,能正确接收session参数并支持await调用发送消息- 无延迟的
while True会疯狂发起API请求,极易触发Discord的限流机制,添加asyncio.sleep()是必要的防护措施 - 如果使用的是discord.py内置的Webhook功能,导入路径会略有不同,但核心逻辑一致:用异步适配器替代同步适配器
内容的提问来源于stack exchange,提问作者ClientIssue
相关产品推荐
相关产品推荐

