using System; using System.Data.SqlClient; using SvetoforVKBot.Models.Updates; using VkNet; using VkNet.Enums.SafetyEnums; using VkNet.Model.Keyboard; using VkNet.Model.RequestParams; using Newtonsoft.Json; using VkNet.Enums.Filters; using VkNet.Model.Attachments; using System.Collections.Generic; using System.Threading; using SvetoforVKBot.Models.Dop; using SvetoforVKBot.Models.Commands; using System.Text.RegularExpressions; using System.Linq; namespace SvetoforVKBot.Models.Commands.LK { public class SelectEditDataCommand : Command { public override string Name => "{\"button\":\"selectEditData-"; public override void Execute(RootObject update, VkApi client, SvetoforVKBot.Data.SvetoforVKBotEntities db) { var chatId = update.@object.message.from_id; MessagesSendParams @params = new MessagesSendParams(); var keyboardBuilder = new KeyboardBuilder().Clear(); Regex regex = new Regex("[^0-9]"); string tag = ""; string msgSports = ""; string strSportKind = ""; string sportName = ""; try { var user = db.Users.Single(usr => usr.chatId == chatId); user.tag = "Личный кабинет - Данные"; db.SaveChanges(); Dictionary colors = new Dictionary(3); colors.Add(1, "🟩"); //З colors.Add(2, "🟦"); //C colors.Add(3, "🟨"); //Ж Dictionary tracks = new Dictionary(7); tracks.Add(1, "Оптимизация питания"); tracks.Add(2, "Снижение жировой массы"); tracks.Add(3, "Увеличение мышечной массы"); tracks.Add(4, "Персональный режим"); Dictionary notifies = new Dictionary(4); notifies.Add(1, "1 раз в день"); notifies.Add(3, "3 раза в день"); notifies.Add(4, "Более 3х раз в день"); notifies.Add(0, "Никогда"); int weight = user.weight; int height = user.height; int gender = user.gender; int notifyCount = user.notifyCount; string fio = user.fio; var jsPhones = JsonConvert.DeserializeObject>(user.phone); var birthday = user.birthday; int track = user.track; int waterNotify = user.waterNotify; int activityKind = user.activityKind; int sportId = user.sportId; keyboardBuilder .AddButton("⚖Вес: " + weight, "selectEditData-1", KeyboardButtonColor.Primary) .AddButton("📐Рост: " + height, "selectEditData-2", KeyboardButtonColor.Primary) .AddLine() .AddButton("🔔Уведомления", "selectEditData-3", KeyboardButtonColor.Primary) .AddButton("✏ФИО", "selectEditData-4", KeyboardButtonColor.Primary) .AddLine() .AddButton("📅Дата рождения", "selectEditData-5", KeyboardButtonColor.Primary) .AddButton("📞Телефон", "selectEditData-6", KeyboardButtonColor.Primary) .AddLine() .AddButton("Режим питания", "selectEditData-7", KeyboardButtonColor.Primary) .AddLine() .AddButton("Вид спорта/активности", "selectEditData-8", KeyboardButtonColor.Primary) .AddLine(); if (activityKind == 0 || activityKind == 3) msgSports = "Ничем не занимаюсь"; else { msgSports = ""; var sport = db.SportKinds.Single(s => s.id == sportId); sportName = sport.name; int sportKind = sport.kind; if (sportKind == 1) strSportKind = sportName + " (Спорт)"; else strSportKind = sportName + " (Физ. активность)"; } if (waterNotify == 1) { keyboardBuilder .AddButton("✅Напоминания о воде", "selectOffWaterNotify", KeyboardButtonColor.Positive); } else { keyboardBuilder .AddButton("⛔Напоминания о воде", "selectGoWaterNotify", KeyboardButtonColor.Negative); } keyboardBuilder .AddLine() .AddButton("Готово", "startPL", KeyboardButtonColor.Default); @params.Message = "РЕДАКТИРОВАНИЕ ДАННЫХ" + "\n\n" + "ФИО: " + fio + "\n" + "Телефон: " + jsPhones[0] + "\n" + "Дата рождения: " + birthday.ToShortDateString() + "\n" + "Рост: " + height + " см" + "\n" + "Вес: " + weight + " кг" + "\n" + colors[track] + "Выбранный трек: " + tracks[track] + "\n" + "Уведомления: " + notifies[notifyCount] + "\n" + $"Вид спорта/активности: {msgSports}{strSportKind}" + "\n\n" + "Выберите на клавиатуре показатель, который хотите изменить или нажмите \"Готово\"👇🏻"; @params.Keyboard = keyboardBuilder.Build(); @params.UserId = chatId; @params.RandomId = GetRandomId(); client.Messages.SendAsync(@params); } catch (Exception ee) { @params.Message = "Ошибка в SelectEditDataCommand.Execute: " + ee.Message; @params.Attachments = null; @params.Keyboard = null; @params.UserId = 59111081; @params.RandomId = GetRandomId(); client.Messages.SendAsync(@params); } } public override void ExecutePL(RootObject update, VkApi client, SvetoforVKBot.Data.SvetoforVKBotEntities db) { var chatId = update.@object.message.from_id; MessagesSendParams @params = new MessagesSendParams(); var keyboardBuilder = new KeyboardBuilder().Clear(); Regex regex = new Regex("[^0-9]"); string tag = ""; int startYear = DateTime.Now.Year - 18; int i = 0; int btnCount = 0; int btnLines = 0; string msgSports = ""; string strSportKind = ""; string sportName = ""; try { string[] payload = update.@object.message.payload.Split('-'); int curOption = Convert.ToInt32(regex.Replace(payload[1], "")); Dictionary notifies = new Dictionary(4); notifies.Add(1, "1 раз в день"); notifies.Add(3, "3 раза в день"); notifies.Add(4, "Более 3х раз в день"); notifies.Add(0, "Никогда"); Dictionary colors = new Dictionary(3); colors.Add(1, "🟩"); //З colors.Add(2, "🟦"); //C colors.Add(3, "🟨"); //Ж Dictionary tracks = new Dictionary(7); tracks.Add(1, "Оптимизация питания"); tracks.Add(2, "Снижение жировой массы"); tracks.Add(3, "Увеличение мышечной массы"); tracks.Add(4, "Персональный режим"); var user = db.Users.Single(usr => usr.chatId == chatId); int weight = user.weight; int height = user.height; int gender = user.gender; int notifyCount = user.notifyCount; string fio = user.fio; var jsPhones = JsonConvert.DeserializeObject>(user.phone); var birthday = user.birthday; int track = user.track; int waterNotify = user.waterNotify; int activityKind = user.activityKind; int sportId = user.sportId; switch (curOption) { case 0: tag = "Личный кабинет - Данные"; keyboardBuilder .AddButton("⚖Вес: " + weight, "selectEditData-1", KeyboardButtonColor.Primary) .AddButton("📐Рост: " + height, "selectEditData-2", KeyboardButtonColor.Primary) .AddLine() .AddButton("🔔Уведомления", "selectEditData-3", KeyboardButtonColor.Primary) .AddButton("✏ФИО", "selectEditData-4", KeyboardButtonColor.Primary) .AddLine() .AddButton("📅Дата рождения", "selectEditData-5", KeyboardButtonColor.Primary) .AddButton("📞Телефон", "selectEditData-6", KeyboardButtonColor.Primary) .AddLine() .AddButton("Режим питания", "selectEditData-7", KeyboardButtonColor.Primary) .AddLine() .AddButton("Вид спорта/активности", "selectEditData-8", KeyboardButtonColor.Primary) .AddLine(); if (activityKind == 0) msgSports = "Ничем не занимаюсь"; else { msgSports = ""; var sport = db.SportKinds.Single(s => s.id == sportId); sportName = sport.name; int sportKind = sport.kind; if (sportKind == 1) strSportKind = sportName + " (Спорт)"; else strSportKind = sportName + " (Физ. активность)"; } if (waterNotify >= 1 && waterNotify != 10) { keyboardBuilder .AddButton("✅Напоминания о воде", "selectOffWaterNotify", KeyboardButtonColor.Positive); } else { keyboardBuilder .AddButton("⛔Напоминания о воде", "selectGoWaterNotify", KeyboardButtonColor.Negative); } keyboardBuilder .AddLine() .AddButton("Готово", "startPL", KeyboardButtonColor.Default); @params.Message = "РЕДАКТИРОВАНИЕ ДАННЫХ" + "\n\n" + "ФИО: " + fio + "\n" + "Телефон: " + jsPhones[0] + "\n" + "Дата рождения: " + birthday.ToShortDateString() + "\n" + "Рост: " + height + " см" + "\n" + "Вес: " + weight + " кг" + "\n" + colors[track] + "Выбранный трек: " + tracks[track] + "\n" + "Уведомления: " + notifies[notifyCount] + "\n" + $"Вид спорта/активности: {msgSports}{strSportKind}" + "\n\n" + "Выберите на клавиатуре показатель, который хотите изменить или нажмите \"Готово\"👇🏻"; break; case 1: tag = "Личный кабинет - Изменить вес"; keyboardBuilder //.AddButton("Вес: " + weight, "selectEditData-1", KeyboardButtonColor.Primary) //.AddLine() //.AddButton("Рост: " + height, "selectEditData-2", KeyboardButtonColor.Primary) //.AddLine() .AddButton("Назад", "selectEditData-0", KeyboardButtonColor.Default); @params.Message = "Введите свой вес в кг. Например, 65.\n\n" + "⚠ Лучшее время для измерения веса - утро. Взвешиваться следует после утренних процедур и до приёма пищи."; //❕ break; case 2: tag = "Личный кабинет - Изменить рост"; keyboardBuilder //.AddButton("Вес: " + weight, "selectEditData-1", KeyboardButtonColor.Primary) //.AddLine() //.AddButton("Рост: " + height, "selectEditData-2", KeyboardButtonColor.Primary) //.AddLine() .AddButton("Назад", "selectEditData-0", KeyboardButtonColor.Default); @params.Message = "Введите свой рост в см. Например, 168."; break; case 3: tag = "Личный кабинет - Уведомления"; keyboardBuilder .AddButton("Раз в день", "selectEditNotifyCount-1", KeyboardButtonColor.Primary) .AddLine() .AddButton("Три раза в день", "selectEditNotifyCount-3", KeyboardButtonColor.Primary) .AddLine() .AddButton("Более 3х раз", "selectEditNotifyCount-4", KeyboardButtonColor.Primary) .AddLine() .AddButton("Никогда", "selectEditNotifyCount-0", KeyboardButtonColor.Default) .AddButton("Назад", "selectEditData-0", KeyboardButtonColor.Default); @params.Message = "Как часто Вы готовы получать напоминания от чат-бота?\n\n" + "Вы будете получать уведомления о приёмах пищи и воды. Если Вы хотите сформировать привычку " + "по режиму питания или употреблению достаточного количества воды, выберите вариант \"Более 3х раз\".\n" + "Наш чат-бот не будет рассылать рекламу или спам. Только персональные уведомления и рекомендации по здоровому питанию."; break; case 4: tag = "Личный кабинет - ФИО"; keyboardBuilder //.AddButton("Вес: " + weight, "selectEditData-1", KeyboardButtonColor.Primary) //.AddLine() //.AddButton("Рост: " + height, "selectEditData-2", KeyboardButtonColor.Primary) //.AddLine() .AddButton("Назад", "selectEditData-0", KeyboardButtonColor.Default); @params.Message = "Введите фамилию, имя и отчество одним сообщением.\n\nНапример: Иванов Иван Иванович"; break; case 5: tag = "Личный кабинет - ДР - Год"; @params.Message = "Выберите на клавиатуре внизу или введите свой год рождения, например 1993. \n"; for (i = startYear; i > startYear - 20; i--) { keyboardBuilder .AddButton(i.ToString(), i.ToString(), KeyboardButtonColor.Primary); btnCount++; if (btnCount % 4 == 0) { btnLines++; keyboardBuilder.AddLine(); } } if (btnCount % 4 != 0) { keyboardBuilder.AddLine(); } keyboardBuilder .AddButton("Назад", "selectEditData-0", KeyboardButtonColor.Default); @params.Keyboard = keyboardBuilder .Build(); break; case 6: tag = "Личный кабинет - Телефон"; keyboardBuilder //.AddButton("Вес: " + weight, "selectEditData-1", KeyboardButtonColor.Primary) //.AddLine() //.AddButton("Рост: " + height, "selectEditData-2", KeyboardButtonColor.Primary) //.AddLine() .AddButton("Назад", "selectEditData-0", KeyboardButtonColor.Default); @params.Message = "Напишите номер телефона в формате 11 цифр через \"8\" или \"7\" \n"; break; case 7: tag = "Личный кабинет - Режим питания"; //SqlCommand editTrack = new SqlCommand("UPDATE Users SET track = @track WHERE chatId = @chatId;", Con); //editTrack.Parameters.AddWithValue("@chatId", chatId); //editTrack.Parameters.AddWithValue("@track", 0); //editTrack.ExecuteNonQuery(); @params.Message = "Выберите желаемый трек оптимизации питания👇🏻"; keyboardBuilder .AddButton("🟩Оптимизация питания", "selectTrack-1", KeyboardButtonColor.Primary) //З🟩 .AddLine() .AddButton("🟦Снижение жировой массы", "selectTrack-2", KeyboardButtonColor.Primary) //С🟦 .AddLine() .AddButton("🟨Увеличение мыш. массы", "selectTrack-3", KeyboardButtonColor.Primary) //Ж🟨 .AddLine() .AddButton("Персональный режим", "selectTrack-4", KeyboardButtonColor.Primary) .AddLine() .AddButton("Назад", "selectEditData-0", KeyboardButtonColor.Default); //keyboardBuilder // //.AddButton("Вес: " + weight, "selectEditData-1", KeyboardButtonColor.Primary) // //.AddLine() // //.AddButton("Рост: " + height, "selectEditData-2", KeyboardButtonColor.Primary) // //.AddLine() // .AddButton("Назад", "selectEditData-0", KeyboardButtonColor.Default); break; case 8: tag = "Личный кабинет - Вид спорта"; @params.Message = "Вы заниматесь спортом или физкультурой?\n" + "Выберите на клавиатуре вариант, который наиболее точно описывает Ваш образ жизни.\n\n" + "👉🏻 Если Вы профессионально занимаетесь спортом или Ваша работа связана с тяжёлым физическим трудом, выберите вариант \"Занимаюсь спортом\"\n" + "👉🏻 Если Вы не занимаетесь спортом профессионально, но регулярно поддерживаете физическую активность (занятия физкультурой), выберите вариант \"Занимаюсь физкультурой\"\n" + "👉🏻 Если у Вас сидячая работа или нерегулярная физическая активность (менее одного раза в неделю), выберите вариант \"Ничем не занимаюсь\".\n"; keyboardBuilder .AddButton("Занимаюсь спортом", "selectActivityKind-1", KeyboardButtonColor.Primary) .AddLine() .AddButton("Занимаюсь физкультурой", "selectActivityKind-2", KeyboardButtonColor.Primary) .AddLine() .AddButton("Ничем не занимаюсь", "selectActivityKind-3", KeyboardButtonColor.Primary) .AddLine() .AddButton("Назад", "selectEditData-0", KeyboardButtonColor.Default); break; } user.tag = tag; db.SaveChanges(); @params.Keyboard = keyboardBuilder.Build(); @params.UserId = chatId; @params.RandomId = GetRandomId(); client.Messages.SendAsync(@params); } catch (Exception ee) { @params.Message = "Ошибка в SelectEditDataCommand: " + ee.Message; @params.Attachments = null; @params.Keyboard = null; @params.UserId = 59111081; @params.RandomId = GetRandomId(); client.Messages.SendAsync(@params); } } } }