无需复杂框架,如何通过Discord API创建服务器即时邀请链接?
如何用OAuth2授权码生成Discord即时邀请链接
我明白你不想被复杂的框架束缚,只想用最基础的方式生成Discord即时邀请链接——那咱们就直接走Discord的原生API流程,一步步解决问题:
第一步:用授权码交换访问令牌
你拿到的授权码只是个「临时凭证」,得先把它换成访问令牌(Access Token),才能调用Discord的API。
你需要向Discord的令牌端点发送一个POST请求,参数如下:
- 请求地址:
https://discord.com/api/oauth2/token - 请求头:
Content-Type: application/x-www-form-urlencoded - 请求体参数:
client_id: 你的应用客户端ID(和授权链接里的一致)client_secret: 你的应用客户端密钥(在Discord开发者后台可以找到)grant_type: 固定值authorization_codecode: 你拿到的授权码redirect_uri: 和授权链接里的完全一致(编码前的原地址,比如http://localhost:3000/callback)
举个curl的例子:
curl -X POST "https://discord.com/api/oauth2/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=authorization_code&code=YOUR_AUTH_CODE&redirect_uri=YOUR_REDIRECT_URI"
成功的话,你会收到包含access_token、token_type等字段的JSON响应,把access_token存好,接下来要用它。
第二步:调用API创建即时邀请链接
现在有了访问令牌,就可以直接调用Discord的创建邀请API了。
前提条件
- 你要创建邀请的服务器频道ID(可以在Discord开启开发者模式后,右键频道复制ID)
- 你的授权账号在该服务器拥有创建即时邀请的权限(也就是
CREATE_INSTANT_INVITE权限)
发送请求
- 请求地址:
https://discord.com/api/v10/channels/{CHANNEL_ID}/invites(把{CHANNEL_ID}换成实际的频道ID) - 请求头:
Authorization: Bearer YOUR_ACCESS_TOKEN(把YOUR_ACCESS_TOKEN换成第一步拿到的令牌)Content-Type: application/json
- 请求体(JSON格式,按需调整参数):
{ "max_age": 0, // 邀请有效期(秒),0表示永久有效 "max_uses": 1, // 可使用次数,1表示仅限1人使用,0表示无限制 "temporary": false, // 是否临时成员(退出服务器后自动移除),false表示永久成员 "unique": true // 是否生成唯一邀请链接 }
举个原生JS的例子(不用任何框架就能跑):
const channelId = "YOUR_CHANNEL_ID"; const accessToken = "YOUR_ACCESS_TOKEN"; fetch(`https://discord.com/api/v10/channels/${channelId}/invites`, { method: "POST", headers: { "Authorization": `Bearer ${accessToken}`, "Content-Type": "application/json" }, body: JSON.stringify({ max_age: 0, max_uses: 1, temporary: false, unique: true }) }) .then(response => response.json()) .then(data => { console.log("生成的邀请链接:", data.url); }) .catch(error => console.error("出错了:", error));
成功响应里的url字段就是你要的即时邀请链接啦!
关键注意事项
- 授权链接的
scope必须包含guilds(这样才能获取服务器和频道的访问权限),如果之前的授权链接没加,得重新生成授权链接并添加scope=guilds参数 - 确保你的应用在Discord开发者后台的
OAuth2页面里,已经把redirect_uri添加到允许列表里,否则令牌交换会失败
内容的提问来源于stack exchange,提问作者Giju Gijja
相关产品推荐
相关产品推荐

