func responseForMessage(message service.Message, bot models.Bot) (string, models.Action) { actions, _ := models.FetchActions(true) sort.Sort(models.ByPriority(actions)) var ( act models.Action sMatch string ) for _, a := range actions { regexString := strings.Replace(*a.Pattern, "{_botname_}", bot.BotName, -1) r, _ := regexp.Compile("(?i)" + regexString) matched := r.FindStringSubmatch(message.Text()) if len(matched) > 1 && matched[1] != "" { sMatch = matched[1] act = a break } } var ( postString string err error ) for { updateAction(&act, sMatch) if act.IsURLType() { postString, err = handleURLAction(act, bot) } else { postString = act.Content } if (err == nil && postString != "") || act.FallbackAction == nil { break } else { act, _ = models.FetchAction(*act.FallbackAction) } } return postString, act }