Loading CHANGELOG.md +1 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr - Lua runtime tournament end hooks now contain duration, end active, and end time fields. - Lua runtime tournament reset hooks now contain duration, end active, and end time fields. - Separate configuration for maximum number of concurrent join requests to authoritative matches. - New runtime function to kick users from a group. ### Changed - Rejoining a match the user is already part of will now return the match label. Loading runtime/runtime.go +1 −0 Original line number Diff line number Diff line Loading @@ -345,6 +345,7 @@ type NakamaModule interface { GroupCreate(ctx context.Context, userID, name, creatorID, langTag, description, avatarUrl string, open bool, metadata map[string]interface{}, maxCount int) (*api.Group, error) GroupUpdate(ctx context.Context, id, name, creatorID, langTag, description, avatarUrl string, open bool, metadata map[string]interface{}, maxCount int) error GroupDelete(ctx context.Context, id string) error GroupUsersKick(ctx context.Context, groupID string, userIDs []string) error GroupUsersList(ctx context.Context, id string) ([]*api.GroupUserList_GroupUser, error) UserGroupsList(ctx context.Context, userID string) ([]*api.UserGroupList_UserGroup, error) } server/runtime_go_nakama.go +25 −0 Original line number Diff line number Diff line Loading @@ -1466,6 +1466,31 @@ func (n *RuntimeGoNakamaModule) GroupDelete(ctx context.Context, id string) erro return DeleteGroup(ctx, n.logger, n.db, groupID, uuid.Nil) } func (n *RuntimeGoNakamaModule) GroupUsersKick(ctx context.Context, groupID string, userIDs []string) error { group, err := uuid.FromString(groupID) if err != nil { return errors.New("expects group ID to be a valid identifier") } if len(userIDs) == 0 { return nil } users := make([]uuid.UUID, 0, len(userIDs)) for _, userID := range userIDs { uid, err := uuid.FromString(userID) if err != nil { return errors.New("expects each user ID to be a valid identifier") } if uid == uuid.Nil { return errors.New("cannot kick the root user") } users = append(users, uid) } return KickGroupUsers(ctx, n.logger, n.db, uuid.Nil, group, users) } func (n *RuntimeGoNakamaModule) GroupUsersList(ctx context.Context, id string) ([]*api.GroupUserList_GroupUser, error) { groupID, err := uuid.FromString(id) if err != nil { Loading server/runtime_lua_nakama.go +49 −1 Original line number Diff line number Diff line Loading @@ -4532,6 +4532,54 @@ func (n *RuntimeLuaNakamaModule) groupDelete(l *lua.LState) int { return 0 } func (n *RuntimeLuaNakamaModule) groupUsersKick(l *lua.LState) int { groupID, err := uuid.FromString(l.CheckString(1)) if err != nil { l.ArgError(1, "expects group ID to be a valid identifier") return 0 } users := l.CheckTable(2) if users == nil { l.ArgError(2, "expects user IDs to be a table") return 0 } userIDs := make([]uuid.UUID, 0, users.Len()) conversionError := false users.ForEach(func(k lua.LValue, v lua.LValue) { if v.Type() != lua.LTString { l.ArgError(2, "expects each user ID to be a string") conversionError = true return } userID, err := uuid.FromString(v.String()) if err != nil { l.ArgError(2, "expects each user ID to be a valid identifier") conversionError = true return } if userID == uuid.Nil { l.ArgError(2, "cannot kick the root user") conversionError = true return } userIDs = append(userIDs, userID) }) if conversionError { return 0 } if len(userIDs) == 0 { return 0 } if err := KickGroupUsers(l.Context(), n.logger, n.db, uuid.Nil, groupID, userIDs); err != nil { l.RaiseError("error while trying to kick users from a group: %v", err.Error()) } return 0 } func (n *RuntimeLuaNakamaModule) groupUsersList(l *lua.LState) int { groupID, err := uuid.FromString(l.CheckString(1)) if err != nil { Loading Loading
CHANGELOG.md +1 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ The format is based on [keep a changelog](http://keepachangelog.com) and this pr - Lua runtime tournament end hooks now contain duration, end active, and end time fields. - Lua runtime tournament reset hooks now contain duration, end active, and end time fields. - Separate configuration for maximum number of concurrent join requests to authoritative matches. - New runtime function to kick users from a group. ### Changed - Rejoining a match the user is already part of will now return the match label. Loading
runtime/runtime.go +1 −0 Original line number Diff line number Diff line Loading @@ -345,6 +345,7 @@ type NakamaModule interface { GroupCreate(ctx context.Context, userID, name, creatorID, langTag, description, avatarUrl string, open bool, metadata map[string]interface{}, maxCount int) (*api.Group, error) GroupUpdate(ctx context.Context, id, name, creatorID, langTag, description, avatarUrl string, open bool, metadata map[string]interface{}, maxCount int) error GroupDelete(ctx context.Context, id string) error GroupUsersKick(ctx context.Context, groupID string, userIDs []string) error GroupUsersList(ctx context.Context, id string) ([]*api.GroupUserList_GroupUser, error) UserGroupsList(ctx context.Context, userID string) ([]*api.UserGroupList_UserGroup, error) }
server/runtime_go_nakama.go +25 −0 Original line number Diff line number Diff line Loading @@ -1466,6 +1466,31 @@ func (n *RuntimeGoNakamaModule) GroupDelete(ctx context.Context, id string) erro return DeleteGroup(ctx, n.logger, n.db, groupID, uuid.Nil) } func (n *RuntimeGoNakamaModule) GroupUsersKick(ctx context.Context, groupID string, userIDs []string) error { group, err := uuid.FromString(groupID) if err != nil { return errors.New("expects group ID to be a valid identifier") } if len(userIDs) == 0 { return nil } users := make([]uuid.UUID, 0, len(userIDs)) for _, userID := range userIDs { uid, err := uuid.FromString(userID) if err != nil { return errors.New("expects each user ID to be a valid identifier") } if uid == uuid.Nil { return errors.New("cannot kick the root user") } users = append(users, uid) } return KickGroupUsers(ctx, n.logger, n.db, uuid.Nil, group, users) } func (n *RuntimeGoNakamaModule) GroupUsersList(ctx context.Context, id string) ([]*api.GroupUserList_GroupUser, error) { groupID, err := uuid.FromString(id) if err != nil { Loading
server/runtime_lua_nakama.go +49 −1 Original line number Diff line number Diff line Loading @@ -4532,6 +4532,54 @@ func (n *RuntimeLuaNakamaModule) groupDelete(l *lua.LState) int { return 0 } func (n *RuntimeLuaNakamaModule) groupUsersKick(l *lua.LState) int { groupID, err := uuid.FromString(l.CheckString(1)) if err != nil { l.ArgError(1, "expects group ID to be a valid identifier") return 0 } users := l.CheckTable(2) if users == nil { l.ArgError(2, "expects user IDs to be a table") return 0 } userIDs := make([]uuid.UUID, 0, users.Len()) conversionError := false users.ForEach(func(k lua.LValue, v lua.LValue) { if v.Type() != lua.LTString { l.ArgError(2, "expects each user ID to be a string") conversionError = true return } userID, err := uuid.FromString(v.String()) if err != nil { l.ArgError(2, "expects each user ID to be a valid identifier") conversionError = true return } if userID == uuid.Nil { l.ArgError(2, "cannot kick the root user") conversionError = true return } userIDs = append(userIDs, userID) }) if conversionError { return 0 } if len(userIDs) == 0 { return 0 } if err := KickGroupUsers(l.Context(), n.logger, n.db, uuid.Nil, groupID, userIDs); err != nil { l.RaiseError("error while trying to kick users from a group: %v", err.Error()) } return 0 } func (n *RuntimeLuaNakamaModule) groupUsersList(l *lua.LState) int { groupID, err := uuid.FromString(l.CheckString(1)) if err != nil { Loading