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