コード例 #1
0
        /// <summary>
        ///  Метод, для отправки всплывающей подсказаки для Inline кнопок
        /// </summary>
        /// <param name="result"></param>
        async void answerCallbackQuery(JsonMessages.Result result, string text)
        {
            //адрес для запроса
            string url = $@"{Settings.Url}answerCallbackQuery";

            //текст всплывающей подсказки
            //string text = result.callback_query.data;

            //передаваемые параметры callback_query_id и text
            string data = $"callback_query_id={result.callback_query.id}&text={text}";

            StringContent content = new StringContent(data, Encoding.UTF8, "application/x-www-form-urlencoded");

            var res = await Settings.Client.PostAsync(url, content);
        }
コード例 #2
0
        /// <summary>
        /// Правка сообщений (реализовал пока только для Сallback)
        /// </summary>
        /// <param name="result"></param>
        /// <param name="replyMarkup"> введите replyMarkup</param>
        async void editMessageText(JsonMessages.Result result, string replyMarkup = "")
        {
            //https://core.telegram.org/bots/api#editmessagetext

            string text = result.callback_query.data;
            string url  = $@"{Settings.Url}editMessageText";

            //текст text.UrlEncode() нужно кодировать

            string data = $"chat_id={result.callback_query.message.chat.id.ToString()}&text={text}&message_id={result.callback_query.message.message_id.ToString()}";

            if (replyMarkup != "")
            {
                data = data + $"&reply_markup={replyMarkup}";
            }

            StringContent content = new StringContent(data, Encoding.UTF8, "application/x-www-form-urlencoded");

            var res = await Settings.Client.PostAsync(url, content);
        }
コード例 #3
0
        /// <summary>
        /// Обработка запросов от Inline кнопки
        /// </summary>
        /// <param name="result">Результат от запроса JsonMessages.Result</param>
        /// <param name="replyMarkup"></param>
        internal void ProcessMessageToInline(JsonMessages.Result result, string replyMarkup = "")
        {
            //получаем 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 titleButton = result.callback_query.message.text;

            string userName = result.callback_query.message.from.username;


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

            //обработка сообщения полученого от Inline кнопки от callback_query
            switch (messageCallback.ToLower())
            {
            case @"help":
                titleButton = "Спаравка по продуктам";
                new Menu().InlineMenuFromBd(out replyMarkup);
                break;

            case @"about":
                titleButton = "Тут будет описание компании";
                new Menu().InlineMenuFromBd(out replyMarkup);
                break;

            case @"next":
                titleButton     = messageCallback;
                Settings.Number = Settings.Number + 5;
                new Menu().InlineMenuProductsFromCategory(messageCallback, out replyMarkup);
                break;


            case @"корзина":
                titleButton =
                    new Menu().MenuCart(userName, out replyMarkup);
                break;


            default:
                titleButton = messageCallback;
                var res = new Menu().InlineMenuProductsFromCategory(messageCallback, out replyMarkup);

                //проверка на NULL
                if (String.IsNullOrEmpty(res))
                {
                    break;
                }
                //если ответ выдал больше 30 символов, значит это не категория и не товар, а описание товара
                if (res.Length > 30 || !res.Any())
                {
                    titleButton = res;
                }
                break;
            }

            //titleButton = answer + Environment.NewLine + messageCallback;
            //отправка сообщения пользователю
            //sendMessage(chatId, answer, replyMarkup); ;


            editMessageText(chatId, messageId, titleButton, replyMarkup);
        }
コード例 #4
0
ファイル: Messages.cs プロジェクト: srgo211/TelegrammBotApi
        /// <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);
        }