453 lines
23 KiB
C#
453 lines
23 KiB
C#
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<int, string> colors = new Dictionary<int, string>(3);
|
||
colors.Add(1, "🟩"); //З
|
||
colors.Add(2, "🟦"); //C
|
||
colors.Add(3, "🟨"); //Ж
|
||
|
||
Dictionary<int, string> tracks = new Dictionary<int, string>(7);
|
||
tracks.Add(1, "Оптимизация питания");
|
||
tracks.Add(2, "Снижение жировой массы");
|
||
tracks.Add(3, "Увеличение мышечной массы");
|
||
tracks.Add(4, "Персональный режим");
|
||
|
||
Dictionary<int, string> notifies = new Dictionary<int, string>(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<List<string>>(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<int, string> notifies = new Dictionary<int, string>(4);
|
||
notifies.Add(1, "1 раз в день");
|
||
notifies.Add(3, "3 раза в день");
|
||
notifies.Add(4, "Более 3х раз в день");
|
||
notifies.Add(0, "Никогда");
|
||
|
||
Dictionary<int, string> colors = new Dictionary<int, string>(3);
|
||
colors.Add(1, "🟩"); //З
|
||
colors.Add(2, "🟦"); //C
|
||
colors.Add(3, "🟨"); //Ж
|
||
|
||
Dictionary<int, string> tracks = new Dictionary<int, string>(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<List<string>>(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);
|
||
}
|
||
}
|
||
}
|
||
} |