我正在尝试制作一个Discord机器人,但是在连接Discord API时遇到问题。我正在使用Visual Studio社区2019。我使用.net核心控制台应用程序模板启动了此项目。我的.net核心版本是2.2。我遵循了一些教程,甚至从git中提取了一些示例机器人,它们都给了我同样的Newtonsoft.Json.JsonReaderException
未处理的异常错误。
我确实安装了Discord.Net nuget软件包2.1.1版,起初我很困惑,因为我以为我根本不处理json,但后来意识到discord.net nuget软件包也可以安装{{1 }}版本11.0.2。我尝试安装该软件包以查看是否能解决我的问题,但是没有,我尝试安装11.0.2版和12.0.2版(本文发布时为最新版本)。
运行该应用程序时,我的程序停止运行,Visual Studio指向我的静态void主函数。
newtonsoft.json
对于这种制造不和谐机器人的特殊尝试,我遵循了本指南:https://docs.stillu.cc/guides/getting_started/first-bot.html
该文章指出,如果在异步函数中引发任何异常,则将它们一直抛出,一直返回到第一个非异步方法(即主要方法)。那是否意味着错误出在我的MainAsync函数中?
如果我让应用程序崩溃,则确切的错误是:
Newtonsoft.Json.JsonReaderException: 'Unexpected character encountered while parsing value: <. Path '', line 0, position 0.'
这是我唯一的文件:
Exception thrown: 'Newtonsoft.Json.JsonReaderException' in System.Private.CoreLib.dll
An unhandled exception of type 'Newtonsoft.Json.JsonReaderException' occurred in System.Private.CoreLib.dll
Unexpected character encountered while parsing value: <. Path '', line 0, position 0.
如果我自己不处理json文件,有人可以向我解释为什么得到using System;
using Discord;
using System.Threading.Tasks;
using Discord.WebSocket;
namespace Bot
{
class Program
{
private DiscordSocketClient Client;
static void Main() => new Program().MainAsync().GetAwaiter().GetResult();
public async Task MainAsync()
{
Client = new DiscordSocketClient();
Client.Log += Log;
//This is my discord bot token
var token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX";
await Client.LoginAsync(TokenType.Bot, token);
await Client.StartAsync();
await Task.Delay(-1);
}
private Task Log(LogMessage message)
{
Console.WriteLine(message.ToString());
return Task.CompletedTask;
}
}
}
的原因,我该怎么做才能消除此错误?
感谢您的帮助。这也是我第一次在堆栈溢出中发布问题,因此,如果我在提出问题方面做得不好,请告诉我。
答案 0 :(得分:0)
要跟踪错误,建议将每个调用包装在try / catch块中。然后记录错误发生的位置。
using System;
using Discord;
using System.Threading.Tasks;
using Discord.WebSocket;
namespace Bot
{
class Program
{
private DiscordSocketClient Client;
static void Main() => new Program().MainAsync().GetAwaiter().GetResult();
public async Task MainAsync()
{
try{
Client = new DiscordSocketClient();
Client.Log += Log;
}catch(Exception ex){log("Error in init:"); throw ex;}
//This is my discord bot token
var token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX";
try{
await Client.LoginAsync(TokenType.Bot, token);
}catch(Exception ex){log("Error during login"); throw ex;}
try{
await Client.StartAsync();
}catch(ex){log("Error starting client"); throw ex;
await Task.Delay(-1);
}
private Task log(string message)
{
Console.WriteLine(message);
return Task.CompletedTask;
}
private Task Log(LogMessage message)
{
Console.WriteLine(message.ToString());
return Task.CompletedTask;
}
}
}
随着项目规模的增加,还建议在消息中包含文件名和行号。
JSON似乎用作与Discord通信的API的一部分。 https://discordapp.com/developers/docs/intro 我看到参考资料是其中的几个主题,包括来自错误的消息。可能是您收到了一些http错误,例如404,其中包含html响应而不是预期的json,因此为什么该错误建议出现意外的'<'如 ... 而不是{as在{...}中,这只是预感。
答案 1 :(得分:0)
您的代码运行良好。我刚刚插入了我的令牌,机器人启动了。检查您的令牌是否正确,并可能将令牌设为字符串