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);
}