2023-04-08 14:47:05 +02:00
|
|
|
using System.Diagnostics.CodeAnalysis;
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
using Telegram.Bot.SpaceApi.Backend.Database;
|
|
|
|
|
|
|
|
namespace Telegram.Bot.SpaceApi.Backend;
|
|
|
|
|
|
|
|
using Database.Tables;
|
|
|
|
|
|
|
|
public static class BotOrchestrator {
|
|
|
|
private static readonly List<BotInstance> Bots = new();
|
|
|
|
|
|
|
|
public static BotInstance? GetBot(Bot bot) => Bots.FirstOrDefault(p => p.Id == bot.Id);
|
|
|
|
public static void AddBot(Bot bot) => Bots.Add(new BotInstance(bot));
|
|
|
|
public static void DelBot(Bot bot) => Bots.RemoveAll(p => p.Id == bot.Id);
|
|
|
|
|
|
|
|
private static void Initialize() {
|
|
|
|
var db = new DatabaseContext();
|
|
|
|
db.Bots.ForEachAsync(AddBot);
|
|
|
|
}
|
|
|
|
|
|
|
|
[SuppressMessage("ReSharper", "FunctionNeverReturns")]
|
|
|
|
public static Task UpdateTask() {
|
|
|
|
Initialize();
|
|
|
|
|
|
|
|
while (true) {
|
|
|
|
Bots.ForEach(bot => Task.Run(bot.Update));
|
|
|
|
Thread.Sleep(60000);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public class BotInstance {
|
|
|
|
public readonly int Id;
|
|
|
|
public string? Error;
|
|
|
|
public bool LastStatus;
|
|
|
|
|
|
|
|
private readonly string _name;
|
|
|
|
private readonly string _chat;
|
|
|
|
private readonly SpaceApiClient? _api;
|
|
|
|
private readonly TelegramBotClient? _bot;
|
|
|
|
|
|
|
|
public BotInstance(Bot bot) {
|
|
|
|
Id = bot.Id;
|
|
|
|
_name = bot.Name;
|
|
|
|
_chat = bot.Chat;
|
|
|
|
|
|
|
|
try {
|
|
|
|
_bot = new TelegramBotClient(bot.Token);
|
|
|
|
_api = string.IsNullOrWhiteSpace(bot.ApiOverrideAddress) ? new SpaceApiClient(bot.ApiUrl) : new SpaceApiClient(bot.ApiUrl, bot.ApiOverrideAddress);
|
|
|
|
LastStatus = _api.IsOpen();
|
|
|
|
}
|
|
|
|
catch (Exception e) {
|
|
|
|
Error = e.Message;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public Task Update() {
|
|
|
|
try {
|
|
|
|
if (_api == null || _bot == null)
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
var status = _api.IsOpen();
|
|
|
|
if (status == LastStatus)
|
|
|
|
return Task.CompletedTask;
|
|
|
|
|
|
|
|
LastStatus = status;
|
2023-04-09 16:07:22 +02:00
|
|
|
Console.WriteLine($"Updating {_name} status to {(status ? "open" : "closed")}...");
|
|
|
|
_bot.SendMessage(_chat, $"{_name} is {(status ? "open" : "closed")}.");
|
2023-04-08 14:47:05 +02:00
|
|
|
Error = null;
|
|
|
|
return Task.CompletedTask;
|
|
|
|
}
|
|
|
|
catch (Exception e) {
|
2023-04-09 15:57:21 +02:00
|
|
|
Console.WriteLine($"Error updating {_name} status: {e.Message}");
|
2023-04-08 14:47:05 +02:00
|
|
|
Error = e.Message;
|
|
|
|
return Task.CompletedTask;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|