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

Discord机器人on_guild_update报错:缺少必填参数'after'排查

问题原因与解决方案

核心问题1:事件函数参数错误

Discord.py的on_guild_update事件根本不需要ctx参数,它的标准签名是async def on_guild_update(before: discord.Guild, after: discord.Guild)。你额外加了ctx,导致事件触发时Discord传入的before和after被错当成ctx和before,自然会提示缺少after参数。

核心问题2:头像设置逻辑错误

就算去掉ctx,你原来的await bot.user.edit(avatar=after.icon_url)也会报错——edit方法的avatar参数需要的是二进制字节数据,不是图标URL。你得先把服务器图标下载成bytes格式再传入。

修正后的完整代码

@bot.event
async def on_guild_update(before: discord.Guild, after: discord.Guild):
    # 确认图标确实发生了变更
    if before.icon != after.icon:
        # 处理服务器无图标的情况,避免报错
        if after.icon is None:
            # 可选择设置默认头像,或直接返回不修改
            return
        # 下载服务器图标为二进制数据(这里取最大尺寸)
        avatar_bytes = await after.icon.read()
        # 修改机器人头像
        await bot.user.edit(avatar=avatar_bytes)

补充说明

因为你的机器人在两个服务器,任意一个服务器图标变更时,机器人头像都会同步为该服务器的新图标,符合你的需求。如果只想监听特定服务器,可以在函数开头加过滤判断:if after.id not in [服务器ID1, 服务器ID2]: return,忽略无关的服务器更新事件。

内容的提问来源于stack exchange,提问作者Happy Deer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:10:27