You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Discord OAuth2:如何获取并列出机器人所在的Guilds(服务器)

获取并列出Discord机器人所在服务器(Guilds)的方法

要实现列出机器人所在服务器的功能,需完成以下关键步骤:

1. 确保OAuth2授权包含guilds权限

在引导用户授权的OAuth2链接中,必须添加guilds权限参数,否则无法获取服务器列表。授权链接的scope部分需包含:

scope=identify+guilds

2. 扩展现有代码获取服务器列表

在你已有的用户信息获取代码基础上,添加调用Discord服务器列表接口的逻辑,示例代码如下:

window.onload = () => {
    const fragment = new URLSearchParams(window.location.hash.slice(1));
    const [accessToken, tokenType] = [fragment.get('access_token'), fragment.get('token_type')];

    if (!accessToken) {
        window.location.href = '/';
        return;
    }

    // 获取用户信息
    fetch('https://discord.com/api/users/@me', {
        headers: {
            authorization: `${tokenType} ${accessToken}`,
        },
    })
    .then(result => result.json())
    .then(response => {
        console.log('用户信息:', response);
        const { username, discriminator, avatar, id} = response;
        // 设置欢迎用户名
        document.getElementById('h1').innerText = ` ${username}#${discriminator}`;
        // 设置头像
        document.getElementById("avatar").src = `https://cdn.discordapp.com/avatars/${id}/${avatar}.jpg`;
    })
    .catch(console.error);

    // 获取并渲染服务器列表
    fetch('https://discord.com/api/users/@me/guilds', {
        headers: {
            authorization: `${tokenType} ${accessToken}`,
        },
    })
    .then(result => result.json())
    .then(guilds => {
        console.log('服务器列表:', guilds);
        // 假设页面存在id为guildList的容器用于展示列表
        const guildListContainer = document.getElementById('guildList');
        if (!guildListContainer) return;

        guildListContainer.innerHTML = '';
        // 遍历服务器列表生成展示项
        guilds.forEach(guild => {
            const listItem = document.createElement('div');
            // 处理服务器图标为空的情况
            const iconUrl = guild.icon 
                ? `https://cdn.discordapp.com/icons/${guild.id}/${guild.icon}.jpg`
                : '默认图标地址';
            listItem.innerHTML = `
                <img src="${iconUrl}" alt="${guild.name}" width="32" height="32">
                <span>${guild.name}</span>
            `;
            listItem.style.display = 'flex';
            listItem.style.alignItems = 'center';
            listItem.style.gap = '8px';
            listItem.style.margin = '8px 0';
            guildListContainer.appendChild(listItem);
        });
    })
    .catch(console.error);
};

3. 关键注意事项

  • 接口返回的是当前授权用户加入的、且机器人已入驻的服务器,若机器人在某服务器但用户未加入,无法通过该接口获取
  • 需处理服务器icon字段为null的情况,避免图片加载错误
  • 确保机器人已正确添加到目标服务器中

内容的提问来源于stack exchange,提问作者Sprint's Utilities

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:06:45