You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeError:SyncWebhook.__init__缺失必填参数session,Webhook消息发送故障

问题解决:TypeError: SyncWebhook.init() missing required 'session'参数

错误根源

你在异步代码环境中错误使用了同步适配器SyncWebhook,导致参数不匹配且无法兼容异步上下文。SyncWebhook是为同步代码设计的,不能在async with块中配合异步ClientSession使用,必须改用对应的异步适配器。

修正方案

  1. 替换适配器为AsyncWebhookAdapter(需确保已正确导入)
  2. 为无限循环添加延迟,避免触发Discord API限流
  3. 确保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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 00:04:57