}//public Modes /// <summary> /// Метод, получания сообщения /// </summary> /// <param name="wait">ожидание в секундах</param> async void GetUpdates(int wait = 3) { //получаем ожидание в секундах wait = wait * 1000; //Запрос получение новых сообщений, offset - делает сообщение прочитанным var res = Settings.Client.GetStringAsync(Settings.Url + $"getUpdates?offset={countUpdateId.ToString()}").Result; Console.WriteLine(res); Console.WriteLine(); //Серилизация объекта JsonMessages.Finish MessageNew = JsonConvert.DeserializeObject <JsonMessages.Finish>(res.ToString()); //Проверка на пустоту и на статус if (!MessageNew.ok || MessageNew.result.Length == 0) { return; } //Получаем порядковый номер сообщения countUpdateId = MessageNew.result[0].update_id; /* * На данный момент 2 типа сообщений * 1 - el.message - обработка простых кнопок и сообщений * 2 - el.callback_query - обработка запроса от Inline кнопок * Взависимости от типа сообщения обрабатываем его */ //перебор входящих сообщений и выбор режима обработки сообщения foreach (var el in MessageNew.result) { //Получаем порядковый номер сообщения countUpdateId = el.update_id; #region Обрабытываем Текстовые сообщения и Кнопочное меню //Проверка на получение текстового сообщения или кнопочного меню if (el.message != null) { Console.WriteLine("Обработка сообщения 1 способом"); //Обрабатываем текстовое сообщение от пользователя или от кнопочного меню new Messages().ProcessMessage(el.message.chat.id.ToString(), el.message.text); } #endregion #region Обрабытываем Inline запросы //Проверка на получение сообщения от Inline кнопок if (el.callback_query != null) { Console.WriteLine("Обработка INLINE сообщений - 2 способ"); //получаем ChatId string ChatId = el.callback_query.message.chat.id.ToString(); //Функция, для обработки Inline запроса new Messages().ProcessMessageToInline(el); } #endregion } countUpdateId++; // Пауза для получения новых сообщений await Task.Delay(wait); }
}//public Modes /// <summary> /// Метод, получания сообщения /// </summary> /// <param name="wait">ожидание в секундах</param> async void GetUpdates(int wait = 3) { //получаем ожидание в секундах wait = wait * 1000; #region Взятие настроек из БД и Запись в файл и БД //получаем время по Москве DateTime moment = GetDate(); //получаем день int day = moment.Day; //получаем час int hour = moment.Hour; //получаем минуты int minute = moment.Minute; //получаем новое время if (moment >= Settings.dateTime) { string settings = new RequestBd().GetSettings(); if (settings.Split('|').Length >= 8) { Settings.Hour = int.Parse(settings.Split('|')[0]); Settings.minMinute = int.Parse(settings.Split('|')[1]); Settings.maxMinute = int.Parse(settings.Split('|')[2]); Settings.SettingsMinute = int.Parse(settings.Split('|')[3]); Settings.server = settings.Split('|')[4]; Settings.user = settings.Split('|')[5]; Settings.password = settings.Split('|')[6]; Settings.database = settings.Split('|')[7]; Settings.tokenApiTelegrammBot = settings.Split('|')[8]; //Записываем данные в файл using (StreamWriter sw = new StreamWriter(Settings.pathFileSettingsBDConnect, false, System.Text.Encoding.UTF8)) { sw.WriteLine($"{Settings.server}|{Settings.user}|{Settings.password}|{Settings.database}|{Settings.tokenApiTelegrammBot}"); Settings.server = settings.Split('|')[4]; Settings.user = settings.Split('|')[5]; Settings.password = settings.Split('|')[6]; Settings.database = settings.Split('|')[7]; Settings.tokenApiTelegrammBot = settings.Split('|')[8]; if (Settings.tokenApiTelegrammBot == "") { Console.WriteLine("Укажите токен от telegramm"); return; } } Settings.Url = $"https://api.telegram.org/bot" + Settings.tokenApiTelegrammBot + "/"; //Console.WriteLine($"Получили настройки из БД - {Settings.server}"); //Console.WriteLine($"Получили настройки из БД - {Settings.user}"); //Console.WriteLine($"Получили настройки из БД - {Settings.database}"); //Console.WriteLine($"Получили настройки из БД - {Settings.tokenApiTelegrammBot}"); //Через сколько минут можно применить настройки из БД Settings.dateTime = Settings.dateTime.AddMinutes(Settings.SettingsMinute); } } #endregion #region Делаем рассылку по времени отправка идет всегда в 00 минут, + указываем допустимый макс лимит (+ 5мин) if (hour == Settings.Hour) { if (!Settings.CheckSendMsg) { if (minute >= Settings.minMinute && minute < Settings.maxMinute) { Console.WriteLine($"{GetDate()}: Отправляем Чек-Листы пользователям"); //Отправляем рассылку new Messages().Spam(day); Settings.CheckSendMsg = true; Console.WriteLine($"{GetDate()}: Чек-Листы отправлены"); } } if (minute > Settings.maxMinute) { Settings.CheckSendMsg = false; } } #endregion //Settings.tokenApiTelegrammBot = "392463607:AAH2MyFC5A0PUPD0JFfwYILTErdtn45Civ8"; Settings.Url = $"https://api.telegram.org/bot" + Settings.tokenApiTelegrammBot + "/"; var res = Settings.Client.GetStringAsync(Settings.Url + $"getUpdates?offset={countUpdateId.ToString()}").Result; //Console.WriteLine(res); if (res == null) { return; } //Если запрос содержит пустоту, то не выводим в консоль if (!res.Contains("{\"ok\":true,\"result\":[]}")) { Console.WriteLine(res); Console.WriteLine(); } //Серилизация объекта JsonMessages.Finish MessageNew = JsonConvert.DeserializeObject <JsonMessages.Finish>(res.ToString()); //Проверка на пустоту и на статус if (!MessageNew.ok || MessageNew.result.Length == 0) { return; } //Получаем порядковый номер сообщения countUpdateId = MessageNew.result[0].update_id; /* * На данный момент 2 типа сообщений * 1 - el.message - обработка простых кнопок и сообщений * 2 - el.callback_query - обработка запроса от Inline кнопок * Взависимости от типа сообщения обрабатываем его */ //перебор входящих сообщений и выбор режима обработки сообщения foreach (var el in MessageNew.result) { //Получаем порядковый номер сообщения countUpdateId = el.update_id; #region Обрабытываем Текстовые сообщения и Кнопочное меню //Проверка на получение текстового сообщения или кнопочного меню if (el.message != null) { //Обрабатываем текстовое сообщение от пользователя или от кнопочного меню new Messages().ProcessMessage(el.message.chat.id.ToString(), el.message.text, el.message); } #endregion #region Обрабытываем Inline запросы //Проверка на получение сообщения от Inline кнопок if (el.callback_query != null) { //Функция, для обработки Inline запроса new Messages().ProcessMessageToInline(el); } #endregion } countUpdateId++; // Пауза для получения новых сообщений await Task.Delay(wait); }