Skip to content
This repository has been archived by the owner on Mar 8, 2023. It is now read-only.

Commit

Permalink
feat: tag trigger
Browse files Browse the repository at this point in the history
  • Loading branch information
sysatom committed Mar 18, 2021
1 parent 3ac6137 commit f19c4f6
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 1 deletion.
19 changes: 19 additions & 0 deletions internal/app/message/trigger/email.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package trigger

import "fmt"

type Email struct{
text string
}

func NewEmail() *Email {
return &Email{}
}

func (t *Email) Cond(text string) bool {
return true
}

func (t *Email) Handle() {
fmt.Println("Email handle")
}
38 changes: 38 additions & 0 deletions internal/app/message/trigger/tag.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package trigger

import (
"github.com/tsundata/assistant/internal/app/message/trigger/tags"
"regexp"
)

type Tag struct {
text string
t []tags.Tagger
}

func NewTag() *Tag {
return &Tag{}
}

func (t *Tag) Cond(text string) bool {
re := regexp.MustCompile(`(?m)#(\w+)(\s+)?`)
ts := re.FindAllString(text, -1)

if len(ts) > 0 {
for _, item := range ts {
mt := tags.MapTagger(item)
if mt != nil {
t.t = append(t.t, mt)
}
}
return true
}

return false
}

func (t *Tag) Handle() {
for _, item := range t.t {
item.Handle(t.text)
}
}
11 changes: 11 additions & 0 deletions internal/app/message/trigger/tags/issue.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package tags

type Issue struct {}

func NewIssue() *Issue {
return &Issue{}
}

func (t *Issue) Handle(text string) {
panic("implement me")
}
16 changes: 16 additions & 0 deletions internal/app/message/trigger/tags/tag.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package tags

type Tagger interface {
Handle(text string)
}

func MapTagger(text string) Tagger {
m := map[string]Tagger{
"issue": NewIssue(),
"todo": NewTodo(),
}
if t, ok := m[text]; ok {
return t
}
return nil
}
11 changes: 11 additions & 0 deletions internal/app/message/trigger/tags/todo.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package tags

type Todo struct {}

func NewTodo() *Todo {
return &Todo{}
}

func (t *Todo) Handle(text string) {
panic("implement me")
}
3 changes: 3 additions & 0 deletions internal/app/message/trigger/trigger.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,8 @@ type Trigger interface {
func Triggers() []Trigger {
return []Trigger{
NewUrl(),
NewEmail(),
NewTag(),
NewUser(),
}
}
4 changes: 3 additions & 1 deletion internal/app/message/trigger/url.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package trigger

import "fmt"

type Url struct{}
type Url struct{
text string
}

func NewUrl() *Url {
return &Url{}
Expand Down
19 changes: 19 additions & 0 deletions internal/app/message/trigger/user.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package trigger

import "fmt"

type User struct {
text string
}

func NewUser() *User {
return &User{}
}

func (t *User) Cond(text string) bool {
return true
}

func (t *User) Handle() {
fmt.Println("User handle")
}

0 comments on commit f19c4f6

Please sign in to comment.