コード例 #1
0
        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);
        }
コード例 #2
0
        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();
            }
        }