Example #1
0
        static async Task Senario <T>(T bot, BotUserIdentifier user, string msg, UserDBModel userdb, Dictionary <string, string> option, HashSet <string> filter) where T : BotModel
        {
            switch (option["Senario"])
            {
            case "start01":
                if (msg == "1")
                {
                    var builder = new StringBuilder();
                    builder.Append("인하대 알림봇에 정상적으로 등록되었습니다!\r\n");
                    builder.Append("'/help'를 통해 사용가능한 명령어를 확인해보세요!\r\n");
                    option["IsSenario"] = "0";
                    userdb.Option       = JsonConvert.SerializeObject(option);
                    BotManager.Instance.UserDB.Update(userdb);
                    await bot.SendMessage(user, builder.ToString());
                }
                else if (msg == "2")
                {
                    var builder = new StringBuilder();
                    builder.Append("알림을 받고자하는 모든 학과를 쉼표로 구분하여 입력해주세요!\r\n");
                    builder.Append("(ex: 컴공,의디,경제학과)\r\n");
                    option["Senario"] = "start02";
                    userdb.Option     = JsonConvert.SerializeObject(option);
                    BotManager.Instance.UserDB.Update(userdb);
                    await bot.SendMessage(user, builder.ToString());
                }
                else
                {
                    await bot.SendMessage(user, "옳바른 옵션이 아닙니다! 다시입력해주세요!");
                }
                break;

            case "start02":
            {
                var items = msg.Split(",").Select(x => x.Trim()).Where(x => x != "");

                // First, Check complete matches
                var success = new List <string>();
                var fail    = new List <string>();

                foreach (var item in items)
                {
                    if (DepartmentList.OtherReference.ContainsKey(item))
                    {
                        success.Add(DepartmentList.OtherReference[item]);
                    }
                    else
                    {
                        fail.Add(item);
                    }
                }

                // Second, Check similar matches
                foreach (var item in fail)
                {
                    var candidate = new List <(string, int)>();
                    var kor2eng   = string.Join("", item.Select(x => DepartmentList.hangul_disassembly(x)));
                    foreach (var xx in DepartmentList.KorEngReference)
                    {
                        candidate.Add((xx.Item1, Strings.ComputeLevenshteinDistance(kor2eng, xx.Item2)));
                    }
                    candidate.Sort((x, y) => x.Item2.CompareTo(y.Item2));
                    success.Add(candidate[0].Item1);
                }

                var builder = new StringBuilder();
                builder.Append("선택한 학과가 맞는지 확인해주세요!\r\n");
                builder.Append("\r\n");
                builder.Append("[입력받은 학과]\r\n");
                success.ForEach(dept => builder.Append($"{DepartmentList.InverseReference[dept]} - {DepartmentList.ClassReference[dept]} ({dept.ToUpper()})\r\n"));
                userdb.Filtering = string.Join(",", success);
                builder.Append("\r\n");
                builder.Append("선택한 학과가 맞다면 '1', 다시 입력하려면 '2', 모든 학과리스트를 보려면 '3'을 입력해주세요!\r\n");
                option["Senario"] = "start03";
                userdb.Option     = JsonConvert.SerializeObject(option);
                BotManager.Instance.UserDB.Update(userdb);
                await bot.SendMessage(user, builder.ToString());
            }
            break;

            case "start03":

                if (msg == "1")
                {
                    var builder = new StringBuilder();
                    builder.Append("인하대 알림봇에 정상적으로 등록되었습니다!\r\n");
                    builder.Append("'/help'를 통해 사용가능한 명령어를 확인해보세요!\r\n");
                    option["IsSenario"] = "0";
                    userdb.Option       = JsonConvert.SerializeObject(option);
                    BotManager.Instance.UserDB.Update(userdb);
                    await bot.SendMessage(user, builder.ToString());
                }
                else if (msg == "2")
                {
                    var builder = new StringBuilder();
                    builder.Append("알림을 받고자하는 모든 학과를 쉼표로 구분하여 입력해주세요!\r\n");
                    builder.Append("(ex: 컴공,의디,경제학과)\r\n");
                    option["Senario"] = "start02";
                    userdb.Option     = JsonConvert.SerializeObject(option);
                    BotManager.Instance.UserDB.Update(userdb);
                    await bot.SendMessage(user, builder.ToString());
                }
                else if (msg == "3")
                {
                    var builder = new StringBuilder();
                    builder.Append("[모든 학과 리스트]\r\n");
                    DepartmentList.ClassDepartmentReference.ForEach(x =>
                    {
                        builder.Append($"[{x.Key}]\r\n");
                        x.Value.ForEach(y => builder.Append($"{y.Item2} ({y.Item1.ToUpper()})\r\n"));
                        builder.Append($"\r\n");
                    });
                    builder.Append("누락된 학과나 이름이 바뀐 학과가 있다면 채널관리자에게 문의해주세요!\r\n");
                    await bot.SendMessage(user, builder.ToString());
                }
                else
                {
                    await bot.SendMessage(user, "옳바른 입력이 아닙니다! 다시입력해주세요!");
                }
                break;
            }
        }