From 95f119b51528d96026a9581c13f3f0c277d930b8 Mon Sep 17 00:00:00 2001 From: Denis Denisov Date: Thu, 27 May 2021 22:51:10 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=BE=D0=B2=D0=B8=D0=BC=20exceptions,=20?= =?UTF-8?q?=D0=B5=D1=81=D0=BB=D0=B8=20=D1=81=D0=BB=D1=83=D1=87=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=D1=81=D1=8C=20-=20=D1=80=D0=B5=D1=81=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D1=82=D1=83=D0=B5=D0=BC=20=D0=B1=D0=BE=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program.cs | 127 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 78 insertions(+), 49 deletions(-) diff --git a/Program.cs b/Program.cs index 0196634..0836af2 100644 --- a/Program.cs +++ b/Program.cs @@ -24,70 +24,99 @@ namespace ZaoBot const string CMD_LEFT_GATE = "Открой левые ворота"; const string CMD_RIGHT_GATE = "Открой правые ворота"; + static bool shouldRestart = false; + static void Main(string[] args) { CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; config = LoadConfig(); var token = config.RootElement.GetProperty("token").GetString(); - botClient = new TelegramBotClient(token); - var me = botClient.GetMeAsync().Result; - Console.WriteLine($"Hello, World! I am user {me.Id} and my name is {me.FirstName}."); - botClient.OnMessage += OnBotMessage; - botClient.StartReceiving(); - while (true) Thread.Sleep(10000); + while (true) + { + try + { + shouldRestart = false; + botClient = new TelegramBotClient(token); + var me = botClient.GetMeAsync().Result; + Console.WriteLine($"Hello, World! I am user {me.Id} and my name is {me.FirstName}."); + botClient.OnMessage += OnBotMessage; + botClient.StartReceiving(); + while (!shouldRestart) + { + Thread.Sleep(1000); + } + } + catch (Exception e) + { + // Тут ловим всё, при ошибках просто заново поднимаем бота + Console.WriteLine("Exception: " + e.Message); + Console.WriteLine(e.StackTrace); + Console.WriteLine("Restarting bot"); + } + } } private static async void OnBotMessage(object sender, MessageEventArgs e) { - if (e.Message.Text != null) + try { - if (!VerifyUser(e.Message.Chat.Id, e.Message.Chat.Username)) + if (e.Message.Text != null) { - Console.WriteLine($"Received message {e.Message.Text} from invalid user {e.Message.Chat.Username}"); - await botClient.SendTextMessageAsync( - chatId: e.Message.Chat, - text: "Ваш ID " + e.Message.Chat.Id + " сообщите его администратору" - ); - return; - } - Console.WriteLine($"Received a text message in chat {e.Message.Chat.Id}."); - - var response = ""; - if (e.Message.Text == CMD_LEFT_GATE) - { - response = await OpenLeftGate(); - } - else if (e.Message.Text == CMD_RIGHT_GATE) - { - response = await OpenRightGate(); - } - else if (e.Message.Text == CMD_WEATHER) - { - response = await ShowWeather(); - } - else if (e.Message.Text == "") - { - response = "Превед!"; - } - else response = "Я не понял :-("; - - if (e.Message.Text != "") response += "\nЧто дальше?"; - else response = "\nЧего изволите?"; - - var replyKeyboardMarkup = new ReplyKeyboardMarkup( - new KeyboardButton[][] + if (!VerifyUser(e.Message.Chat.Id, e.Message.Chat.Username)) { + Console.WriteLine($"Received message {e.Message.Text} from invalid user {e.Message.Chat.Username}"); + await botClient.SendTextMessageAsync( + chatId: e.Message.Chat, + text: "Ваш ID " + e.Message.Chat.Id + " сообщите его администратору" + ); + return; + } + Console.WriteLine($"Received a text message in chat {e.Message.Chat.Id}."); + + var response = ""; + if (e.Message.Text == CMD_LEFT_GATE) + { + response = await OpenLeftGate(); + } + else if (e.Message.Text == CMD_RIGHT_GATE) + { + response = await OpenRightGate(); + } + else if (e.Message.Text == CMD_WEATHER) + { + response = await ShowWeather(); + } + else if (e.Message.Text == "") + { + response = "Превед!"; + } + else response = "Я не понял :-("; + + if (e.Message.Text != "") response += "\nЧто дальше?"; + else response = "\nЧего изволите?"; + + var replyKeyboardMarkup = new ReplyKeyboardMarkup( + new KeyboardButton[][] + { new KeyboardButton[] { CMD_WEATHER }, new KeyboardButton[] { CMD_LEFT_GATE, CMD_RIGHT_GATE }, - }, - resizeKeyboard: true - ); + }, + resizeKeyboard: true + ); - await botClient.SendTextMessageAsync( - chatId: e.Message.Chat, - text: response, - replyMarkup: replyKeyboardMarkup - ); + await botClient.SendTextMessageAsync( + chatId: e.Message.Chat, + text: response, + replyMarkup: replyKeyboardMarkup + ); + } + } + catch (Exception ex) + { + Console.WriteLine("Exception: " + ex.Message); + Console.WriteLine(ex.StackTrace); + Console.WriteLine("Restarting bot"); + shouldRestart = true; } }