diff --git a/examples/real_time_updates/main.go b/examples/real_time_updates/main.go index 7a19476..1f19d55 100644 --- a/examples/real_time_updates/main.go +++ b/examples/real_time_updates/main.go @@ -69,7 +69,7 @@ func (h Handler) HandleError(e error) { } func (h Handler) HandleTextMessage(msg groupme.Message) { - fmt.Println(msg.Text, msg.Name) + fmt.Println(msg.Text, msg.Name, msg.Attachments) } func (h Handler) HandleJoin(group groupme.ID) { @@ -113,3 +113,12 @@ func (h Handler) HandleNewAvatarInGroup(group groupme.ID, user groupme.ID, avata } fmt.Printf("In group %s, user %s has new avatar with url %s\n", group.String(), user.String(), avatarURL) } + +func (h Handler) HandleMembers(group groupme.ID, members []groupme.Member, added bool) { + action := "removed" + if added { + action = "added" + } + + fmt.Printf("In group %s, users %v %s\n", group.String(), members, action) +} diff --git a/go.mod b/go.mod index 0b14a9c..90a6972 100755 --- a/go.mod +++ b/go.mod @@ -7,6 +7,6 @@ go 1.15 require ( github.com/google/uuid v1.2.0 github.com/gorilla/mux v1.8.0 - github.com/karmanyaahm/wray v0.0.0-20160519030252-f36984f6648c + github.com/karmanyaahm/wray v0.0.0-20210303233435-756d58657c14 github.com/stretchr/testify v1.7.0 ) diff --git a/go.sum b/go.sum index a909b99..9fb9a40 100755 --- a/go.sum +++ b/go.sum @@ -9,6 +9,10 @@ github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/karmanyaahm/wray v0.0.0-20160519030252-f36984f6648c h1:K6LcMJIgTvSTgi77TUeD7qx7Vq5lEYRKTYSTp5WPMH4= +github.com/karmanyaahm/wray v0.0.0-20160519030252-f36984f6648c/go.mod h1:LqTl7/Bd5gKDCT0UI3kbfgjCcr1caZHsNk0PZ7bZid8= +github.com/karmanyaahm/wray v0.0.0-20210303233435-756d58657c14 h1:NrATjZKvkY+ojL8FXTWa3fQ+wihFrAxLNE6T+wOkIcY= +github.com/karmanyaahm/wray v0.0.0-20210303233435-756d58657c14/go.mod h1:ysD86MIEevmAkdfdg5s6Qt3I07RN6fvMAyna7jCGG2o= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= diff --git a/real_time.go b/real_time.go index 3062d4e..a14b270 100644 --- a/real_time.go +++ b/real_time.go @@ -77,6 +77,9 @@ type HandleGroupMetadata interface { type HandleGroupMembership interface { HandleNewNickname(group ID, user ID, newName string) HandleNewAvatarInGroup(group ID, user ID, avatarURL string) + + //HandleNewMembers returns only partial member with id and nickname; added is false if removing + HandleMembers(group ID, members []Member, added bool) } //PushSubscription manages real time subscription @@ -133,7 +136,10 @@ func (r *PushSubscription) StartListening(context context.Context) { channel := msg.Channel() if strings.HasPrefix(channel, groupChannel) || strings.HasPrefix(channel, dmChannel) { - r.chatEvent(contentType, content) + c := content.(map[string]interface{})["line"] + d, _ := json.Marshal(c) + r.chatEvent(contentType, d) + continue } switch contentType { @@ -190,25 +196,19 @@ func (r *PushSubscription) StartListening(context context.Context) { }() } -func (r *PushSubscription) chatEvent(contentType string, content interface{}) { +func (r *PushSubscription) chatEvent(contentType string, b []byte) { switch contentType { case "favorite": - b, ok := content.(map[string]interface{})["line"].(Message) - - if !ok { - log.Println(content) - } - + data := Message{} + _ = json.Unmarshal(b, &data) for _, h := range r.handlers { if h, ok := h.(HandlerLike); ok { - h.HandleLike(b.UserID, b.FavoritedBy) + h.HandleLike(data.ID, data.FavoritedBy) } } break default: //TODO: see if any other types are returned - println("HEHE") log.Println(contentType) - b, _ := json.Marshal(content) log.Fatalln(string(b)) } @@ -248,6 +248,31 @@ func (r *PushSubscription) systemEvent(groupID ID, msg systemMessage) { } } break + case "membership.announce.added": + data := struct { + Added []Member `json:"added_users"` + }{} + _ = json.Unmarshal(b, &data) + for _, h := range r.handlers { + if h, ok := h.(HandleGroupMembership); ok { + h.HandleMembers(groupID, data.Added, true) + } + } + break + case "membership.notifications.removed": + data := struct { + Added Member `json:"removed_user"` + }{} + _ = json.Unmarshal(b, &data) + for _, h := range r.handlers { + if h, ok := h.(HandleGroupMembership); ok { + h.HandleMembers(groupID, []Member{data.Added}, false) + } + } + break + case "group.role_change_admin": + //TODO + break case "group.name_change": data := struct { Name string @@ -307,6 +332,12 @@ func (r *PushSubscription) systemEvent(groupID ID, msg systemMessage) { } } break + case "group.type_change", "group.required_approval_enabled", "group.required_approval_disabled": + //TODO: group joining + break + case "group.shared", "group.unshared": + //TODO + break default: log.Println(kind) log.Fatalln(string(b))