Beispiel #1
0
        public string SetDefaultCanteen(CanteenName defaultCanteen, MensaBotEntities mensaBotEntities, string channelId, string conversationId, string serviceURL)
        {
            DatabaseUtilities.CreateChatEntry(mensaBotEntities, channelId, conversationId, serviceURL);

            if (DatabaseUtilities.AddEntry(DatabaseUtilities.DefaultMensaTag, defaultCanteen.ToString(), mensaBotEntities, channelId, conversationId))
            {
                return(Lang.add_canteen);
            }
            else
            {
                return(Lang.add_canteen_failed);
            }
        }
Beispiel #2
0
        public string SetLanguage(MensaBotEntities mensaBotEntities, string language, string channelId, string conversationId)
        {
            int index = Array.IndexOf(MessageInterpreter.AvailableLanguages, language);

            if (index >= 0)
            {
                if (DatabaseUtilities.AddEntry(DatabaseUtilities.LanguageTag, language, mensaBotEntities, channelId, conversationId))
                {
                    return(Lang.add_language + ": " + language);
                }
                else
                {
                    return(Lang.add_language_failed + " :" + language);
                }
            }
            return(Lang.unknown_language);
        }
Beispiel #3
0
        public bool SendTrigger(string trigger)
        {
            MensaBotEntities mensaBotEntities = new MensaBotEntities();

            List <Chat> chats = DatabaseUtilities.GetChatTrigger(mensaBotEntities, trigger);

            if (chats == null)
            {
                return(false);
            }

            foreach (var chat in chats)
            {
                string definedLanguage = CommandBucket.Get.GetValue(mensaBotEntities, DatabaseUtilities.LanguageTag, chat.ChannelId, chat.ConversationId);

                if (definedLanguage == null)
                {
                    definedLanguage = "en";
                }

                CultureInfo.CurrentCulture   = CultureInfo.GetCultureInfo(definedLanguage);
                CultureInfo.CurrentUICulture = CultureInfo.GetCultureInfo(definedLanguage);

                string[] results = CommandBucket.Get.CreateMensaReply(Dates.today, null, mensaBotEntities, chat.ChannelId, chat.ConversationId, true);

                ConnectorClient connector2 = new ConnectorClient(new Uri(chat.ServiceURL));

                foreach (var result in results)
                {
                    connector2.Conversations.SendToConversationAsync(
                        new Activity
                    {
                        Type         = ActivityTypes.Message,
                        ChannelId    = chat.ChannelId,
                        Conversation = new ConversationAccount(id: chat.ConversationId),
                        From         = new ChannelAccount(id: "mensa_md_bot", name: "mensa_md_bot"),
                        Text         = result
                    });
                }
            }

            return(chats.Count > 0);
        }
Beispiel #4
0
        public string SetStyle(string style, MensaBotEntities mensaBotEntities, string channelId, string conversationId, string serviceURL)
        {
            FoodDisplayStyle foodDisplayStyle;

            if (FoodDisplayStyle.TryParse(style.ToUpper(), out foodDisplayStyle))
            {
                DatabaseUtilities.CreateChatEntry(mensaBotEntities, channelId, conversationId, serviceURL);
                if (DatabaseUtilities.AddEntry(DatabaseUtilities.StyleTag, foodDisplayStyle.ToString().ToLower(), mensaBotEntities, channelId, conversationId))
                {
                    return(Lang.style_update + ": " + foodDisplayStyle.ToString().ToLower());
                }
                else
                {
                    return(Lang.style_fail_to_add_database);
                }
            }
            else
            {
                return(Lang.style_not_found + ": " + style);
            }
        }
Beispiel #5
0
        public string SetTrigger(MensaBotEntities mensaBotEntities, string trigger, string channelId, string conversationId)
        {
            Regex r = new Regex("2[0-3]:[0-5][0-9]|[0-1][0-9]:[0-5][0-9]", RegexOptions.IgnoreCase);

            Match m = r.Match(trigger);

            if (!m.Success || trigger.Length != 5)
            {
                return(Lang.regex_not_matched + " " + trigger + " " + trigger.Length);
            }


            var smoothTime = SmoothTime(trigger);

            if (DatabaseUtilities.AddEntry(DatabaseUtilities.Trigger, smoothTime, mensaBotEntities, channelId, conversationId))
            {
                return(Lang.set_time_tigger + " " + smoothTime);
            }
            else
            {
                return(Lang.failed_set_trigger + " " + smoothTime);
            }
        }
