Beispiel #1
0
        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, "Кому вы выбираете подарок?"));
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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) =>
            //{
            //});
        }