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

咨询:在网站展示Discord在线用户及频道的实现方案

Discord频道与活跃用户展示实现方案(.NET Core 8)

核心思路

Discord没有官方提供类似tsviewer的直接嵌入组件,需通过Discord Bot API结合自定义后端接口实现:用Bot获取服务器(Guild)的频道列表和在线用户数据,再通过.NET Core API将数据暴露给前端展示。

具体步骤

1. 创建并配置Discord Bot

  • 登录Discord开发者平台,创建新应用并添加Bot账户
  • 为Bot分配必要权限:View Channels(查看频道)、Guild Members(获取服务器成员)、Guild Presences(获取用户状态)
  • 生成并保存Bot令牌(Token),记录你的Discord服务器ID(GuildId)

2. .NET Core后端集成Discord.NET库

  • 安装NuGet包:Discord.Net
  • 在Program.cs中配置Bot服务:
using Discord;
using Discord.WebSocket;

var builder = WebApplication.CreateBuilder(args);

// 配置Discord客户端网关意图
var discordConfig = new DiscordSocketConfig
{
    GatewayIntents = GatewayIntents.Guilds | GatewayIntents.GuildMembers | GatewayIntents.GuildPresences
};
var discordClient = new DiscordSocketClient(discordConfig);

// 登录并启动Bot
await discordClient.LoginAsync(TokenType.Bot, builder.Configuration["Discord:BotToken"]);
await discordClient.StartAsync();

// 将客户端注册为单例服务
builder.Services.AddSingleton(discordClient);

var app = builder.Build();

// 其他Web应用配置...
app.Run();

3. 创建API端点暴露数据

  • 编写控制器提供频道和在线用户接口:
[ApiController]
[Route("api/discord")]
public class DiscordController : ControllerBase
{
    private readonly DiscordSocketClient _discordClient;
    private readonly ulong _targetGuildId;

    public DiscordController(DiscordSocketClient discordClient, IConfiguration config)
    {
        _discordClient = discordClient;
        _targetGuildId = ulong.Parse(config["Discord:GuildId"]);
    }

    [HttpGet("channels")]
    public IActionResult GetChannelList()
    {
        var guild = _discordClient.GetGuild(_targetGuildId);
        if (guild == null) return NotFound("目标服务器未找到");

        var channelData = guild.Channels
            .Where(c => c.Type != ChannelType.Category) // 排除分类频道,可按需调整
            .Select(c => new
            {
                c.Id,
                c.Name,
                ChannelType = c.Type.ToString(),
                OnlineUserCount = c.Users.Count(u => u.Status != UserStatus.Offline)
            })
            .ToList();

        return Ok(channelData);
    }

    [HttpGet("online-users")]
    public IActionResult GetOnlineUsers()
    {
        var guild = _discordClient.GetGuild(_targetGuildId);
        if (guild == null) return NotFound("目标服务器未找到");

        var userData = guild.Users
            .Where(u => u.Status != UserStatus.Offline && !u.IsBot)
            .Select(u => new
            {
                u.Id,
                u.Username,
                u.AvatarUrl,
                Status = u.Status.ToString()
            })
            .ToList();

        return Ok(userData);
    }
}

4. 前端展示实现

  • 调用后端API获取数据,用HTML/CSS/JavaScript渲染频道列表(显示名称、在线人数)和在线用户列表(显示头像、用户名、状态)
  • 可设置定时刷新(如每30秒)保持数据实时性

注意事项

  • 权限控制:给API端点添加访问限制,比如IP白名单或API密钥验证,避免数据泄露
  • 限流处理:Discord API有限流规则,可缓存频道和用户数据,减少请求频率
  • 意图启用:需在Discord开发者平台的Bot设置中手动开启Guild Members和Guild Presences意图,否则无法获取用户状态数据

内容的提问来源于stack exchange,提问作者JaggenSWE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 18:53:20