Discord.js:如何获取用户关联账户并实现Riot与Faceit用户名比对?
可行解决方案
核心限制说明
Discord官方API确实不直接提供用户关联的Riot Games账户信息,这是出于用户隐私和平台数据权限的限制,直接通过Discord API获取此信息的路径走不通。
替代实现方案
1. 引导用户主动授权或提供信息并验证
- 让用户通过Riot的OAuth2授权流程,主动授权你的机器人获取其Riot账户信息:这是最可靠的方式,授权后可通过Riot API直接拿到用户的官方用户名。
- 若不想走OAuth,可让用户手动输入Riot用户名+Tag,再调用Riot的用户查询API(比如Valorant的
/riot/account/v1/accounts/by-riot-id/{gameName}/{tagLine}接口)验证信息真实性,确认后绑定到用户的Discord ID上。
2. 借助Faceit API反向提取关联Riot账户
- 既然你能获取用户的Faceit链接,先通过Faceit API解析出用户的Faceit ID,再调用Faceit的玩家游戏关联接口,提取该Faceit账户绑定的Riot用户名:
- 需要先申请Faceit API密钥,然后通过接口查询用户的关联游戏账户数据。
- 拿到Riot用户名后,可引导用户确认该账户是否属于自己的Discord账号,完成比对。
3. 搭建自定义关联验证系统
- 在机器人内构建独立的关联数据库,记录Discord用户ID与Riot用户名的对应关系:
- 提供指令(如
!bind-riot [游戏名] [Tag])让用户提交信息。 - 增加验证环节:比如要求用户在Riot游戏内将昵称临时修改为包含Discord用户ID的内容,机器人通过Riot API查询确认后完成绑定;或要求用户上传带有Discord ID的游戏内截图,由管理员人工审核(适合小范围使用的机器人)。
- 提供指令(如
代码示例(Faceit API获取关联Riot账户)
const fetch = require('node-fetch'); async function fetchRiotFromFaceit(faceitUserId, faceitApiKey) { const res = await fetch(`https://open.faceit.com/data/v4/players/${faceitUserId}/games`, { headers: { 'Authorization': `Bearer ${faceitApiKey}` } }); const playerGames = await res.json(); // 以Valorant为例,如需其他Riot游戏可替换为lol等 const riotAccount = playerGames.games?.valorant; return riotAccount ? riotAccount.nickname : null; }
内容的提问来源于stack exchange,提问作者Grkm
相关产品推荐
相关产品推荐

