static bool TrySendForecastTo(Subscriber sub) { OpenWeatherApi.Forecast5Day forecast5 = openWeather.GetForecast5Day(httpClient, sub.lat, sub.lon); if (forecast5 == null) { Logger.LogLine($"Error fetching forecast for {sub}"); return(false); } StringBuilder s = new StringBuilder(512); s.Append($"Forecast for: {sub.lat} {sub.lon}\n\n"); for (uint i = 0; i < 8; i++) { s.Append(FormatForecast(forecast5.list[i], sub.timeZone)); s.Append("\n"); } s.Append("Data provided by https://openweathermap.org"); bot.SendPlainMessage(httpClient, sub.chatId, s.ToString(), true); return(true); }
static void Main(string[] args) { Logger.Init(); // Init file for logging Logger.LogLine($"TelegramWeatherBot version {verMajor}.{verMinor}"); serializerOptions = new JsonSerializerOptions { IncludeFields = true, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }; // Read keys from the file string botToken, botName, openWeatherToken; try { Logger.Log("Reading keys.cfg ... "); var cfgFileLines = File.ReadAllLines("keys.cfg"); botName = cfgFileLines[0]; botToken = cfgFileLines[1]; openWeatherToken = cfgFileLines[2]; Logger.LogLine("ok", false); } catch (Exception e) { Logger.LogLine($"Error reading keys.cfg: {e}", false); return; } // Read subscribers from the file Logger.Log("Reading subscribers.json ... "); LoadSubscribers(); Logger.LogLine("ok", false); httpClient = new HttpClient(); httpClient.Timeout = TimeSpan.FromSeconds(10.0f); bot = new TelegramApi.Bot(botName, botToken); openWeather = new OpenWeatherApi.Client(openWeatherToken); Logger.Log("Testing Telegram API connection ... "); TelegramApi.User botUser = bot.GetMe(httpClient); if (botUser == null) { Logger.LogLine("Telegram API error!", false); return; } else { Logger.LogLine("ok", false); Logger.LogLine("Bot user data:"); Logger.LogLine($" id: {botUser.id}"); Logger.LogLine($" username: {botUser.username}"); Logger.LogLine($" first_name: {botUser.first_name}"); Logger.LogLine($" last_name: {botUser.last_name}"); } Logger.Log("Testing OpenWeather connection ... "); OpenWeatherApi.Forecast5Day forecast = openWeather.GetForecast5Day(httpClient, 55.7558, 37.6173); if (forecast == null) { Logger.LogLine("OpenWeather API error!", false); return; } else { Logger.LogLine("ok", false); Logger.LogLine("Forecast:"); Logger.LogLine($" temp: {forecast.list[0].main.temp} deg"); } Logger.LogLine("Hello from weather telegram bot!"); while (true) { bool successGetUpdates = GetUpdates(); if (!successGetUpdates) { Logger.LogLine("Error getting updates! Next attempt in 5 seconds."); Thread.Sleep(5000); // We don't want to spam their server with requests } CheckSubscriberAlerts(); } }