NodeJS调用Discord API修改Vanity URL遇阻求助
解决Discord Vanity URL修改的API调用问题
看起来你在调用Discord API修改服务器自定义URL的时候踩了两个关键的坑,我来帮你逐一解决:
第一个问题:POST请求不对,应该用PATCH
Discord API中,/guilds/{guild.id}/vanity-url这个端点的POST方法是用来获取当前的自定义URL信息,而不是修改它。要修改自定义URL,你需要使用PATCH请求。这就是为什么你用Bot令牌调用POST时,只会返回当前的cherrys邀请码——因为这个请求本来就只是查询用的。
修正后的代码应该是这样的:
fetch('https://discord.com/api/v10/guilds/762359120031907871/vanity-url', { method: 'PATCH', headers: { 'Authorization': 'Bot ' + client.token, 'Content-Type': 'application/json' }, body: JSON.stringify({ "code": "test458" }) }) .then(res => res.json()) .then(json => console.log(json)) .catch(err => console.error(err));
注意几个细节:
- 把请求方法从
POST改成PATCH - 把
payload换成标准的body参数(fetch API里没有payload这个参数,这也是潜在问题) - 建议使用最新的API版本(v10,而不是你用的v6,旧版本可能已经被废弃)
第二个问题:用户令牌返回401的原因
如果你想用用户令牌调用这个接口,需要满足几个条件:
- 你的账号必须拥有目标服务器的管理服务器权限
- 用户令牌的格式是直接使用,不要加
Bot前缀(比如Authorization: "你的用户令牌",而不是Bot 你的用户令牌) - 你的账号可能需要开启2FA(如果服务器开启了服务器安全等级要求的话)
- 另外,Discord现在对用户令牌的API调用有严格的限制,官方推荐始终使用Bot令牌来做机器人操作,不建议用用户令牌替代
额外注意事项
- 确保你的Bot账号拥有目标服务器的管理服务器权限,否则即使是PATCH请求也会返回权限不足的错误
- 自定义URL的
code必须是未被占用的,而且符合Discord的格式要求(只能包含字母、数字和连字符,长度在3-32之间) - 记得处理请求的错误情况,比如捕获
catch里的异常,方便排查问题
内容的提问来源于stack exchange,提问作者Lemaaa
相关产品推荐
相关产品推荐