Beispiel #6
0
        public string [] CreateMensaReply(string paramFirst, string paramSecond, MensaBotEntities mensaBotEntities, string channelId, string conversationId, bool forceDate)
        {
            bool isShortRequest = false;

            //check if paramFirst is date, if true -> change order
            if (!string.IsNullOrEmpty(paramFirst) && string.IsNullOrEmpty(paramSecond))
            {
                var isDate = (MessageInterpreter.Get.FindDate(paramFirst) != DateIndex.none);
                if (isDate)
                {
                    paramSecond = paramFirst;
                    paramFirst  = null;
                }
            }

            if (string.IsNullOrEmpty(paramFirst))
            {
                paramFirst = DatabaseUtilities.GetValueBytKey(mensaBotEntities, DatabaseUtilities.DefaultMensaTag, channelId, conversationId);

                if (string.IsNullOrEmpty(paramFirst))
                {
                    return new string[] { Lang.please_add + " " + MessageInterpreter.MarkBold(Lang.canteen_name) + "!" }
                }
                ;
                else
                {
                    isShortRequest = true;
                }
            }

            CanteenName canteenName = MessageInterpreter.Get.FindCanteen(paramFirst);

            if (canteenName == CanteenName.none)
            {
                return(new string[] { Lang.canteen_not_found + ": " + MessageInterpreter.MarkBold(paramFirst) });
            }

            try
            {
                if (_canteens == null)
                {
                    CreateCanteenInfo();
                }

                _canteens[(int)canteenName].LoadElements(3);
            }
            catch (Exception e)
            {
                return(new string[] { Lang.fail_to_load_information + ": " + MessageInterpreter.MarkBold(paramFirst) });
            }

            DateIndex dateIndex = DateIndex.TODAY;

            if (!string.IsNullOrEmpty(paramSecond))
            {
                dateIndex = MessageInterpreter.Get.FindDate(paramSecond);
                if (dateIndex == DateIndex.none)
                {
                    return(new string[] { Lang.date_not_found + " " + MessageInterpreter.MarkBold(paramSecond) });
                }
            }


            //Find correct date element.
            DateTime now = DateTime.Now.ToUniversalTime().AddDays((int)dateIndex).AddHours(1);

            DayElement[] dayElements = null;

            try
            {
                if (isShortRequest && !forceDate)
                {
                    int maxDays = 3;
                    for (int i = 0; i < maxDays; i++)
                    {
                        if (i == 0 && now.Hour > 16)//TODO read close time via website
                        {
                            continue;
                        }

                        dayElements = _canteens[(int)canteenName].DayElements.FindAll(t => t.Date.Day == now.AddDays(i).Day).ToArray();
                        if (dayElements != null && dayElements.Length != 0)
                        {
                            break;
                        }
                    }
                }
                else
                {
                    dayElements = _canteens[(int)canteenName].DayElements.FindAll(t => t.Date.Day == now.Day).ToArray();
                }
            }
            catch (Exception e)
            {
                dayElements = null;
            }

            if (dayElements == null || dayElements.Length == 0)
            {
                return(new string[] { MessageInterpreter.MarkBold(Lang.could_not_find_date + " " + now.ToString("dd.MM.yyyy") + Lang.broken_heart) });
            }

            IEnumerable <FoodTags> filter = null;

            try
            {
                filter =
                    CommandBucket.Get.GetValue(mensaBotEntities, DatabaseUtilities.IgnoreTags, channelId, conversationId)
                    .Split(MessageInterpreter.ParamDivider)
                    .Select(t => Enum.Parse(typeof(FoodTags), t.ToUpper()))
                    .Cast <FoodTags>();
            }
            catch (Exception e)
            {
                filter = null;
            }

            string[] menuItems = new string[dayElements.Length];

            //List all elements for dayElement
            for (int i = 0; i < dayElements.Length; i++)
            {
                menuItems[i] = Lang.menu_for + ":" + MessageInterpreter.LineBreak + MessageInterpreter.MarkBold(_canteens[(int)canteenName].GetDescription(i)) + " "
                               + Lang.menu_for_at + " " + MessageInterpreter.MarkItalic(dayElements[i].Date.ToString("dd.MM.yyyy"))
                               + MessageInterpreter.DrawLine;

                foreach (var foodElement in dayElements[i].FoodElements)
                {
                    bool hideElement = false;
                    var  tagResult   = "";
                    if (foodElement.Tags != null)
                    {
                        foreach (var tag in foodElement.Tags)
                        {
                            if (tag != null)
                            {
                                if (filter != null && filter.Contains(tag))
                                {
                                    hideElement = true;
                                    break;
                                }
                                tagResult += FoodElement.FoodTagsToEmoji(tag) + ",";
                            }
                            else
                            {
                                tagResult += "❎";
                            }
                        }
                    }
                    if (tagResult.Length > 1)
                    {
                        tagResult = tagResult.Remove(tagResult.Length - 1, 1).ToLower() + ";";
                    }

                    string warning = null;

                    if (string.IsNullOrEmpty(foodElement.EnglishName.Trim()) && CultureInfo.CurrentCulture.ToString() != (new CultureInfo("de")).ToString())
                    {
                        warning = MessageInterpreter.MarkItalic(Lang.no_english_available);
                    }

                    FoodDisplayStyle foodDisplayStyle = FoodDisplayStyle.none;
                    string           styleString      = GetValue(mensaBotEntities, DatabaseUtilities.StyleTag, channelId, conversationId);
                    if (!string.IsNullOrEmpty(styleString))
                    {
                        if (!FoodDisplayStyle.TryParse(styleString.ToUpper(), out foodDisplayStyle))
                        {
                            foodDisplayStyle = FoodDisplayStyle.none;
                        }
                    }

                    var tagsDisplay = "";
                    switch (foodDisplayStyle)
                    {
                    case FoodDisplayStyle.none:
                    case FoodDisplayStyle.MAXIMUM:
                        tagsDisplay = MessageInterpreter.LineBreak + tagResult + (!string.IsNullOrEmpty(foodElement.Cost) ? foodElement.Cost + "€" : "") + MessageInterpreter.DrawLine;
                        break;

                    case FoodDisplayStyle.MINIMUM_NOLINES:
                        tagsDisplay = MessageInterpreter.LineBreak;
                        break;

                    case FoodDisplayStyle.MINIMUM:
                        tagsDisplay = MessageInterpreter.DrawLine;
                        break;

                    case FoodDisplayStyle.INLINE:
                        tagsDisplay = " " + ((tagResult.Length > 1) ? tagResult.Remove(tagResult.Length - 1, 1) : tagResult) + MessageInterpreter.DrawLine;
                        break;
                    }

                    if (!hideElement)
                    {
                        if (CultureInfo.CurrentCulture.ToString() == (new CultureInfo("de")).ToString() || warning != null)
                        {
                            menuItems[i] += MessageInterpreter.MarkBold(foodElement.GermanName) + warning + " " + tagsDisplay;
                        }
                        else
                        {
                            menuItems[i] += MessageInterpreter.MarkBold(MessageInterpreter.FirstCharToUpper(foodElement.EnglishName)) + " " + tagsDisplay;
                        }
                    }
                }
            }

            return(menuItems);
        }
