Discord API无法更新服务器横幅问题求助
解决Discord服务器横幅更新成功但未生效的问题
核心问题:图片数据格式错误
你当前传给API的是完整的data:image/png;base64,xxx格式字符串,但Discord的Guild更新API对banner字段的要求是仅需纯base64编码的图片数据,不需要带data URI前缀。API返回成功是因为它接收了合法的请求结构,但无法解析带前缀的数据,所以实际没有完成横幅更新。
修复步骤
- 修改图片加载函数,去掉data URI前缀,只返回纯base64字符串:
async function loadImage (path) { let data = await promises.readFile(path) let base64 = data.toString('base64'); console.log('loaded ', path); return base64; // 移除data:image/png;base64,前缀 }
验证图片尺寸:Discord服务器横幅强制要求图片为1920x480像素(4:1比例),如果图片尺寸不符,哪怕API返回成功,新横幅也不会显示。确保
_banners目录下的图片都符合这个规格。确认机器人权限:你的Token必须拥有
MANAGE_GUILD权限,否则即使请求返回成功,也没有修改服务器设置的权限。
额外排查点
- 更新后可以重新获取Guild数据,打印
guild.banner字段,确认该字段是否有变化(Discord会存储缩略后的哈希值,更新成功的话这个值会改变)。 - 刷新Discord客户端缓存(按Ctrl+R或重启客户端),有时候旧横幅会被客户端缓存导致看不到新变化。
内容的提问来源于stack exchange,提问作者stackers
相关产品推荐
相关产品推荐

