Ловим exceptions, если случились - рестартуем бота

This commit is contained in:
ftc
2021-05-27 22:51:10 +03:00
parent 91b4b069f4
commit 95f119b515
+78 -49
View File
@@ -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;
}
}