Skip to content

Commit

Permalink
Add USER_GROUP_ADMIN_ADDED bot event
Browse files Browse the repository at this point in the history
  • Loading branch information
H1rono committed Aug 1, 2023
1 parent 63ba83a commit c02cd95
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 0 deletions.
3 changes: 3 additions & 0 deletions service/bot/event/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ const (
UserGroupMemberUpdated model.BotEventType = "USER_GROUP_MEMBER_UPDATED"
// UserGroupMemberRemoved グループメンバー削除イベント
UserGroupMemberRemoved model.BotEventType = "USER_GROUP_MEMBER_REMOVED"
// UserGroupAdminAdded グループ管理者追加イベント
UserGroupAdminAdded model.BotEventType = "USER_GROUP_ADMIN_ADDED"
)

var Types model.BotEventTypes
Expand Down Expand Up @@ -80,6 +82,7 @@ func init() {
UserGroupMemberAdded,
UserGroupMemberUpdated,
UserGroupMemberRemoved,
UserGroupAdminAdded,
} {
Types[t] = struct{}{}
}
Expand Down
28 changes: 28 additions & 0 deletions service/bot/event/payload/ev_user_group_admin_added.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package payload

import (
"github.com/gofrs/uuid"
"time"
)

// UserGroupAdminAdded USER_GROUP_ADMIN_ADDEDイベントペイロード
type UserGroupAdminAdded struct {
Base
GroupMember struct {
GroupID uuid.UUID `json:"groupId"`
UserID uuid.UUID `json:"userId"`
} `json:"groupMember"`
}

func MakeUserGroupAdminAdded(eventTime time.Time, groupID, userID uuid.UUID) *UserGroupAdminAdded {
return &UserGroupAdminAdded{
Base: MakeBase(eventTime),
GroupMember: struct {
GroupID uuid.UUID `json:"groupId"`
UserID uuid.UUID `json:"userId"`
}{
GroupID: groupID,
UserID: userID,
},
}
}
33 changes: 33 additions & 0 deletions service/bot/handler/ev_user_group_admin_added.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package handler

import (
"fmt"
"github.com/gofrs/uuid"
"time"

"github.com/leandro-lugaresi/hub"

"github.com/traPtitech/traQ/service/bot/event"
"github.com/traPtitech/traQ/service/bot/event/payload"
)

func UserGroupAdminAdded(ctx Context, datetime time.Time, _ string, fields hub.Fields) error {
groupID := fields["group_id"].(uuid.UUID)
userID := fields["user_id"].(uuid.UUID)
bots, err := ctx.GetBots(event.UserGroupAdminAdded)
if err != nil {
return fmt.Errorf("failed to GetBots: %w", err)
}
if len(bots) == 0 {
return nil
}

if err := ctx.Multicast(
event.UserGroupAdminAdded,
payload.MakeUserGroupAdminAdded(datetime, groupID, userID),
bots,
); err != nil {
return fmt.Errorf("failed to multicast: %w", err)
}
return nil
}
69 changes: 69 additions & 0 deletions service/bot/handler/ev_user_group_admin_added_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package handler

import (
"testing"
"time"

"github.com/gofrs/uuid"
"github.com/golang/mock/gomock"
"github.com/leandro-lugaresi/hub"
"github.com/stretchr/testify/assert"

intevent "github.com/traPtitech/traQ/event"
"github.com/traPtitech/traQ/model"
"github.com/traPtitech/traQ/service/bot/event"
"github.com/traPtitech/traQ/service/bot/event/payload"
"github.com/traPtitech/traQ/service/bot/handler/mock_handler"
)

func TestUserGroupAdminAdded(t *testing.T) {
t.Parallel()

b := &model.Bot{
ID: uuid.NewV3(uuid.Nil, "b"),
BotUserID: uuid.NewV3(uuid.Nil, "bu"),
SubscribeEvents: model.BotEventTypesFromArray([]string{event.UserGroupAdminAdded.String()}),
State: model.BotActive,
}

t.Run("success", func(t *testing.T) {
t.Parallel()
ctrl := gomock.NewController(t)
handlerCtx := mock_handler.NewMockContext(ctrl)
registerBot(t, handlerCtx, b)

userID := uuid.NewV3(uuid.Nil, "u")
groupID := uuid.NewV3(uuid.Nil, "g")
et := time.Now()

expectMulticast(handlerCtx, event.UserGroupAdminAdded, payload.MakeUserGroupAdminAdded(et, groupID, userID), []*model.Bot{b})
assert.NoError(t, UserGroupAdminAdded(handlerCtx, et, intevent.UserGroupAdminAdded, hub.Fields{
"group_id": groupID,
"user_id": userID,
}))
})

t.Run("not subscribe USER_GROUP_ADMIN_ADDED", func(t *testing.T) {
t.Parallel()
ctrl := gomock.NewController(t)
handlerCtx := mock_handler.NewMockContext(ctrl)
b2 := &model.Bot{
ID: uuid.NewV3(uuid.Nil, "b2"),
BotUserID: uuid.NewV3(uuid.Nil, "bu2"),
SubscribeEvents: model.BotEventTypesFromArray([]string{event.MessageCreated.String()}),
State: model.BotActive,
}
registerBot(t, handlerCtx, b)
registerBot(t, handlerCtx, b2)

userID := uuid.NewV3(uuid.Nil, "u")
groupID := uuid.NewV3(uuid.Nil, "g")
et := time.Now()

expectMulticast(handlerCtx, event.UserGroupAdminAdded, payload.MakeUserGroupAdminAdded(et, groupID, userID), []*model.Bot{b})
assert.NoError(t, UserGroupAdminAdded(handlerCtx, et, intevent.UserGroupAdminAdded, hub.Fields{
"group_id": groupID,
"user_id": userID,
}))
})
}
1 change: 1 addition & 0 deletions service/bot/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ var eventHandlerSet = map[string]eventHandler{
intevent.UserGroupMemberAdded: handler.UserGroupMemberAdded,
intevent.UserGroupMemberUpdated: handler.UserGroupMemberUpdated,
intevent.UserGroupMemberRemoved: handler.UserGroupMemberRemoved,
intevent.UserGroupAdminAdded: handler.UserGroupAdminAdded,
}

0 comments on commit c02cd95

Please sign in to comment.