能否通过YouTube API获取频道会员?Discord应用开发求助
实现Discord服务器仅允许YouTube频道会员加入的方案
核心API说明
你要找的YouTube会员验证接口是YouTube Data API v3中的Members.list端点,这个接口可用于查询用户是否为指定频道的会员。之前没找到大概率是没注意到需要配置特定的OAuth权限。
具体实现步骤
1. 配置Google Cloud与YouTube API权限
- 登录Google Cloud Console,创建项目并启用YouTube Data API v3
- 创建OAuth 2.0客户端ID(需用户授权才能读取其会员信息)
- 申请
youtube.channelMemberships.read权限,这是读取用户会员身份的必要权限
2. 实现会员验证流程
- 在Discord应用中添加验证入口,引导用户跳转至Google OAuth授权页面,请求上述权限
- 用户授权成功后获取访问令牌,调用
Members.list接口:- 使用
mine=true参数获取当前授权用户加入的所有会员频道列表 - 检查返回结果中是否包含你的目标频道ID,以此判断用户是否为会员
- 使用
3. 与Discord集成联动
- 先通过Discord OAuth2获取用户的Discord ID
- 验证通过后,调用Discord API为该用户添加允许加入服务器的专属角色(需确保你的Discord机器人拥有管理角色的权限)
- 将服务器设置为仅持有该角色的用户可加入,完成权限控制
代码示例(Node.js)
const { google } = require('googleapis'); const discordApi = require('./discord-api-client'); // 自定义Discord API客户端 // 验证用户是否为目标频道会员 async function verifyYoutubeMember(accessToken, targetChannelId) { const youtube = google.youtube({ version: 'v3', auth: accessToken }); try { const res = await youtube.members.list({ part: 'snippet', mine: true }); return res.data.items.some(item => item.snippet.channelId === targetChannelId); } catch (err) { console.error('会员验证失败:', err); return false; } } // 验证通过后为Discord用户添加角色 async function grantDiscordRole(discordUserId, roleId) { await discordApi.addGuildMemberRole('你的服务器ID', discordUserId, roleId); }
注意事项
Members.list接口有调用配额限制,需合理控制请求频率- 需处理OAuth访问令牌过期问题,通过刷新令牌维持会话
- 用户必须登录YouTube账号并完成授权,才能验证其会员身份
内容的提问来源于stack exchange,提问作者user48118
相关产品推荐
相关产品推荐

