C# - Телеграм бот выдаёт ошибку после блокировки бота пользователем

Я создал простого бота который отправляет сообщение при отправке команды "/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() который обрабатывает ошибки и когда выше описанное действие происходит, в консоли полным сообщением выводиться это:

[ERROR]: Ссылка на объект не указывает на экземпляр объекта. >> (.. и т.д. и т.п...)

После же бот тупо перестаёт выполнять Update() когда ему напишешь. Пишу ему "/start" от любого пользователя - он молчит. Даже перезапуск программы не помогает - после него в консоли выводится та же ошибка и бот также не отвечает на команды, т.е. в целом не выполняет Update. И если убрать его с ЧС и перезапустить - тоже самое.

Проблему решает только удаление бота и создание нового с новым токеном. После пересоздания бот работает, а если опять какой-нибудь чел удалит его у себя бот баганётся.

Кто знает как решить эту проблему? Помогите пж кто знает.


Ответы (1 шт):

Автор решения: Георгий

Возможно дело в том что у вас не асинхронный вызов. Отсутствует await.

Оберните место вызова в try-catch

try
{
    await botClient.SendTextMessageAsync(
    msg.Chat.Id,
    text: "",
    cancellationToken: cancellationToken);
}
catch (Exception ex)
{
    Console.WriteLine("Error: " + ex);
}
→ Ссылка