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
相关产品推荐
相关产品推荐

