本文整理汇总了Golang中github.com/sarifsystems/sarif/sarif.Message.Action方法的典型用法代码示例。如果您正苦于以下问题:Golang Message.Action方法的具体用法?Golang Message.Action怎么用?Golang Message.Action使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/sarifsystems/sarif/sarif.Message
的用法示例。
在下文中一共展示了Message.Action方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Apply
func (r *MessageSchema) Apply(vars []*Var) sarif.Message {
msg := sarif.Message{}
msg.Action = r.Action
pl := make(map[string]string)
sort.Sort(sort.Reverse(byWeight(vars)))
for _, v := range vars {
switch v.Name {
case "_action":
msg.Action = v.Value
case "text":
msg.Text = v.Value
case "to":
fallthrough
case "that":
if msg.Text == "" {
msg.Text = v.Value
}
default:
if _, ok := r.Fields[v.Name]; ok {
pl[v.Name] = v.Value
}
}
}
if len(vars) > 0 {
msg.EncodePayload(&pl)
}
return msg
}
示例2: Parse
func (r *SentenceRule) Parse(s string) (sarif.Message, bool) {
msg := sarif.Message{}
match := r.Regexp.FindStringSubmatch(s)
if match == nil {
return msg, false
}
msg.Action = r.Action
p := make(map[string]string)
for i, field := range r.Regexp.SubexpNames() {
if field == "" {
continue
}
v := TrimQuotes(match[i])
if field == "text" {
msg.Text = strings.TrimSpace(msg.Text + " " + v)
continue
}
if field == "_action" {
msg.Action = strings.TrimSpace(msg.Action + "/" + v)
continue
}
p[field] = v
}
if len(p) > 0 {
msg.EncodePayload(p)
}
return msg, true
}
示例3: answer
func (cv *Conversation) answer(a *schema.Action, text string) (sarif.Message, bool) {
reply := sarif.Message{
Action: a.Reply,
Text: text,
}
if text == ".cancel" || text == "cancel" || strings.HasPrefix(text, "cancel ") {
return reply, false
}
t := a.SchemaType
if t == "ConfirmAction" || t == "DeleteAction" || t == "CancelAction" {
ctx := &natural.Context{Text: text, ExpectedReply: "affirmative"}
r, err := cv.service.Parse(ctx)
if err != nil || len(r.Intents) == 0 {
return reply, false
}
if r.Intents[0].Type == "neg" {
reply.Action = a.ReplyNegative
return reply, reply.Action != ""
}
}
if a.Payload != nil {
reply.EncodePayload(a.Payload)
}
return reply, true
}
示例4: tableToMessage
func tableToMessage(L *lua.LState, t *lua.LTable) sarif.Message {
msg := sarif.Message{}
msg.Version = tableGetString(t, "sarif")
msg.Id = tableGetString(t, "id")
msg.Action = tableGetString(t, "action")
msg.Source = tableGetString(t, "src")
msg.Destination = tableGetString(t, "dest")
msg.CorrId = tableGetString(t, "corr")
msg.Text = tableGetString(t, "text")
p := luareflect.DecodeToBasic(t.RawGetH(lua.LString("p")))
msg.EncodePayload(p)
return msg
}
示例5: InventMessageForMeaning
func (p *Parser) InventMessageForMeaning(action string, m *Meaning) (sarif.Message, error) {
msg := sarif.Message{}
if action != "" {
msg.Action += "/" + action
}
if m.Subject != "" {
msg.Action += "/" + m.Subject
}
if m.Predicate != "" {
msg.Action += "/" + m.Predicate
}
if m.Object != "" {
msg.Action += "/" + m.Object
}
msg.Action = strings.Trim(msg.Action, "/")
pl := make(map[string]string)
for _, v := range m.Vars {
pl[v.Name] = v.Value
}
msg.EncodePayload(pl)
return msg, nil
}
示例6: handleRestPublish
func (s *Server) handleRestPublish(w http.ResponseWriter, req *http.Request) {
defer req.Body.Close()
s.Client.Log("debug", "new REST request: "+req.URL.Path)
// Parse form values.
if err := req.ParseForm(); err != nil {
s.Client.Log("warn", "REST bad request: "+err.Error())
w.WriteHeader(400)
fmt.Fprintln(w, "Bad request:", err)
return
}
// Check authentication.
name := s.checkAuthentication(req)
if name == "" {
w.WriteHeader(401)
fmt.Fprintln(w, "Not authorized")
s.Client.Log("info", "authentication failed for "+req.RemoteAddr)
return
}
s.Client.Log("info", "authenticated "+req.RemoteAddr+" for "+name)
client := s.getApiClientByName(name)
// Create message from form values.
msg := sarif.Message{
Id: sarif.GenerateId(),
Source: name,
}
if strings.HasPrefix(req.URL.Path, REST_URL) {
msg.Action = strings.TrimPrefix(req.URL.Path, REST_URL)
}
pl := make(map[string]interface{})
for k, v := range req.Form {
if k == "authtoken" {
continue
}
if k == "_device" {
msg.Destination = v[0]
} else if k == "text" {
msg.Text = strings.Join(v, "\n")
} else if len(v) == 1 {
pl[k] = parseValue(v[0])
} else if k == "_device" {
pl[k] = v
}
}
_ = msg.EncodePayload(pl)
if !s.clientIsAllowed(name, msg) {
w.WriteHeader(401)
fmt.Fprintf(w, "'%s' is not authorized to publish '%s'", name, msg.Action)
s.Client.Log("warn", "REST '"+name+"' is not authorized to publish on "+msg.Action)
return
}
// Publish message.
if err := client.Publish(msg); err != nil {
s.Client.Log("warn", "REST bad request: "+err.Error())
w.WriteHeader(400)
fmt.Fprintln(w, "Bad Request:", err)
return
}
w.Write([]byte(msg.Id))
}
示例7: ParseSimple
func ParseSimple(text string) (sarif.Message, bool) {
msg := sarif.Message{}
// Raw JSON message
if strings.HasPrefix(text, "{") {
if err := json.Unmarshal([]byte(text), &msg); err == nil {
return msg, true
}
}
if strings.HasPrefix(text, "sarif://") {
if msg, err := sarif.ConvertURL(text); err == nil {
return msg, true
}
}
if strings.HasPrefix(text, ".") || strings.HasPrefix(text, "/") {
text = strings.TrimLeft(text, "./ ")
parts, _ := SplitQuoted(text, " ")
if parts[0] == "" {
return msg, false
}
msg.Action = parts[0]
msg.Text = ""
payload := make(map[string]interface{}, 0)
for _, part := range parts[1:] {
keyval, _ := SplitQuoted(part, "=")
if len(keyval) == 1 {
if msg.Text != "" {
msg.Text += " "
}
msg.Text += TrimQuotes(keyval[0])
continue
}
k := TrimQuotes(keyval[0])
vtext := strings.Join(keyval[1:], "=")
quoted := strings.ContainsAny(vtext, "\"`")
vtext = TrimQuotes(vtext)
var v interface{} = vtext
if !quoted {
v = ParseValue(vtext)
}
switch k {
case "text":
msg.Text = vtext
case "device":
fallthrough
case "destination":
msg.Destination = vtext
default:
payload[k] = v
}
}
if len(payload) > 0 {
msg.EncodePayload(payload)
}
return msg, true
}
return msg, false
}