房间排行榜修改

This commit is contained in:
zhx 2026-05-26 17:30:26 +08:00
parent 08f7879a06
commit b10f3e120b
15 changed files with 1046 additions and 208 deletions

View File

@ -6531,6 +6531,75 @@ func (x *ListRoomFeedsRequest) GetRelatedUsers() []*RoomFeedRelatedUser {
return nil
}
// ListRoomGiftLeaderboardRequest 查询当前 UTC 周期内的房间金币消耗榜。
type ListRoomGiftLeaderboardRequest struct {
state protoimpl.MessageState `protogen:"open.v1"`
Meta *RequestMeta `protobuf:"bytes,1,opt,name=meta,proto3" json:"meta,omitempty"`
Period string `protobuf:"bytes,2,opt,name=period,proto3" json:"period,omitempty"`
Page int32 `protobuf:"varint,3,opt,name=page,proto3" json:"page,omitempty"`
PageSize int32 `protobuf:"varint,4,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ListRoomGiftLeaderboardRequest) Reset() {
*x = ListRoomGiftLeaderboardRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[88]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ListRoomGiftLeaderboardRequest) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListRoomGiftLeaderboardRequest) ProtoMessage() {}
func (x *ListRoomGiftLeaderboardRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[88]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListRoomGiftLeaderboardRequest.ProtoReflect.Descriptor instead.
func (*ListRoomGiftLeaderboardRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{88}
}
func (x *ListRoomGiftLeaderboardRequest) GetMeta() *RequestMeta {
if x != nil {
return x.Meta
}
return nil
}
func (x *ListRoomGiftLeaderboardRequest) GetPeriod() string {
if x != nil {
return x.Period
}
return ""
}
func (x *ListRoomGiftLeaderboardRequest) GetPage() int32 {
if x != nil {
return x.Page
}
return 0
}
func (x *ListRoomGiftLeaderboardRequest) GetPageSize() int32 {
if x != nil {
return x.PageSize
}
return 0
}
// RoomFeedRelatedUser 是 Mine 关系房间流的排序输入,不让 room-service 持有好友/关注事实。
type RoomFeedRelatedUser struct {
state protoimpl.MessageState `protogen:"open.v1"`
@ -6542,7 +6611,7 @@ type RoomFeedRelatedUser struct {
func (x *RoomFeedRelatedUser) Reset() {
*x = RoomFeedRelatedUser{}
mi := &file_proto_room_v1_room_proto_msgTypes[88]
mi := &file_proto_room_v1_room_proto_msgTypes[89]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -6554,7 +6623,7 @@ func (x *RoomFeedRelatedUser) String() string {
func (*RoomFeedRelatedUser) ProtoMessage() {}
func (x *RoomFeedRelatedUser) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[88]
mi := &file_proto_room_v1_room_proto_msgTypes[89]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -6567,7 +6636,7 @@ func (x *RoomFeedRelatedUser) ProtoReflect() protoreflect.Message {
// Deprecated: Use RoomFeedRelatedUser.ProtoReflect.Descriptor instead.
func (*RoomFeedRelatedUser) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{88}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{89}
}
func (x *RoomFeedRelatedUser) GetUserId() int64 {
@ -6607,7 +6676,7 @@ type RoomListItem struct {
func (x *RoomListItem) Reset() {
*x = RoomListItem{}
mi := &file_proto_room_v1_room_proto_msgTypes[89]
mi := &file_proto_room_v1_room_proto_msgTypes[90]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -6619,7 +6688,7 @@ func (x *RoomListItem) String() string {
func (*RoomListItem) ProtoMessage() {}
func (x *RoomListItem) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[89]
mi := &file_proto_room_v1_room_proto_msgTypes[90]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -6632,7 +6701,7 @@ func (x *RoomListItem) ProtoReflect() protoreflect.Message {
// Deprecated: Use RoomListItem.ProtoReflect.Descriptor instead.
func (*RoomListItem) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{89}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{90}
}
func (x *RoomListItem) GetRoomId() string {
@ -6744,7 +6813,7 @@ type ListRoomsResponse struct {
func (x *ListRoomsResponse) Reset() {
*x = ListRoomsResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[90]
mi := &file_proto_room_v1_room_proto_msgTypes[91]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -6756,7 +6825,7 @@ func (x *ListRoomsResponse) String() string {
func (*ListRoomsResponse) ProtoMessage() {}
func (x *ListRoomsResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[90]
mi := &file_proto_room_v1_room_proto_msgTypes[91]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -6769,7 +6838,7 @@ func (x *ListRoomsResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListRoomsResponse.ProtoReflect.Descriptor instead.
func (*ListRoomsResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{90}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{91}
}
func (x *ListRoomsResponse) GetRooms() []*RoomListItem {
@ -6786,6 +6855,160 @@ func (x *ListRoomsResponse) GetNextCursor() string {
return ""
}
// RoomGiftLeaderboardItem 是跨房间金币消耗榜卡片score 只表达该周期房间礼物金币消耗。
type RoomGiftLeaderboardItem struct {
state protoimpl.MessageState `protogen:"open.v1"`
Rank int64 `protobuf:"varint,1,opt,name=rank,proto3" json:"rank,omitempty"`
RoomId string `protobuf:"bytes,2,opt,name=room_id,json=roomId,proto3" json:"room_id,omitempty"`
CoinSpent int64 `protobuf:"varint,3,opt,name=coin_spent,json=coinSpent,proto3" json:"coin_spent,omitempty"`
Room *RoomListItem `protobuf:"bytes,4,opt,name=room,proto3" json:"room,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *RoomGiftLeaderboardItem) Reset() {
*x = RoomGiftLeaderboardItem{}
mi := &file_proto_room_v1_room_proto_msgTypes[92]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *RoomGiftLeaderboardItem) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*RoomGiftLeaderboardItem) ProtoMessage() {}
func (x *RoomGiftLeaderboardItem) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[92]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use RoomGiftLeaderboardItem.ProtoReflect.Descriptor instead.
func (*RoomGiftLeaderboardItem) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{92}
}
func (x *RoomGiftLeaderboardItem) GetRank() int64 {
if x != nil {
return x.Rank
}
return 0
}
func (x *RoomGiftLeaderboardItem) GetRoomId() string {
if x != nil {
return x.RoomId
}
return ""
}
func (x *RoomGiftLeaderboardItem) GetCoinSpent() int64 {
if x != nil {
return x.CoinSpent
}
return 0
}
func (x *RoomGiftLeaderboardItem) GetRoom() *RoomListItem {
if x != nil {
return x.Room
}
return nil
}
// ListRoomGiftLeaderboardResponse 返回当前 UTC 周期房间金币榜。
type ListRoomGiftLeaderboardResponse struct {
state protoimpl.MessageState `protogen:"open.v1"`
Items []*RoomGiftLeaderboardItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"`
Total int64 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"`
Period string `protobuf:"bytes,3,opt,name=period,proto3" json:"period,omitempty"`
StartAtMs int64 `protobuf:"varint,4,opt,name=start_at_ms,json=startAtMs,proto3" json:"start_at_ms,omitempty"`
EndAtMs int64 `protobuf:"varint,5,opt,name=end_at_ms,json=endAtMs,proto3" json:"end_at_ms,omitempty"`
ServerTimeMs int64 `protobuf:"varint,6,opt,name=server_time_ms,json=serverTimeMs,proto3" json:"server_time_ms,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ListRoomGiftLeaderboardResponse) Reset() {
*x = ListRoomGiftLeaderboardResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[93]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ListRoomGiftLeaderboardResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListRoomGiftLeaderboardResponse) ProtoMessage() {}
func (x *ListRoomGiftLeaderboardResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[93]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ListRoomGiftLeaderboardResponse.ProtoReflect.Descriptor instead.
func (*ListRoomGiftLeaderboardResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{93}
}
func (x *ListRoomGiftLeaderboardResponse) GetItems() []*RoomGiftLeaderboardItem {
if x != nil {
return x.Items
}
return nil
}
func (x *ListRoomGiftLeaderboardResponse) GetTotal() int64 {
if x != nil {
return x.Total
}
return 0
}
func (x *ListRoomGiftLeaderboardResponse) GetPeriod() string {
if x != nil {
return x.Period
}
return ""
}
func (x *ListRoomGiftLeaderboardResponse) GetStartAtMs() int64 {
if x != nil {
return x.StartAtMs
}
return 0
}
func (x *ListRoomGiftLeaderboardResponse) GetEndAtMs() int64 {
if x != nil {
return x.EndAtMs
}
return 0
}
func (x *ListRoomGiftLeaderboardResponse) GetServerTimeMs() int64 {
if x != nil {
return x.ServerTimeMs
}
return 0
}
// GetMyRoomRequest 查询当前用户自己创建的房间。
// 该查询必须由 gateway 写入鉴权后的 owner_user_id不能从客户端接收用户 ID。
type GetMyRoomRequest struct {
@ -6798,7 +7021,7 @@ type GetMyRoomRequest struct {
func (x *GetMyRoomRequest) Reset() {
*x = GetMyRoomRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[91]
mi := &file_proto_room_v1_room_proto_msgTypes[94]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -6810,7 +7033,7 @@ func (x *GetMyRoomRequest) String() string {
func (*GetMyRoomRequest) ProtoMessage() {}
func (x *GetMyRoomRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[91]
mi := &file_proto_room_v1_room_proto_msgTypes[94]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -6823,7 +7046,7 @@ func (x *GetMyRoomRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetMyRoomRequest.ProtoReflect.Descriptor instead.
func (*GetMyRoomRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{91}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{94}
}
func (x *GetMyRoomRequest) GetMeta() *RequestMeta {
@ -6853,7 +7076,7 @@ type GetMyRoomResponse struct {
func (x *GetMyRoomResponse) Reset() {
*x = GetMyRoomResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[92]
mi := &file_proto_room_v1_room_proto_msgTypes[95]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -6865,7 +7088,7 @@ func (x *GetMyRoomResponse) String() string {
func (*GetMyRoomResponse) ProtoMessage() {}
func (x *GetMyRoomResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[92]
mi := &file_proto_room_v1_room_proto_msgTypes[95]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -6878,7 +7101,7 @@ func (x *GetMyRoomResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetMyRoomResponse.ProtoReflect.Descriptor instead.
func (*GetMyRoomResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{92}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{95}
}
func (x *GetMyRoomResponse) GetHasRoom() bool {
@ -6914,7 +7137,7 @@ type GetCurrentRoomRequest struct {
func (x *GetCurrentRoomRequest) Reset() {
*x = GetCurrentRoomRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[93]
mi := &file_proto_room_v1_room_proto_msgTypes[96]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -6926,7 +7149,7 @@ func (x *GetCurrentRoomRequest) String() string {
func (*GetCurrentRoomRequest) ProtoMessage() {}
func (x *GetCurrentRoomRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[93]
mi := &file_proto_room_v1_room_proto_msgTypes[96]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -6939,7 +7162,7 @@ func (x *GetCurrentRoomRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCurrentRoomRequest.ProtoReflect.Descriptor instead.
func (*GetCurrentRoomRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{93}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{96}
}
func (x *GetCurrentRoomRequest) GetMeta() *RequestMeta {
@ -6975,7 +7198,7 @@ type GetCurrentRoomResponse struct {
func (x *GetCurrentRoomResponse) Reset() {
*x = GetCurrentRoomResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[94]
mi := &file_proto_room_v1_room_proto_msgTypes[97]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -6987,7 +7210,7 @@ func (x *GetCurrentRoomResponse) String() string {
func (*GetCurrentRoomResponse) ProtoMessage() {}
func (x *GetCurrentRoomResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[94]
mi := &file_proto_room_v1_room_proto_msgTypes[97]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -7000,7 +7223,7 @@ func (x *GetCurrentRoomResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetCurrentRoomResponse.ProtoReflect.Descriptor instead.
func (*GetCurrentRoomResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{94}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{97}
}
func (x *GetCurrentRoomResponse) GetHasCurrentRoom() bool {
@ -7079,7 +7302,7 @@ type GetRoomSnapshotRequest struct {
func (x *GetRoomSnapshotRequest) Reset() {
*x = GetRoomSnapshotRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[95]
mi := &file_proto_room_v1_room_proto_msgTypes[98]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -7091,7 +7314,7 @@ func (x *GetRoomSnapshotRequest) String() string {
func (*GetRoomSnapshotRequest) ProtoMessage() {}
func (x *GetRoomSnapshotRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[95]
mi := &file_proto_room_v1_room_proto_msgTypes[98]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -7104,7 +7327,7 @@ func (x *GetRoomSnapshotRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetRoomSnapshotRequest.ProtoReflect.Descriptor instead.
func (*GetRoomSnapshotRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{95}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{98}
}
func (x *GetRoomSnapshotRequest) GetMeta() *RequestMeta {
@ -7141,7 +7364,7 @@ type GetRoomSnapshotResponse struct {
func (x *GetRoomSnapshotResponse) Reset() {
*x = GetRoomSnapshotResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[96]
mi := &file_proto_room_v1_room_proto_msgTypes[99]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -7153,7 +7376,7 @@ func (x *GetRoomSnapshotResponse) String() string {
func (*GetRoomSnapshotResponse) ProtoMessage() {}
func (x *GetRoomSnapshotResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[96]
mi := &file_proto_room_v1_room_proto_msgTypes[99]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -7166,7 +7389,7 @@ func (x *GetRoomSnapshotResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetRoomSnapshotResponse.ProtoReflect.Descriptor instead.
func (*GetRoomSnapshotResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{96}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{99}
}
func (x *GetRoomSnapshotResponse) GetRoom() *RoomSnapshot {
@ -7203,7 +7426,7 @@ type GetRoomTreasureRequest struct {
func (x *GetRoomTreasureRequest) Reset() {
*x = GetRoomTreasureRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[97]
mi := &file_proto_room_v1_room_proto_msgTypes[100]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -7215,7 +7438,7 @@ func (x *GetRoomTreasureRequest) String() string {
func (*GetRoomTreasureRequest) ProtoMessage() {}
func (x *GetRoomTreasureRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[97]
mi := &file_proto_room_v1_room_proto_msgTypes[100]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -7228,7 +7451,7 @@ func (x *GetRoomTreasureRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetRoomTreasureRequest.ProtoReflect.Descriptor instead.
func (*GetRoomTreasureRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{97}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{100}
}
func (x *GetRoomTreasureRequest) GetMeta() *RequestMeta {
@ -7262,7 +7485,7 @@ type GetRoomTreasureResponse struct {
func (x *GetRoomTreasureResponse) Reset() {
*x = GetRoomTreasureResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[98]
mi := &file_proto_room_v1_room_proto_msgTypes[101]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -7274,7 +7497,7 @@ func (x *GetRoomTreasureResponse) String() string {
func (*GetRoomTreasureResponse) ProtoMessage() {}
func (x *GetRoomTreasureResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[98]
mi := &file_proto_room_v1_room_proto_msgTypes[101]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -7287,7 +7510,7 @@ func (x *GetRoomTreasureResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use GetRoomTreasureResponse.ProtoReflect.Descriptor instead.
func (*GetRoomTreasureResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{98}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{101}
}
func (x *GetRoomTreasureResponse) GetTreasure() *RoomTreasureInfo {
@ -7318,7 +7541,7 @@ type ListRoomOnlineUsersRequest struct {
func (x *ListRoomOnlineUsersRequest) Reset() {
*x = ListRoomOnlineUsersRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[99]
mi := &file_proto_room_v1_room_proto_msgTypes[102]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -7330,7 +7553,7 @@ func (x *ListRoomOnlineUsersRequest) String() string {
func (*ListRoomOnlineUsersRequest) ProtoMessage() {}
func (x *ListRoomOnlineUsersRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[99]
mi := &file_proto_room_v1_room_proto_msgTypes[102]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -7343,7 +7566,7 @@ func (x *ListRoomOnlineUsersRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListRoomOnlineUsersRequest.ProtoReflect.Descriptor instead.
func (*ListRoomOnlineUsersRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{99}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{102}
}
func (x *ListRoomOnlineUsersRequest) GetMeta() *RequestMeta {
@ -7394,7 +7617,7 @@ type ListRoomOnlineUsersResponse struct {
func (x *ListRoomOnlineUsersResponse) Reset() {
*x = ListRoomOnlineUsersResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[100]
mi := &file_proto_room_v1_room_proto_msgTypes[103]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -7406,7 +7629,7 @@ func (x *ListRoomOnlineUsersResponse) String() string {
func (*ListRoomOnlineUsersResponse) ProtoMessage() {}
func (x *ListRoomOnlineUsersResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[100]
mi := &file_proto_room_v1_room_proto_msgTypes[103]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -7419,7 +7642,7 @@ func (x *ListRoomOnlineUsersResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use ListRoomOnlineUsersResponse.ProtoReflect.Descriptor instead.
func (*ListRoomOnlineUsersResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{100}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{103}
}
func (x *ListRoomOnlineUsersResponse) GetUsers() []*RoomUser {
@ -7470,7 +7693,7 @@ type FollowRoomRequest struct {
func (x *FollowRoomRequest) Reset() {
*x = FollowRoomRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[101]
mi := &file_proto_room_v1_room_proto_msgTypes[104]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -7482,7 +7705,7 @@ func (x *FollowRoomRequest) String() string {
func (*FollowRoomRequest) ProtoMessage() {}
func (x *FollowRoomRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[101]
mi := &file_proto_room_v1_room_proto_msgTypes[104]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -7495,7 +7718,7 @@ func (x *FollowRoomRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use FollowRoomRequest.ProtoReflect.Descriptor instead.
func (*FollowRoomRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{101}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{104}
}
func (x *FollowRoomRequest) GetMeta() *RequestMeta {
@ -7531,7 +7754,7 @@ type FollowRoomResponse struct {
func (x *FollowRoomResponse) Reset() {
*x = FollowRoomResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[102]
mi := &file_proto_room_v1_room_proto_msgTypes[105]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -7543,7 +7766,7 @@ func (x *FollowRoomResponse) String() string {
func (*FollowRoomResponse) ProtoMessage() {}
func (x *FollowRoomResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[102]
mi := &file_proto_room_v1_room_proto_msgTypes[105]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -7556,7 +7779,7 @@ func (x *FollowRoomResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use FollowRoomResponse.ProtoReflect.Descriptor instead.
func (*FollowRoomResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{102}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{105}
}
func (x *FollowRoomResponse) GetRoomId() string {
@ -7599,7 +7822,7 @@ type UnfollowRoomRequest struct {
func (x *UnfollowRoomRequest) Reset() {
*x = UnfollowRoomRequest{}
mi := &file_proto_room_v1_room_proto_msgTypes[103]
mi := &file_proto_room_v1_room_proto_msgTypes[106]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -7611,7 +7834,7 @@ func (x *UnfollowRoomRequest) String() string {
func (*UnfollowRoomRequest) ProtoMessage() {}
func (x *UnfollowRoomRequest) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[103]
mi := &file_proto_room_v1_room_proto_msgTypes[106]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -7624,7 +7847,7 @@ func (x *UnfollowRoomRequest) ProtoReflect() protoreflect.Message {
// Deprecated: Use UnfollowRoomRequest.ProtoReflect.Descriptor instead.
func (*UnfollowRoomRequest) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{103}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{106}
}
func (x *UnfollowRoomRequest) GetMeta() *RequestMeta {
@ -7659,7 +7882,7 @@ type UnfollowRoomResponse struct {
func (x *UnfollowRoomResponse) Reset() {
*x = UnfollowRoomResponse{}
mi := &file_proto_room_v1_room_proto_msgTypes[104]
mi := &file_proto_room_v1_room_proto_msgTypes[107]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@ -7671,7 +7894,7 @@ func (x *UnfollowRoomResponse) String() string {
func (*UnfollowRoomResponse) ProtoMessage() {}
func (x *UnfollowRoomResponse) ProtoReflect() protoreflect.Message {
mi := &file_proto_room_v1_room_proto_msgTypes[104]
mi := &file_proto_room_v1_room_proto_msgTypes[107]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@ -7684,7 +7907,7 @@ func (x *UnfollowRoomResponse) ProtoReflect() protoreflect.Message {
// Deprecated: Use UnfollowRoomResponse.ProtoReflect.Descriptor instead.
func (*UnfollowRoomResponse) Descriptor() ([]byte, []int) {
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{104}
return file_proto_room_v1_room_proto_rawDescGZIP(), []int{107}
}
func (x *UnfollowRoomResponse) GetRoomId() string {
@ -8259,7 +8482,12 @@ const file_proto_room_v1_room_proto_rawDesc = "" +
"\x06cursor\x18\x05 \x01(\tR\x06cursor\x12\x14\n" +
"\x05limit\x18\x06 \x01(\x05R\x05limit\x12\x14\n" +
"\x05query\x18\a \x01(\tR\x05query\x12G\n" +
"\rrelated_users\x18\b \x03(\v2\".hyapp.room.v1.RoomFeedRelatedUserR\frelatedUsers\"c\n" +
"\rrelated_users\x18\b \x03(\v2\".hyapp.room.v1.RoomFeedRelatedUserR\frelatedUsers\"\x99\x01\n" +
"\x1eListRoomGiftLeaderboardRequest\x12.\n" +
"\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\x16\n" +
"\x06period\x18\x02 \x01(\tR\x06period\x12\x12\n" +
"\x04page\x18\x03 \x01(\x05R\x04page\x12\x1b\n" +
"\tpage_size\x18\x04 \x01(\x05R\bpageSize\"c\n" +
"\x13RoomFeedRelatedUser\x12\x17\n" +
"\auser_id\x18\x01 \x01(\x03R\x06userId\x123\n" +
"\x16relation_updated_at_ms\x18\x02 \x01(\x03R\x13relationUpdatedAtMs\"\xb3\x03\n" +
@ -8283,7 +8511,20 @@ const file_proto_room_v1_room_proto_rawDesc = "" +
"\x11ListRoomsResponse\x121\n" +
"\x05rooms\x18\x01 \x03(\v2\x1b.hyapp.room.v1.RoomListItemR\x05rooms\x12\x1f\n" +
"\vnext_cursor\x18\x02 \x01(\tR\n" +
"nextCursor\"f\n" +
"nextCursor\"\x96\x01\n" +
"\x17RoomGiftLeaderboardItem\x12\x12\n" +
"\x04rank\x18\x01 \x01(\x03R\x04rank\x12\x17\n" +
"\aroom_id\x18\x02 \x01(\tR\x06roomId\x12\x1d\n" +
"\n" +
"coin_spent\x18\x03 \x01(\x03R\tcoinSpent\x12/\n" +
"\x04room\x18\x04 \x01(\v2\x1b.hyapp.room.v1.RoomListItemR\x04room\"\xef\x01\n" +
"\x1fListRoomGiftLeaderboardResponse\x12<\n" +
"\x05items\x18\x01 \x03(\v2&.hyapp.room.v1.RoomGiftLeaderboardItemR\x05items\x12\x14\n" +
"\x05total\x18\x02 \x01(\x03R\x05total\x12\x16\n" +
"\x06period\x18\x03 \x01(\tR\x06period\x12\x1e\n" +
"\vstart_at_ms\x18\x04 \x01(\x03R\tstartAtMs\x12\x1a\n" +
"\tend_at_ms\x18\x05 \x01(\x03R\aendAtMs\x12$\n" +
"\x0eserver_time_ms\x18\x06 \x01(\x03R\fserverTimeMs\"f\n" +
"\x10GetMyRoomRequest\x12.\n" +
"\x04meta\x18\x01 \x01(\v2\x1a.hyapp.room.v1.RequestMetaR\x04meta\x12\"\n" +
"\rowner_user_id\x18\x02 \x01(\x03R\vownerUserId\"\x85\x01\n" +
@ -8384,7 +8625,8 @@ const file_proto_room_v1_room_proto_rawDesc = "" +
"\fUnfollowRoom\x12\".hyapp.room.v1.UnfollowRoomRequest\x1a#.hyapp.room.v1.UnfollowRoomResponse2\xee\x01\n" +
"\x10RoomGuardService\x12o\n" +
"\x14CheckSpeakPermission\x12*.hyapp.room.v1.CheckSpeakPermissionRequest\x1a+.hyapp.room.v1.CheckSpeakPermissionResponse\x12i\n" +
"\x12VerifyRoomPresence\x12(.hyapp.room.v1.VerifyRoomPresenceRequest\x1a).hyapp.room.v1.VerifyRoomPresenceResponse2\xb6\t\n" +
"\x12VerifyRoomPresence\x12(.hyapp.room.v1.VerifyRoomPresenceRequest\x1a).hyapp.room.v1.VerifyRoomPresenceResponse2\xb0\n" +
"\n" +
"\x10RoomQueryService\x12]\n" +
"\x0eAdminListRooms\x12$.hyapp.room.v1.AdminListRoomsRequest\x1a%.hyapp.room.v1.AdminListRoomsResponse\x12W\n" +
"\fAdminGetRoom\x12\".hyapp.room.v1.AdminGetRoomRequest\x1a#.hyapp.room.v1.AdminGetRoomResponse\x12\x81\x01\n" +
@ -8392,7 +8634,8 @@ const file_proto_room_v1_room_proto_rawDesc = "" +
"\x16AdminGetRoomSeatConfig\x12,.hyapp.room.v1.AdminGetRoomSeatConfigRequest\x1a-.hyapp.room.v1.AdminGetRoomSeatConfigResponse\x12f\n" +
"\x11AdminListRoomPins\x12'.hyapp.room.v1.AdminListRoomPinsRequest\x1a(.hyapp.room.v1.AdminListRoomPinsResponse\x12N\n" +
"\tListRooms\x12\x1f.hyapp.room.v1.ListRoomsRequest\x1a .hyapp.room.v1.ListRoomsResponse\x12V\n" +
"\rListRoomFeeds\x12#.hyapp.room.v1.ListRoomFeedsRequest\x1a .hyapp.room.v1.ListRoomsResponse\x12N\n" +
"\rListRoomFeeds\x12#.hyapp.room.v1.ListRoomFeedsRequest\x1a .hyapp.room.v1.ListRoomsResponse\x12x\n" +
"\x17ListRoomGiftLeaderboard\x12-.hyapp.room.v1.ListRoomGiftLeaderboardRequest\x1a..hyapp.room.v1.ListRoomGiftLeaderboardResponse\x12N\n" +
"\tGetMyRoom\x12\x1f.hyapp.room.v1.GetMyRoomRequest\x1a .hyapp.room.v1.GetMyRoomResponse\x12]\n" +
"\x0eGetCurrentRoom\x12$.hyapp.room.v1.GetCurrentRoomRequest\x1a%.hyapp.room.v1.GetCurrentRoomResponse\x12`\n" +
"\x0fGetRoomSnapshot\x12%.hyapp.room.v1.GetRoomSnapshotRequest\x1a&.hyapp.room.v1.GetRoomSnapshotResponse\x12`\n" +
@ -8411,7 +8654,7 @@ func file_proto_room_v1_room_proto_rawDescGZIP() []byte {
return file_proto_room_v1_room_proto_rawDescData
}
var file_proto_room_v1_room_proto_msgTypes = make([]protoimpl.MessageInfo, 106)
var file_proto_room_v1_room_proto_msgTypes = make([]protoimpl.MessageInfo, 109)
var file_proto_room_v1_room_proto_goTypes = []any{
(*RequestMeta)(nil), // 0: hyapp.room.v1.RequestMeta
(*CommandResult)(nil), // 1: hyapp.room.v1.CommandResult
@ -8501,24 +8744,27 @@ var file_proto_room_v1_room_proto_goTypes = []any{
(*VerifyRoomPresenceResponse)(nil), // 85: hyapp.room.v1.VerifyRoomPresenceResponse
(*ListRoomsRequest)(nil), // 86: hyapp.room.v1.ListRoomsRequest
(*ListRoomFeedsRequest)(nil), // 87: hyapp.room.v1.ListRoomFeedsRequest
(*RoomFeedRelatedUser)(nil), // 88: hyapp.room.v1.RoomFeedRelatedUser
(*RoomListItem)(nil), // 89: hyapp.room.v1.RoomListItem
(*ListRoomsResponse)(nil), // 90: hyapp.room.v1.ListRoomsResponse
(*GetMyRoomRequest)(nil), // 91: hyapp.room.v1.GetMyRoomRequest
(*GetMyRoomResponse)(nil), // 92: hyapp.room.v1.GetMyRoomResponse
(*GetCurrentRoomRequest)(nil), // 93: hyapp.room.v1.GetCurrentRoomRequest
(*GetCurrentRoomResponse)(nil), // 94: hyapp.room.v1.GetCurrentRoomResponse
(*GetRoomSnapshotRequest)(nil), // 95: hyapp.room.v1.GetRoomSnapshotRequest
(*GetRoomSnapshotResponse)(nil), // 96: hyapp.room.v1.GetRoomSnapshotResponse
(*GetRoomTreasureRequest)(nil), // 97: hyapp.room.v1.GetRoomTreasureRequest
(*GetRoomTreasureResponse)(nil), // 98: hyapp.room.v1.GetRoomTreasureResponse
(*ListRoomOnlineUsersRequest)(nil), // 99: hyapp.room.v1.ListRoomOnlineUsersRequest
(*ListRoomOnlineUsersResponse)(nil), // 100: hyapp.room.v1.ListRoomOnlineUsersResponse
(*FollowRoomRequest)(nil), // 101: hyapp.room.v1.FollowRoomRequest
(*FollowRoomResponse)(nil), // 102: hyapp.room.v1.FollowRoomResponse
(*UnfollowRoomRequest)(nil), // 103: hyapp.room.v1.UnfollowRoomRequest
(*UnfollowRoomResponse)(nil), // 104: hyapp.room.v1.UnfollowRoomResponse
nil, // 105: hyapp.room.v1.RoomSnapshot.RoomExtEntry
(*ListRoomGiftLeaderboardRequest)(nil), // 88: hyapp.room.v1.ListRoomGiftLeaderboardRequest
(*RoomFeedRelatedUser)(nil), // 89: hyapp.room.v1.RoomFeedRelatedUser
(*RoomListItem)(nil), // 90: hyapp.room.v1.RoomListItem
(*ListRoomsResponse)(nil), // 91: hyapp.room.v1.ListRoomsResponse
(*RoomGiftLeaderboardItem)(nil), // 92: hyapp.room.v1.RoomGiftLeaderboardItem
(*ListRoomGiftLeaderboardResponse)(nil), // 93: hyapp.room.v1.ListRoomGiftLeaderboardResponse
(*GetMyRoomRequest)(nil), // 94: hyapp.room.v1.GetMyRoomRequest
(*GetMyRoomResponse)(nil), // 95: hyapp.room.v1.GetMyRoomResponse
(*GetCurrentRoomRequest)(nil), // 96: hyapp.room.v1.GetCurrentRoomRequest
(*GetCurrentRoomResponse)(nil), // 97: hyapp.room.v1.GetCurrentRoomResponse
(*GetRoomSnapshotRequest)(nil), // 98: hyapp.room.v1.GetRoomSnapshotRequest
(*GetRoomSnapshotResponse)(nil), // 99: hyapp.room.v1.GetRoomSnapshotResponse
(*GetRoomTreasureRequest)(nil), // 100: hyapp.room.v1.GetRoomTreasureRequest
(*GetRoomTreasureResponse)(nil), // 101: hyapp.room.v1.GetRoomTreasureResponse
(*ListRoomOnlineUsersRequest)(nil), // 102: hyapp.room.v1.ListRoomOnlineUsersRequest
(*ListRoomOnlineUsersResponse)(nil), // 103: hyapp.room.v1.ListRoomOnlineUsersResponse
(*FollowRoomRequest)(nil), // 104: hyapp.room.v1.FollowRoomRequest
(*FollowRoomResponse)(nil), // 105: hyapp.room.v1.FollowRoomResponse
(*UnfollowRoomRequest)(nil), // 106: hyapp.room.v1.UnfollowRoomRequest
(*UnfollowRoomResponse)(nil), // 107: hyapp.room.v1.UnfollowRoomResponse
nil, // 108: hyapp.room.v1.RoomSnapshot.RoomExtEntry
}
var file_proto_room_v1_room_proto_depIdxs = []int32{
6, // 0: hyapp.room.v1.RoomTreasureLevel.in_room_rewards:type_name -> hyapp.room.v1.RoomTreasureRewardItem
@ -8548,7 +8794,7 @@ var file_proto_room_v1_room_proto_depIdxs = []int32{
3, // 24: hyapp.room.v1.RoomSnapshot.mic_seats:type_name -> hyapp.room.v1.SeatState
2, // 25: hyapp.room.v1.RoomSnapshot.online_users:type_name -> hyapp.room.v1.RoomUser
4, // 26: hyapp.room.v1.RoomSnapshot.gift_rank:type_name -> hyapp.room.v1.RankItem
105, // 27: hyapp.room.v1.RoomSnapshot.room_ext:type_name -> hyapp.room.v1.RoomSnapshot.RoomExtEntry
108, // 27: hyapp.room.v1.RoomSnapshot.room_ext:type_name -> hyapp.room.v1.RoomSnapshot.RoomExtEntry
9, // 28: hyapp.room.v1.RoomSnapshot.treasure:type_name -> hyapp.room.v1.RoomTreasureState
0, // 29: hyapp.room.v1.CreateRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta
1, // 30: hyapp.room.v1.CreateRoomResponse.result:type_name -> hyapp.room.v1.CommandResult
@ -8630,110 +8876,115 @@ var file_proto_room_v1_room_proto_depIdxs = []int32{
5, // 106: hyapp.room.v1.SendGiftResponse.lucky_gift:type_name -> hyapp.room.v1.LuckyGiftDrawResult
0, // 107: hyapp.room.v1.ListRoomsRequest.meta:type_name -> hyapp.room.v1.RequestMeta
0, // 108: hyapp.room.v1.ListRoomFeedsRequest.meta:type_name -> hyapp.room.v1.RequestMeta
88, // 109: hyapp.room.v1.ListRoomFeedsRequest.related_users:type_name -> hyapp.room.v1.RoomFeedRelatedUser
89, // 110: hyapp.room.v1.ListRoomsResponse.rooms:type_name -> hyapp.room.v1.RoomListItem
0, // 111: hyapp.room.v1.GetMyRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta
89, // 112: hyapp.room.v1.GetMyRoomResponse.room:type_name -> hyapp.room.v1.RoomListItem
0, // 113: hyapp.room.v1.GetCurrentRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta
0, // 114: hyapp.room.v1.GetRoomSnapshotRequest.meta:type_name -> hyapp.room.v1.RequestMeta
30, // 115: hyapp.room.v1.GetRoomSnapshotResponse.room:type_name -> hyapp.room.v1.RoomSnapshot
0, // 116: hyapp.room.v1.GetRoomTreasureRequest.meta:type_name -> hyapp.room.v1.RequestMeta
10, // 117: hyapp.room.v1.GetRoomTreasureResponse.treasure:type_name -> hyapp.room.v1.RoomTreasureInfo
0, // 118: hyapp.room.v1.ListRoomOnlineUsersRequest.meta:type_name -> hyapp.room.v1.RequestMeta
2, // 119: hyapp.room.v1.ListRoomOnlineUsersResponse.users:type_name -> hyapp.room.v1.RoomUser
0, // 120: hyapp.room.v1.FollowRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta
0, // 121: hyapp.room.v1.UnfollowRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta
31, // 122: hyapp.room.v1.RoomCommandService.CreateRoom:input_type -> hyapp.room.v1.CreateRoomRequest
33, // 123: hyapp.room.v1.RoomCommandService.UpdateRoomProfile:input_type -> hyapp.room.v1.UpdateRoomProfileRequest
35, // 124: hyapp.room.v1.RoomCommandService.JoinRoom:input_type -> hyapp.room.v1.JoinRoomRequest
37, // 125: hyapp.room.v1.RoomCommandService.RoomHeartbeat:input_type -> hyapp.room.v1.RoomHeartbeatRequest
39, // 126: hyapp.room.v1.RoomCommandService.LeaveRoom:input_type -> hyapp.room.v1.LeaveRoomRequest
41, // 127: hyapp.room.v1.RoomCommandService.CloseRoom:input_type -> hyapp.room.v1.CloseRoomRequest
48, // 128: hyapp.room.v1.RoomCommandService.AdminUpdateRoom:input_type -> hyapp.room.v1.AdminUpdateRoomRequest
50, // 129: hyapp.room.v1.RoomCommandService.AdminDeleteRoom:input_type -> hyapp.room.v1.AdminDeleteRoomRequest
15, // 130: hyapp.room.v1.RoomCommandService.AdminUpdateRoomTreasureConfig:input_type -> hyapp.room.v1.AdminUpdateRoomTreasureConfigRequest
20, // 131: hyapp.room.v1.RoomCommandService.AdminUpdateRoomSeatConfig:input_type -> hyapp.room.v1.AdminUpdateRoomSeatConfigRequest
26, // 132: hyapp.room.v1.RoomCommandService.AdminCreateRoomPin:input_type -> hyapp.room.v1.AdminCreateRoomPinRequest
28, // 133: hyapp.room.v1.RoomCommandService.AdminCancelRoomPin:input_type -> hyapp.room.v1.AdminCancelRoomPinRequest
52, // 134: hyapp.room.v1.RoomCommandService.MicUp:input_type -> hyapp.room.v1.MicUpRequest
54, // 135: hyapp.room.v1.RoomCommandService.MicDown:input_type -> hyapp.room.v1.MicDownRequest
56, // 136: hyapp.room.v1.RoomCommandService.ChangeMicSeat:input_type -> hyapp.room.v1.ChangeMicSeatRequest
58, // 137: hyapp.room.v1.RoomCommandService.ConfirmMicPublishing:input_type -> hyapp.room.v1.ConfirmMicPublishingRequest
60, // 138: hyapp.room.v1.RoomCommandService.SetMicMute:input_type -> hyapp.room.v1.SetMicMuteRequest
62, // 139: hyapp.room.v1.RoomCommandService.ApplyRTCEvent:input_type -> hyapp.room.v1.ApplyRTCEventRequest
64, // 140: hyapp.room.v1.RoomCommandService.SetMicSeatLock:input_type -> hyapp.room.v1.SetMicSeatLockRequest
66, // 141: hyapp.room.v1.RoomCommandService.SetChatEnabled:input_type -> hyapp.room.v1.SetChatEnabledRequest
68, // 142: hyapp.room.v1.RoomCommandService.SetRoomPassword:input_type -> hyapp.room.v1.SetRoomPasswordRequest
70, // 143: hyapp.room.v1.RoomCommandService.SetRoomAdmin:input_type -> hyapp.room.v1.SetRoomAdminRequest
72, // 144: hyapp.room.v1.RoomCommandService.MuteUser:input_type -> hyapp.room.v1.MuteUserRequest
74, // 145: hyapp.room.v1.RoomCommandService.KickUser:input_type -> hyapp.room.v1.KickUserRequest
76, // 146: hyapp.room.v1.RoomCommandService.UnbanUser:input_type -> hyapp.room.v1.UnbanUserRequest
78, // 147: hyapp.room.v1.RoomCommandService.SystemEvictUser:input_type -> hyapp.room.v1.SystemEvictUserRequest
80, // 148: hyapp.room.v1.RoomCommandService.SendGift:input_type -> hyapp.room.v1.SendGiftRequest
101, // 149: hyapp.room.v1.RoomCommandService.FollowRoom:input_type -> hyapp.room.v1.FollowRoomRequest
103, // 150: hyapp.room.v1.RoomCommandService.UnfollowRoom:input_type -> hyapp.room.v1.UnfollowRoomRequest
82, // 151: hyapp.room.v1.RoomGuardService.CheckSpeakPermission:input_type -> hyapp.room.v1.CheckSpeakPermissionRequest
84, // 152: hyapp.room.v1.RoomGuardService.VerifyRoomPresence:input_type -> hyapp.room.v1.VerifyRoomPresenceRequest
44, // 153: hyapp.room.v1.RoomQueryService.AdminListRooms:input_type -> hyapp.room.v1.AdminListRoomsRequest
46, // 154: hyapp.room.v1.RoomQueryService.AdminGetRoom:input_type -> hyapp.room.v1.AdminGetRoomRequest
13, // 155: hyapp.room.v1.RoomQueryService.AdminGetRoomTreasureConfig:input_type -> hyapp.room.v1.AdminGetRoomTreasureConfigRequest
18, // 156: hyapp.room.v1.RoomQueryService.AdminGetRoomSeatConfig:input_type -> hyapp.room.v1.AdminGetRoomSeatConfigRequest
24, // 157: hyapp.room.v1.RoomQueryService.AdminListRoomPins:input_type -> hyapp.room.v1.AdminListRoomPinsRequest
86, // 158: hyapp.room.v1.RoomQueryService.ListRooms:input_type -> hyapp.room.v1.ListRoomsRequest
87, // 159: hyapp.room.v1.RoomQueryService.ListRoomFeeds:input_type -> hyapp.room.v1.ListRoomFeedsRequest
91, // 160: hyapp.room.v1.RoomQueryService.GetMyRoom:input_type -> hyapp.room.v1.GetMyRoomRequest
93, // 161: hyapp.room.v1.RoomQueryService.GetCurrentRoom:input_type -> hyapp.room.v1.GetCurrentRoomRequest
95, // 162: hyapp.room.v1.RoomQueryService.GetRoomSnapshot:input_type -> hyapp.room.v1.GetRoomSnapshotRequest
97, // 163: hyapp.room.v1.RoomQueryService.GetRoomTreasure:input_type -> hyapp.room.v1.GetRoomTreasureRequest
99, // 164: hyapp.room.v1.RoomQueryService.ListRoomOnlineUsers:input_type -> hyapp.room.v1.ListRoomOnlineUsersRequest
32, // 165: hyapp.room.v1.RoomCommandService.CreateRoom:output_type -> hyapp.room.v1.CreateRoomResponse
34, // 166: hyapp.room.v1.RoomCommandService.UpdateRoomProfile:output_type -> hyapp.room.v1.UpdateRoomProfileResponse
36, // 167: hyapp.room.v1.RoomCommandService.JoinRoom:output_type -> hyapp.room.v1.JoinRoomResponse
38, // 168: hyapp.room.v1.RoomCommandService.RoomHeartbeat:output_type -> hyapp.room.v1.RoomHeartbeatResponse
40, // 169: hyapp.room.v1.RoomCommandService.LeaveRoom:output_type -> hyapp.room.v1.LeaveRoomResponse
42, // 170: hyapp.room.v1.RoomCommandService.CloseRoom:output_type -> hyapp.room.v1.CloseRoomResponse
49, // 171: hyapp.room.v1.RoomCommandService.AdminUpdateRoom:output_type -> hyapp.room.v1.AdminUpdateRoomResponse
51, // 172: hyapp.room.v1.RoomCommandService.AdminDeleteRoom:output_type -> hyapp.room.v1.AdminDeleteRoomResponse
16, // 173: hyapp.room.v1.RoomCommandService.AdminUpdateRoomTreasureConfig:output_type -> hyapp.room.v1.AdminUpdateRoomTreasureConfigResponse
21, // 174: hyapp.room.v1.RoomCommandService.AdminUpdateRoomSeatConfig:output_type -> hyapp.room.v1.AdminUpdateRoomSeatConfigResponse
27, // 175: hyapp.room.v1.RoomCommandService.AdminCreateRoomPin:output_type -> hyapp.room.v1.AdminCreateRoomPinResponse
29, // 176: hyapp.room.v1.RoomCommandService.AdminCancelRoomPin:output_type -> hyapp.room.v1.AdminCancelRoomPinResponse
53, // 177: hyapp.room.v1.RoomCommandService.MicUp:output_type -> hyapp.room.v1.MicUpResponse
55, // 178: hyapp.room.v1.RoomCommandService.MicDown:output_type -> hyapp.room.v1.MicDownResponse
57, // 179: hyapp.room.v1.RoomCommandService.ChangeMicSeat:output_type -> hyapp.room.v1.ChangeMicSeatResponse
59, // 180: hyapp.room.v1.RoomCommandService.ConfirmMicPublishing:output_type -> hyapp.room.v1.ConfirmMicPublishingResponse
61, // 181: hyapp.room.v1.RoomCommandService.SetMicMute:output_type -> hyapp.room.v1.SetMicMuteResponse
63, // 182: hyapp.room.v1.RoomCommandService.ApplyRTCEvent:output_type -> hyapp.room.v1.ApplyRTCEventResponse
65, // 183: hyapp.room.v1.RoomCommandService.SetMicSeatLock:output_type -> hyapp.room.v1.SetMicSeatLockResponse
67, // 184: hyapp.room.v1.RoomCommandService.SetChatEnabled:output_type -> hyapp.room.v1.SetChatEnabledResponse
69, // 185: hyapp.room.v1.RoomCommandService.SetRoomPassword:output_type -> hyapp.room.v1.SetRoomPasswordResponse
71, // 186: hyapp.room.v1.RoomCommandService.SetRoomAdmin:output_type -> hyapp.room.v1.SetRoomAdminResponse
73, // 187: hyapp.room.v1.RoomCommandService.MuteUser:output_type -> hyapp.room.v1.MuteUserResponse
75, // 188: hyapp.room.v1.RoomCommandService.KickUser:output_type -> hyapp.room.v1.KickUserResponse
77, // 189: hyapp.room.v1.RoomCommandService.UnbanUser:output_type -> hyapp.room.v1.UnbanUserResponse
79, // 190: hyapp.room.v1.RoomCommandService.SystemEvictUser:output_type -> hyapp.room.v1.SystemEvictUserResponse
81, // 191: hyapp.room.v1.RoomCommandService.SendGift:output_type -> hyapp.room.v1.SendGiftResponse
102, // 192: hyapp.room.v1.RoomCommandService.FollowRoom:output_type -> hyapp.room.v1.FollowRoomResponse
104, // 193: hyapp.room.v1.RoomCommandService.UnfollowRoom:output_type -> hyapp.room.v1.UnfollowRoomResponse
83, // 194: hyapp.room.v1.RoomGuardService.CheckSpeakPermission:output_type -> hyapp.room.v1.CheckSpeakPermissionResponse
85, // 195: hyapp.room.v1.RoomGuardService.VerifyRoomPresence:output_type -> hyapp.room.v1.VerifyRoomPresenceResponse
45, // 196: hyapp.room.v1.RoomQueryService.AdminListRooms:output_type -> hyapp.room.v1.AdminListRoomsResponse
47, // 197: hyapp.room.v1.RoomQueryService.AdminGetRoom:output_type -> hyapp.room.v1.AdminGetRoomResponse
14, // 198: hyapp.room.v1.RoomQueryService.AdminGetRoomTreasureConfig:output_type -> hyapp.room.v1.AdminGetRoomTreasureConfigResponse
19, // 199: hyapp.room.v1.RoomQueryService.AdminGetRoomSeatConfig:output_type -> hyapp.room.v1.AdminGetRoomSeatConfigResponse
25, // 200: hyapp.room.v1.RoomQueryService.AdminListRoomPins:output_type -> hyapp.room.v1.AdminListRoomPinsResponse
90, // 201: hyapp.room.v1.RoomQueryService.ListRooms:output_type -> hyapp.room.v1.ListRoomsResponse
90, // 202: hyapp.room.v1.RoomQueryService.ListRoomFeeds:output_type -> hyapp.room.v1.ListRoomsResponse
92, // 203: hyapp.room.v1.RoomQueryService.GetMyRoom:output_type -> hyapp.room.v1.GetMyRoomResponse
94, // 204: hyapp.room.v1.RoomQueryService.GetCurrentRoom:output_type -> hyapp.room.v1.GetCurrentRoomResponse
96, // 205: hyapp.room.v1.RoomQueryService.GetRoomSnapshot:output_type -> hyapp.room.v1.GetRoomSnapshotResponse
98, // 206: hyapp.room.v1.RoomQueryService.GetRoomTreasure:output_type -> hyapp.room.v1.GetRoomTreasureResponse
100, // 207: hyapp.room.v1.RoomQueryService.ListRoomOnlineUsers:output_type -> hyapp.room.v1.ListRoomOnlineUsersResponse
165, // [165:208] is the sub-list for method output_type
122, // [122:165] is the sub-list for method input_type
122, // [122:122] is the sub-list for extension type_name
122, // [122:122] is the sub-list for extension extendee
0, // [0:122] is the sub-list for field type_name
89, // 109: hyapp.room.v1.ListRoomFeedsRequest.related_users:type_name -> hyapp.room.v1.RoomFeedRelatedUser
0, // 110: hyapp.room.v1.ListRoomGiftLeaderboardRequest.meta:type_name -> hyapp.room.v1.RequestMeta
90, // 111: hyapp.room.v1.ListRoomsResponse.rooms:type_name -> hyapp.room.v1.RoomListItem
90, // 112: hyapp.room.v1.RoomGiftLeaderboardItem.room:type_name -> hyapp.room.v1.RoomListItem
92, // 113: hyapp.room.v1.ListRoomGiftLeaderboardResponse.items:type_name -> hyapp.room.v1.RoomGiftLeaderboardItem
0, // 114: hyapp.room.v1.GetMyRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta
90, // 115: hyapp.room.v1.GetMyRoomResponse.room:type_name -> hyapp.room.v1.RoomListItem
0, // 116: hyapp.room.v1.GetCurrentRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta
0, // 117: hyapp.room.v1.GetRoomSnapshotRequest.meta:type_name -> hyapp.room.v1.RequestMeta
30, // 118: hyapp.room.v1.GetRoomSnapshotResponse.room:type_name -> hyapp.room.v1.RoomSnapshot
0, // 119: hyapp.room.v1.GetRoomTreasureRequest.meta:type_name -> hyapp.room.v1.RequestMeta
10, // 120: hyapp.room.v1.GetRoomTreasureResponse.treasure:type_name -> hyapp.room.v1.RoomTreasureInfo
0, // 121: hyapp.room.v1.ListRoomOnlineUsersRequest.meta:type_name -> hyapp.room.v1.RequestMeta
2, // 122: hyapp.room.v1.ListRoomOnlineUsersResponse.users:type_name -> hyapp.room.v1.RoomUser
0, // 123: hyapp.room.v1.FollowRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta
0, // 124: hyapp.room.v1.UnfollowRoomRequest.meta:type_name -> hyapp.room.v1.RequestMeta
31, // 125: hyapp.room.v1.RoomCommandService.CreateRoom:input_type -> hyapp.room.v1.CreateRoomRequest
33, // 126: hyapp.room.v1.RoomCommandService.UpdateRoomProfile:input_type -> hyapp.room.v1.UpdateRoomProfileRequest
35, // 127: hyapp.room.v1.RoomCommandService.JoinRoom:input_type -> hyapp.room.v1.JoinRoomRequest
37, // 128: hyapp.room.v1.RoomCommandService.RoomHeartbeat:input_type -> hyapp.room.v1.RoomHeartbeatRequest
39, // 129: hyapp.room.v1.RoomCommandService.LeaveRoom:input_type -> hyapp.room.v1.LeaveRoomRequest
41, // 130: hyapp.room.v1.RoomCommandService.CloseRoom:input_type -> hyapp.room.v1.CloseRoomRequest
48, // 131: hyapp.room.v1.RoomCommandService.AdminUpdateRoom:input_type -> hyapp.room.v1.AdminUpdateRoomRequest
50, // 132: hyapp.room.v1.RoomCommandService.AdminDeleteRoom:input_type -> hyapp.room.v1.AdminDeleteRoomRequest
15, // 133: hyapp.room.v1.RoomCommandService.AdminUpdateRoomTreasureConfig:input_type -> hyapp.room.v1.AdminUpdateRoomTreasureConfigRequest
20, // 134: hyapp.room.v1.RoomCommandService.AdminUpdateRoomSeatConfig:input_type -> hyapp.room.v1.AdminUpdateRoomSeatConfigRequest
26, // 135: hyapp.room.v1.RoomCommandService.AdminCreateRoomPin:input_type -> hyapp.room.v1.AdminCreateRoomPinRequest
28, // 136: hyapp.room.v1.RoomCommandService.AdminCancelRoomPin:input_type -> hyapp.room.v1.AdminCancelRoomPinRequest
52, // 137: hyapp.room.v1.RoomCommandService.MicUp:input_type -> hyapp.room.v1.MicUpRequest
54, // 138: hyapp.room.v1.RoomCommandService.MicDown:input_type -> hyapp.room.v1.MicDownRequest
56, // 139: hyapp.room.v1.RoomCommandService.ChangeMicSeat:input_type -> hyapp.room.v1.ChangeMicSeatRequest
58, // 140: hyapp.room.v1.RoomCommandService.ConfirmMicPublishing:input_type -> hyapp.room.v1.ConfirmMicPublishingRequest
60, // 141: hyapp.room.v1.RoomCommandService.SetMicMute:input_type -> hyapp.room.v1.SetMicMuteRequest
62, // 142: hyapp.room.v1.RoomCommandService.ApplyRTCEvent:input_type -> hyapp.room.v1.ApplyRTCEventRequest
64, // 143: hyapp.room.v1.RoomCommandService.SetMicSeatLock:input_type -> hyapp.room.v1.SetMicSeatLockRequest
66, // 144: hyapp.room.v1.RoomCommandService.SetChatEnabled:input_type -> hyapp.room.v1.SetChatEnabledRequest
68, // 145: hyapp.room.v1.RoomCommandService.SetRoomPassword:input_type -> hyapp.room.v1.SetRoomPasswordRequest
70, // 146: hyapp.room.v1.RoomCommandService.SetRoomAdmin:input_type -> hyapp.room.v1.SetRoomAdminRequest
72, // 147: hyapp.room.v1.RoomCommandService.MuteUser:input_type -> hyapp.room.v1.MuteUserRequest
74, // 148: hyapp.room.v1.RoomCommandService.KickUser:input_type -> hyapp.room.v1.KickUserRequest
76, // 149: hyapp.room.v1.RoomCommandService.UnbanUser:input_type -> hyapp.room.v1.UnbanUserRequest
78, // 150: hyapp.room.v1.RoomCommandService.SystemEvictUser:input_type -> hyapp.room.v1.SystemEvictUserRequest
80, // 151: hyapp.room.v1.RoomCommandService.SendGift:input_type -> hyapp.room.v1.SendGiftRequest
104, // 152: hyapp.room.v1.RoomCommandService.FollowRoom:input_type -> hyapp.room.v1.FollowRoomRequest
106, // 153: hyapp.room.v1.RoomCommandService.UnfollowRoom:input_type -> hyapp.room.v1.UnfollowRoomRequest
82, // 154: hyapp.room.v1.RoomGuardService.CheckSpeakPermission:input_type -> hyapp.room.v1.CheckSpeakPermissionRequest
84, // 155: hyapp.room.v1.RoomGuardService.VerifyRoomPresence:input_type -> hyapp.room.v1.VerifyRoomPresenceRequest
44, // 156: hyapp.room.v1.RoomQueryService.AdminListRooms:input_type -> hyapp.room.v1.AdminListRoomsRequest
46, // 157: hyapp.room.v1.RoomQueryService.AdminGetRoom:input_type -> hyapp.room.v1.AdminGetRoomRequest
13, // 158: hyapp.room.v1.RoomQueryService.AdminGetRoomTreasureConfig:input_type -> hyapp.room.v1.AdminGetRoomTreasureConfigRequest
18, // 159: hyapp.room.v1.RoomQueryService.AdminGetRoomSeatConfig:input_type -> hyapp.room.v1.AdminGetRoomSeatConfigRequest
24, // 160: hyapp.room.v1.RoomQueryService.AdminListRoomPins:input_type -> hyapp.room.v1.AdminListRoomPinsRequest
86, // 161: hyapp.room.v1.RoomQueryService.ListRooms:input_type -> hyapp.room.v1.ListRoomsRequest
87, // 162: hyapp.room.v1.RoomQueryService.ListRoomFeeds:input_type -> hyapp.room.v1.ListRoomFeedsRequest
88, // 163: hyapp.room.v1.RoomQueryService.ListRoomGiftLeaderboard:input_type -> hyapp.room.v1.ListRoomGiftLeaderboardRequest
94, // 164: hyapp.room.v1.RoomQueryService.GetMyRoom:input_type -> hyapp.room.v1.GetMyRoomRequest
96, // 165: hyapp.room.v1.RoomQueryService.GetCurrentRoom:input_type -> hyapp.room.v1.GetCurrentRoomRequest
98, // 166: hyapp.room.v1.RoomQueryService.GetRoomSnapshot:input_type -> hyapp.room.v1.GetRoomSnapshotRequest
100, // 167: hyapp.room.v1.RoomQueryService.GetRoomTreasure:input_type -> hyapp.room.v1.GetRoomTreasureRequest
102, // 168: hyapp.room.v1.RoomQueryService.ListRoomOnlineUsers:input_type -> hyapp.room.v1.ListRoomOnlineUsersRequest
32, // 169: hyapp.room.v1.RoomCommandService.CreateRoom:output_type -> hyapp.room.v1.CreateRoomResponse
34, // 170: hyapp.room.v1.RoomCommandService.UpdateRoomProfile:output_type -> hyapp.room.v1.UpdateRoomProfileResponse
36, // 171: hyapp.room.v1.RoomCommandService.JoinRoom:output_type -> hyapp.room.v1.JoinRoomResponse
38, // 172: hyapp.room.v1.RoomCommandService.RoomHeartbeat:output_type -> hyapp.room.v1.RoomHeartbeatResponse
40, // 173: hyapp.room.v1.RoomCommandService.LeaveRoom:output_type -> hyapp.room.v1.LeaveRoomResponse
42, // 174: hyapp.room.v1.RoomCommandService.CloseRoom:output_type -> hyapp.room.v1.CloseRoomResponse
49, // 175: hyapp.room.v1.RoomCommandService.AdminUpdateRoom:output_type -> hyapp.room.v1.AdminUpdateRoomResponse
51, // 176: hyapp.room.v1.RoomCommandService.AdminDeleteRoom:output_type -> hyapp.room.v1.AdminDeleteRoomResponse
16, // 177: hyapp.room.v1.RoomCommandService.AdminUpdateRoomTreasureConfig:output_type -> hyapp.room.v1.AdminUpdateRoomTreasureConfigResponse
21, // 178: hyapp.room.v1.RoomCommandService.AdminUpdateRoomSeatConfig:output_type -> hyapp.room.v1.AdminUpdateRoomSeatConfigResponse
27, // 179: hyapp.room.v1.RoomCommandService.AdminCreateRoomPin:output_type -> hyapp.room.v1.AdminCreateRoomPinResponse
29, // 180: hyapp.room.v1.RoomCommandService.AdminCancelRoomPin:output_type -> hyapp.room.v1.AdminCancelRoomPinResponse
53, // 181: hyapp.room.v1.RoomCommandService.MicUp:output_type -> hyapp.room.v1.MicUpResponse
55, // 182: hyapp.room.v1.RoomCommandService.MicDown:output_type -> hyapp.room.v1.MicDownResponse
57, // 183: hyapp.room.v1.RoomCommandService.ChangeMicSeat:output_type -> hyapp.room.v1.ChangeMicSeatResponse
59, // 184: hyapp.room.v1.RoomCommandService.ConfirmMicPublishing:output_type -> hyapp.room.v1.ConfirmMicPublishingResponse
61, // 185: hyapp.room.v1.RoomCommandService.SetMicMute:output_type -> hyapp.room.v1.SetMicMuteResponse
63, // 186: hyapp.room.v1.RoomCommandService.ApplyRTCEvent:output_type -> hyapp.room.v1.ApplyRTCEventResponse
65, // 187: hyapp.room.v1.RoomCommandService.SetMicSeatLock:output_type -> hyapp.room.v1.SetMicSeatLockResponse
67, // 188: hyapp.room.v1.RoomCommandService.SetChatEnabled:output_type -> hyapp.room.v1.SetChatEnabledResponse
69, // 189: hyapp.room.v1.RoomCommandService.SetRoomPassword:output_type -> hyapp.room.v1.SetRoomPasswordResponse
71, // 190: hyapp.room.v1.RoomCommandService.SetRoomAdmin:output_type -> hyapp.room.v1.SetRoomAdminResponse
73, // 191: hyapp.room.v1.RoomCommandService.MuteUser:output_type -> hyapp.room.v1.MuteUserResponse
75, // 192: hyapp.room.v1.RoomCommandService.KickUser:output_type -> hyapp.room.v1.KickUserResponse
77, // 193: hyapp.room.v1.RoomCommandService.UnbanUser:output_type -> hyapp.room.v1.UnbanUserResponse
79, // 194: hyapp.room.v1.RoomCommandService.SystemEvictUser:output_type -> hyapp.room.v1.SystemEvictUserResponse
81, // 195: hyapp.room.v1.RoomCommandService.SendGift:output_type -> hyapp.room.v1.SendGiftResponse
105, // 196: hyapp.room.v1.RoomCommandService.FollowRoom:output_type -> hyapp.room.v1.FollowRoomResponse
107, // 197: hyapp.room.v1.RoomCommandService.UnfollowRoom:output_type -> hyapp.room.v1.UnfollowRoomResponse
83, // 198: hyapp.room.v1.RoomGuardService.CheckSpeakPermission:output_type -> hyapp.room.v1.CheckSpeakPermissionResponse
85, // 199: hyapp.room.v1.RoomGuardService.VerifyRoomPresence:output_type -> hyapp.room.v1.VerifyRoomPresenceResponse
45, // 200: hyapp.room.v1.RoomQueryService.AdminListRooms:output_type -> hyapp.room.v1.AdminListRoomsResponse
47, // 201: hyapp.room.v1.RoomQueryService.AdminGetRoom:output_type -> hyapp.room.v1.AdminGetRoomResponse
14, // 202: hyapp.room.v1.RoomQueryService.AdminGetRoomTreasureConfig:output_type -> hyapp.room.v1.AdminGetRoomTreasureConfigResponse
19, // 203: hyapp.room.v1.RoomQueryService.AdminGetRoomSeatConfig:output_type -> hyapp.room.v1.AdminGetRoomSeatConfigResponse
25, // 204: hyapp.room.v1.RoomQueryService.AdminListRoomPins:output_type -> hyapp.room.v1.AdminListRoomPinsResponse
91, // 205: hyapp.room.v1.RoomQueryService.ListRooms:output_type -> hyapp.room.v1.ListRoomsResponse
91, // 206: hyapp.room.v1.RoomQueryService.ListRoomFeeds:output_type -> hyapp.room.v1.ListRoomsResponse
93, // 207: hyapp.room.v1.RoomQueryService.ListRoomGiftLeaderboard:output_type -> hyapp.room.v1.ListRoomGiftLeaderboardResponse
95, // 208: hyapp.room.v1.RoomQueryService.GetMyRoom:output_type -> hyapp.room.v1.GetMyRoomResponse
97, // 209: hyapp.room.v1.RoomQueryService.GetCurrentRoom:output_type -> hyapp.room.v1.GetCurrentRoomResponse
99, // 210: hyapp.room.v1.RoomQueryService.GetRoomSnapshot:output_type -> hyapp.room.v1.GetRoomSnapshotResponse
101, // 211: hyapp.room.v1.RoomQueryService.GetRoomTreasure:output_type -> hyapp.room.v1.GetRoomTreasureResponse
103, // 212: hyapp.room.v1.RoomQueryService.ListRoomOnlineUsers:output_type -> hyapp.room.v1.ListRoomOnlineUsersResponse
169, // [169:213] is the sub-list for method output_type
125, // [125:169] is the sub-list for method input_type
125, // [125:125] is the sub-list for extension type_name
125, // [125:125] is the sub-list for extension extendee
0, // [0:125] is the sub-list for field type_name
}
func init() { file_proto_room_v1_room_proto_init() }
@ -8749,7 +9000,7 @@ func file_proto_room_v1_room_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_proto_room_v1_room_proto_rawDesc), len(file_proto_room_v1_room_proto_rawDesc)),
NumEnums: 0,
NumMessages: 106,
NumMessages: 109,
NumExtensions: 0,
NumServices: 3,
},

View File

@ -775,6 +775,14 @@ message ListRoomFeedsRequest {
repeated RoomFeedRelatedUser related_users = 8;
}
// ListRoomGiftLeaderboardRequest UTC
message ListRoomGiftLeaderboardRequest {
RequestMeta meta = 1;
string period = 2;
int32 page = 3;
int32 page_size = 4;
}
// RoomFeedRelatedUser Mine room-service /
message RoomFeedRelatedUser {
int64 user_id = 1;
@ -805,6 +813,24 @@ message ListRoomsResponse {
string next_cursor = 2;
}
// RoomGiftLeaderboardItem score
message RoomGiftLeaderboardItem {
int64 rank = 1;
string room_id = 2;
int64 coin_spent = 3;
RoomListItem room = 4;
}
// ListRoomGiftLeaderboardResponse UTC
message ListRoomGiftLeaderboardResponse {
repeated RoomGiftLeaderboardItem items = 1;
int64 total = 2;
string period = 3;
int64 start_at_ms = 4;
int64 end_at_ms = 5;
int64 server_time_ms = 6;
}
// GetMyRoomRequest
// gateway owner_user_id ID
message GetMyRoomRequest {
@ -963,6 +989,7 @@ service RoomQueryService {
rpc AdminListRoomPins(AdminListRoomPinsRequest) returns (AdminListRoomPinsResponse);
rpc ListRooms(ListRoomsRequest) returns (ListRoomsResponse);
rpc ListRoomFeeds(ListRoomFeedsRequest) returns (ListRoomsResponse);
rpc ListRoomGiftLeaderboard(ListRoomGiftLeaderboardRequest) returns (ListRoomGiftLeaderboardResponse);
rpc GetMyRoom(GetMyRoomRequest) returns (GetMyRoomResponse);
rpc GetCurrentRoom(GetCurrentRoomRequest) returns (GetCurrentRoomResponse);
rpc GetRoomSnapshot(GetRoomSnapshotRequest) returns (GetRoomSnapshotResponse);

View File

@ -1340,6 +1340,7 @@ const (
RoomQueryService_AdminListRoomPins_FullMethodName = "/hyapp.room.v1.RoomQueryService/AdminListRoomPins"
RoomQueryService_ListRooms_FullMethodName = "/hyapp.room.v1.RoomQueryService/ListRooms"
RoomQueryService_ListRoomFeeds_FullMethodName = "/hyapp.room.v1.RoomQueryService/ListRoomFeeds"
RoomQueryService_ListRoomGiftLeaderboard_FullMethodName = "/hyapp.room.v1.RoomQueryService/ListRoomGiftLeaderboard"
RoomQueryService_GetMyRoom_FullMethodName = "/hyapp.room.v1.RoomQueryService/GetMyRoom"
RoomQueryService_GetCurrentRoom_FullMethodName = "/hyapp.room.v1.RoomQueryService/GetCurrentRoom"
RoomQueryService_GetRoomSnapshot_FullMethodName = "/hyapp.room.v1.RoomQueryService/GetRoomSnapshot"
@ -1360,6 +1361,7 @@ type RoomQueryServiceClient interface {
AdminListRoomPins(ctx context.Context, in *AdminListRoomPinsRequest, opts ...grpc.CallOption) (*AdminListRoomPinsResponse, error)
ListRooms(ctx context.Context, in *ListRoomsRequest, opts ...grpc.CallOption) (*ListRoomsResponse, error)
ListRoomFeeds(ctx context.Context, in *ListRoomFeedsRequest, opts ...grpc.CallOption) (*ListRoomsResponse, error)
ListRoomGiftLeaderboard(ctx context.Context, in *ListRoomGiftLeaderboardRequest, opts ...grpc.CallOption) (*ListRoomGiftLeaderboardResponse, error)
GetMyRoom(ctx context.Context, in *GetMyRoomRequest, opts ...grpc.CallOption) (*GetMyRoomResponse, error)
GetCurrentRoom(ctx context.Context, in *GetCurrentRoomRequest, opts ...grpc.CallOption) (*GetCurrentRoomResponse, error)
GetRoomSnapshot(ctx context.Context, in *GetRoomSnapshotRequest, opts ...grpc.CallOption) (*GetRoomSnapshotResponse, error)
@ -1445,6 +1447,16 @@ func (c *roomQueryServiceClient) ListRoomFeeds(ctx context.Context, in *ListRoom
return out, nil
}
func (c *roomQueryServiceClient) ListRoomGiftLeaderboard(ctx context.Context, in *ListRoomGiftLeaderboardRequest, opts ...grpc.CallOption) (*ListRoomGiftLeaderboardResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(ListRoomGiftLeaderboardResponse)
err := c.cc.Invoke(ctx, RoomQueryService_ListRoomGiftLeaderboard_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *roomQueryServiceClient) GetMyRoom(ctx context.Context, in *GetMyRoomRequest, opts ...grpc.CallOption) (*GetMyRoomResponse, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(GetMyRoomResponse)
@ -1508,6 +1520,7 @@ type RoomQueryServiceServer interface {
AdminListRoomPins(context.Context, *AdminListRoomPinsRequest) (*AdminListRoomPinsResponse, error)
ListRooms(context.Context, *ListRoomsRequest) (*ListRoomsResponse, error)
ListRoomFeeds(context.Context, *ListRoomFeedsRequest) (*ListRoomsResponse, error)
ListRoomGiftLeaderboard(context.Context, *ListRoomGiftLeaderboardRequest) (*ListRoomGiftLeaderboardResponse, error)
GetMyRoom(context.Context, *GetMyRoomRequest) (*GetMyRoomResponse, error)
GetCurrentRoom(context.Context, *GetCurrentRoomRequest) (*GetCurrentRoomResponse, error)
GetRoomSnapshot(context.Context, *GetRoomSnapshotRequest) (*GetRoomSnapshotResponse, error)
@ -1544,6 +1557,9 @@ func (UnimplementedRoomQueryServiceServer) ListRooms(context.Context, *ListRooms
func (UnimplementedRoomQueryServiceServer) ListRoomFeeds(context.Context, *ListRoomFeedsRequest) (*ListRoomsResponse, error) {
return nil, status.Error(codes.Unimplemented, "method ListRoomFeeds not implemented")
}
func (UnimplementedRoomQueryServiceServer) ListRoomGiftLeaderboard(context.Context, *ListRoomGiftLeaderboardRequest) (*ListRoomGiftLeaderboardResponse, error) {
return nil, status.Error(codes.Unimplemented, "method ListRoomGiftLeaderboard not implemented")
}
func (UnimplementedRoomQueryServiceServer) GetMyRoom(context.Context, *GetMyRoomRequest) (*GetMyRoomResponse, error) {
return nil, status.Error(codes.Unimplemented, "method GetMyRoom not implemented")
}
@ -1706,6 +1722,24 @@ func _RoomQueryService_ListRoomFeeds_Handler(srv interface{}, ctx context.Contex
return interceptor(ctx, in, info, handler)
}
func _RoomQueryService_ListRoomGiftLeaderboard_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(ListRoomGiftLeaderboardRequest)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(RoomQueryServiceServer).ListRoomGiftLeaderboard(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: RoomQueryService_ListRoomGiftLeaderboard_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(RoomQueryServiceServer).ListRoomGiftLeaderboard(ctx, req.(*ListRoomGiftLeaderboardRequest))
}
return interceptor(ctx, in, info, handler)
}
func _RoomQueryService_GetMyRoom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetMyRoomRequest)
if err := dec(in); err != nil {
@ -1831,6 +1865,10 @@ var RoomQueryService_ServiceDesc = grpc.ServiceDesc{
MethodName: "ListRoomFeeds",
Handler: _RoomQueryService_ListRoomFeeds_Handler,
},
{
MethodName: "ListRoomGiftLeaderboard",
Handler: _RoomQueryService_ListRoomGiftLeaderboard_Handler,
},
{
MethodName: "GetMyRoom",
Handler: _RoomQueryService_GetMyRoom_Handler,

View File

@ -43,6 +43,7 @@ type RoomGuardClient interface {
type RoomQueryClient interface {
ListRooms(ctx context.Context, req *roomv1.ListRoomsRequest) (*roomv1.ListRoomsResponse, error)
ListRoomFeeds(ctx context.Context, req *roomv1.ListRoomFeedsRequest) (*roomv1.ListRoomsResponse, error)
ListRoomGiftLeaderboard(ctx context.Context, req *roomv1.ListRoomGiftLeaderboardRequest) (*roomv1.ListRoomGiftLeaderboardResponse, error)
GetMyRoom(ctx context.Context, req *roomv1.GetMyRoomRequest) (*roomv1.GetMyRoomResponse, error)
GetCurrentRoom(ctx context.Context, req *roomv1.GetCurrentRoomRequest) (*roomv1.GetCurrentRoomResponse, error)
GetRoomSnapshot(ctx context.Context, req *roomv1.GetRoomSnapshotRequest) (*roomv1.GetRoomSnapshotResponse, error)
@ -183,6 +184,10 @@ func (c *grpcRoomQueryClient) ListRoomFeeds(ctx context.Context, req *roomv1.Lis
return c.client.ListRoomFeeds(ctx, req)
}
func (c *grpcRoomQueryClient) ListRoomGiftLeaderboard(ctx context.Context, req *roomv1.ListRoomGiftLeaderboardRequest) (*roomv1.ListRoomGiftLeaderboardResponse, error) {
return c.client.ListRoomGiftLeaderboard(ctx, req)
}
func (c *grpcRoomQueryClient) GetMyRoom(ctx context.Context, req *roomv1.GetMyRoomRequest) (*roomv1.GetMyRoomResponse, error) {
return c.client.GetMyRoom(ctx, req)
}

View File

@ -71,11 +71,6 @@ type userLeaderboardRoom struct {
}
func (h *Handler) listUserLeaderboards(writer http.ResponseWriter, request *http.Request) {
if h.walletDB == nil {
httpkit.WriteError(writer, request, http.StatusServiceUnavailable, httpkit.CodeUpstreamError, "upstream service error")
return
}
boardType := normalizeUserLeaderboardType(request.URL.Query().Get("board_type"))
if boardType == "" {
httpkit.WriteError(writer, request, http.StatusBadRequest, httpkit.CodeInvalidArgument, "invalid argument")
@ -99,6 +94,14 @@ func (h *Handler) listUserLeaderboards(writer http.ResponseWriter, request *http
if pageSize > userLeaderboardMaxPageSize {
pageSize = userLeaderboardMaxPageSize
}
if boardType == leaderboardTypeRoom {
h.listRoomGiftLeaderboards(writer, request, period, page, pageSize)
return
}
if h.walletDB == nil {
httpkit.WriteError(writer, request, http.StatusServiceUnavailable, httpkit.CodeUpstreamError, "upstream service error")
return
}
now := time.Now().UTC()
start, end := userLeaderboardPeriodWindow(period, now)
@ -147,6 +150,34 @@ func (h *Handler) listUserLeaderboards(writer http.ResponseWriter, request *http
})
}
func (h *Handler) listRoomGiftLeaderboards(writer http.ResponseWriter, request *http.Request, period string, page int32, pageSize int32) {
if h.roomQueryClient == nil {
httpkit.WriteError(writer, request, http.StatusBadGateway, httpkit.CodeUpstreamError, "upstream service error")
return
}
resp, err := h.roomQueryClient.ListRoomGiftLeaderboard(request.Context(), &roomv1.ListRoomGiftLeaderboardRequest{
Meta: httpkit.RoomMeta(request, "", ""),
Period: period,
Page: page,
PageSize: pageSize,
})
if err != nil {
httpkit.WriteRPCError(writer, request, err)
return
}
httpkit.WriteOK(writer, request, userLeaderboardResponse{
Items: userLeaderboardItemsFromRoomGiftLeaderboard(resp.GetItems()),
Total: resp.GetTotal(),
Page: page,
PageSize: pageSize,
BoardType: leaderboardTypeRoom,
Period: resp.GetPeriod(),
StartAtMS: resp.GetStartAtMs(),
EndAtMS: resp.GetEndAtMs(),
ServerTimeMS: resp.GetServerTimeMs(),
})
}
func normalizeUserLeaderboardType(raw string) string {
switch strings.ToLower(strings.TrimSpace(raw)) {
case "", "sent", "send", "sender", "gift_sent", "user_sent":
@ -367,7 +398,8 @@ func userLeaderboardDimension(boardType string) (string, string) {
func (h *Handler) enrichUserLeaderboardItems(request *http.Request, boardType string, items []userLeaderboardItem, myRank *userLeaderboardItem) error {
if boardType == leaderboardTypeRoom {
return h.enrichRoomLeaderboardItems(request, items)
// room 榜已经由 room-service 的 zset + room_list_entries 返回卡片,不再读取完整 RoomSnapshot。
return nil
}
userIDs := make([]int64, 0, len(items)+1)
for _, item := range items {
@ -393,32 +425,42 @@ func (h *Handler) enrichUserLeaderboardItems(request *http.Request, boardType st
return nil
}
func (h *Handler) enrichRoomLeaderboardItems(request *http.Request, items []userLeaderboardItem) error {
if h.roomQueryClient == nil || len(items) == 0 {
return nil
}
seen := make(map[string]*userLeaderboardRoom, len(items))
for i := range items {
roomID := strings.TrimSpace(items[i].RoomID)
if roomID == "" {
func userLeaderboardItemsFromRoomGiftLeaderboard(items []*roomv1.RoomGiftLeaderboardItem) []userLeaderboardItem {
out := make([]userLeaderboardItem, 0, len(items))
for _, item := range items {
if item == nil {
continue
}
room, ok := seen[roomID]
if !ok {
resp, err := h.roomQueryClient.GetRoomSnapshot(request.Context(), &roomv1.GetRoomSnapshotRequest{
Meta: httpkit.RoomMeta(request, roomID, ""),
RoomId: roomID,
ViewerUserId: auth.UserIDFromContext(request.Context()),
})
if err != nil {
return err
}
room = roomLeaderboardRoomFromSnapshot(roomID, resp.GetRoom())
seen[roomID] = room
roomID := item.GetRoomId()
room := userLeaderboardRoomFromListItem(item.GetRoom())
if room == nil {
room = &userLeaderboardRoom{RoomID: roomID}
}
items[i].Room = room
out = append(out, userLeaderboardItem{
Rank: item.GetRank(),
RoomID: roomID,
GiftValue: item.GetCoinSpent(),
Room: room,
})
}
return out
}
func userLeaderboardRoomFromListItem(room *roomv1.RoomListItem) *userLeaderboardRoom {
if room == nil {
return nil
}
roomID := room.GetRoomId()
if roomID == "" {
return nil
}
return &userLeaderboardRoom{
RoomID: roomID,
RoomShortID: room.GetRoomShortId(),
Title: room.GetTitle(),
CoverURL: room.GetCoverUrl(),
RoomAvatar: room.GetCoverUrl(),
}
return nil
}
func roomLeaderboardRoomFromSnapshot(roomID string, snapshot *roomv1.RoomSnapshot) *userLeaderboardRoom {

View File

@ -1,6 +1,7 @@
package activityapi
import (
"context"
"testing"
"time"
@ -58,3 +59,67 @@ func TestRoomLeaderboardRoomFromSnapshotIncludesAvatar(t *testing.T) {
t.Fatalf("room avatar fields mismatch: %+v", room)
}
}
func TestUserLeaderboardItemsFromRoomGiftLeaderboardUsesRoomCard(t *testing.T) {
items := userLeaderboardItemsFromRoomGiftLeaderboard([]*roomv1.RoomGiftLeaderboardItem{{
Rank: 1,
RoomId: "room_1",
CoinSpent: 900,
Room: &roomv1.RoomListItem{
RoomId: "room_1",
RoomShortId: "1001",
Title: "Music Room",
CoverUrl: "https://cdn.example/room.png",
},
}})
if len(items) != 1 || items[0].RoomID != "room_1" || items[0].GiftValue != 900 {
t.Fatalf("room leaderboard item mismatch: %+v", items)
}
if items[0].Room == nil || items[0].Room.RoomShortID != "1001" || items[0].Room.RoomAvatar != "https://cdn.example/room.png" {
t.Fatalf("room leaderboard card mismatch: %+v", items[0].Room)
}
}
type fakeUserLeaderboardRoomQueryClient struct {
snapshotResp *roomv1.GetRoomSnapshotResponse
snapshotErr error
}
func (f *fakeUserLeaderboardRoomQueryClient) ListRooms(context.Context, *roomv1.ListRoomsRequest) (*roomv1.ListRoomsResponse, error) {
return &roomv1.ListRoomsResponse{}, nil
}
func (f *fakeUserLeaderboardRoomQueryClient) ListRoomFeeds(context.Context, *roomv1.ListRoomFeedsRequest) (*roomv1.ListRoomsResponse, error) {
return &roomv1.ListRoomsResponse{}, nil
}
func (f *fakeUserLeaderboardRoomQueryClient) ListRoomGiftLeaderboard(context.Context, *roomv1.ListRoomGiftLeaderboardRequest) (*roomv1.ListRoomGiftLeaderboardResponse, error) {
return &roomv1.ListRoomGiftLeaderboardResponse{}, nil
}
func (f *fakeUserLeaderboardRoomQueryClient) GetMyRoom(context.Context, *roomv1.GetMyRoomRequest) (*roomv1.GetMyRoomResponse, error) {
return &roomv1.GetMyRoomResponse{}, nil
}
func (f *fakeUserLeaderboardRoomQueryClient) GetCurrentRoom(context.Context, *roomv1.GetCurrentRoomRequest) (*roomv1.GetCurrentRoomResponse, error) {
return &roomv1.GetCurrentRoomResponse{}, nil
}
func (f *fakeUserLeaderboardRoomQueryClient) GetRoomSnapshot(context.Context, *roomv1.GetRoomSnapshotRequest) (*roomv1.GetRoomSnapshotResponse, error) {
if f.snapshotErr != nil {
return nil, f.snapshotErr
}
if f.snapshotResp != nil {
return f.snapshotResp, nil
}
return &roomv1.GetRoomSnapshotResponse{}, nil
}
func (f *fakeUserLeaderboardRoomQueryClient) GetRoomTreasure(context.Context, *roomv1.GetRoomTreasureRequest) (*roomv1.GetRoomTreasureResponse, error) {
return &roomv1.GetRoomTreasureResponse{}, nil
}
func (f *fakeUserLeaderboardRoomQueryClient) ListRoomOnlineUsers(context.Context, *roomv1.ListRoomOnlineUsersRequest) (*roomv1.ListRoomOnlineUsersResponse, error) {
return &roomv1.ListRoomOnlineUsersResponse{}, nil
}

View File

@ -721,6 +721,10 @@ func (f *fakeRoomQueryClient) ListRoomFeeds(_ context.Context, req *roomv1.ListR
return &roomv1.ListRoomsResponse{}, nil
}
func (f *fakeRoomQueryClient) ListRoomGiftLeaderboard(context.Context, *roomv1.ListRoomGiftLeaderboardRequest) (*roomv1.ListRoomGiftLeaderboardResponse, error) {
return &roomv1.ListRoomGiftLeaderboardResponse{}, nil
}
func (f *fakeRoomQueryClient) GetMyRoom(_ context.Context, req *roomv1.GetMyRoomRequest) (*roomv1.GetMyRoomResponse, error) {
f.lastMyRoom = req
if f.myRoomErr != nil {

View File

@ -204,6 +204,7 @@ func New(cfg config.Config) (*App, error) {
MicPublishTimeout: cfg.MicPublishTimeout,
RTCUserRemover: rtcUserRemover,
RoomTreasureOpenScheduler: treasureOpenScheduler,
RoomGiftLeaderboard: roomservice.NewRedisRoomGiftLeaderboardStore(redisClient),
}, directory, repository, integration.NewGRPCWalletClient(walletConn), roomPublisher, outboxPublisher, luckyGiftClient)
if cfg.RocketMQ.TreasureOpen.Enabled {
treasureConsumer, err := rocketmqx.NewConsumer(rocketMQConsumerConfig(cfg.RocketMQ, cfg.RocketMQ.TreasureOpen.ConsumerGroup, cfg.RocketMQ.TreasureOpen.ConsumerMaxReconsumeTimes))

View File

@ -221,6 +221,12 @@ func (s *Service) SendGift(ctx context.Context, req *roomv1.SendGiftRequest) (*r
luckyGift: luckyGift,
commandPayload: commandPayload,
walletDebitMS: walletDebitMS,
roomGiftLeaderboard: &RoomGiftLeaderboardIncrement{
AppCode: appcode.FromContext(ctx),
RoomID: current.RoomID,
CoinSpent: roomGiftLeaderboardCoinSpent(billing),
OccurredAtMS: now.UnixMilli(),
},
syncEvent: &tencentim.RoomEvent{
// 同步广播只选 GiftSent 主事件作为客户端房间系统消息Heat/Rank 通过字段携带。
EventID: giftEvent.EventID,
@ -258,6 +264,16 @@ func (s *Service) SendGift(ctx context.Context, req *roomv1.SendGiftRequest) (*r
}, nil
}
func roomGiftLeaderboardCoinSpent(billing *walletv1.DebitGiftResponse) int64 {
if billing == nil {
return 0
}
if billing.GetCoinSpent() > 0 {
return billing.GetCoinSpent()
}
return billing.GetChargeAmount()
}
func (s *Service) shouldDrawLuckyGift(poolID string, giftTypeCode string) bool {
if s.luckyGift == nil {
return false

View File

@ -158,6 +158,8 @@ func (s *Service) mutateRoom(ctx context.Context, cmd command.Command, replayabl
s.projectRoomListBestEffort(ctx, result.snapshot)
// 当前房间恢复读模型同样最终一致;权威校验仍以 Room Cell 快照为准。
s.projectRoomPresenceBestEffort(ctx, result.snapshot)
// 跨房间金币榜是 Redis 轻量读模型,不能影响已提交的房间状态和账务事实。
s.recordRoomGiftLeaderboardBestEffort(ctx, result.roomGiftLeaderboard)
projectionMS = elapsedMS(projectionStartedAt)
}

View File

@ -347,6 +347,14 @@ type RoomListQuery struct {
NowMS int64
}
// RoomListEntriesByIDQuery 是榜单等定向补全房间卡片时的批量读取条件。
type RoomListEntriesByIDQuery struct {
// AppCode 限定 App 边界,避免一个榜单读到其他 App 的同名 room_id。
AppCode string
// RoomIDs 是榜单已经命中的房间集合repository 必须按这些 key 精确读取。
RoomIDs []string
}
// RoomUserFeedEntry 是“访问过/好友/关注”房间流的读模型索引。
// 它只保存用户到房间的列表关系,不复制房间卡片字段,卡片内容仍来自 room_list_entries。
type RoomUserFeedEntry struct {
@ -492,6 +500,8 @@ type Repository interface {
UpsertRoomListEntry(ctx context.Context, entry RoomListEntry) error
// ListRoomListEntries 按区域和 tab 查询房间列表,不访问 Room Cell 内存。
ListRoomListEntries(ctx context.Context, query RoomListQuery) ([]RoomListEntry, error)
// ListRoomListEntriesByIDs 按房间 ID 精确读取列表卡片,用于榜单展示补全。
ListRoomListEntriesByIDs(ctx context.Context, query RoomListEntriesByIDQuery) (map[string]RoomListEntry, error)
// UpsertRoomUserFeedEntry 写入用户房间关系流读模型;失败不应影响房间主链路。
UpsertRoomUserFeedEntry(ctx context.Context, entry RoomUserFeedEntry) error
// ListRoomUserFeedEntries 按用户关系流读取房间卡片,不访问 Room Cell 内存集合。

View File

@ -0,0 +1,290 @@
package service
import (
"context"
"fmt"
"log/slog"
"math"
"strings"
"time"
"github.com/redis/go-redis/v9"
roomv1 "hyapp.local/api/proto/room/v1"
"hyapp/pkg/appcode"
"hyapp/pkg/logx"
"hyapp/pkg/xerr"
)
const (
roomGiftLeaderboardPeriodToday = "today"
roomGiftLeaderboardPeriodWeek = "week"
roomGiftLeaderboardPeriodMonth = "month"
defaultRoomGiftLeaderboardPageSize = 20
maxRoomGiftLeaderboardPageSize = 100
)
// RoomGiftLeaderboardStore 是房间金币榜的轻量读模型边界;生产实现使用 Redis zset。
type RoomGiftLeaderboardStore interface {
IncrementRoomGift(ctx context.Context, input RoomGiftLeaderboardIncrement) error
ListRoomGiftLeaderboard(ctx context.Context, query RoomGiftLeaderboardQuery) (RoomGiftLeaderboardPage, error)
}
type RoomGiftLeaderboardIncrement struct {
AppCode string
RoomID string
CoinSpent int64
OccurredAtMS int64
}
type RoomGiftLeaderboardQuery struct {
AppCode string
Period string
Page int
PageSize int
NowMS int64
}
type RoomGiftLeaderboardPage struct {
Items []RoomGiftLeaderboardEntry
Total int64
Period string
StartAtMS int64
EndAtMS int64
ServerTimeMS int64
}
type RoomGiftLeaderboardEntry struct {
Rank int64
RoomID string
CoinSpent int64
}
// RedisRoomGiftLeaderboardStore 只在 zset 中保存 room_id -> 周期金币消耗分。
type RedisRoomGiftLeaderboardStore struct {
client *redis.Client
}
func NewRedisRoomGiftLeaderboardStore(client *redis.Client) *RedisRoomGiftLeaderboardStore {
return &RedisRoomGiftLeaderboardStore{client: client}
}
func (s *RedisRoomGiftLeaderboardStore) IncrementRoomGift(ctx context.Context, input RoomGiftLeaderboardIncrement) error {
if s == nil || s.client == nil {
return xerr.New(xerr.Unavailable, "room gift leaderboard store is not configured")
}
app := appcode.Normalize(input.AppCode)
roomID := strings.TrimSpace(input.RoomID)
if roomID == "" || input.CoinSpent <= 0 {
return nil
}
occurredAt := time.UnixMilli(input.OccurredAtMS).UTC()
if input.OccurredAtMS <= 0 {
occurredAt = time.Now().UTC()
}
pipe := s.client.Pipeline()
for _, period := range []string{roomGiftLeaderboardPeriodToday, roomGiftLeaderboardPeriodWeek, roomGiftLeaderboardPeriodMonth} {
start, end := roomGiftLeaderboardWindow(period, occurredAt)
key := roomGiftLeaderboardKey(app, period, start)
pipe.ZIncrBy(ctx, key, float64(input.CoinSpent), roomID)
// Redis 榜单是可重建读模型TTL 只需要覆盖当前周期和排查窗口。
pipe.Expire(ctx, key, roomGiftLeaderboardTTL(period, start, end))
}
_, err := pipe.Exec(ctx)
return err
}
func (s *RedisRoomGiftLeaderboardStore) ListRoomGiftLeaderboard(ctx context.Context, query RoomGiftLeaderboardQuery) (RoomGiftLeaderboardPage, error) {
if s == nil || s.client == nil {
return RoomGiftLeaderboardPage{}, xerr.New(xerr.Unavailable, "room gift leaderboard store is not configured")
}
query = normalizeRoomGiftLeaderboardQuery(query)
now := time.UnixMilli(query.NowMS).UTC()
start, end := roomGiftLeaderboardWindow(query.Period, now)
key := roomGiftLeaderboardKey(appcode.Normalize(query.AppCode), query.Period, start)
offset := int64((query.Page - 1) * query.PageSize)
stop := offset + int64(query.PageSize) - 1
total, err := s.client.ZCard(ctx, key).Result()
if err != nil {
return RoomGiftLeaderboardPage{}, err
}
rows, err := s.client.ZRevRangeWithScores(ctx, key, offset, stop).Result()
if err != nil {
return RoomGiftLeaderboardPage{}, err
}
items := make([]RoomGiftLeaderboardEntry, 0, len(rows))
for i, row := range rows {
roomID, ok := row.Member.(string)
if !ok || strings.TrimSpace(roomID) == "" {
continue
}
items = append(items, RoomGiftLeaderboardEntry{
Rank: offset + int64(i) + 1,
RoomID: roomID,
CoinSpent: int64(math.Round(row.Score)),
})
}
return RoomGiftLeaderboardPage{
Items: items,
Total: total,
Period: query.Period,
StartAtMS: start.UnixMilli(),
EndAtMS: end.UnixMilli(),
ServerTimeMS: now.UnixMilli(),
}, nil
}
func (s *Service) ListRoomGiftLeaderboard(ctx context.Context, req *roomv1.ListRoomGiftLeaderboardRequest) (*roomv1.ListRoomGiftLeaderboardResponse, error) {
ctx = appcode.WithContext(ctx, req.GetMeta().GetAppCode())
if s.roomGiftLeaderboard == nil {
return nil, xerr.New(xerr.Unavailable, "room gift leaderboard store is not configured")
}
period := normalizeRoomGiftLeaderboardPeriod(req.GetPeriod())
if period == "" {
return nil, xerr.New(xerr.InvalidArgument, "period is invalid")
}
page := int(req.GetPage())
if page <= 0 {
page = 1
}
pageSize := int(req.GetPageSize())
if pageSize <= 0 {
pageSize = defaultRoomGiftLeaderboardPageSize
}
if pageSize > maxRoomGiftLeaderboardPageSize {
pageSize = maxRoomGiftLeaderboardPageSize
}
result, err := s.roomGiftLeaderboard.ListRoomGiftLeaderboard(ctx, RoomGiftLeaderboardQuery{
AppCode: appcode.FromContext(ctx),
Period: period,
Page: page,
PageSize: pageSize,
NowMS: s.clock.Now().UnixMilli(),
})
if err != nil {
return nil, err
}
roomIDs := make([]string, 0, len(result.Items))
for _, item := range result.Items {
roomIDs = append(roomIDs, item.RoomID)
}
cards, err := s.repository.ListRoomListEntriesByIDs(ctx, RoomListEntriesByIDQuery{
AppCode: appcode.FromContext(ctx),
RoomIDs: roomIDs,
})
if err != nil {
return nil, err
}
items := make([]*roomv1.RoomGiftLeaderboardItem, 0, len(result.Items))
for _, item := range result.Items {
protoItem := &roomv1.RoomGiftLeaderboardItem{
Rank: item.Rank,
RoomId: item.RoomID,
CoinSpent: item.CoinSpent,
}
if card, ok := cards[item.RoomID]; ok {
protoItem.Room = roomListItemToProto(card)
}
items = append(items, protoItem)
}
return &roomv1.ListRoomGiftLeaderboardResponse{
Items: items,
Total: result.Total,
Period: result.Period,
StartAtMs: result.StartAtMS,
EndAtMs: result.EndAtMS,
ServerTimeMs: result.ServerTimeMS,
}, nil
}
func (s *Service) recordRoomGiftLeaderboardBestEffort(ctx context.Context, input *RoomGiftLeaderboardIncrement) {
if s == nil || s.roomGiftLeaderboard == nil || input == nil {
return
}
if err := s.roomGiftLeaderboard.IncrementRoomGift(ctx, *input); err != nil {
// 榜单 zset 是可重建读模型,失败不能回滚已提交房间命令和账务事实。
logx.Warn(ctx, "room_gift_leaderboard_update_failed", slog.String("room_id", input.RoomID), slog.Int64("coin_spent", input.CoinSpent), slog.String("error", err.Error()))
return
}
}
func normalizeRoomGiftLeaderboardQuery(query RoomGiftLeaderboardQuery) RoomGiftLeaderboardQuery {
query.AppCode = appcode.Normalize(query.AppCode)
query.Period = normalizeRoomGiftLeaderboardPeriod(query.Period)
if query.Period == "" {
query.Period = roomGiftLeaderboardPeriodToday
}
if query.Page <= 0 {
query.Page = 1
}
if query.PageSize <= 0 {
query.PageSize = defaultRoomGiftLeaderboardPageSize
}
if query.PageSize > maxRoomGiftLeaderboardPageSize {
query.PageSize = maxRoomGiftLeaderboardPageSize
}
if query.NowMS <= 0 {
query.NowMS = time.Now().UTC().UnixMilli()
}
return query
}
func normalizeRoomGiftLeaderboardPeriod(raw string) string {
switch strings.ToLower(strings.TrimSpace(raw)) {
case "", roomGiftLeaderboardPeriodToday, "day", "daily":
return roomGiftLeaderboardPeriodToday
case roomGiftLeaderboardPeriodWeek, "weekly":
return roomGiftLeaderboardPeriodWeek
case roomGiftLeaderboardPeriodMonth, "monthly":
return roomGiftLeaderboardPeriodMonth
default:
return ""
}
}
func roomGiftLeaderboardWindow(period string, now time.Time) (time.Time, time.Time) {
dayStart := time.Date(now.UTC().Year(), now.UTC().Month(), now.UTC().Day(), 0, 0, 0, 0, time.UTC)
switch period {
case roomGiftLeaderboardPeriodWeek:
weekday := int(dayStart.Weekday())
if weekday == 0 {
weekday = 7
}
start := dayStart.AddDate(0, 0, 1-weekday)
return start, start.AddDate(0, 0, 7)
case roomGiftLeaderboardPeriodMonth:
start := time.Date(dayStart.Year(), dayStart.Month(), 1, 0, 0, 0, 0, time.UTC)
return start, start.AddDate(0, 1, 0)
default:
return dayStart, dayStart.AddDate(0, 0, 1)
}
}
func roomGiftLeaderboardKey(app string, period string, start time.Time) string {
switch period {
case roomGiftLeaderboardPeriodWeek:
year, week := start.ISOWeek()
return fmt.Sprintf("room:gift_leaderboard:%s:week:%04d%02d", appcode.Normalize(app), year, week)
case roomGiftLeaderboardPeriodMonth:
return fmt.Sprintf("room:gift_leaderboard:%s:month:%04d%02d", appcode.Normalize(app), start.Year(), int(start.Month()))
default:
return fmt.Sprintf("room:gift_leaderboard:%s:day:%s", appcode.Normalize(app), start.Format("20060102"))
}
}
func roomGiftLeaderboardTTL(period string, start time.Time, end time.Time) time.Duration {
switch period {
case roomGiftLeaderboardPeriodMonth:
return end.Sub(start) + 35*24*time.Hour
case roomGiftLeaderboardPeriodWeek:
return end.Sub(start) + 21*24*time.Hour
default:
return end.Sub(start) + 7*24*time.Hour
}
}

View File

@ -34,6 +34,8 @@ type Config struct {
RTCUserRemover integration.RTCUserRemover
// RoomTreasureOpenScheduler 把倒计时开箱唤醒交给外部延迟消息,避免只靠已加载 Cell 扫描。
RoomTreasureOpenScheduler integration.RoomTreasureOpenScheduler
// RoomGiftLeaderboard 是跨房间金币榜读模型SendGift 提交后 best-effort 写入。
RoomGiftLeaderboard RoomGiftLeaderboardStore
// Clock 允许测试注入稳定时间,生产默认使用系统时钟。
Clock clock.Clock
}
@ -68,6 +70,8 @@ type Service struct {
outboxPublisher integration.OutboxPublisher
// roomTreasureOpenScheduler 在 countdown outbox 投递成功后安排 open_at_ms 唤醒。
roomTreasureOpenScheduler integration.RoomTreasureOpenScheduler
// roomGiftLeaderboard 只保存房间维度金币消耗 zset不承载 Room Cell 核心状态。
roomGiftLeaderboard RoomGiftLeaderboardStore
// rtcUserRemover 在 Room Cell 提交驱逐后同步移除实时音频房连接。
rtcUserRemover integration.RTCUserRemover
// draining 表示当前节点正在下线,只允许已经进入执行链路的命令收尾。
@ -118,6 +122,8 @@ type mutationResult struct {
closeInfo *RoomCloseInfo
// walletDebitMS 记录 SendGift 同步扣费耗时;非钱包命令保持 0。
walletDebitMS int64
// roomGiftLeaderboard 是 SendGift 成功后写入跨房间金币榜的轻量增量。
roomGiftLeaderboard *RoomGiftLeaderboardIncrement
}
// New 初始化 room-service 领域服务。
@ -172,6 +178,7 @@ func New(cfg Config, directory router.Directory, repository Repository, wallet i
syncPublisher: syncPublisher,
outboxPublisher: outboxPublisher,
roomTreasureOpenScheduler: cfg.RoomTreasureOpenScheduler,
roomGiftLeaderboard: cfg.RoomGiftLeaderboard,
rtcUserRemover: cfg.RTCUserRemover,
cells: make(map[string]*cell.RoomCell),
}

View File

@ -1323,6 +1323,79 @@ func (r *Repository) ListRoomListEntries(ctx context.Context, query roomservice.
return entries, nil
}
// ListRoomListEntriesByIDs 按榜单已命中的 room_id 批量读取列表卡片。
func (r *Repository) ListRoomListEntriesByIDs(ctx context.Context, query roomservice.RoomListEntriesByIDQuery) (map[string]roomservice.RoomListEntry, error) {
appCode := normalizedRecordAppCode(ctx, query.AppCode)
roomIDs := uniqueRoomListIDs(query.RoomIDs)
result := make(map[string]roomservice.RoomListEntry, len(roomIDs))
if len(roomIDs) == 0 {
return result, nil
}
placeholders := strings.TrimRight(strings.Repeat("?,", len(roomIDs)), ",")
args := make([]any, 0, len(roomIDs)+1)
args = append(args, appCode)
for _, roomID := range roomIDs {
args = append(args, roomID)
}
rows, err := r.db.QueryContext(ctx, `
SELECT app_code, room_id, room_short_id, visible_region_id, owner_user_id, title, cover_url, mode, status, locked,
heat, online_count, seat_count, occupied_seat_count, sort_score, created_at_ms, updated_at_ms
FROM room_list_entries
WHERE app_code = ? AND room_id IN (`+placeholders+`)`, args...)
if err != nil {
return nil, err
}
defer rows.Close()
for rows.Next() {
var entry roomservice.RoomListEntry
if err := rows.Scan(
&entry.AppCode,
&entry.RoomID,
&entry.RoomShortID,
&entry.VisibleRegionID,
&entry.OwnerUserID,
&entry.Title,
&entry.CoverURL,
&entry.Mode,
&entry.Status,
&entry.Locked,
&entry.Heat,
&entry.OnlineCount,
&entry.SeatCount,
&entry.OccupiedSeatCount,
&entry.SortScore,
&entry.CreatedAtMS,
&entry.UpdatedAtMS,
); err != nil {
return nil, err
}
result[entry.RoomID] = entry
}
if err := rows.Err(); err != nil {
return nil, err
}
return result, nil
}
func uniqueRoomListIDs(values []string) []string {
seen := make(map[string]struct{}, len(values))
out := make([]string, 0, len(values))
for _, value := range values {
value = strings.TrimSpace(value)
if value == "" {
continue
}
if _, ok := seen[value]; ok {
continue
}
seen[value] = struct{}{}
out = append(out, value)
}
return out
}
// UpsertRoomUserFeedEntry 写入用户房间关系流索引。
func (r *Repository) UpsertRoomUserFeedEntry(ctx context.Context, entry roomservice.RoomUserFeedEntry) error {
// feed 只保存用户到房间的索引;房间卡片字段仍以 room_list_entries 为准,避免复制不一致。

View File

@ -430,6 +430,13 @@ func (s *Server) ListRoomFeeds(ctx context.Context, req *roomv1.ListRoomFeedsReq
return mapServiceResult(s.svc.ListRoomFeeds(ctx, req))
}
// ListRoomGiftLeaderboard 代理到 Redis zset 房间金币榜读模型。
func (s *Server) ListRoomGiftLeaderboard(ctx context.Context, req *roomv1.ListRoomGiftLeaderboardRequest) (*roomv1.ListRoomGiftLeaderboardResponse, error) {
// 房间榜只读 room-service 维护的金币 zset并用 room_list_entries 批量补卡片。
ctx = contextWithMetaApp(ctx, req.GetMeta())
return mapServiceResult(s.svc.ListRoomGiftLeaderboard(ctx, req))
}
// GetMyRoom 代理到 Mine 顶部“我的房间”权威查询。
func (s *Server) GetMyRoom(ctx context.Context, req *roomv1.GetMyRoomRequest) (*roomv1.GetMyRoomResponse, error) {
// 我的房间查询直接读取 rooms 元数据,并用快照补齐实时卡片字段,不依赖发现页投影。