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

Discord .NET 如何以个人用户而非机器人身份读取消息及完成授权?

Discord 个人用户身份操作实现方案(.NET 环境)

重要提示:Discord 官方服务条款明确禁止非官方客户端/自动化工具使用用户令牌进行批量、商业或滥用性质的操作,违规可能导致账号被永久封禁,以下方案仅建议用于个人非盈利、低频次的测试场景。

核心实现逻辑

Discord 没有像 Telegram 一样拆分两套完全独立的公开 API,个人用户身份调用接口只需使用用户令牌(User Token) 授权即可,无需单独接入其他 SDK:

  • 可以直接复用你已引入的 Discord.NET 库,无需额外依赖
  • 初始化客户端时指定授权类型为普通用户,而非机器人,即可调用大部分公开 API,仅机器人专属接口(如全局 slash 命令注册、消息意图强制校验等)无法使用

环境准备

先安装 Discord.NET NuGet 包,执行以下命令:
dotnet add package Discord.Net

授权与调用代码示例

using Discord;
using Discord.WebSocket;

public class DiscordUserOperationDemo
{
    private DiscordSocketClient _userClient;

    /// <summary>
    /// 初始化个人用户客户端并完成授权登录
    /// </summary>
    /// <param name="userToken">个人用户令牌</param>
    public async Task InitAndLoginAsync(string userToken)
    {
        var clientConfig = new DiscordSocketConfig
        {
            // 按需配置网关意图,不需要传入机器人专属意图
            GatewayIntents = GatewayIntents.Guilds | GatewayIntents.GuildMessages | GatewayIntents.DirectMessages
        };
        _userClient = new DiscordSocketClient(clientConfig);

        // 绑定基础事件
        _userClient.Log += PrintLog;
        _userClient.Ready += OnClientReady;

        // 核心:授权时指定 TokenType 为 User,而非 Bot
        await _userClient.LoginAsync(TokenType.User, userToken);
        await _userClient.StartAsync();
    }

    /// <summary>
    /// 客户端登录完成触发,可在此处编写业务逻辑
    /// </summary>
    private Task OnClientReady()
    {
        Console.WriteLine($"个人用户登录成功,当前账号:{_userClient.CurrentUser.Username}#{_userClient.CurrentUser.Discriminator}");
        return Task.CompletedTask;
    }

    /// <summary>
    /// 日志输出
    /// </summary>
    private Task PrintLog(LogMessage logMsg)
    {
        Console.WriteLine($"[用户客户端] {logMsg.Severity}: {logMsg.Message}");
        return Task.CompletedTask;
    }

    /// <summary>
    /// 示例方法:以个人用户身份向指定频道发消息
    /// </summary>
    public async Task SendChannelMessageAsync(ulong targetChannelId, string messageContent)
    {
        if (_userClient.LoginState != LoginState.LoggedIn) return;
        var targetChannel = await _userClient.GetChannelAsync(targetChannelId) as IMessageChannel;
        if(targetChannel != null) await targetChannel.SendMessageAsync(messageContent);
    }

    /// <summary>
    /// 销毁客户端并退出登录
    /// </summary>
    public async Task StopClientAsync()
    {
        await _userClient.StopAsync();
        await _userClient.LogoutAsync();
    }
}

其他注意事项

  • 个人用户令牌可通过浏览器访问 Discord 网页版,从请求头的 Authorization 字段中获取,该令牌等同于账号完全控制权,请不要泄露给第三方,也不要提交到公开代码仓库
  • 调用接口时控制请求频率,避免触发 Discord 反作弊机制导致账号被限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:06:03