Discord机器人无法启动:找不到DiscordClient与LogMessageEventArgs类型
解决Discord机器人报错:找不到'DiscordClient'和'LogMessageEventArgs'
你踩的这个坑其实是Discord.NET版本更新带来的API变动——旧版本里的DiscordClient和LogMessageEventArgs早就被新版本给换掉啦!现在Discord.NET v2.0+的版本里,这些类型已经被移除,取而代之的是新的API,所以编译器才会报找不到类型的错误。
下面给你整理好修正后的代码,以及关键的修改要点:
第一步:确认安装正确的NuGet包
首先确保你在项目里安装了这两个必要的NuGet包:
Discord.Net(核心库)Discord.Net.WebSocket(用于连接Discord网关的WebSocket客户端)
第二步:修正后的登录功能代码
using Discord; using Discord.WebSocket; using System; using System.Threading.Tasks; namespace DiscordBot { class Program { private DiscordSocketClient _client; static void Main(string[] args) { // 启动异步登录逻辑,避免主线程阻塞 new Program().RunBotAsync().GetAwaiter().GetResult(); } public async Task RunBotAsync() { // 用DiscordSocketClient替代旧的DiscordClient _client = new DiscordSocketClient(); // 日志监听:现在直接接收LogMessage对象,替代旧的LogMessageEventArgs _client.Log += LogMessage; // 这里替换成你自己的机器人Token(从Discord开发者平台获取) string botToken = "你的机器人Token"; // 登录并启动客户端 await _client.LoginAsync(TokenType.Bot, botToken); await _client.StartAsync(); // 让程序保持运行,不会直接退出 await Task.Delay(-1); } // 日志处理方法,接收LogMessage参数 private Task LogMessage(LogMessage message) { Console.WriteLine($"[{message.Severity}] {message.Source}: {message.Message}"); return Task.CompletedTask; } } }
关键修改点说明
- 替换核心客户端类型:旧的
DiscordClient换成了DiscordSocketClient,它在Discord.WebSocket命名空间下,所以需要添加这个命名空间引用 - 日志事件更新:原来的
LogMessageEventArgs被简化成了LogMessage对象,日志回调方法直接接收这个对象即可 - 异步逻辑调整:Discord.NET的绝大多数操作都是异步的,所以把登录逻辑放到了异步方法
RunBotAsync里,主线程通过GetAwaiter().GetResult()来等待异步任务完成,避免程序直接退出
额外注意事项
- 一定要确保你用的是从Discord开发者平台获取的有效机器人Token,不要把Token泄露给其他人
- 如果之后要给机器人添加命令功能,还需要安装
Discord.Net.Commands包并配置命令服务,不过仅实现登录功能的话上面的代码就足够运行了 - 尽量使用Discord.NET的最新稳定版,避免版本兼容问题
内容的提问来源于stack exchange,提问作者Filip Vuskovic
相关产品推荐
相关产品推荐