Beispiel #7
0
        public string SetDefaults(string activityMessage, MensaBotEntities mensaBotEntities, string channelId, string conversationId, string serviceURL)
        {
            if (activityMessage.StartsWith("set help"))
            {
                var message = MessageInterpreter.MarkBold(Lang.set_help) + MessageInterpreter.DrawLine
                              + Lang.set_help_canteen + MessageInterpreter.DrawLine
                              + Lang.set_help_filter + MessageInterpreter.DrawLine
                              + Lang.set_help_style + MessageInterpreter.DrawLine
                              + Lang.set_help_trigger + MessageInterpreter.DrawLine
                              + Lang.language_help;

                return(message);
            }

            string[] setMessageParts = activityMessage.Remove(0, 1).ToLower().Split(' ');

            if (setMessageParts.Length != 3)
            {
                return(Lang.set_fail);
            }

            bool containsCommand = MessageInterpreter.Get.ContainsCommands(MessageInterType.MAIN_COMMAND, setMessageParts[1]);

            if (containsCommand)
            {
                DatabaseUtilities.CreateChatEntry(mensaBotEntities, channelId, conversationId, serviceURL);
                CanteenName canteenName = MessageInterpreter.Get.FindCanteen(setMessageParts[2]);

                if (canteenName == CanteenName.none)
                {
                    return(Lang.canteen_not_found + " " + MessageInterpreter.MarkBold(setMessageParts[2]));
                }

                return(CommandBucket.Get.SetDefaultCanteen(canteenName, mensaBotEntities, channelId, conversationId, serviceURL));
            }

            if (setMessageParts[1] == "language")
            {
                DatabaseUtilities.CreateChatEntry(mensaBotEntities, channelId, conversationId, serviceURL);

                var lang = activityMessage.Split(' ');
                if (lang.Length != 3)
                {
                    return(Lang.language_help);
                }

                return(CommandBucket.Get.SetLanguage(mensaBotEntities, lang[2], channelId, conversationId));
            }

            if (setMessageParts[1] == "trigger")
            {
                DatabaseUtilities.CreateChatEntry(mensaBotEntities, channelId, conversationId, serviceURL);

                var time = activityMessage.Split(' ');
                if (time.Length != 3)
                {
                    return(Lang.fail_so_define_trigger);
                }

                return(CommandBucket.Get.SetTrigger(mensaBotEntities, time[2], channelId, conversationId));
            }


            if ((setMessageParts[1].ToLower() == "style"))
            {
                DatabaseUtilities.CreateChatEntry(mensaBotEntities, channelId, conversationId, serviceURL);
                return(CommandBucket.Get.SetStyle(setMessageParts[2], mensaBotEntities, channelId, conversationId, serviceURL));
            }

            if ((setMessageParts[1].ToLower() == "filter"))
            {
                DatabaseUtilities.CreateChatEntry(mensaBotEntities, channelId, conversationId, serviceURL);

                var tags           = CommandBucket.Get.SetIgnoreTags(setMessageParts[2], MessageInterpreter.ParamDivider);
                var tagsAdditional = CommandBucket.Get.SetIgnoreTags(setMessageParts[2], MessageInterpreter.ParamDivider);

                if (tags != null && tagsAdditional != null)
                {
                    tags.AddRange(tagsAdditional);
                }
                if (tags == null && tagsAdditional != null)
                {
                    tags = tagsAdditional;
                }

                if (tags == null)
                {
                    return(Lang.failed_sorry + MessageInterpreter.LineBreak + Lang.add_tags_failed);
                }

                tags = tags.Distinct().ToList();

                string enumToString  = "";
                string displayString = "";
                for (int i = 0; i < tags.Count - 1; i++)
                {
                    enumToString  += tags[i].ToString().ToLower() + MessageInterpreter.ParamDivider;
                    displayString += FoodElement.FoodTagsToString(tags[i]) + MessageInterpreter.ParamDivider;
                }
                enumToString  += tags[tags.Count - 1].ToString().ToLower();
                displayString += FoodElement.FoodTagsToString(tags[tags.Count - 1]);

                if (DatabaseUtilities.AddEntry(DatabaseUtilities.IgnoreTags, enumToString, mensaBotEntities, channelId, conversationId))
                {
                    return(Lang.add_tags + " " + MessageInterpreter.MarkBold(displayString));
                }
                else
                {
                    return(Lang.add_tags_failed + MessageInterpreter.LineBreak + Lang.add_tags_failed);
                }
            }

            return(CommandBucket.Get.CreateUnknownCommand());
        }
