我创建了一个简单的机器人,当发送“/start”命令时它会发送一条消息,但遇到了一个问题。
using System;
using System.IO;
using System.Threading.Tasks;
using Telegram.Bot;
using Telegram.Bot.Types;
namespace MyTgBot
{
class Program
{
static TelegramBotClient client;
static void Main(string[] args)
{
string token = File.ReadAllText(Environment.GetFolderPath(
Environment.SpecialFolder.LocalApplicationData) + @"\MyTgBot\Token.txt");
client = new TelegramBotClient(token);
client.StartReceiving(Update, Error);
Console.WriteLine("[SUCCESS]: Бот запущен!");
while(true)
Console.ReadLine();
}
async static Task Update(ITelegramBotClient botClient, Update update, CancellationToken token)
{
var msg = update.Message;
if(msg.Text == "/start")
botClient.SendTextMessageAsync(msg.Chat.Id, $"{msg.Chat.Username}, Добро пожаловать в мой бот!");
}
async static Task Error(ITelegramBotClient botClient, Exception e, CancellationToken token)
{
Console.WriteLine($"[ERROR]: {e.Message} >> {e.ToString()}");
}
}
}
最初,当任何用户向机器人写入“/start”时,他都会回复一条消息。
如果绝对有任何一个用户删除并阻止了机器人,即删除了与机器人的聊天并将其置于紧急状态,则机器人将在控制台中显示以下错误:
System.NullReferenceException:“对象引用不指向对象的实例。
该代码有一个Error()方法来处理错误,当上述操作发生时,完整的消息将显示在控制台中:
[错误]:对象引用不指向对象的实例。 >>(..等等等等...)
之后,当您写入时,机器人会愚蠢地停止执行Update() 。我从任何用户那里给他写“/start”——他保持沉默。即使重新启动程序也无济于事 - 之后控制台中会显示相同的错误,并且机器人也不会响应命令,即一般不执行Update。如果将其从紧急情况中移除并重新启动,也会发生同样的情况。
该问题只能通过删除机器人并使用新令牌创建新机器人来解决。重新创建后,机器人可以工作,但如果再次有人删除它,机器人就会崩溃。
谁知道如何解决这个问题?如果有人知道请帮忙。
也许事实是您的调用不是异步的。缺席的
await。将调用地点包裹在
try-catch