Ловим 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_LEFT_GATE = "Открой левые ворота";
const string CMD_RIGHT_GATE = "Открой правые ворота"; const string CMD_RIGHT_GATE = "Открой правые ворота";
static bool shouldRestart = false;
static void Main(string[] args) static void Main(string[] args)
{ {
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
config = LoadConfig(); config = LoadConfig();
var token = config.RootElement.GetProperty("token").GetString(); var token = config.RootElement.GetProperty("token").GetString();
botClient = new TelegramBotClient(token); while (true)
var me = botClient.GetMeAsync().Result; {
Console.WriteLine($"Hello, World! I am user {me.Id} and my name is {me.FirstName}."); try
botClient.OnMessage += OnBotMessage; {
botClient.StartReceiving(); shouldRestart = false;
while (true) Thread.Sleep(10000); 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) 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}"); if (!VerifyUser(e.Message.Chat.Id, 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[][]
{ {
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_WEATHER },
new KeyboardButton[] { CMD_LEFT_GATE, CMD_RIGHT_GATE }, new KeyboardButton[] { CMD_LEFT_GATE, CMD_RIGHT_GATE },
}, },
resizeKeyboard: true resizeKeyboard: true
); );
await botClient.SendTextMessageAsync( await botClient.SendTextMessageAsync(
chatId: e.Message.Chat, chatId: e.Message.Chat,
text: response, text: response,
replyMarkup: replyKeyboardMarkup replyMarkup: replyKeyboardMarkup
); );
}
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
Console.WriteLine(ex.StackTrace);
Console.WriteLine("Restarting bot");
shouldRestart = true;
} }
} }