public MessageEventResult HandleEvent(MessageEvent messageEvent) { if (!int.TryParse(messageEvent.Message, out int recipient) || !Enum.IsDefined(typeof(Recipients), recipient)) { throw new PreviousStateUserAnswerException($"Некорректное значение одаряемого {messageEvent.Message}"); } _stateMachine.GiftCriteria.AddRecipient((Recipients)recipient); var inlineKeyboard = KeyboardGenerator.GetFromEnum <AgeCategories>(); return(new MessageEventResult(inlineKeyboard, "Выберите возрастную категорию")); }
public MessageEventResult HandleEvent(MessageEvent messageEvent) { if (!int.TryParse(messageEvent.Message, out int age) || !Enum.IsDefined(typeof(AgeCategories), age)) { throw new PreviousStateUserAnswerException($"Некорректное значение возраста {messageEvent.Message}"); } _stateMachine.GiftCriteria.AddAgeCategory((AgeCategories)age); var inlineKeyboard = KeyboardGenerator.GetFromEnum <PriceCategories>(); return(new MessageEventResult(inlineKeyboard, "Выберите ценовую категорию подарка")); }
public MessageEventResult HandleEvent(MessageEvent messageEvent) { var inlineKeyboard = KeyboardGenerator.GetFromEnum <Recipients>(); return(new MessageEventResult(inlineKeyboard, "Кому вы выбираете подарок?")); }
private IReplyMarkup makeConfigKeyboard() { int rowsCount, i; string[][][] configItems; if (currentTZSessionData.userRole == "Father") { rowsCount = 5; } else //else if (currentTZSessionData.userRole == "Normal") { rowsCount = 4; } configItems = new string[rowsCount][][]; for (i = 0; i < rowsCount; i++) { configItems[i] = new string[2][]; configItems[i][0] = new string[2]; configItems[i][1] = new string[2]; } i = 0; if (currentTZSessionData.userRole == "Father") { // دکمه نمایش کد دعوت configItems[i][0][0] = "📣 نمایش کد دعوت"; configItems[i][0][1] = "inviteCode"; // دکمه بازسازی کد دعوت configItems[i][1][0] = "📜 بازسازی کد دعوت"; configItems[i][1][1] = "regenerateInviteCode"; i++; } // دکمه نمایش سابقه خرید configItems[i][0][0] = "🗓 سابقه خرید"; configItems[i][0][1] = "history"; // دکمه نمایش لیست اعضای خانواده configItems[i][1][0] = "👨👩👧👧 مشخصات خانواده"; configItems[i][1][1] = "family"; i++; // دکمه نمایش سابقه خرید configItems[i][0][0] = "🌏👅 تغییر زبان"; configItems[i][0][1] = "language"; // دکمه نمایش لیست اعضای خانواده configItems[i][1][0] = "⌨️ تغییر محل کیبورد"; configItems[i][1][1] = "keyboardPlace"; i++; // دکمه راهنما configItems[i][0][0] = "⁉️ راهنما"; configItems[i][0][1] = "help"; // دکمه خروج configItems[i][1][0] = "🖐❌ خروج از خانواده"; configItems[i][1][1] = "logout"; i++; configItems[i] = new string[1][]; configItems[i][0] = new string[2]; /*// دکمه نمایش سابقه خرید * configItems[i][0][0] = "💥 سابقه خرید"; * configItems[i][0][1] = "history";*/ // دکمه درباره ما configItems[i][0][0] = "👁 درباره ما"; configItems[i][0][1] = "about"; InlineKeyboardMarkup configKeyboard = KeyboardGenerator.makeKeyboard(configItems); return(configKeyboard); }
private InlineKeyboardMarkup makeZanbilContentKeyboard() { // گرفتن زنبیل اصلی خانواده var mainZanbil = getMainZanbil(); // گرفتن لیست آیتم های زنبیل اصلی var zanbilItems = tzdb.ZanbilItems.Where(zi => zi.Zanbil.ZanbilId == mainZanbil.ZanbilId && zi.IsBought == false); int ziCount = zanbilItems.Count(); string[][][] zanbilItemsData; if (ziCount == 0) { zanbilItemsData = new string[2][][]; } else { zanbilItemsData = new string[ziCount + 1][][]; } // ساخت لیست رشته شامل معرفی آیتم های زنبیل int i; for (i = 0; i < ziCount; i++) { zanbilItemsData[i] = new string[1][]; zanbilItemsData[i][0] = new string[2]; ZanbilItem zi = zanbilItems.ToArray <ZanbilItem>()[i]; zanbilItemsData[i][0][0] = zi.ItemTitle + " (" + zi.ItemAmount + " " + zi.ItemUnit.Title + ")"; zanbilItemsData[i][0][1] = (i + 1).ToString(); } if (ziCount == 0) { zanbilItemsData[0] = new string[1][]; zanbilItemsData[0][0] = new string[2]; zanbilItemsData[0][0][0] = "«زنبیل شما خالی است»"; zanbilItemsData[0][0][1] = "-1"; i++; } //i = ziCount; zanbilItemsData[i] = new string[3][]; zanbilItemsData[i][0] = new string[2]; zanbilItemsData[i][1] = new string[2]; zanbilItemsData[i][2] = new string[2]; // دکمه افزودن کالای جدید zanbilItemsData[i][0][0] = "✏️ افزودن"; zanbilItemsData[i][0][1] = "add"; // دکمه رفرش zanbilItemsData[i][1][0] = "💥 رفرش"; zanbilItemsData[i][1][1] = "refresh"; // دکمه کانفیگ zanbilItemsData[i][2][0] = "⚙️ تنظیمات"; zanbilItemsData[i][2][1] = "config"; // ساخت کیبورد عمودی با استفاده از لیست آیتم های زنبیل InlineKeyboardMarkup zanbilContentKeyboard = KeyboardGenerator.makeKeyboard(zanbilItemsData); return(zanbilContentKeyboard); }
public override void defineNFARulePostFunctions() { nfa.addRulePostFunction(TeleZanbilStates.Start, TeleZanbilStates.Start, async(PostFunctionData pfd) => { //todo: بررسی وجود کد ورود در کامند start await bot.SendTextMessageAsync(pfd.target, "لطفاً برای شروع 🏃 از دستور زیر استفاده کنید :\n/start"); }); nfa.addRulePostFunction(TeleZanbilStates.CheckUserType, TeleZanbilStates.Start, (PostFunctionData pfd) => { string roleName = "Unauthorized"; // بررسی اینکه آیا کاربری متناظر کاربر جاری بات در دیتابیس وجود دارد یا نه؟ var userList = tzdb.Users.Where(u => u.TelegramUserID == pfd.m.Chat.Id && u.IsDeleted == false); if (userList.Count() > 0) { var user = userList.First(); // گرفتن نقش کاربر جاری (ذخیره شده در دیتابیس) roleName = user.UserRole.RoleName; currentTZSessionData.userRole = roleName; currentTZSessionData.telegramUserID = user.TelegramUserID; // ذخیره کردن اطلاعات خانواده کاربر جاری در داده های جلسه، در صورتی که شخص ورودی پدر باشد if (roleName == "Father") { int familyID = user.UserFamily.FamilyId; currentTZSessionData.family = tzdb.Families.Where(f => f.FamilyId == familyID).First(); } else if (roleName == "Normal") { int familyID = user.UserFamily.FamilyId; currentTZSessionData.family = tzdb.Families.Where(f => f.FamilyId == familyID).First(); } } // ایجاد یک عمل (اکشن) جدید با استفاده از نقش کاربر جاری actUsingCustomAction(pfd.m, roleName); }); nfa.addRulePostFunction(TeleZanbilStates.GetMainCommand, async(PostFunctionData pfd) => { InlineKeyboardMarkup mainKeyboard = KeyboardGenerator.makeKeyboard(new string[] { "ثبت خانواده 👨👩👧👧 جدید", "پیوستن به خانواده 🚶", "درباره 💡 تله زنبیل" }, 2, false); Message resultMsg = await bot.SendTextMessageAsync(pfd.target, "لطفاً انتخاب کنید", replyMarkup: mainKeyboard); saveKeyboardID(resultMsg.MessageId); }); // نمایش درباره ما nfa.addRulePostFunction(TeleZanbilStates.ShowAboutUs, async(PostFunctionData pfd) => { //await deleteAllPreKeyboards(pfd.target); await showAboutAsync(pfd); }); // پرسیدن نام خانواده nfa.addRulePostFunction(TeleZanbilStates.GetFamilyName, async(PostFunctionData pfd) => { Message resultMsg = await bot.SendTextMessageAsync(pfd.target, "لطفاً نام خانواده 👨👩👧👧 خود را وارد نمائید"); saveKeyboardID(resultMsg.MessageId); }); // ثبت خانواده nfa.addRulePostFunction(TeleZanbilStates.RegisterFamily, (PostFunctionData pfd) => { // گرفتن اسم خانواده از ورودی کاربر string familyName = pfd.action; //ثبت خانواده var family = tzdb.Families.Add(new Family() { FamilyName = familyName, InviteCode = getNewInviteCode(), IsDeleted = false }); currentTZSessionData.family = family; currentTZSessionData.userRole = "Father"; currentTZSessionData.telegramUserID = pfd.m.From.Id; tzdb.SaveChanges(); // ثبت کاربر و زنبیل اصلی مربوط به این خانواده var fatherRole = tzdb.Roles.Where(r => r.RoleName == "Father").First(); tzdb.Users.Add(new Models.User() { UserRole = fatherRole, TelegramUserID = pfd.m.Chat.Id, UserFamily = family, IsDeleted = false }); var mainZanbil = tzdb.Zanbils.Add(new Zanbil() { ZanbilName = "زنبیل اصلی خانواده " + familyName, Family = family }); tzdb.SaveChanges(); }); nfa.addRulePostFunction(TeleZanbilStates.ShowWelcomeForFather, async(PostFunctionData pfd) => { await bot.SendTextMessageAsync(pfd.target, "آقا/خانم " + pfd.m.From.FirstName + " " + pfd.m.From.LastName + (pfd.m.From.Username != "" ? " (" + pfd.m.From.Username + ")" : "") + " خوش آمدید 🌼" + "\n" + "خانواده شما با نام «" + currentTZSessionData.family.FamilyName + "» ثبت شد 👌🏻" ); await showHelpForFatherAsync(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.ShowZanbilContent, TeleZanbilStates.AcceptZanbilItem, async(PostFunctionData pfd) => { await showZanbilContentAsync(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.ShowZanbilContent, TeleZanbilStates.SaveZanbilItem, async(PostFunctionData pfd) => { await showZanbilContentAsync(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.ShowZanbilContent, TeleZanbilStates.CheckUserType, async(PostFunctionData pfd) => { await showZanbilContentAsync(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.ShowZanbilContent, TeleZanbilStates.ShowWelcomeForFather, async(PostFunctionData pfd) => { await showZanbilContentAsync(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.ShowZanbilContent, TeleZanbilStates.ShowWelcomeForNormalUsers, async(PostFunctionData pfd) => { await showZanbilContentAsync(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.ShowZanbilContent, TeleZanbilStates.RefreshZanbil, async(PostFunctionData pfd) => { await showZanbilContentAsync(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.ShowZanbilContent, TeleZanbilStates.ShowHelp, async(PostFunctionData pfd) => { await showZanbilContentAsync(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.ShowZanbilContent, TeleZanbilStates.ShowAboutA, async(PostFunctionData pfd) => { await showZanbilContentAsync(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.CheckAcceptZanbilItemPermission, (PostFunctionData pfd) => { currentTZSessionData.zanbilItemNo = Convert.ToInt32(pfd.m.Text); actUsingCustomAction(pfd.m, currentTZSessionData.userRole); }); nfa.addRulePostFunction(TeleZanbilStates.AcceptZanbilItem, TeleZanbilStates.CheckAcceptZanbilItemPermission, async(PostFunctionData pfd) => { var mainZanbil = getMainZanbil(); var zanbilItems = tzdb.ZanbilItems.Where(zi => zi.Zanbil.ZanbilId == mainZanbil.ZanbilId && zi.IsBought == false); if (currentTZSessionData.zanbilItemNo > 0 && currentTZSessionData.zanbilItemNo <= zanbilItems.Count()) { var zanbilItem = zanbilItems.ToArray()[currentTZSessionData.zanbilItemNo - 1]; zanbilItem.IsBought = true; zanbilItem.BuyDate = DateTime.Now; tzdb.SaveChanges(); await bot.SendTextMessageAsync(pfd.target, "«" + zanbilItem.ItemAmount + " " + zanbilItem.ItemUnit.Title + " " + zanbilItem.ItemTitle + "» خریداری و از لیست حذف شد 💵"); } else { await bot.SendTextMessageAsync(pfd.target, "شماره آیتم ورودی نامعتبر ⛔️ می باشد"); } }); nfa.addRulePostFunction(TeleZanbilStates.GetZanbilItemName, async(PostFunctionData pfd) => { Message resultMsg = await bot.SendTextMessageAsync(pfd.target, "لطفاً نام کالای درخواستی 🛒 را وارد نمائید"); saveKeyboardID(resultMsg.MessageId); }); nfa.addRulePostFunction(TeleZanbilStates.GetZanbilItemAmount, async(PostFunctionData pfd) => { // گرفتن اسم کالای درخواستی از مرحله قبل currentTZSessionData.zanbilItemName = pfd.action; saveKeyboardID(pfd.m.MessageId); // نمایش لیست و درخواست ورود مقدار کالای درخواستی string[] units = new string[20] { "0.9", "0.75", "نیم", "ربع", "0.1", "پنج", "چهار", "سه", "دو", "یک", "ده", "نه", "هشت", "هفت", "شش", "100", "50", "40", "30", "20" }; string[] unitsData = new string[20] { "0.9", "0.75", "0.5", "0.25", "0.1", "5", "4", "3", "2", "1", "10", "9", "8", "7", "6", "100", "50", "40", "30", "20" }; /*string[][] unitsData = new string[4][]; * unitsData[0] = new string[5] { "0.1", "0.25", "0.5", "0.75", "0.9" }; * unitsData[1] = new string[5] { "1", "2", "3", "4", "5" }; * unitsData[2] = new string[5] { "6", "7", "8", "9", "10" }; * unitsData[3] = new string[5] { "20", "30", "40", "50", "60" }; * * string[][] units = new string[4][]; * units[0] = new string[5] { "0.1", "ربع", "نیم", "0.75", "0.9" }; * units[1] = new string[5] { "یک", "دو", "سه", "چهار", "پنج" }; * units[2] = new string[5] { "6", "7", "8", "9", "10" }; * units[3] = new string[5] { "20", "30", "40", "50", "60" };*/ //InlineKeyboardMarkup numberKeyboard = KeyboardGenerator.makeNumberMatrixKeyboard(1, 9, 3); InlineKeyboardMarkup numberKeyboard = KeyboardGenerator.makeKeyboard(units, 5, false, unitsData); Message resultMsg = await bot.SendTextMessageAsync(pfd.target, "لطفاً مقدار کالای درخواستی 🛒 را انتخاب کنید یا در صورت نیاز مقدار دقیق آن را وارد نمائید", replyMarkup: numberKeyboard); saveKeyboardID(resultMsg.MessageId); }); nfa.addRulePostFunction(TeleZanbilStates.GetZanbilItemUnit, async(PostFunctionData pfd) => { // گرفتن مقدار کالای درخواستی از مرحله قبل currentTZSessionData.zanbilItemAmount = Convert.ToDouble(pfd.action.Replace(".", "/")); var unitNames = tzdb.Units.Select(u => u.Title); string[] unitNamesStr = new string[unitNames.Count()]; for (int i = 0; i < unitNames.Count(); i++) { unitNamesStr[i] = unitNames.ToArray()[i]; } //todo: کیبورد راست به چپ باشد InlineKeyboardMarkup unitsKeyboard = KeyboardGenerator.makeKeyboard(unitNamesStr, 4, false, unitNamesStr); Message resultMsg = await bot.SendTextMessageAsync(pfd.target, "لطفاً واحد کالای درخواستی 🛒 را انتخاب یا یا در صورت عدم وجود در لیست نام دقیق آن را وارد نمائید", replyMarkup: unitsKeyboard); saveKeyboardID(resultMsg.MessageId); }); nfa.addRulePostFunction(TeleZanbilStates.SaveZanbilItem, async(PostFunctionData pfd) => { // گرفتن واحد کالای درخواستی از مرحله قبل currentTZSessionData.zanbilItemUnit = pfd.action; // گرفتن زنبیل اصلی خانواده var mainZanbil = getMainZanbil(); // پیدا کردن واحد متناظر واحد ورودی var foundUnits = tzdb.Units.Where(u => u.Title == currentTZSessionData.zanbilItemUnit); Unit unit; if (foundUnits.Count() == 0) { unit = tzdb.Units.Add(new Unit() { Title = currentTZSessionData.zanbilItemUnit }); } else { unit = foundUnits.First(); } int userID = tzdb.Users.Where(u => u.TelegramUserID == currentTZSessionData.telegramUserID).First().UserId; // ثبت آیتم در زنبیل tzdb.ZanbilItems.Add(new ZanbilItem() { ItemTitle = currentTZSessionData.zanbilItemName, ItemAmount = currentTZSessionData.zanbilItemAmount, Zanbil = mainZanbil, IsBought = false, ItemUnit = unit, BuyDate = DateTime.Now, CreatorUserID = userID }); tzdb.SaveChanges(); await bot.SendTextMessageAsync(pfd.target, "«" + currentTZSessionData.zanbilItemAmount + " " + currentTZSessionData.zanbilItemUnit + " " + currentTZSessionData.zanbilItemName + "» 🛒 به زنبیل خانواده شما اضافه شد 👌"); await deleteAllPreKeyboards(pfd.target); }); nfa.addRulePostFunction(TeleZanbilStates.ShowAdminMenu, TeleZanbilStates.CheckUserType, async(PostFunctionData pfd) => { await bot.SendTextMessageAsync(pfd.target, "منوی مدیر سیستم"); }); nfa.addRulePostFunction(TeleZanbilStates.Login, async(PostFunctionData pfd) => { Message resultMsg = await bot.SendTextMessageAsync(pfd.target, "لطفاً کد ورودی خود را وارد فرمائید"); saveKeyboardID(resultMsg.MessageId); }); nfa.addRulePostFunction(TeleZanbilStates.GetInputCode, (PostFunctionData pfd) => { currentTZSessionData.inputCode = pfd.action; }); nfa.addRulePostFunction(TeleZanbilStates.CheckInputCode, async(PostFunctionData pfd) => { var families = tzdb.Families.Where(f => f.InviteCode.Equals(currentTZSessionData.inputCode) && f.IsDeleted == false); if (families.Count() == 0) { actUsingCustomAction(pfd.m, "0"); } else { var normalRole = tzdb.Roles.Where(r => r.RoleName == "Normal").First(); tzdb.Users.Add(new Models.User() { UserFamily = families.First(), TelegramUserID = pfd.m.From.Id, UserRole = normalRole, IsDeleted = false }); tzdb.SaveChanges(); currentTZSessionData.family = families.First(); currentTZSessionData.telegramUserID = pfd.m.From.Id; currentTZSessionData.userRole = "Normal"; await deleteAllPreKeyboards(pfd.target); actUsingCustomAction(pfd.m, "1"); } }); nfa.addRulePostFunction(TeleZanbilStates.ShowFalseInputCode, async(PostFunctionData pfd) => { //todo: ایجاد ساز و کار وقفه در صورت ورود سه باره کد ورود await bot.SendTextMessageAsync(pfd.target, "کد ورودی شما نامعتبر می باشد"); }); nfa.addRulePostFunction(TeleZanbilStates.ShowWelcomeForNormalUsers, async(PostFunctionData pfd) => { await bot.SendTextMessageAsync(pfd.target, "آقا/خانم " + pfd.m.From.FirstName + " " + pfd.m.From.LastName + (pfd.m.From.Username != "" ? " (" + pfd.m.From.Username + ")" : "") + " خوش آمدید 🌼" + "\n" + "شما به زنبیل خانواده «" + currentTZSessionData.family.FamilyName + "» پیوستید 👌🏻" ); await showHelpForNormalAsync(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.ShowInviteCode, async(PostFunctionData pfd) => { await showInviteCode(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.RegenerateInviteCode, async(PostFunctionData pfd) => { // ساخت کد دعوت جدید string newInviteCode = getNewInviteCode(); // ذخیره کردن کد دعوت جدید در دیتابیس tzdb.Families.Where(f => f.FamilyId == currentTZSessionData.family.FamilyId).First().InviteCode = newInviteCode; tzdb.SaveChanges(); // ذخیره کد دعوت جدید در داده های سشن فعلی currentTZSessionData.family.InviteCode = newInviteCode; // نمایش پیام کد دعوت await showInviteCode(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.Config, async(PostFunctionData pfd) => { Message resultMsg = await bot.SendTextMessageAsync(pfd.target, "................⚙️ تنظیمات ⚙️................", replyMarkup: makeConfigKeyboard()); saveKeyboardID(resultMsg.MessageId); }); nfa.addRulePostFunction(TeleZanbilStates.ShowHelp, async(PostFunctionData pfd) => { if (currentTZSessionData.userRole.Equals("Father")) { await showHelpForFatherAsync(pfd); } else { await showHelpForNormalAsync(pfd); } }); nfa.addRulePostFunction(TeleZanbilStates.ShowAboutA, async(PostFunctionData pfd) => { await showAboutAsync(pfd); }); nfa.addRulePostFunction(TeleZanbilStates.AskLogout, async(PostFunctionData pfd) => { InlineKeyboardMarkup yesNoKeyboard = KeyboardGenerator.makeYesNoKeybaord(yesTitle: "بله 🖐"); await bot.SendTextMessageAsync(pfd.target, "آیا مایل به خروج 😨 از خانواده «" + currentTZSessionData.family.FamilyName + "» می باشید؟", replyMarkup: yesNoKeyboard); }); nfa.addRulePostFunction(TeleZanbilStates.Logout, async(PostFunctionData pfd) => { if (currentTZSessionData.userRole.Equals("Father")) { tzdb.Families.Where(f => f.FamilyId == currentTZSessionData.family.FamilyId).First().IsDeleted = true; } tzdb.Users.Where(u => u.TelegramUserID == currentTZSessionData.telegramUserID).First().IsDeleted = true; tzdb.SaveChanges(); await bot.SendTextMessageAsync(pfd.target, "شما از خانواده «" + currentTZSessionData.family.FamilyName + "» خارج شدید 😱🖐"); }); //nfa.addRulePostFunction(TeleZanbilStates.GetMainCommand, (PostFunctionData pfd) => //{ //}); }