Ejemplo n.º 1
0
        /// <summary>
        /// Создаем кнопки из БД
        /// </summary>
        /// <param name="res">Запрос полученный от БД в виде IEnumerable<string></param>
        /// <returns>возвращаем replyMarkup </returns>
        string AddButtonFromBd(IEnumerable <string> res, int column = 4)
        {
            Buttons.InlineKeyboardMarkup allBtn = new Buttons.InlineKeyboardMarkup();

            int a = 0;

            foreach (string el in res)
            {
                if (el == "")
                {
                    continue;
                }

                //Добавляем кнопку в следующий столбец
                allBtn.AddButton(new InlineKeyboardButton($"{el}", $"{el}"), ++a / column);
            }

            ButtonNavigation(allBtn, res.Count().ToString());
            //ButtonHeaderMenu(allBtn); //Добавляем главные кнопки в меню
            string replyMarkup = JsonConvert.SerializeObject(allBtn);

            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(replyMarkup);
            Console.ResetColor();

            return(replyMarkup);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Меню из БД
        /// </summary>
        /// <param name="ChatId"></param>
        /// <returns></returns>
        public string InlineMenuFromBd(out string replyMarkup, int column = 4)
        {
            Buttons.InlineKeyboardMarkup allBtn = new Buttons.InlineKeyboardMarkup();
            IEnumerable <string>         res    = new RequestBd().GetCategory();

            //string query = "SELECT catName FROM categorys";
            //var res = new Bd().SelectBD(query);
            //res.Split(new String[] { "\r\n" }, StringSplitOptions.None)

            int a = 0;

            foreach (string el in res)
            {
                if (el == "")
                {
                    continue;
                }
                //Добавляем кнопку в следующий столбец
                allBtn.AddButton(new InlineKeyboardButton($"{el}", $"{el}"), ++a / column);
            }

            ButtonHeaderMenu(allBtn);
            replyMarkup = JsonConvert.SerializeObject(allBtn);
            return("Категории продуктов");
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Добавляем кнопку в InlineMenu
        /// </summary>
        /// <param name="ChatId"></param>
        /// <param name="nameButton"> имя кнопки</param>
        /// <param name="lineBtn">линия кнопки</param>
        /// <returns></returns>
        public string InlineMenuAddButton(string nameButton, string callback_data)
        {
            Buttons.InlineKeyboardMarkup allBtn = new Buttons.InlineKeyboardMarkup();

            allBtn.AddButton
                (new InlineKeyboardButton(nameButton, callback_data));

            //необходимо сериализовать класс в JSON
            string replyMarkup = JsonConvert.SerializeObject(allBtn);

            return(replyMarkup);
        }
Ejemplo n.º 4
0
        public string MenuCart(string UserName, out string replyMarkup)
        {
            Cart cart = new Cart(UserName);

            Buttons.InlineKeyboardMarkup allBtn = new Buttons.InlineKeyboardMarkup();
            List <InlineKeyboardButton>  line   = new List <InlineKeyboardButton>()
            {
                new InlineKeyboardButton("Назад", "about"),
            };

            allBtn.AddLineButton(line);
            ButtonHeaderMenu(allBtn);
            replyMarkup = JsonConvert.SerializeObject(allBtn);
            return($"В корзине {cart.CountProductsToCart.ToString()} шт.");
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Получаем рабочие места из БД
        /// </summary>
        /// <param name="replyMarkup"></param>
        /// <param name="idUser"></param>
        /// <param name="idGroupOfUser"></param>
        /// <param name="idChecklist"></param>
        /// <param name="command"></param>
        /// <param name="column"></param>
        public void MenuWorcplese(out string replyMarkup, string idUser, string idGroupOfUser = "", string idWorkplese = "", string command = "", int column = 1)
        {
            replyMarkup = "";

            if (idUser == "")
            {
                return;
            }

            //получае ID группы пользователей по idUser
            int?idGroup = new RequestBd().GetIdGroupOfUsers(int.Parse(idUser));

            if (idGroup == null)
            {
                return;
            }

            //получаем все рабочие места из БД по группе пользователей
            // в формате id
            var res = new RequestBd().GetWorcplaseOfGroupOfUsers(idGroup);

            //Создаем кнопки
            Buttons.InlineKeyboardMarkup allBtn = new Buttons.InlineKeyboardMarkup();
            int a = 0;

            foreach (var el in res)
            {
                idWorkplese = el.Split('|')[0];
                string workplese = el.Split('|')[1];
                string calback   = $"{idUser}|{idGroup}|{idWorkplese}|checklist";


                //Добавляем кнопку Удалить в следующий столбец
                allBtn.AddButton(new InlineKeyboardButton($"{workplese}", $"{calback}"), ++a / column);
            }

            replyMarkup = JsonConvert.SerializeObject(allBtn);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Кнопки, полученные из списка
        /// Важно! Необходимо потом их будет серилизовать:
        /// string replyMarkup = JsonConvert.SerializeObject(список)
        /// </summary>
        /// <param name="res">Список кнопок, которой необходимо добавить IEnumerable<string></param>
        /// <param column="res">Максимальное кол-во столбцов в меню (по умолчанию =4)</param>
        /// <returns></returns>
        InlineKeyboardMarkup AddButtonReturnInlineKeyboardMarkup(IEnumerable <string> res, int column = 4)
        {
            Buttons.InlineKeyboardMarkup allBtn = new Buttons.InlineKeyboardMarkup();

            int a = 0;

            foreach (string el in res)
            {
                if (el == "")
                {
                    continue;
                }

                //Добавляем кнопку в следующий столбец
                allBtn.AddButton(new InlineKeyboardButton($"{el}", $"{el}"), ++a / column);
            }

            ButtonNavigation(allBtn, res.Count().ToString()); //Добавляем главные кнопки в меню



            return(allBtn);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Обработка входящих сообщений
        /// </summary>
        /// <param name="ChatId">введите ChatId</param>
        /// <param name="Message">введите сообщение, которое нужно обработать</param>
        internal void ProcessMessage(string ChatId, string Message, JsonMessages.Message resultMessage = null)
        {
            string answer = String.Empty; //ответ входящее на сообщение

            string chatId    = resultMessage.chat.id.ToString();
            string messageId = resultMessage.message_id.ToString();
            string idUser    = resultMessage.from.id.ToString();
            string?userName  = resultMessage.from.username;



            string phoneNumber = String.Empty;

            if (resultMessage.contact != null)
            {
                phoneNumber = resultMessage.contact.phone_number;
                if (phoneNumber != null || phoneNumber == "")
                {
                    Console.WriteLine($"Отправляем номер админу {phoneNumber}");
                    Message = "данные успешно отправлены";
                }
            }

            #region Проверка на ник
            if (userName == "" || userName == null)
            {
                userName = resultMessage.from.first_name;
            }
            #endregion


            if (Message == null)
            {
                return;
            }



            switch (Message.ToLower())
            {
            case @"/start":



                answer = "<b>Добро пожаловать!</b>" +
                         "\r\n <i>Для регистрации отправьте свой номер телефона</i> нажмите на кнопку 📞";



                string replyMarkup = CreateDeleteBtnPhone();

                sendMessage(ChatId, answer, replyMarkup);


                return;



            case @"данные успешно отправлены":

                //добавляем пользователя в базу данных, если его нет
                new RequestBd().AddWorkerToWorkers(idUser, userName, phoneNumber);

                replyMarkup = CreateDeleteBtnPhone(true);
                sendMessage(ChatId, "✅ Данные успешно отправлены!", replyMarkup);

                System.Threading.Thread.Sleep(2000);

                MenuChekList(ChatId);
                return;

            case @"/menu":
            case @"получить чек-лист":
                //получаем чек лист, если пользователь есть в БД
                MenuChekList(ChatId);
                return;


            default:

                //вопрос | ответ | idUser | idGroupOfUser | idWorkplese | command | prefix(если есть)
                string dataAll = Settings.dicAllData.GetOrAdd(int.Parse(chatId), "");

                int ColuntLenght = dataAll.Split('|').Length;

                //Разбиваем полученные данные из словаря на массив
                string[] arrDataAll = dataAll.Split(new String[] { "|" }, StringSplitOptions.None);

                if (ColuntLenght >= 7)
                {
                    string idMess = arrDataAll[0];
                    string vopros = arrDataAll[1];
                    string otvet  = arrDataAll[2];
                    //string idUser = arrDataAll[3];
                    string idGroupOfUser = arrDataAll[4];
                    string idWorkplese   = arrDataAll[5];
                    string command       = arrDataAll[6];
                    string prefix        = arrDataAll[7];

                    string callback = $"{idUser}|{idGroupOfUser}|{idWorkplese}|{command}|{prefix}";



                    answer = $"<b>Вопрос {prefix}:</b>\r\n{vopros}"
                             + $"\r\n<b>Ответ:</b>\r\n{otvet}"
                             + $"\r\n<b>Комментарий:</b>\r\n{Message}"
                             + "\r\n*****\r\n";



                    Buttons.InlineKeyboardMarkup allBtn = new Buttons.InlineKeyboardMarkup();
                    //Добавляем кнопку в следующий столбец
                    allBtn.AddButton(new Buttons.InlineKeyboardButton($"➡ Далее", $"{callback}"), 0);

                    callback = $"{idUser}|{idGroupOfUser}|{idWorkplese}|{command}|{int.Parse(prefix) - 1}";

                    allBtn.AddButton(new Buttons.InlineKeyboardButton($"🔙 Назад 📝", callback), 0);

                    string Rm = JsonConvert.SerializeObject(allBtn);


                    deleteMessage(chatId, messageId);


                    AddNewElement(Settings.dicResult, int.Parse(idUser), answer, (int.Parse(prefix) - 1));

                    editMessageText(chatId, idMess, answer, Rm);
                    return;
                }


                answer = $"Вы мне написали:\r\n{Message}\r\nЯ не знаю что ответить, воспользуйтесь командой: /start";
                break;
            }

            //отправка сообщения пользователю
            sendMessage(ChatId, answer);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Обработка запросов от Inline кнопки
        /// </summary>
        /// <param name="result">Результат от запроса JsonMessages.Result</param>
        /// <param name="replyMarkup"></param>
        internal void ProcessMessageToInline(JsonMessages.Result result, string replyMarkup = "", string text = "")
        {
            #region
            //получаем chatId - идентификатор чата
            string chatId = result.callback_query.message.chat.id.ToString();
            //получаем message_id - идентификатор сообщения
            string messageId = result.callback_query.message.message_id.ToString();

            //получаем callback_query от кнопки
            string messageCallback = result.callback_query.data;

            string idUser        = string.Empty;
            string idGroupOfUser = string.Empty;
            string idWorkplese   = string.Empty;
            string command       = string.Empty;


            idUser        = messageCallback.Split('|')[0];
            idGroupOfUser = messageCallback.Split('|')[1];
            idWorkplese   = messageCallback.Split('|')[2];
            command       = messageCallback.Split('|')[3];


            if (idUser == "")
            {
                //Получаем idUser
                idUser = result.callback_query.from.id.ToString();
            }

            //получаем название/текст на кнопке
            string titleButton = result.callback_query.message.text;
            //получаем userName
            string userName = result.callback_query.from.username;

            if (userName == "" || userName == null)
            {
                userName = result.callback_query.from.first_name;
            }


            string answer = String.Empty;      //ответ входящее на сообщение

            string nameProduct = String.Empty; // наименование продукта
            #endregion
            //обработка сообщения полученого от Inline кнопки от callback_query
            switch (command.ToLower())
            {
            case "checklist":
                //373101829 | 1 | 1 | checklist
                //idUser - 373101829
                //idGroupOfUser - 1
                //idWorkplese - 1
                //command - checklist|номер вопроса

                string prefix = String.Empty;

                if (messageCallback.Split('|').Length >= 5)
                {
                    prefix = messageCallback.Split('|')[4];
                }

                titleButton =
                    new Menu().InlineMenuFromChecList(out replyMarkup, idUser, idGroupOfUser, idWorkplese, command, prefix);


                if (titleButton == null)
                {
                    Console.WriteLine("Произошла внутренняя ошибка - возможно сбой интернет соеденения\r\n" +
                                      "или пользователь нажал на кнопку, которая уже не актуальна");
                    titleButton = "<i>Произошла внутренняя ошибка - возможно из-за сбоя интернет соеденения, </i>"
                                  + "<i>⚠ или вы нажали на неактивную кнопку из прошлых сообщений ⚠\r\n</i>"
                                  + "<b>❗ Очистите историю сообщений, чтоб перезапустить бота</b>";
                    sendMessage(idUser, titleButton);
                    return;
                }


                #region Закончились все вопросы из чек листа
                if (titleButton.Contains("Закончились все вопросы из чек листа"))
                {
                    foreach (var el in Settings.dicResult[int.Parse(idUser)])
                    {
                        titleButton += "\r\n" + el;
                    }

                    Buttons.InlineKeyboardMarkup allBtn = new Buttons.InlineKeyboardMarkup();
                    //Добавляем кнопку в следующий столбец
                    allBtn.AddButton(new Buttons.InlineKeyboardButton($"✅ Отправить", $"{idUser}|{idGroupOfUser}|{idWorkplese}|send"), 0);
                    //allBtn.AddButton(new Buttons.InlineKeyboardButton($"Редактировать", $"{idUser}|{idGroupOfUser}|{idWorkplese}|edit"), 0);
                    replyMarkup = JsonConvert.SerializeObject(allBtn);
                }
                #endregion



                string otvet = "";
                //Если после prefix (номра вопроса из чеклитса) пришло еще что-то
                //значит это пришел ответ на вопрос
                if (messageCallback.Split('|').Length == 6)
                {
                    //получаем ответ на вопрос (Да/Нет)
                    otvet = messageCallback.Split('|')[5];

                    if (otvet.Contains("✔️"))
                    {
                        otvet += " - Да";
                    }
                    else
                    {
                        otvet += " - Нет";
                    }

                    //добавляем Ответы на вопросы из чек-листа в словарь
                    AddNewElement(Settings.dicOtvetToCheckList, int.Parse(idUser), $"{prefix} = {otvet}");



                    //получаем заданный вопрос
                    string vopros = Settings.dicVoprosToCheckList[int.Parse(idUser)][int.Parse(prefix) - 1];

                    string AllData = $"{messageId}|{vopros}|{otvet}|{idUser}|{idGroupOfUser}|{idWorkplese}|{command}|{prefix}";
                    //Добавляем полученные данные в словарь
                    Settings.dicAllData.AddOrUpdate(int.Parse(idUser), AllData, (key, oldValue) => AllData);

                    AddNewElement(Settings.dicResult, int.Parse(idUser),
                                  $"<b>Вопрос {prefix}:</b>\r\n{vopros}\r\n" +
                                  $"<b>Ответ:</b>\r\n{otvet}"
                                  + "\r\n*****\r\n",
                                  (int.Parse(prefix) - 1));

                    Buttons.InlineKeyboardMarkup allBtn = new Buttons.InlineKeyboardMarkup();
                    //Добавляем кнопку в следующий столбец
                    allBtn.AddButton(new Buttons.InlineKeyboardButton($"❗ Пропустить", $"{idUser}|{idGroupOfUser}|{idWorkplese}|checklist|{int.Parse(prefix)}"), 0);
                    allBtn.AddButton(new Buttons.InlineKeyboardButton($"🔙 Назад 📝", $"{idUser}|{idGroupOfUser}|{idWorkplese}|checklist|{int.Parse(prefix) - 1}"), 0);
                    string Rm = JsonConvert.SerializeObject(allBtn);



                    //Оставляем или пропускаем комментарий
                    text = $"{vopros} - {otvet}" +
                           "\r\n\n<pre>Напишите 💡 комментарий по вопросу, если комментарий не требуетcя нажмите </pre>" + "<b>кнопку Пропустить ⬇</b>";
                    editMessageText(chatId, messageId, text, Rm);

                    //deleteMessage(chatId, messageId);

                    return;
                }



                break;



            case @"send":
                titleButton = "🟢 Ваш Чек-Лист отправлен!";


                int userId = int.Parse(idUser);

                //очищаем словари
                DelIdUserFromDic(Settings.dicOtvetToCheckList, userId);
                DelIdUserFromDic(Settings.dicVoprosToCheckList, userId);
                string value;
                Settings.dicAllData.TryRemove(userId, out value);

                //получаем список Админов для отправки им результа
                var listAdmin = new RequestBd().GetAdmin();



                string report = String.Empty;

                //проверяем на наличие юзера в словаре
                if (!Settings.dicResult.ContainsKey(userId))
                {
                    Console.WriteLine("Ошибка"); return;
                }
                //делаем перебор результатов из чек листа
                foreach (var el in Settings.dicResult[userId])
                {
                    report += "\r\n" + el;
                }

                //Метод, отправки отчета админам
                SpamAdmin(listAdmin, report, userId, idGroupOfUser, idWorkplese, userName);

                //чистим от тегов
                report = report.Replace("</b>", "").Replace("<b>", "").Replace("</i>", "").Replace("<i>", "").
                         Replace("</pre>", "").Replace("<pre>", "");

                new RequestBd().AddReportFromToUserId(userId, idGroupOfUser, idWorkplese, report);

                //очищаем словарь с результами
                List <string> Lvalue;
                Settings.dicResult.Remove(userId, out Lvalue);

                break;

            case @"edit":
                titleButton = "Тут можно будет редактировать ответы\r\n (Пока не реализовано!)";

                int UserId = int.Parse(idUser);

                //очищаем словарь
                DelIdUserFromDic(Settings.dicOtvetToCheckList, UserId);
                //DelIdUserFromDic(Settings.dicVoprosToCheckList, UserId);
                List <string> lList;
                Settings.dicVoprosToCheckList.Remove(UserId, out lList);

                break;

            default:
                #region
                titleButton = "Получили не известную команду, нажмите /start";
                break;
                #endregion
            }

            editMessageText(chatId, messageId, titleButton, replyMarkup);
        }