Beispiel #8
0
        public string RemoveDefaults(string activityMessage, MensaBotEntities mensaBotEntities, string channelId, string conversationId)
        {
            if (activityMessage.StartsWith("remove mensa") || activityMessage.StartsWith("remove canteen"))
            {
                string[] msgParts = activityMessage.Split(' ');

                if (msgParts.Length != 2)
                {
                    return(Lang.wrong_param_remove_canteen);
                }

                bool containsCommand = MessageInterpreter.Get.ContainsCommands(MessageInterType.MAIN_COMMAND, msgParts[1]);

                if (containsCommand)
                {
                    return(CommandBucket.Get.CreateUnknownCommand());
                }
                else
                {
                    DatabaseUtilities.RemoveKey(mensaBotEntities, DatabaseUtilities.DefaultMensaTag, channelId, conversationId);
                    return(Lang.deleted_canteen);
                }
            }

            if (activityMessage.StartsWith("remove filter"))
            {
                string[] msgParts = activityMessage.Split(' ');

                if (msgParts.Length != 2)
                {
                    return(Lang.wrong_param_remove_filter);
                }

                DatabaseUtilities.RemoveKey(mensaBotEntities, DatabaseUtilities.IgnoreTags, channelId, conversationId);
                return(Lang.deleted_filter);
            }

            if (activityMessage.StartsWith("remove style"))
            {
                string[] msgParts = activityMessage.Split(' ');

                if (msgParts.Length != 2)
                {
                    return(Lang.wrong_param_remove_filter);
                }

                DatabaseUtilities.RemoveKey(mensaBotEntities, DatabaseUtilities.StyleTag, channelId, conversationId);
                return(Lang.deleted_filter);
            }

            if (activityMessage.StartsWith("remove trigger"))
            {
                string[] msgParts = activityMessage.Split(' ');

                if (msgParts.Length != 2)
                {
                    return(Lang.wrong_param_remove_filter);
                }

                DatabaseUtilities.RemoveKey(mensaBotEntities, DatabaseUtilities.Trigger, channelId, conversationId);
                return(Lang.deleted_filter);
            }

            if (activityMessage.StartsWith("remove help"))
            {
                var message = MessageInterpreter.MarkBold(Lang.remove_help) + MessageInterpreter.DrawLine
                              + Lang.remove_help_canteen + MessageInterpreter.DrawLine
                              + Lang.remove_help_filter + MessageInterpreter.DrawLine
                              + Lang.remove_help_trigger + MessageInterpreter.DrawLine
                              + Lang.remove_help_style + MessageInterpreter.LineBreak;

                return(message);
            }

            return(Lang.command_help_intro + " /remove help " + Lang.help_default_settings_remove);
        }
Beispiel #9
0
 public string GetValue(MensaBotEntities mensaBotEntities, string key, string channelId, string conversationId)
 {
     return(DatabaseUtilities.GetValueBytKey(mensaBotEntities, key, channelId, conversationId));
 }