Merge branch 'v2.3.0release'

This commit is contained in:
wangchuxiao 2022-07-15 16:49:44 +08:00
commit 026f61126a
35 changed files with 1246 additions and 644 deletions

View File

@ -139,15 +139,16 @@ func main() {
chatGroup.POST("/send_msg", apiChat.SendMsg)
chatGroup.POST("/pull_msg_by_seq", apiChat.PullMsgBySeqList)
chatGroup.POST("/del_msg", apiChat.DelMsg)
chatGroup.POST("/del_super_group_msg", apiChat.DelSuperGroupMsg)
chatGroup.POST("/clear_msg", apiChat.ClearMsg)
chatGroup.POST("/manage_send_msg", manage.ManagementSendMsg)
chatGroup.POST("/batch_send_msg", manage.ManagementBatchSendMsg)
}
//Manager
managementGroup := r.Group("/manager")
{
managementGroup.POST("/delete_user", manage.DeleteUser) //1
}
//managementGroup := r.Group("/manager")
//{
// managementGroup.POST("/delete_user", manage.DeleteUser) //1
//}
//Conversation
conversationGroup := r.Group("/conversation")
{ //1

View File

@ -38,6 +38,7 @@ redis:
dbMaxIdle: 128
dbMaxActive: 0
dbIdleTimeout: 120
dbUserName: #only redis version 6.0+ need username
dbPassWord: openIM #redis密码 建议修改
enableCluster: false #如果外部redis以集群方式启动需要打开此开关
@ -174,7 +175,7 @@ rpcregistername: #rpc注册服务名默认即可
log:
storageLocation: ../logs/
rotationTime: 24
remainRotationCount: 3 #日志数量
remainRotationCount: 2 #日志数量
#日志级别 6表示全都打印测试阶段建议设置为6
remainLogLevel: 6
elasticSearchSwitch: false
@ -706,6 +707,7 @@ demo:
superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代
# second
codeTTL: 60
useSuperCode: true
mail: #仅支持qq邮箱具体操作参考 https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256 必须修改
title: "openIM"
senderMail: "765567899@qq.com"

139
docker-compose-mongos.yaml Normal file
View File

@ -0,0 +1,139 @@
version: "3"
#fixme Clone openIM Server project before using docker-compose,project addresshttps://github.com/OpenIMSDK/Open-IM-Server.git
services:
mysql:
image: mysql:5.7
ports:
- 13306:3306
- 23306:33060
container_name: mysql
volumes:
- ./components/mysql/data:/var/lib/mysql
- /etc/localtime:/etc/localtime
environment:
MYSQL_ROOT_PASSWORD: openIM
restart: always
mongos:
image: mongo:latest
ports:
- 37017:27017
container_name: mongos
command: mongos --configdb config/103.116.45.174:27019 --bind_ip_all
volumes:
- ./components/mongos_mongodb/data/db:/data/db
- ./components/mongos_mongodb/data/logs:/data/logs
- ./components/mongos_mongodb/data/conf:/etc/mongo
- ./components/mongos_mongodb/data/configdb:/data/configdb
environment:
- TZ=Asia/Shanghai
# cache
- wiredTigerCacheSizeGB=1
# environment:
# - MONGO_INITDB_ROOT_USERNAME=openIM
# - MONGO_INITDB_ROOT_PASSWORD=openIM
#TZ: Asia/Shanghai
restart: always
redis:
image: redis
ports:
- 16379:6379
container_name: redis
volumes:
- ./components/redis/data:/data
#redis config file
- ./components/redis/config/redis.conf:/usr/local/redis/config/redis.conf
environment:
TZ: Asia/Shanghai
restart: always
sysctls:
net.core.somaxconn: 1024
command: redis-server --requirepass openIM --appendonly yes
zookeeper:
image: wurstmeister/zookeeper
ports:
- 2181:2181
container_name: zookeeper
volumes:
- /etc/localtime:/etc/localtime
environment:
TZ: Asia/Shanghai
restart: always
kafka:
image: wurstmeister/kafka
container_name: kafka
restart: always
ports:
- 9092:9092
environment:
TZ: Asia/Shanghai
KAFKA_BROKER_ID: 0
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CREATE_TOPICS: "ws2ms_chat:8:1,ms2ps_chat:8:1,msg_to_mongo:8:1"
KAFKA_ADVERTISED_LISTENERS: INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9092
KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT"
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
depends_on:
- zookeeper
etcd:
image: quay.io/coreos/etcd
ports:
- 2379:2379
- 2380:2380
container_name: etcd
volumes:
- /etc/timezone:/etc/timezone
- /etc/localtime:/etc/localtime
environment:
ETCDCTL_API: 3
restart: always
command: /usr/local/bin/etcd --name etcd0 --data-dir /etcd-data --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 --listen-peer-urls http://0.0.0.0:2380 --initial-advertise-peer-urls http://0.0.0.0:2380 --initial-cluster etcd0=http://0.0.0.0:2380 --initial-cluster-token tkn --initial-cluster-state new
minio:
image: minio/minio
ports:
- 10005:9000
- 9090:9090
container_name: minio
volumes:
- /mnt/data:/data
- /mnt/config:/root/.minio
environment:
MINIO_ROOT_USER: user12345
MINIO_ROOT_PASSWORD: key12345
restart: always
command: minio server /data --console-address ':9090'
open_im_server:
image: openim/open_im_server:v2.2.0
container_name: open_im_server
volumes:
- ./logs:/Open-IM-Server/logs
- ./config/config.yaml:/Open-IM-Server/config/config.yaml
- ./db/sdk:/Open-IM-Server/db/sdk
- ./script:/Open-IM-Server/script
restart: always
depends_on:
- kafka
- mysql
- mongos
- redis
- etcd
- minio
network_mode: "host"
logging:
driver: json-file
options:
max-size: "1g"
max-file: "2"

View File

@ -0,0 +1,113 @@
version: '3'
networks:
mongo-network:
external: false
services:
# 配置服务器configsvr
config:
image: mongo:latest
networks:
- mongo-network
container_name: config
restart: always
ports:
- 27019:27019
command: --configsvr --replSet "config" --bind_ip_all
volumes:
- ./components/config_mongodb/data/db:/data/db
- ./components/config_mongodb/data/logs:/data/logs
- ./components/config_mongodb/data/conf:/etc/mongo
- ./components/config_mongodb/data/configdb:/data/configdb
environment:
- TZ=Asia/Shanghai
# cache
- wiredTigerCacheSizeGB=1
# shard分片1
shard1:
image: mongo:latest
networks:
- mongo-network
container_name: shard1
restart: always
ports:
- 27118:27018
command: --shardsvr --replSet "shard1" --bind_ip_all
volumes:
- /data01/mongo/shard1/db:/data/db
- /data01/mongo/shard1/configdb:/data/configdb
environment:
- TZ=Asia/Shanghai
# cache
- wiredTigerCacheSizeGB=1
# shard分片2
shard2:
image: mongo:latest
networks:
- mongo-network
container_name: shard2
restart: always
ports:
- 27218:27018
command: --shardsvr --replSet "shard2" --bind_ip_all
volumes:
- /data02/mongo/shard2/db:/data/db
- /data02/mongo/shard2/configdb:/data/configdb
environment:
- TZ=Asia/Shanghai
# cache
- wiredTigerCacheSizeGB=1
# - ${PWD}/key.file:/data/mongodb/key.file
# shard分片3
shard3:
image: mongo:latest
networks:
- mongo-network
container_name: shard3
restart: always
ports:
- 27318:27018
command: --shardsvr --replSet "shard3" --bind_ip_all
volumes:
- /data03/mongo/shard3/db:/data/db
- /data03/mongo/shard3/configdb:/data/configdb
environment:
- TZ=Asia/Shanghai
# cache
- wiredTigerCacheSizeGB=1
# shard分片4
shard4:
image: mongo:latest
networks:
- mongo-network
container_name: shard4
restart: always
ports:
- 27418:27018
command: --shardsvr --replSet "shard4" --bind_ip_all
volumes:
- /data04/mongo/shard4/db:/data/db
- /data04/mongo/shard4/configdb:/data/configdb
environment:
- TZ=Asia/Shanghai
# cache
- wiredTigerCacheSizeGB=1
# shard分片5
shard5:
image: mongo:latest
networks:
- mongo-network
container_name: shard5
restart: always
ports:
- 27518:27018
command: --shardsvr --replSet "shard5" --bind_ip_all
volumes:
- /data05/mongo/shard5/db:/data/db
- /data05/mongo/shard5/configdb:/data/configdb
environment:
- TZ=Asia/Shanghai
# cache
- wiredTigerCacheSizeGB=1

View File

@ -12,6 +12,7 @@ import (
"Open_IM/pkg/utils"
"context"
"github.com/gin-gonic/gin"
"github.com/golang/protobuf/proto"
"net/http"
"strings"
)
@ -72,6 +73,83 @@ func DelMsg(c *gin.Context) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp)
c.JSON(http.StatusOK, resp)
}
func DelSuperGroupMsg(c *gin.Context) {
var (
req api.DelSuperGroupMsgReq
resp api.DelSuperGroupMsgResp
)
if err := c.BindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req)
ok, opUserID, errInfo := token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
if !ok {
errMsg := req.OperationID + " " + opUserID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
options := make(map[string]bool, 5)
utils.SetSwitchFromOptions(options, constant.IsConversationUpdate, false)
utils.SetSwitchFromOptions(options, constant.IsSenderConversationUpdate, false)
utils.SetSwitchFromOptions(options, constant.IsUnreadCount, false)
utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false)
pbData := rpc.SendMsgReq{
OperationID: req.OperationID,
MsgData: &pbCommon.MsgData{
SendID: req.UserID,
RecvID: req.UserID,
ClientMsgID: utils.GetMsgID(req.UserID),
SessionType: constant.SingleChatType,
MsgFrom: constant.SysMsgType,
ContentType: constant.MsgDeleteNotification,
// ForceList: params.ForceList,
CreateTime: utils.GetCurrentTimestampByMill(),
Options: options,
},
}
var tips pbCommon.TipsComm
deleteMsg := api.MsgDeleteNotificationElem{
GroupID: req.GroupID,
IsAllDelete: req.IsAllDelete,
SeqList: req.SeqList,
}
tips.JsonDetail = utils.StructToJsonString(deleteMsg)
var err error
pbData.MsgData.Content, err = proto.Marshal(&tips)
if err != nil {
log.Error(req.OperationID, "Marshal failed ", err.Error(), tips.String())
resp.ErrCode = 400
resp.ErrMsg = err.Error()
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp)
c.JSON(http.StatusOK, resp)
}
log.Info(req.OperationID, "", "api DelSuperGroupMsg call start..., [data: %s]", pbData.String())
etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName, req.OperationID)
if etcdConn == nil {
errMsg := req.OperationID + "getcdv3.GetConn == nil"
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := rpc.NewChatClient(etcdConn)
log.Info(req.OperationID, "", "api DelSuperGroupMsg call, api call rpc...")
RpcResp, err := client.SendMsg(context.Background(), &pbData)
if err != nil {
log.NewError(req.OperationID, "call delete UserSendMsg rpc server failed", err.Error())
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call UserSendMsg rpc server failed"})
return
}
log.Info(req.OperationID, "", "api DelSuperGroupMsg call end..., [data: %s] [reply: %s]", pbData.String(), RpcResp.String())
resp.ErrCode = RpcResp.ErrCode
resp.ErrMsg = RpcResp.ErrMsg
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp)
c.JSON(http.StatusOK, resp)
}
// @Summary 清空用户消息
// @Description 清空用户消息

View File

@ -3,6 +3,7 @@ package group
import (
api "Open_IM/pkg/base_info"
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/constant"
"Open_IM/pkg/common/log"
"Open_IM/pkg/common/token_verify"
"Open_IM/pkg/grpc-etcdv3/getcdv3"
@ -316,7 +317,12 @@ func InviteUserToGroup(c *gin.Context) {
}
req := &rpc.InviteUserToGroupReq{}
utils.CopyStructFields(req, &params)
if len(req.InvitedUserIDList) > constant.MaxNotificationNum {
errMsg := req.OperationID + " too many, Limit: " + utils.IntToString(constant.MaxNotificationNum)
log.NewError(req.OperationID, errMsg, len(req.InvitedUserIDList))
c.JSON(http.StatusRequestEntityTooLarge, gin.H{"errCode": 400, "errMsg": errMsg})
return
}
var ok bool
var errInfo string
ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
@ -779,12 +785,7 @@ func SetGroupInfo(c *gin.Context) {
req := &rpc.SetGroupInfoReq{GroupInfoForSet: &open_im_sdk.GroupInfoForSet{}}
utils.CopyStructFields(req.GroupInfoForSet, &params)
req.OperationID = params.OperationID
if params.NeedVerification != nil {
req.GroupInfoForSet.NeedVerification = &wrappers.Int32Value{Value: *params.NeedVerification}
log.NewInfo(req.OperationID, "NeedVerification ", req.GroupInfoForSet.NeedVerification)
}
argsHandle(&params, req)
var ok bool
var errInfo string
ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
@ -815,6 +816,20 @@ func SetGroupInfo(c *gin.Context) {
c.JSON(http.StatusOK, resp)
log.NewInfo(req.OperationID, "SetGroupInfo api return ", resp)
}
func argsHandle(params *api.SetGroupInfoReq, req *rpc.SetGroupInfoReq) {
if params.NeedVerification != nil {
req.GroupInfoForSet.NeedVerification = &wrappers.Int32Value{Value: *params.NeedVerification}
log.NewInfo(req.OperationID, "NeedVerification ", req.GroupInfoForSet.NeedVerification)
}
if params.LookMemberInfo != nil {
req.GroupInfoForSet.LookMemberInfo = &wrappers.Int32Value{Value: *params.LookMemberInfo}
log.NewInfo(req.OperationID, "LookMemberInfo ", req.GroupInfoForSet.LookMemberInfo)
}
if params.ApplyMemberFriend != nil {
req.GroupInfoForSet.ApplyMemberFriend = &wrappers.Int32Value{Value: *params.ApplyMemberFriend}
log.NewInfo(req.OperationID, "ApplyMemberFriend ", req.GroupInfoForSet.ApplyMemberFriend)
}
}
// @Summary 转让群主
// @Description 转让群主

View File

@ -47,7 +47,7 @@ func GetJoinedSuperGroupList(c *gin.Context) {
}
GroupListResp := api.GetJoinedSuperGroupListResp{GetJoinedGroupListResp: api.GetJoinedGroupListResp{CommResp: api.CommResp{ErrCode: rpcResp.CommonResp.ErrCode, ErrMsg: rpcResp.CommonResp.ErrMsg}, GroupInfoList: rpcResp.GroupList}}
GroupListResp.Data = jsonData.JsonDataList(GroupListResp.GroupInfoList)
log.NewInfo(req.OperationID, "GetJoinedGroupList api return ", GroupListResp)
log.NewInfo(req.OperationID, "GetJoinedSuperGroupList api return ", GroupListResp)
c.JSON(http.StatusOK, GroupListResp)
}

View File

@ -15,6 +15,7 @@ import (
)
type ParamsLogin struct {
UserID string `json:"userID"`
Email string `json:"email"`
PhoneNumber string `json:"phoneNumber"`
Password string `json:"password"`
@ -32,11 +33,13 @@ func Login(c *gin.Context) {
var account string
if params.Email != "" {
account = params.Email
} else {
} else if params.PhoneNumber != "" {
account = params.PhoneNumber
} else {
account = params.UserID
}
r, err := im_mysql_model.GetRegister(account, params.AreaCode)
r, err := im_mysql_model.GetRegister(account, params.AreaCode, params.UserID)
if err != nil {
log.NewError(params.OperationID, "user have not register", params.Password, account, err.Error())
c.JSON(http.StatusOK, gin.H{"errCode": constant.NotRegistered, "errMsg": "Mobile phone number is not registered"})

View File

@ -34,7 +34,8 @@ func ResetPassword(c *gin.Context) {
} else {
account = req.PhoneNumber
}
if req.VerificationCode != config.Config.Demo.SuperCode {
if (config.Config.Demo.UseSuperCode && req.VerificationCode != config.Config.Demo.SuperCode) || !config.Config.Demo.UseSuperCode {
accountKey := req.AreaCode + account + "_" + constant.VerificationCodeForResetSuffix
v, err := db.DB.GetAccountCode(accountKey)
if err != nil || v != req.VerificationCode {
@ -43,7 +44,7 @@ func ResetPassword(c *gin.Context) {
return
}
}
user, err := im_mysql_model.GetRegister(account, req.AreaCode)
user, err := im_mysql_model.GetRegister(account, req.AreaCode, "")
if err != nil || user.Account == "" {
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "get register error", err.Error())

View File

@ -66,7 +66,7 @@ func SendVerificationCode(c *gin.Context) {
}
switch params.UsedFor {
case constant.VerificationCodeForRegister:
_, err := im_mysql_model.GetRegister(account, params.AreaCode)
_, err := im_mysql_model.GetRegister(account, params.AreaCode, "")
if err == nil {
log.NewError(params.OperationID, "The phone number has been registered", params)
c.JSON(http.StatusOK, gin.H{"errCode": constant.HasRegistered, "errMsg": "The phone number has been registered"})

View File

@ -18,6 +18,7 @@ import (
)
type ParamsSetPassword struct {
UserID string `json:"userID"`
Email string `json:"email"`
Nickname string `json:"nickname"`
PhoneNumber string `json:"phoneNumber"`
@ -40,29 +41,37 @@ func SetPassword(c *gin.Context) {
var account string
if params.Email != "" {
account = params.Email
} else {
} else if params.PhoneNumber != "" {
account = params.PhoneNumber
} else {
account = params.UserID
}
if params.Nickname == "" {
params.Nickname = account
}
if params.VerificationCode != config.Config.Demo.SuperCode {
accountKey := params.AreaCode + account + "_" + constant.VerificationCodeForRegisterSuffix
v, err := db.DB.GetAccountCode(accountKey)
if err != nil || v != params.VerificationCode {
log.NewError(params.OperationID, "password Verification code error", account, params.VerificationCode)
data := make(map[string]interface{})
data["PhoneNumber"] = account
c.JSON(http.StatusOK, gin.H{"errCode": constant.CodeInvalidOrExpired, "errMsg": "Verification code error!", "data": data})
return
if params.UserID == "" {
if (config.Config.Demo.UseSuperCode && params.VerificationCode != config.Config.Demo.SuperCode) || !config.Config.Demo.UseSuperCode {
accountKey := params.AreaCode + account + "_" + constant.VerificationCodeForRegisterSuffix
v, err := db.DB.GetAccountCode(accountKey)
if err != nil || v != params.VerificationCode {
log.NewError(params.OperationID, "password Verification code error", account, params.VerificationCode)
data := make(map[string]interface{})
data["PhoneNumber"] = account
c.JSON(http.StatusOK, gin.H{"errCode": constant.CodeInvalidOrExpired, "errMsg": "Verification code error!", "data": data})
return
}
}
}
//userID := utils.Base64Encode(account)
userID := utils.Md5(params.OperationID + strconv.FormatInt(time.Now().UnixNano(), 10))
bi := big.NewInt(0)
bi.SetString(userID[0:8], 16)
userID = bi.String()
var userID string
if params.UserID == "" {
userID = utils.Md5(params.OperationID + strconv.FormatInt(time.Now().UnixNano(), 10))
bi := big.NewInt(0)
bi.SetString(userID[0:8], 16)
userID = bi.String()
} else {
userID = params.UserID
}
url := config.Config.Demo.ImAPIURL + "/auth/user_register"
openIMRegisterReq := api.UserRegisterReq{}
@ -73,6 +82,7 @@ func SetPassword(c *gin.Context) {
openIMRegisterReq.Secret = config.Config.Secret
openIMRegisterReq.FaceURL = params.FaceURL
openIMRegisterResp := api.UserRegisterResp{}
log.NewDebug(params.OperationID, utils.GetSelfFuncName(), "register req:", openIMRegisterReq)
bMsg, err := http2.Post(url, openIMRegisterReq, 2)
if err != nil {
log.NewError(params.OperationID, "request openIM register error", account, "err", err.Error())
@ -97,7 +107,9 @@ func SetPassword(c *gin.Context) {
}
log.Info(params.OperationID, "end setPassword", account, params.Password)
// demo onboarding
onboardingProcess(params.OperationID, userID, params.Nickname, params.FaceURL, params.AreaCode+params.PhoneNumber, params.Email)
if params.UserID == "" {
onboardingProcess(params.OperationID, userID, params.Nickname, params.FaceURL, params.AreaCode+params.PhoneNumber, params.Email)
}
c.JSON(http.StatusOK, gin.H{"errCode": constant.NoError, "errMsg": "", "data": openIMRegisterResp.UserToken})
return
}

View File

@ -40,7 +40,7 @@ func Verify(c *gin.Context) {
account = params.AreaCode + params.PhoneNumber
}
if params.VerificationCode == config.Config.Demo.SuperCode {
if config.Config.Demo.UseSuperCode && params.VerificationCode == config.Config.Demo.SuperCode {
log.NewInfo(params.OperationID, "Super Code Verified successfully", account)
data := make(map[string]interface{})
data["account"] = account

View File

@ -233,30 +233,32 @@ func MsgToSuperGroupUser(pushMsg *pbPush.PushMsgReq) {
}
}
if len(onlineFailedUserIDList) > 0 {
callbackResp := callbackOfflinePush(pushMsg.OperationID, onlineFailedUserIDList[0], pushMsg.MsgData)
log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp")
if callbackResp.ErrCode != 0 {
log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp)
}
if callbackResp.ActionCode != constant.ActionAllow {
log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop")
return
}
if offlinePusher == nil {
return
}
opts, err := GetOfflinePushOpts(pushMsg)
if err != nil {
log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error())
}
log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), onlineFailedUserIDList, content, jsonCustomContent, "opts:", opts)
pushResult, err := offlinePusher.Push(onlineFailedUserIDList, content, jsonCustomContent, pushMsg.OperationID, opts)
if err != nil {
log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error())
} else {
log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData)
}
}
callbackResp := callbackOfflinePush(pushMsg.OperationID, onlineFailedUserIDList[0], pushMsg.MsgData)
log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offline callback Resp")
if callbackResp.ErrCode != 0 {
log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "callbackOfflinePush result: ", callbackResp)
}
if callbackResp.ActionCode != constant.ActionAllow {
log.NewDebug(pushMsg.OperationID, utils.GetSelfFuncName(), "offlinePush stop")
return
}
if offlinePusher == nil {
return
}
opts, err := GetOfflinePushOpts(pushMsg)
if err != nil {
log.NewError(pushMsg.OperationID, utils.GetSelfFuncName(), "GetOfflinePushOpts failed", pushMsg, err.Error())
}
log.NewInfo(pushMsg.OperationID, utils.GetSelfFuncName(), onlineFailedUserIDList, content, jsonCustomContent, "opts:", opts)
pushResult, err := offlinePusher.Push(onlineFailedUserIDList, content, jsonCustomContent, pushMsg.OperationID, opts)
if err != nil {
log.NewError(pushMsg.OperationID, "offline push error", pushMsg.String(), err.Error())
} else {
log.NewDebug(pushMsg.OperationID, "offline push return result is ", pushResult, pushMsg.MsgData)
}
}
}

View File

@ -106,6 +106,10 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
utils.CopyStructFields(&groupInfo, req.GroupInfo)
groupInfo.CreatorUserID = req.OpUserID
groupInfo.GroupID = groupId
if groupInfo.NotificationUpdateTime.Unix() < 0 {
groupInfo.NotificationUpdateTime = utils.UnixSecondToTime(0)
}
err := imdb.InsertIntoGroup(groupInfo)
if err != nil {
log.NewError(req.OperationID, "InsertIntoGroup failed, ", err.Error(), groupInfo)
@ -122,7 +126,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
return &pbGroup.CreateGroupResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}, http.WrapError(constant.ErrDB)
}
//to group member
groupMember = db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID}
groupMember = db.GroupMember{GroupID: groupId, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID, JoinSource: constant.JoinByInvitation, InviterUserID: req.OpUserID}
utils.CopyStructFields(&groupMember, us)
err = imdb.InsertIntoGroupMember(groupMember)
if err != nil {
@ -143,6 +147,8 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
continue
}
groupMember.RoleLevel = user.RoleLevel
groupMember.JoinSource = constant.JoinByInvitation
groupMember.InviterUserID = req.OpUserID
utils.CopyStructFields(&groupMember, us)
err = imdb.InsertIntoGroupMember(groupMember)
if err != nil {
@ -241,13 +247,22 @@ func (s *groupServer) GetJoinedGroupList(ctx context.Context, req *pbGroup.GetJo
owner, err2 := imdb.GetGroupOwnerInfoByGroupID(v)
group, err := imdb.GetGroupInfoByGroupID(v)
if num > 0 && owner != nil && err2 == nil && group != nil && err == nil {
if group.Status == constant.GroupStatusDismissed {
log.NewError(req.OperationID, "constant.GroupStatusDismissed ", group)
continue
}
utils.CopyStructFields(&groupNode, group)
groupNode.CreateTime = uint32(group.CreateTime.Unix())
groupNode.MemberCount = uint32(num)
groupNode.NotificationUpdateTime = uint32(group.NotificationUpdateTime.Unix())
if group.NotificationUpdateTime.Unix() < 0 {
groupNode.NotificationUpdateTime = 0
}
groupNode.MemberCount = num
groupNode.OwnerUserID = owner.UserID
resp.GroupList = append(resp.GroupList, &groupNode)
} else {
log.NewError(req.OperationID, "check nil ", num, owner, err, group)
log.Debug(req.OperationID, "check nil ", num, owner, err, group, err2)
continue
}
log.NewDebug(req.OperationID, "joinedGroup ", groupNode)
@ -281,6 +296,8 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
var groupRequest db.GroupRequest
groupRequest.UserID = v
groupRequest.GroupID = req.GroupID
groupRequest.JoinSource = constant.JoinByInvitation
groupRequest.InviterUserID = req.OpUserID
err = imdb.InsertIntoGroupRequest(groupRequest)
if err != nil {
var resultNode pbGroup.Id2Result
@ -334,6 +351,8 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
toInsertInfo.GroupID = req.GroupID
toInsertInfo.RoleLevel = constant.GroupOrdinaryUsers
toInsertInfo.OperatorUserID = req.OpUserID
toInsertInfo.InviterUserID = req.OpUserID
toInsertInfo.JoinSource = constant.JoinByInvitation
err = imdb.InsertIntoGroupMember(toInsertInfo)
if err != nil {
log.NewError(req.OperationID, "InsertIntoGroupMember failed ", req.GroupID, toUserInfo.UserID, toUserInfo.Nickname, toUserInfo.FaceURL)
@ -762,10 +781,14 @@ func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.G
}
err := imdb.UpdateGroupRequest(groupRequest)
if err != nil {
//{openIM002 7836e478bc43ce1d3b8889cac983f59b 1 ok 0001-01-01 00:00:00 +0000 UTC openIM001 0001-01-01 00:00:00 +0000 UTC }
log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), groupRequest)
return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
request, err := imdb.GetGroupRequestByGroupIDAndUserID(req.GroupID, req.FromUserID)
if err != nil {
log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), req.GroupID, req.FromUserID)
return &pbGroup.GroupApplicationResponseResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
if req.HandleResult == constant.GroupResponseAgree {
user, err := imdb.GetUserByUserID(req.FromUserID)
@ -780,7 +803,8 @@ func (s *groupServer) GroupApplicationResponse(_ context.Context, req *pbGroup.G
member.OperatorUserID = req.OpUserID
member.FaceURL = user.FaceURL
member.Nickname = user.Nickname
member.JoinSource = request.JoinSource
member.InviterUserID = request.InviterUserID
err = imdb.InsertIntoGroupMember(member)
if err != nil {
log.NewError(req.OperationID, "GroupApplicationResponse failed ", err.Error(), member)
@ -878,7 +902,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
return &pbGroup.JoinGroupResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, nil
}
//to group member
groupMember := db.GroupMember{GroupID: req.GroupID, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID}
groupMember := db.GroupMember{GroupID: req.GroupID, RoleLevel: constant.GroupOwner, OperatorUserID: req.OpUserID, JoinSource: req.JoinSource}
utils.CopyStructFields(&groupMember, us)
err = imdb.InsertIntoGroupMember(groupMember)
if err != nil {
@ -920,6 +944,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
groupRequest.UserID = req.OpUserID
groupRequest.ReqMsg = req.ReqMessage
groupRequest.GroupID = req.GroupID
groupRequest.JoinSource = req.JoinSource
err = imdb.InsertIntoGroupRequest(groupRequest)
if err != nil {
log.NewError(req.OperationID, "InsertIntoGroupRequest failed ", err.Error(), groupRequest)
@ -1092,7 +1117,24 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf
return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, http.WrapError(constant.ErrDB)
}
}
if req.GroupInfoForSet.LookMemberInfo != nil {
changedType = changedType | (1 << 5)
m := make(map[string]interface{})
m["look_member_info"] = req.GroupInfoForSet.LookMemberInfo.Value
if err := imdb.UpdateGroupInfoDefaultZero(req.GroupInfoForSet.GroupID, m); err != nil {
log.NewError(req.OperationID, "UpdateGroupInfoDefaultZero failed ", err.Error(), m)
return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, http.WrapError(constant.ErrDB)
}
}
if req.GroupInfoForSet.ApplyMemberFriend != nil {
changedType = changedType | (1 << 6)
m := make(map[string]interface{})
m["apply_member_friend"] = req.GroupInfoForSet.ApplyMemberFriend.Value
if err := imdb.UpdateGroupInfoDefaultZero(req.GroupInfoForSet.GroupID, m); err != nil {
log.NewError(req.OperationID, "UpdateGroupInfoDefaultZero failed ", err.Error(), m)
return &pbGroup.SetGroupInfoResp{CommonResp: &pbGroup.CommonResp{ErrCode: constant.ErrDB.ErrCode, ErrMsg: constant.ErrDB.ErrMsg}}, http.WrapError(constant.ErrDB)
}
}
//
//if req.RoleLevel != nil {
//
@ -1100,6 +1142,10 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf
//only administrators can set group information
var groupInfo db.Group
utils.CopyStructFields(&groupInfo, req.GroupInfoForSet)
if req.GroupInfoForSet.Notification != "" {
groupInfo.NotificationUserID = req.OpUserID
groupInfo.NotificationUpdateTime = time.Now()
}
err = imdb.SetGroupInfo(groupInfo)
if err != nil {
log.NewError(req.OperationID, "SetGroupInfo failed ", err.Error(), groupInfo)

View File

@ -10,14 +10,19 @@ import (
commonPb "Open_IM/pkg/proto/sdk_ws"
"Open_IM/pkg/utils"
"context"
"go.mongodb.org/mongo-driver/mongo"
)
func (s *groupServer) GetJoinedSuperGroupList(ctx context.Context, req *pbGroup.GetJoinedSuperGroupListReq) (*pbGroup.GetJoinedSuperGroupListResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
resp := &pbGroup.GetJoinedSuperGroupListResp{CommonResp: &pbGroup.CommonResp{}}
userToSuperGroup, err := db.DB.GetSuperGroupByUserID(req.UserID)
if err == mongo.ErrNoDocuments {
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "GetSuperGroupByUserID failed ", err.Error(), req.UserID)
return resp, nil
}
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetSuperGroupByUserID failed", err.Error())
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetSuperGroupByUserID failed ", err.Error(), req.UserID)
resp.CommonResp.ErrCode = constant.ErrDB.ErrCode
resp.CommonResp.ErrMsg = constant.ErrDB.ErrMsg
return resp, nil

View File

@ -57,7 +57,8 @@ func setGroupInfo(groupID string, groupInfo *open_im_sdk.GroupInfo) error {
}
err = utils2.GroupDBCopyOpenIM(groupInfo, group)
if err != nil {
return utils.Wrap(err, "GetGroupMemberNumByGroupID failed")
log.NewWarn("", "GroupDBCopyOpenIM failed ", groupID, err.Error())
return nil
}
return nil
}
@ -183,7 +184,16 @@ func groupNotification(contentType int32, m proto.Message, sendID, groupID, recv
n.SendID = sendID
if groupID != "" {
n.RecvID = groupID
n.SessionType = constant.GroupChatType
group, err := imdb.GetGroupInfoByGroupID(groupID)
if err != nil {
log.NewError(operationID, "GetGroupInfoByGroupID failed ", err.Error(), groupID)
}
switch group.GroupType {
case constant.NormalGroup:
n.SessionType = constant.GroupChatType
default:
n.SessionType = constant.SuperGroupChatType
}
} else {
n.RecvID = recvUserID
n.SessionType = constant.SingleChatType
@ -223,6 +233,9 @@ func GroupCreatedNotification(operationID, opUserID, groupID string, initMemberL
continue
}
GroupCreatedTips.MemberList = append(GroupCreatedTips.MemberList, &groupMemberInfo)
if len(GroupCreatedTips.MemberList) == constant.MaxNotificationNum {
break
}
}
groupNotification(constant.GroupCreatedNotification, &GroupCreatedTips, opUserID, groupID, "", operationID)
}
@ -527,7 +540,6 @@ func MemberInvitedNotification(operationID, groupID, opUserID, reason string, in
}
MemberInvitedTips.InvitedUserList = append(MemberInvitedTips.InvitedUserList, &groupMemberInfo)
}
groupNotification(constant.MemberInvitedNotification, &MemberInvitedTips, opUserID, groupID, "", operationID)
}

View File

@ -331,8 +331,8 @@ func (rpc *rpcChat) SendMsg(_ context.Context, pb *pbChat.SendMsgReq) (*pbChat.S
}
}
log.Debug(pb.OperationID, "send msg cost time22 ", db.GetCurrentTimestampByMill()-newTime, pb.MsgData.ClientMsgID, "uidList : ", len(addUidList))
wg.Add(1)
go rpc.sendMsgToGroup(addUidList, *pb, constant.OnlineStatus, &sendTag, &wg)
//wg.Add(1)
//go rpc.sendMsgToGroup(addUidList, *pb, constant.OnlineStatus, &sendTag, &wg)
wg.Wait()
newTime = db.GetCurrentTimestampByMill()
// callback

View File

@ -378,6 +378,13 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI
return &pbUser.UpdateUserInfoResp{CommonResp: &pbUser.CommonResp{ErrCode: constant.ErrAccess.ErrCode, ErrMsg: constant.ErrAccess.ErrMsg}}, nil
}
oldNickname := ""
if req.UserInfo.Nickname != "" {
u, err := imdb.GetUserByUserID(req.UserInfo.UserID)
if err == nil {
oldNickname = u.Nickname
}
}
var user db.User
utils.CopyStructFields(&user, req.UserInfo)
if req.UserInfo.Birth != 0 {
@ -416,6 +423,9 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbUser.UpdateUserI
if req.UserInfo.FaceURL != "" {
go s.SyncJoinedGroupMemberFaceURL(req.UserInfo.UserID, req.UserInfo.FaceURL, req.OperationID, req.OpUserID)
}
if req.UserInfo.Nickname != "" {
go s.SyncJoinedGroupMemberNickname(req.UserInfo.UserID, req.UserInfo.Nickname, oldNickname, req.OperationID, req.OpUserID)
}
//updateUserInfoToCacheReq := &cache.UpdateUserInfoToCacheReq{
// OperationID: req.OperationID,
// UserInfoList: []*sdkws.UserInfo{req.UserInfo},
@ -455,6 +465,7 @@ func (s *userServer) SetGlobalRecvMessageOpt(ctx context.Context, req *pbUser.Se
chat.UserInfoUpdatedNotification(req.OperationID, req.UserID, req.UserID)
return &pbUser.SetGlobalRecvMessageOptResp{CommonResp: &pbUser.CommonResp{}}, nil
}
func (s *userServer) SyncJoinedGroupMemberFaceURL(userID string, faceURL string, operationID string, opUserID string) {
joinedGroupIDList, err := imdb.GetJoinedGroupIDListByUserID(userID)
if err != nil {
@ -468,6 +479,26 @@ func (s *userServer) SyncJoinedGroupMemberFaceURL(userID string, faceURL string,
}
}
func (s *userServer) SyncJoinedGroupMemberNickname(userID string, newNickname, oldNickname string, operationID string, opUserID string) {
joinedGroupIDList, err := imdb.GetJoinedGroupIDListByUserID(userID)
if err != nil {
log.NewWarn(operationID, "GetJoinedGroupIDListByUserID failed ", userID, err.Error())
return
}
for _, v := range joinedGroupIDList {
member, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(v, userID)
if err != nil {
log.NewWarn(operationID, "GetGroupMemberInfoByGroupIDAndUserID failed ", err.Error(), v, userID)
continue
}
if member.Nickname == oldNickname {
groupMemberInfo := db.GroupMember{UserID: userID, GroupID: v, Nickname: newNickname}
imdb.UpdateGroupMemberInfo(groupMemberInfo)
chat.GroupMemberInfoSetNotification(operationID, opUserID, v, userID)
}
}
}
func (s *userServer) GetUsersByName(ctx context.Context, req *pbUser.GetUsersByNameReq) (*pbUser.GetUsersByNameResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req:", req.String())
resp := &pbUser.GetUsersByNameResp{}

View File

@ -72,7 +72,7 @@ type GetBlackListResp struct {
type SetFriendRemarkReq struct {
ParamsCommFriend
Remark string `json:"remark" binding:"required"`
Remark string `json:"remark"`
}
type SetFriendRemarkResp struct {
CommResp

View File

@ -161,10 +161,13 @@ type ApplicationGroupResponseResp struct {
}
type JoinGroupReq struct {
GroupID string `json:"groupID" binding:"required"`
ReqMessage string `json:"reqMessage"`
OperationID string `json:"operationID" binding:"required"`
GroupID string `json:"groupID" binding:"required"`
ReqMessage string `json:"reqMessage"`
OperationID string `json:"operationID" binding:"required"`
JoinSource int32 `json:"joinSource"`
InviterUserID string `json:"inviterUserID"`
}
type JoinGroupResp struct {
CommResp
}
@ -178,14 +181,16 @@ type QuitGroupResp struct {
}
type SetGroupInfoReq struct {
GroupID string `json:"groupID" binding:"required"`
GroupName string `json:"groupName"`
Notification string `json:"notification"`
Introduction string `json:"introduction"`
FaceURL string `json:"faceURL"`
Ex string `json:"ex"`
OperationID string `json:"operationID" binding:"required"`
NeedVerification *int32 `json:"needVerification" binding "oneof=0 1 2"`
GroupID string `json:"groupID" binding:"required"`
GroupName string `json:"groupName"`
Notification string `json:"notification"`
Introduction string `json:"introduction"`
FaceURL string `json:"faceURL"`
Ex string `json:"ex"`
OperationID string `json:"operationID" binding:"required"`
NeedVerification *int32 `json:"needVerification" `
LookMemberInfo *int32 `json:"lookMemberInfo"`
ApplyMemberFriend *int32 `json:"applyMemberFriend"`
}
type SetGroupInfoResp struct {

View File

@ -18,3 +18,19 @@ type CleanUpMsgReq struct {
type CleanUpMsgResp struct {
CommResp
}
type DelSuperGroupMsgReq struct {
UserID string `json:"userID,omitempty" binding:"required"`
GroupID string `json:"groupID,omitempty" binding:"required"`
SeqList []uint32 `json:"seqList,omitempty"`
IsAllDelete bool `json:"isAllDelete"`
OperationID string `json:"operationID,omitempty" binding:"required"`
}
type DelSuperGroupMsgResp struct {
CommResp
}
type MsgDeleteNotificationElem struct {
GroupID string `json:"groupID"`
IsAllDelete bool `json:"isAllDelete"`
SeqList []uint32 `json:"seqList"`
}

View File

@ -32,7 +32,7 @@ type ApiUserInfo struct {
type GroupAddMemberInfo struct {
UserID string `json:"userID" binding:"required"`
RoleLevel int32 `json:"roleLevel" binding:"required"`
RoleLevel int32 `json:"roleLevel" binding:"required,oneof= 1 3"`
}
func SetErrCodeMsg(c *gin.Context, status int) *CommResp {

View File

@ -102,6 +102,7 @@ type config struct {
DBMaxIdle int `yaml:"dbMaxIdle"`
DBMaxActive int `yaml:"dbMaxActive"`
DBIdleTimeout int `yaml:"dbIdleTimeout"`
DBUserName string `yaml:"dbUserName"`
DBPassWord string `yaml:"dbPassWord"`
EnableCluster bool `yaml:"enableCluster"`
}
@ -464,9 +465,10 @@ type config struct {
VerificationCodeTemplateCode string `yaml:"verificationCodeTemplateCode"`
Enable bool `yaml:"enable"`
}
SuperCode string `yaml:"superCode"`
CodeTTL int `yaml:"codeTTL"`
Mail struct {
SuperCode string `yaml:"superCode"`
CodeTTL int `yaml:"codeTTL"`
UseSuperCode bool `yaml:"useSuperCode"`
Mail struct {
Title string `yaml:"title"`
SenderMail string `yaml:"senderMail"`
SenderAuthorizationCode string `yaml:"senderAuthorizationCode"`

View File

@ -58,6 +58,7 @@ const (
FriendRemarkSetNotification = 1206 //set_friend_remark?
BlackAddedNotification = 1207 //add_black
BlackDeletedNotification = 1208 //remove_black
MsgDeleteNotification = 1209
ConversationOptChangeNotification = 1300 // change conversation opt
@ -161,9 +162,9 @@ const (
GroupStatusMuted = 3
//GroupType
NormalGroup = 0
SuperGroup = 1
DepartmentGroup = 2
NormalGroup = 0
SuperGroup = 1
WorkingGroup = 2
GroupBaned = 3
GroupBanPrivateChat = 4
@ -171,6 +172,10 @@ const (
//UserJoinGroupSource
JoinByAdmin = 1
JoinByInvitation = 2
JoinBySearch = 3
JoinByQRCode = 4
//Minio
MinioDurationTimes = 3600
@ -298,3 +303,5 @@ const BigVersion = "v2"
const LogFileName = "OpenIM.log"
const StatisticsTimeInterval = 60
const MaxNotificationNum = 100

View File

@ -119,11 +119,14 @@ func init() {
// )
// },
//}
fmt.Println("tes", config.Config.Redis.DBUserName, config.Config.Redis.DBPassWord)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if config.Config.Redis.EnableCluster {
DB.rdb = go_redis.NewClusterClient(&go_redis.ClusterOptions{
Addrs: config.Config.Redis.DBAddress,
Username: config.Config.Redis.DBUserName,
Password: config.Config.Redis.DBPassWord, // no password set
PoolSize: 50,
})
_, err = DB.rdb.Ping(ctx).Result()
@ -133,6 +136,7 @@ func init() {
} else {
DB.rdb = go_redis.NewClient(&go_redis.Options{
Addr: config.Config.Redis.DBAddress[0],
Username: config.Config.Redis.DBUserName,
Password: config.Config.Redis.DBPassWord, // no password set
DB: 0, // use default DB
PoolSize: 100, // 连接池大小

View File

@ -77,17 +77,21 @@ func (FriendRequest) TableName() string {
type Group struct {
//`json:"operationID" binding:"required"`
//`protobuf:"bytes,1,opt,name=GroupID" json:"GroupID,omitempty"` `json:"operationID" binding:"required"`
GroupID string `gorm:"column:group_id;primary_key;size:64" json:"groupID" binding:"required"`
GroupName string `gorm:"column:name;size:255" json:"groupName"`
Notification string `gorm:"column:notification;size:255" json:"notification"`
Introduction string `gorm:"column:introduction;size:255" json:"introduction"`
FaceURL string `gorm:"column:face_url;size:255" json:"faceURL"`
CreateTime time.Time `gorm:"column:create_time"`
Ex string `gorm:"column:ex" json:"ex;size:1024" json:"ex"`
Status int32 `gorm:"column:status"`
CreatorUserID string `gorm:"column:creator_user_id;size:64"`
GroupType int32 `gorm:"column:group_type"`
NeedVerification int32 `gorm:"column:need_verification"`
GroupID string `gorm:"column:group_id;primary_key;size:64" json:"groupID" binding:"required"`
GroupName string `gorm:"column:name;size:255" json:"groupName"`
Notification string `gorm:"column:notification;size:255" json:"notification"`
Introduction string `gorm:"column:introduction;size:255" json:"introduction"`
FaceURL string `gorm:"column:face_url;size:255" json:"faceURL"`
CreateTime time.Time `gorm:"column:create_time"`
Ex string `gorm:"column:ex" json:"ex;size:1024" json:"ex"`
Status int32 `gorm:"column:status"`
CreatorUserID string `gorm:"column:creator_user_id;size:64"`
GroupType int32 `gorm:"column:group_type"`
NeedVerification int32 `gorm:"column:need_verification"`
LookMemberInfo int32 `gorm:"column:look_member_info" json:"lookMemberInfo"`
ApplyMemberFriend int32 `gorm:"column:apply_member_friend" json:"applyMemberFriend"`
NotificationUpdateTime time.Time `gorm:"column:notification_update_time"`
NotificationUserID string `gorm:"column:notification_user_id;size:64"`
}
//message GroupMemberFullInfo {
@ -110,6 +114,7 @@ type GroupMember struct {
RoleLevel int32 `gorm:"column:role_level"`
JoinTime time.Time `gorm:"column:join_time"`
JoinSource int32 `gorm:"column:join_source"`
InviterUserID string `gorm:"column:inviter_user_id;size:64"`
OperatorUserID string `gorm:"column:operator_user_id;size:64"`
MuteEndTime time.Time `gorm:"column:mute_end_time"`
Ex string `gorm:"column:ex;size:1024"`
@ -127,15 +132,17 @@ type GroupMember struct {
//string Ex = 9;
//}open_im_sdk.GroupRequest == imdb.GroupRequest
type GroupRequest struct {
UserID string `gorm:"column:user_id;primary_key;size:64"`
GroupID string `gorm:"column:group_id;primary_key;size:64"`
HandleResult int32 `gorm:"column:handle_result"`
ReqMsg string `gorm:"column:req_msg;size:1024"`
HandledMsg string `gorm:"column:handle_msg;size:1024"`
ReqTime time.Time `gorm:"column:req_time"`
HandleUserID string `gorm:"column:handle_user_id;size:64"`
HandledTime time.Time `gorm:"column:handle_time"`
Ex string `gorm:"column:ex;size:1024"`
UserID string `gorm:"column:user_id;primary_key;size:64"`
GroupID string `gorm:"column:group_id;primary_key;size:64"`
HandleResult int32 `gorm:"column:handle_result"`
ReqMsg string `gorm:"column:req_msg;size:1024"`
HandledMsg string `gorm:"column:handle_msg;size:1024"`
ReqTime time.Time `gorm:"column:req_time"`
HandleUserID string `gorm:"column:handle_user_id;size:64"`
HandledTime time.Time `gorm:"column:handle_time"`
JoinSource int32 `gorm:"column:join_source"`
InviterUserID string `gorm:"column:inviter_user_id;size:64"`
Ex string `gorm:"column:ex;size:1024"`
}
//string UserID = 1;

View File

@ -5,14 +5,14 @@ import (
_ "github.com/jinzhu/gorm"
)
func GetRegister(account, areaCode string) (*db.Register, error) {
func GetRegister(account, areaCode, userID string) (*db.Register, error) {
dbConn, err := db.DB.MysqlDB.DefaultGormDB()
if err != nil {
return nil, err
}
var r db.Register
return &r, dbConn.Table("registers").Where("account = ? or account =? and area_code=?",
account, account, areaCode).Take(&r).Error
return &r, dbConn.Table("registers").Where("user_id = ? and user_id != ? or account = ? or account =? and area_code=?",
userID, "", account, account, areaCode).Take(&r).Error
}
func SetPassword(account, password, ex, userID, areaCode string) error {

View File

@ -32,10 +32,12 @@ func InsertIntoGroup(groupInfo db.Group) error {
groupInfo.GroupName = "Group Chat"
}
groupInfo.CreateTime = time.Now()
err = dbConn.Table("groups").Create(groupInfo).Error
if err != nil {
return err
}
return nil
}

View File

@ -302,6 +302,6 @@ func GetRandomDepartmentID() (string, error) {
return "", err
}
department := &db.Department{}
err = dbConn.Model(department).Order("RAND()").Where("related_group_id != ? AND department_id != ?", "", "0").First(department).Error
err = dbConn.Model(department).Order("RAND()").Where("related_group_id != ? AND department_id != ? AND department_type = ?", "", "0", 1).First(department).Error
return department.DepartmentID, err
}

View File

@ -119,3 +119,9 @@ func Test_GetAccountCode(t *testing.T) {
assert.Nil(t, err)
fmt.Println(code)
}
func Test_GetGroupMemberList(t *testing.T) {
groupID := "3791742301"
list, err := DB.GetGroupMemberIDListFromCache(groupID)
assert.Nil(t, err)
fmt.Println(list)
}

View File

@ -98,6 +98,10 @@ func GroupDBCopyOpenIM(dst *open_im_sdk.GroupInfo, src *db.Group) error {
return utils.Wrap(err, "")
}
dst.CreateTime = uint32(src.CreateTime.Unix())
dst.NotificationUpdateTime = uint32(src.NotificationUpdateTime.Unix())
if src.NotificationUpdateTime.Unix() < 0 {
dst.NotificationUpdateTime = 0
}
return nil
}
@ -118,7 +122,7 @@ func GroupMemberDBCopyOpenIM(dst *open_im_sdk.GroupMemberFullInfo, src *db.Group
dst.AppMangerLevel = 1
}
dst.JoinTime = int32(src.JoinTime.Unix())
if src.MuteEndTime.Unix() < 0 {
if src.JoinTime.Unix() < 0 {
dst.JoinTime = 0
return nil
}

View File

@ -37,7 +37,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} }
func (m *CommonResp) String() string { return proto.CompactTextString(m) }
func (*CommonResp) ProtoMessage() {}
func (*CommonResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{0}
return fileDescriptor_group_d529c7a0e85dbd90, []int{0}
}
func (m *CommonResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CommonResp.Unmarshal(m, b)
@ -83,7 +83,7 @@ func (m *GroupAddMemberInfo) Reset() { *m = GroupAddMemberInfo{} }
func (m *GroupAddMemberInfo) String() string { return proto.CompactTextString(m) }
func (*GroupAddMemberInfo) ProtoMessage() {}
func (*GroupAddMemberInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{1}
return fileDescriptor_group_d529c7a0e85dbd90, []int{1}
}
func (m *GroupAddMemberInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupAddMemberInfo.Unmarshal(m, b)
@ -132,7 +132,7 @@ func (m *CreateGroupReq) Reset() { *m = CreateGroupReq{} }
func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) }
func (*CreateGroupReq) ProtoMessage() {}
func (*CreateGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{2}
return fileDescriptor_group_d529c7a0e85dbd90, []int{2}
}
func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b)
@ -200,7 +200,7 @@ func (m *CreateGroupResp) Reset() { *m = CreateGroupResp{} }
func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) }
func (*CreateGroupResp) ProtoMessage() {}
func (*CreateGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{3}
return fileDescriptor_group_d529c7a0e85dbd90, []int{3}
}
func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b)
@ -254,7 +254,7 @@ func (m *GetGroupsInfoReq) Reset() { *m = GetGroupsInfoReq{} }
func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupsInfoReq) ProtoMessage() {}
func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{4}
return fileDescriptor_group_d529c7a0e85dbd90, []int{4}
}
func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b)
@ -308,7 +308,7 @@ func (m *GetGroupsInfoResp) Reset() { *m = GetGroupsInfoResp{} }
func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupsInfoResp) ProtoMessage() {}
func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{5}
return fileDescriptor_group_d529c7a0e85dbd90, []int{5}
}
func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b)
@ -362,7 +362,7 @@ func (m *SetGroupInfoReq) Reset() { *m = SetGroupInfoReq{} }
func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) }
func (*SetGroupInfoReq) ProtoMessage() {}
func (*SetGroupInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{6}
return fileDescriptor_group_d529c7a0e85dbd90, []int{6}
}
func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b)
@ -414,7 +414,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} }
func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) }
func (*SetGroupInfoResp) ProtoMessage() {}
func (*SetGroupInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{7}
return fileDescriptor_group_d529c7a0e85dbd90, []int{7}
}
func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b)
@ -454,7 +454,7 @@ func (m *GetGroupApplicationListReq) Reset() { *m = GetGroupApplicationL
func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupApplicationListReq) ProtoMessage() {}
func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{8}
return fileDescriptor_group_d529c7a0e85dbd90, []int{8}
}
func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b)
@ -508,7 +508,7 @@ func (m *GetGroupApplicationListResp) Reset() { *m = GetGroupApplication
func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupApplicationListResp) ProtoMessage() {}
func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{9}
return fileDescriptor_group_d529c7a0e85dbd90, []int{9}
}
func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b)
@ -562,7 +562,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat
func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) }
func (*GetUserReqApplicationListReq) ProtoMessage() {}
func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{10}
return fileDescriptor_group_d529c7a0e85dbd90, []int{10}
}
func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b)
@ -615,7 +615,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica
func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) }
func (*GetUserReqApplicationListResp) ProtoMessage() {}
func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{11}
return fileDescriptor_group_d529c7a0e85dbd90, []int{11}
}
func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b)
@ -664,7 +664,7 @@ func (m *TransferGroupOwnerReq) Reset() { *m = TransferGroupOwnerReq{} }
func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) }
func (*TransferGroupOwnerReq) ProtoMessage() {}
func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{12}
return fileDescriptor_group_d529c7a0e85dbd90, []int{12}
}
func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b)
@ -730,7 +730,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{}
func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) }
func (*TransferGroupOwnerResp) ProtoMessage() {}
func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{13}
return fileDescriptor_group_d529c7a0e85dbd90, []int{13}
}
func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b)
@ -762,6 +762,8 @@ type JoinGroupReq struct {
ReqMessage string `protobuf:"bytes,2,opt,name=ReqMessage" json:"ReqMessage,omitempty"`
OpUserID string `protobuf:"bytes,3,opt,name=OpUserID" json:"OpUserID,omitempty"`
OperationID string `protobuf:"bytes,4,opt,name=OperationID" json:"OperationID,omitempty"`
JoinSource int32 `protobuf:"varint,5,opt,name=JoinSource" json:"JoinSource,omitempty"`
InviterUserID string `protobuf:"bytes,6,opt,name=InviterUserID" json:"InviterUserID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -771,7 +773,7 @@ func (m *JoinGroupReq) Reset() { *m = JoinGroupReq{} }
func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) }
func (*JoinGroupReq) ProtoMessage() {}
func (*JoinGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{14}
return fileDescriptor_group_d529c7a0e85dbd90, []int{14}
}
func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b)
@ -819,6 +821,20 @@ func (m *JoinGroupReq) GetOperationID() string {
return ""
}
func (m *JoinGroupReq) GetJoinSource() int32 {
if m != nil {
return m.JoinSource
}
return 0
}
func (m *JoinGroupReq) GetInviterUserID() string {
if m != nil {
return m.InviterUserID
}
return ""
}
type JoinGroupResp struct {
CommonResp *CommonResp `protobuf:"bytes,1,opt,name=CommonResp" json:"CommonResp,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
@ -830,7 +846,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} }
func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) }
func (*JoinGroupResp) ProtoMessage() {}
func (*JoinGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{15}
return fileDescriptor_group_d529c7a0e85dbd90, []int{15}
}
func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b)
@ -873,7 +889,7 @@ func (m *GroupApplicationResponseReq) Reset() { *m = GroupApplicationRes
func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) }
func (*GroupApplicationResponseReq) ProtoMessage() {}
func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{16}
return fileDescriptor_group_d529c7a0e85dbd90, []int{16}
}
func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b)
@ -946,7 +962,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe
func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) }
func (*GroupApplicationResponseResp) ProtoMessage() {}
func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{17}
return fileDescriptor_group_d529c7a0e85dbd90, []int{17}
}
func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b)
@ -986,7 +1002,7 @@ func (m *QuitGroupReq) Reset() { *m = QuitGroupReq{} }
func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) }
func (*QuitGroupReq) ProtoMessage() {}
func (*QuitGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{18}
return fileDescriptor_group_d529c7a0e85dbd90, []int{18}
}
func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b)
@ -1038,7 +1054,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} }
func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) }
func (*QuitGroupResp) ProtoMessage() {}
func (*QuitGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{19}
return fileDescriptor_group_d529c7a0e85dbd90, []int{19}
}
func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b)
@ -1080,7 +1096,7 @@ func (m *GetGroupMemberListReq) Reset() { *m = GetGroupMemberListReq{} }
func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMemberListReq) ProtoMessage() {}
func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{20}
return fileDescriptor_group_d529c7a0e85dbd90, []int{20}
}
func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b)
@ -1149,7 +1165,7 @@ func (m *GetGroupMemberListResp) Reset() { *m = GetGroupMemberListResp{}
func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupMemberListResp) ProtoMessage() {}
func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{21}
return fileDescriptor_group_d529c7a0e85dbd90, []int{21}
}
func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b)
@ -1211,7 +1227,7 @@ func (m *GetGroupMembersInfoReq) Reset() { *m = GetGroupMembersInfoReq{}
func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersInfoReq) ProtoMessage() {}
func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{22}
return fileDescriptor_group_d529c7a0e85dbd90, []int{22}
}
func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b)
@ -1272,7 +1288,7 @@ func (m *GetGroupMembersInfoResp) Reset() { *m = GetGroupMembersInfoResp
func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersInfoResp) ProtoMessage() {}
func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{23}
return fileDescriptor_group_d529c7a0e85dbd90, []int{23}
}
func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b)
@ -1328,7 +1344,7 @@ func (m *KickGroupMemberReq) Reset() { *m = KickGroupMemberReq{} }
func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*KickGroupMemberReq) ProtoMessage() {}
func (*KickGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{24}
return fileDescriptor_group_d529c7a0e85dbd90, []int{24}
}
func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b)
@ -1395,7 +1411,7 @@ func (m *Id2Result) Reset() { *m = Id2Result{} }
func (m *Id2Result) String() string { return proto.CompactTextString(m) }
func (*Id2Result) ProtoMessage() {}
func (*Id2Result) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{25}
return fileDescriptor_group_d529c7a0e85dbd90, []int{25}
}
func (m *Id2Result) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_Id2Result.Unmarshal(m, b)
@ -1442,7 +1458,7 @@ func (m *KickGroupMemberResp) Reset() { *m = KickGroupMemberResp{} }
func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) }
func (*KickGroupMemberResp) ProtoMessage() {}
func (*KickGroupMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{26}
return fileDescriptor_group_d529c7a0e85dbd90, []int{26}
}
func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b)
@ -1496,7 +1512,7 @@ func (m *GetJoinedGroupListReq) Reset() { *m = GetJoinedGroupListReq{} }
func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) }
func (*GetJoinedGroupListReq) ProtoMessage() {}
func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{27}
return fileDescriptor_group_d529c7a0e85dbd90, []int{27}
}
func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b)
@ -1550,7 +1566,7 @@ func (m *GetJoinedGroupListResp) Reset() { *m = GetJoinedGroupListResp{}
func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) }
func (*GetJoinedGroupListResp) ProtoMessage() {}
func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{28}
return fileDescriptor_group_d529c7a0e85dbd90, []int{28}
}
func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b)
@ -1606,7 +1622,7 @@ func (m *InviteUserToGroupReq) Reset() { *m = InviteUserToGroupReq{} }
func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) }
func (*InviteUserToGroupReq) ProtoMessage() {}
func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{29}
return fileDescriptor_group_d529c7a0e85dbd90, []int{29}
}
func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b)
@ -1674,7 +1690,7 @@ func (m *InviteUserToGroupResp) Reset() { *m = InviteUserToGroupResp{} }
func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) }
func (*InviteUserToGroupResp) ProtoMessage() {}
func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{30}
return fileDescriptor_group_d529c7a0e85dbd90, []int{30}
}
func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b)
@ -1728,7 +1744,7 @@ func (m *GetGroupAllMemberReq) Reset() { *m = GetGroupAllMemberReq{} }
func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupAllMemberReq) ProtoMessage() {}
func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{31}
return fileDescriptor_group_d529c7a0e85dbd90, []int{31}
}
func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b)
@ -1782,7 +1798,7 @@ func (m *GetGroupAllMemberResp) Reset() { *m = GetGroupAllMemberResp{} }
func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupAllMemberResp) ProtoMessage() {}
func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{32}
return fileDescriptor_group_d529c7a0e85dbd90, []int{32}
}
func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b)
@ -1836,7 +1852,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} }
func (m *CMSGroup) String() string { return proto.CompactTextString(m) }
func (*CMSGroup) ProtoMessage() {}
func (*CMSGroup) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{33}
return fileDescriptor_group_d529c7a0e85dbd90, []int{33}
}
func (m *CMSGroup) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CMSGroup.Unmarshal(m, b)
@ -1890,7 +1906,7 @@ func (m *GetGroupReq) Reset() { *m = GetGroupReq{} }
func (m *GetGroupReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupReq) ProtoMessage() {}
func (*GetGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{34}
return fileDescriptor_group_d529c7a0e85dbd90, []int{34}
}
func (m *GetGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupReq.Unmarshal(m, b)
@ -1944,7 +1960,7 @@ func (m *GetGroupResp) Reset() { *m = GetGroupResp{} }
func (m *GetGroupResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupResp) ProtoMessage() {}
func (*GetGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{35}
return fileDescriptor_group_d529c7a0e85dbd90, []int{35}
}
func (m *GetGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupResp.Unmarshal(m, b)
@ -1997,7 +2013,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} }
func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupsReq) ProtoMessage() {}
func (*GetGroupsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{36}
return fileDescriptor_group_d529c7a0e85dbd90, []int{36}
}
func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b)
@ -2044,7 +2060,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} }
func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupsResp) ProtoMessage() {}
func (*GetGroupsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{37}
return fileDescriptor_group_d529c7a0e85dbd90, []int{37}
}
func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b)
@ -2097,7 +2113,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} }
func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMemberReq) ProtoMessage() {}
func (*GetGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{38}
return fileDescriptor_group_d529c7a0e85dbd90, []int{38}
}
func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b)
@ -2144,7 +2160,7 @@ func (m *OperateGroupStatusReq) Reset() { *m = OperateGroupStatusReq{} }
func (m *OperateGroupStatusReq) String() string { return proto.CompactTextString(m) }
func (*OperateGroupStatusReq) ProtoMessage() {}
func (*OperateGroupStatusReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{39}
return fileDescriptor_group_d529c7a0e85dbd90, []int{39}
}
func (m *OperateGroupStatusReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OperateGroupStatusReq.Unmarshal(m, b)
@ -2195,7 +2211,7 @@ func (m *OperateGroupStatusResp) Reset() { *m = OperateGroupStatusResp{}
func (m *OperateGroupStatusResp) String() string { return proto.CompactTextString(m) }
func (*OperateGroupStatusResp) ProtoMessage() {}
func (*OperateGroupStatusResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{40}
return fileDescriptor_group_d529c7a0e85dbd90, []int{40}
}
func (m *OperateGroupStatusResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OperateGroupStatusResp.Unmarshal(m, b)
@ -2229,7 +2245,7 @@ func (m *OperateUserRoleReq) Reset() { *m = OperateUserRoleReq{} }
func (m *OperateUserRoleReq) String() string { return proto.CompactTextString(m) }
func (*OperateUserRoleReq) ProtoMessage() {}
func (*OperateUserRoleReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{41}
return fileDescriptor_group_d529c7a0e85dbd90, []int{41}
}
func (m *OperateUserRoleReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OperateUserRoleReq.Unmarshal(m, b)
@ -2287,7 +2303,7 @@ func (m *OperateUserRoleResp) Reset() { *m = OperateUserRoleResp{} }
func (m *OperateUserRoleResp) String() string { return proto.CompactTextString(m) }
func (*OperateUserRoleResp) ProtoMessage() {}
func (*OperateUserRoleResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{42}
return fileDescriptor_group_d529c7a0e85dbd90, []int{42}
}
func (m *OperateUserRoleResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_OperateUserRoleResp.Unmarshal(m, b)
@ -2319,7 +2335,7 @@ func (m *DeleteGroupReq) Reset() { *m = DeleteGroupReq{} }
func (m *DeleteGroupReq) String() string { return proto.CompactTextString(m) }
func (*DeleteGroupReq) ProtoMessage() {}
func (*DeleteGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{43}
return fileDescriptor_group_d529c7a0e85dbd90, []int{43}
}
func (m *DeleteGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DeleteGroupReq.Unmarshal(m, b)
@ -2363,7 +2379,7 @@ func (m *DeleteGroupResp) Reset() { *m = DeleteGroupResp{} }
func (m *DeleteGroupResp) String() string { return proto.CompactTextString(m) }
func (*DeleteGroupResp) ProtoMessage() {}
func (*DeleteGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{44}
return fileDescriptor_group_d529c7a0e85dbd90, []int{44}
}
func (m *DeleteGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DeleteGroupResp.Unmarshal(m, b)
@ -2395,7 +2411,7 @@ func (m *GetGroupByIdReq) Reset() { *m = GetGroupByIdReq{} }
func (m *GetGroupByIdReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupByIdReq) ProtoMessage() {}
func (*GetGroupByIdReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{45}
return fileDescriptor_group_d529c7a0e85dbd90, []int{45}
}
func (m *GetGroupByIdReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupByIdReq.Unmarshal(m, b)
@ -2440,7 +2456,7 @@ func (m *GetGroupByIdResp) Reset() { *m = GetGroupByIdResp{} }
func (m *GetGroupByIdResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupByIdResp) ProtoMessage() {}
func (*GetGroupByIdResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{46}
return fileDescriptor_group_d529c7a0e85dbd90, []int{46}
}
func (m *GetGroupByIdResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupByIdResp.Unmarshal(m, b)
@ -2481,7 +2497,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} }
func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersCMSReq) ProtoMessage() {}
func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{47}
return fileDescriptor_group_d529c7a0e85dbd90, []int{47}
}
func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b)
@ -2542,7 +2558,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{}
func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupMembersCMSResp) ProtoMessage() {}
func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{48}
return fileDescriptor_group_d529c7a0e85dbd90, []int{48}
}
func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b)
@ -2597,7 +2613,7 @@ func (m *RemoveGroupMembersCMSReq) Reset() { *m = RemoveGroupMembersCMSR
func (m *RemoveGroupMembersCMSReq) String() string { return proto.CompactTextString(m) }
func (*RemoveGroupMembersCMSReq) ProtoMessage() {}
func (*RemoveGroupMembersCMSReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{49}
return fileDescriptor_group_d529c7a0e85dbd90, []int{49}
}
func (m *RemoveGroupMembersCMSReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RemoveGroupMembersCMSReq.Unmarshal(m, b)
@ -2657,7 +2673,7 @@ func (m *RemoveGroupMembersCMSResp) Reset() { *m = RemoveGroupMembersCMS
func (m *RemoveGroupMembersCMSResp) String() string { return proto.CompactTextString(m) }
func (*RemoveGroupMembersCMSResp) ProtoMessage() {}
func (*RemoveGroupMembersCMSResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{50}
return fileDescriptor_group_d529c7a0e85dbd90, []int{50}
}
func (m *RemoveGroupMembersCMSResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RemoveGroupMembersCMSResp.Unmarshal(m, b)
@ -2705,7 +2721,7 @@ func (m *AddGroupMembersCMSReq) Reset() { *m = AddGroupMembersCMSReq{} }
func (m *AddGroupMembersCMSReq) String() string { return proto.CompactTextString(m) }
func (*AddGroupMembersCMSReq) ProtoMessage() {}
func (*AddGroupMembersCMSReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{51}
return fileDescriptor_group_d529c7a0e85dbd90, []int{51}
}
func (m *AddGroupMembersCMSReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AddGroupMembersCMSReq.Unmarshal(m, b)
@ -2765,7 +2781,7 @@ func (m *AddGroupMembersCMSResp) Reset() { *m = AddGroupMembersCMSResp{}
func (m *AddGroupMembersCMSResp) String() string { return proto.CompactTextString(m) }
func (*AddGroupMembersCMSResp) ProtoMessage() {}
func (*AddGroupMembersCMSResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{52}
return fileDescriptor_group_d529c7a0e85dbd90, []int{52}
}
func (m *AddGroupMembersCMSResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AddGroupMembersCMSResp.Unmarshal(m, b)
@ -2812,7 +2828,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} }
func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) }
func (*DismissGroupReq) ProtoMessage() {}
func (*DismissGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{53}
return fileDescriptor_group_d529c7a0e85dbd90, []int{53}
}
func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b)
@ -2864,7 +2880,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} }
func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) }
func (*DismissGroupResp) ProtoMessage() {}
func (*DismissGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{54}
return fileDescriptor_group_d529c7a0e85dbd90, []int{54}
}
func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b)
@ -2906,7 +2922,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} }
func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*MuteGroupMemberReq) ProtoMessage() {}
func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{55}
return fileDescriptor_group_d529c7a0e85dbd90, []int{55}
}
func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b)
@ -2972,7 +2988,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} }
func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) }
func (*MuteGroupMemberResp) ProtoMessage() {}
func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{56}
return fileDescriptor_group_d529c7a0e85dbd90, []int{56}
}
func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b)
@ -3013,7 +3029,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR
func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupMemberReq) ProtoMessage() {}
func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{57}
return fileDescriptor_group_d529c7a0e85dbd90, []int{57}
}
func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b)
@ -3072,7 +3088,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember
func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupMemberResp) ProtoMessage() {}
func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{58}
return fileDescriptor_group_d529c7a0e85dbd90, []int{58}
}
func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b)
@ -3112,7 +3128,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} }
func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) }
func (*MuteGroupReq) ProtoMessage() {}
func (*MuteGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{59}
return fileDescriptor_group_d529c7a0e85dbd90, []int{59}
}
func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b)
@ -3164,7 +3180,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} }
func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) }
func (*MuteGroupResp) ProtoMessage() {}
func (*MuteGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{60}
return fileDescriptor_group_d529c7a0e85dbd90, []int{60}
}
func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b)
@ -3204,7 +3220,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} }
func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupReq) ProtoMessage() {}
func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{61}
return fileDescriptor_group_d529c7a0e85dbd90, []int{61}
}
func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b)
@ -3256,7 +3272,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} }
func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) }
func (*CancelMuteGroupResp) ProtoMessage() {}
func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{62}
return fileDescriptor_group_d529c7a0e85dbd90, []int{62}
}
func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b)
@ -3298,7 +3314,7 @@ func (m *SetGroupMemberNicknameReq) Reset() { *m = SetGroupMemberNicknam
func (m *SetGroupMemberNicknameReq) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberNicknameReq) ProtoMessage() {}
func (*SetGroupMemberNicknameReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{63}
return fileDescriptor_group_d529c7a0e85dbd90, []int{63}
}
func (m *SetGroupMemberNicknameReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberNicknameReq.Unmarshal(m, b)
@ -3364,7 +3380,7 @@ func (m *SetGroupMemberNicknameResp) Reset() { *m = SetGroupMemberNickna
func (m *SetGroupMemberNicknameResp) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberNicknameResp) ProtoMessage() {}
func (*SetGroupMemberNicknameResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{64}
return fileDescriptor_group_d529c7a0e85dbd90, []int{64}
}
func (m *SetGroupMemberNicknameResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberNicknameResp.Unmarshal(m, b)
@ -3404,7 +3420,7 @@ func (m *GetJoinedSuperGroupListReq) Reset() { *m = GetJoinedSuperGroupL
func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) }
func (*GetJoinedSuperGroupListReq) ProtoMessage() {}
func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{65}
return fileDescriptor_group_d529c7a0e85dbd90, []int{65}
}
func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b)
@ -3457,7 +3473,7 @@ func (m *GetJoinedSuperGroupListResp) Reset() { *m = GetJoinedSuperGroup
func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) }
func (*GetJoinedSuperGroupListResp) ProtoMessage() {}
func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{66}
return fileDescriptor_group_d529c7a0e85dbd90, []int{66}
}
func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b)
@ -3504,7 +3520,7 @@ func (m *GetSuperGroupsInfoReq) Reset() { *m = GetSuperGroupsInfoReq{} }
func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetSuperGroupsInfoReq) ProtoMessage() {}
func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{67}
return fileDescriptor_group_d529c7a0e85dbd90, []int{67}
}
func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b)
@ -3557,7 +3573,7 @@ func (m *GetSuperGroupsInfoResp) Reset() { *m = GetSuperGroupsInfoResp{}
func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetSuperGroupsInfoResp) ProtoMessage() {}
func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{68}
return fileDescriptor_group_d529c7a0e85dbd90, []int{68}
}
func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b)
@ -3609,7 +3625,7 @@ func (m *SetGroupMemberInfoReq) Reset() { *m = SetGroupMemberInfoReq{} }
func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberInfoReq) ProtoMessage() {}
func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{69}
return fileDescriptor_group_d529c7a0e85dbd90, []int{69}
}
func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b)
@ -3696,7 +3712,7 @@ func (m *SetGroupMemberInfoResp) Reset() { *m = SetGroupMemberInfoResp{}
func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) }
func (*SetGroupMemberInfoResp) ProtoMessage() {}
func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_group_40c147a29abb4e60, []int{70}
return fileDescriptor_group_d529c7a0e85dbd90, []int{70}
}
func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b)
@ -4925,157 +4941,159 @@ var _Group_serviceDesc = grpc.ServiceDesc{
Metadata: "group/group.proto",
}
func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_40c147a29abb4e60) }
func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_d529c7a0e85dbd90) }
var fileDescriptor_group_40c147a29abb4e60 = []byte{
// 2381 bytes of a gzipped FileDescriptorProto
var fileDescriptor_group_d529c7a0e85dbd90 = []byte{
// 2407 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4f, 0x6f, 0x1c, 0x49,
0x15, 0x57, 0xdb, 0x1e, 0xdb, 0xf3, 0x6c, 0x67, 0xec, 0x72, 0xc6, 0x1e, 0x77, 0xbc, 0x59, 0xa7,
0x37, 0x2c, 0x11, 0x2c, 0xb6, 0x70, 0xa4, 0x08, 0x58, 0x44, 0x88, 0xff, 0xc5, 0x93, 0xf8, 0x0f,
0xee, 0xc9, 0x72, 0x88, 0x84, 0xc2, 0x64, 0xba, 0x3c, 0x1a, 0x3c, 0xd3, 0xdd, 0xee, 0xea, 0xb1,
0x03, 0x97, 0x15, 0x97, 0x95, 0x16, 0x21, 0x01, 0x42, 0xe2, 0x04, 0x82, 0x3d, 0xc1, 0x81, 0x03,
0x07, 0x38, 0x23, 0x3e, 0x06, 0x57, 0xbe, 0x00, 0x9f, 0x00, 0x09, 0x75, 0x55, 0x75, 0x75, 0x75,
0x57, 0x75, 0x7b, 0xd2, 0x4e, 0x36, 0x97, 0x96, 0xea, 0xd5, 0xab, 0x7a, 0xbf, 0xf7, 0xaa, 0xde,
0xab, 0x7a, 0xaf, 0x1a, 0x16, 0xba, 0x81, 0x37, 0xf4, 0x37, 0xe8, 0x77, 0xdd, 0x0f, 0xbc, 0xd0,
0x43, 0x15, 0xda, 0x30, 0xef, 0x1c, 0xfb, 0xd8, 0x7d, 0xd1, 0x3c, 0xdc, 0xf0, 0xcf, 0xba, 0x1b,
0xb4, 0x67, 0x83, 0x38, 0x67, 0x2f, 0x2e, 0xc9, 0xc6, 0x25, 0x61, 0x9c, 0xe6, 0x57, 0xf3, 0x59,
0x82, 0xb6, 0xef, 0xe3, 0x80, 0x33, 0x5a, 0xdf, 0x03, 0xd8, 0xf6, 0x06, 0x03, 0xcf, 0xb5, 0x31,
0xf1, 0x51, 0x03, 0xa6, 0x76, 0x83, 0x60, 0xdb, 0x73, 0x70, 0xc3, 0x58, 0x33, 0xee, 0x55, 0xec,
0xb8, 0x89, 0x96, 0x60, 0x72, 0x37, 0x08, 0x0e, 0x49, 0xb7, 0x31, 0xb6, 0x66, 0xdc, 0xab, 0xda,
0xbc, 0x65, 0x3d, 0x01, 0xf4, 0x38, 0x02, 0xf5, 0xc8, 0x71, 0x0e, 0xf1, 0xe0, 0x25, 0x0e, 0x9a,
0xee, 0xa9, 0x17, 0x71, 0x7f, 0x42, 0x70, 0xd0, 0xdc, 0xa1, 0xd3, 0x54, 0x6d, 0xde, 0x42, 0xab,
0x50, 0xb5, 0xbd, 0x3e, 0x3e, 0xc0, 0x17, 0xb8, 0x4f, 0x27, 0xaa, 0xd8, 0x09, 0xc1, 0xfa, 0xaf,
0x01, 0x37, 0xb6, 0x03, 0xdc, 0x0e, 0x31, 0x9d, 0xd2, 0xc6, 0xe7, 0xe8, 0x11, 0xdc, 0x68, 0xba,
0xbd, 0x90, 0x4d, 0x7d, 0xd0, 0x23, 0x61, 0xc3, 0x58, 0x1b, 0xbf, 0x37, 0xb3, 0xb9, 0xb2, 0xce,
0xec, 0xa2, 0xca, 0xb6, 0x33, 0x03, 0xd0, 0x77, 0xa0, 0x4a, 0xb9, 0xa2, 0x4e, 0x2a, 0x73, 0x66,
0x73, 0x75, 0x9d, 0xe0, 0xe0, 0x02, 0x07, 0x2f, 0xda, 0x7e, 0xef, 0x85, 0xdf, 0x0e, 0xda, 0x03,
0xb2, 0x2e, 0x78, 0xec, 0x84, 0x1d, 0xad, 0xc1, 0xcc, 0xb1, 0x8f, 0x83, 0x76, 0xd8, 0xf3, 0xdc,
0xe6, 0x4e, 0x63, 0x9c, 0x2a, 0x23, 0x93, 0x90, 0x09, 0xd3, 0xc7, 0x3e, 0xd7, 0x75, 0x82, 0x76,
0x8b, 0x36, 0x1d, 0x7d, 0xe9, 0xe2, 0x80, 0x77, 0x57, 0xf8, 0xe8, 0x84, 0x64, 0x7d, 0x0a, 0xb5,
0x94, 0xc2, 0x65, 0x96, 0x20, 0xad, 0xe0, 0xf8, 0x6b, 0x29, 0x68, 0x05, 0x30, 0xff, 0x18, 0x87,
0xb4, 0x4d, 0x68, 0x1f, 0x3e, 0x8f, 0x60, 0x33, 0x86, 0x1d, 0x61, 0xf0, 0xaa, 0x2d, 0x93, 0xb2,
0x66, 0x19, 0x2b, 0x36, 0xcb, 0x78, 0xda, 0x2c, 0xd6, 0xe7, 0x06, 0x2c, 0x64, 0x84, 0x96, 0xd2,
0x7b, 0x0b, 0xe6, 0x84, 0x22, 0x14, 0xe9, 0x38, 0xdd, 0x1a, 0xc5, 0xba, 0xa7, 0x87, 0x58, 0x7f,
0x30, 0xa0, 0xd6, 0xe2, 0x58, 0x62, 0xfd, 0x0f, 0xa0, 0xd6, 0x8d, 0xdb, 0x7b, 0x5e, 0xd0, 0xc2,
0x21, 0x45, 0x34, 0xb3, 0x69, 0x15, 0xcd, 0xcc, 0x38, 0xed, 0xec, 0xd0, 0x94, 0x25, 0xc6, 0x34,
0x1b, 0xa4, 0x70, 0x7b, 0x59, 0xbb, 0x30, 0x9f, 0x86, 0x47, 0x7c, 0xf4, 0x4d, 0xd9, 0x65, 0x39,
0xb4, 0x05, 0xee, 0x0f, 0x49, 0x87, 0x2d, 0x31, 0x59, 0x3f, 0x03, 0x33, 0xb6, 0xf8, 0x23, 0xdf,
0xef, 0xf7, 0x3a, 0x74, 0xfe, 0xc8, 0x02, 0x91, 0xc2, 0x32, 0x44, 0xa3, 0x18, 0xa2, 0x66, 0xa9,
0x6f, 0x03, 0xec, 0x05, 0xde, 0x20, 0xb5, 0xd8, 0x12, 0xc5, 0xfa, 0xbd, 0x01, 0xb7, 0x72, 0x85,
0x97, 0x5a, 0xf8, 0xa7, 0x30, 0x1f, 0x07, 0x88, 0x21, 0x26, 0xa1, 0xb4, 0xf6, 0xef, 0xe7, 0xad,
0x10, 0x67, 0xb5, 0x95, 0x81, 0x56, 0x08, 0xab, 0x8f, 0x71, 0x18, 0x61, 0xb5, 0xf1, 0xb9, 0xc6,
0x38, 0x79, 0xa1, 0xec, 0x7a, 0xeb, 0xfa, 0x47, 0x03, 0xde, 0x2b, 0x10, 0x5b, 0x6a, 0x95, 0xb5,
0x76, 0x19, 0x2b, 0x6b, 0x97, 0x7f, 0x1a, 0x50, 0x7f, 0x16, 0xb4, 0x5d, 0x72, 0x8a, 0x03, 0xda,
0x49, 0xe3, 0x56, 0x64, 0x91, 0x06, 0x4c, 0xf1, 0x60, 0xc0, 0x4d, 0x12, 0x37, 0xd1, 0x87, 0x70,
0xe3, 0xb8, 0xef, 0xc8, 0x31, 0x8f, 0x59, 0x26, 0x43, 0x8d, 0xf8, 0x8e, 0xf0, 0xa5, 0xcc, 0xc7,
0x4c, 0x94, 0xa1, 0x66, 0xed, 0x38, 0x51, 0x1c, 0x67, 0x2a, 0x99, 0x38, 0xf3, 0x14, 0x96, 0x74,
0x0a, 0x94, 0xf3, 0xa0, 0xcf, 0x0c, 0x98, 0x7d, 0xe2, 0xf5, 0x5c, 0x71, 0x32, 0xe5, 0x5b, 0xe1,
0x36, 0x80, 0x8d, 0xcf, 0x0f, 0x31, 0x21, 0xed, 0x2e, 0xe6, 0x16, 0x90, 0x28, 0x45, 0xb1, 0xf1,
0x6a, 0x8d, 0xad, 0x2d, 0x98, 0x93, 0x70, 0x94, 0x53, 0xe6, 0xdf, 0x91, 0x4b, 0x66, 0xfc, 0x31,
0xea, 0xf0, 0x5c, 0x82, 0xf9, 0x09, 0x20, 0xa3, 0x30, 0x8a, 0xed, 0x9e, 0xdd, 0xfd, 0x92, 0x65,
0xc6, 0x15, 0xcb, 0x48, 0xa1, 0x62, 0x22, 0x1b, 0x2a, 0xa2, 0xfe, 0xfd, 0xb6, 0xeb, 0xf4, 0xb1,
0x13, 0x39, 0x3d, 0x5b, 0x4f, 0x89, 0x82, 0x2c, 0x98, 0x65, 0x2d, 0x1b, 0x93, 0x61, 0x3f, 0x6c,
0x4c, 0xd2, 0x78, 0x91, 0xa2, 0x59, 0x27, 0xb0, 0x9a, 0xaf, 0x5a, 0x39, 0x73, 0x9d, 0xc2, 0xec,
0xc9, 0xb0, 0x17, 0x8e, 0xb0, 0xf4, 0xd7, 0x3b, 0x18, 0xb7, 0x60, 0x4e, 0x92, 0x53, 0x0e, 0xeb,
0x17, 0x06, 0xd4, 0xe3, 0x68, 0x9b, 0x5c, 0x82, 0x8a, 0x51, 0x5f, 0x2b, 0x94, 0x45, 0x01, 0x72,
0xaf, 0xd7, 0x0f, 0x71, 0x40, 0x17, 0xb4, 0x62, 0xf3, 0x56, 0x24, 0xef, 0x08, 0xbf, 0x0a, 0x5b,
0xf8, 0x9c, 0xae, 0x64, 0xc5, 0x8e, 0x9b, 0xd6, 0x5f, 0x0d, 0x58, 0xd2, 0x61, 0x2c, 0x75, 0x18,
0xec, 0x01, 0x0c, 0x92, 0xdb, 0x21, 0x3b, 0x06, 0x3e, 0xcc, 0x0b, 0x77, 0x4c, 0xda, 0xde, 0xb0,
0xdf, 0xa7, 0xa7, 0xa9, 0x34, 0x32, 0x92, 0xec, 0x72, 0xb8, 0x4c, 0x8f, 0xb8, 0x69, 0xfd, 0x5a,
0x81, 0x2b, 0xae, 0x4a, 0x85, 0x41, 0x40, 0x82, 0x35, 0x46, 0xef, 0x50, 0xb2, 0xb8, 0xeb, 0x05,
0x81, 0xdf, 0x1a, 0xb0, 0xac, 0x85, 0xf4, 0x2e, 0x4d, 0x68, 0xfd, 0xcd, 0x00, 0xf4, 0xb4, 0xd7,
0x39, 0x93, 0xf8, 0x8a, 0x8d, 0xf4, 0x35, 0x98, 0x8f, 0xf8, 0xb1, 0xc3, 0x14, 0x97, 0x4c, 0xa5,
0xd0, 0x23, 0xf0, 0x36, 0x6e, 0x13, 0xcf, 0xe5, 0xe6, 0xe2, 0xad, 0xac, 0xb1, 0x2a, 0xc5, 0x2e,
0x37, 0x99, 0x71, 0xb9, 0x8f, 0xa1, 0xda, 0x74, 0x36, 0x59, 0xe8, 0xc8, 0x3d, 0xea, 0xa9, 0x68,
0x1a, 0x70, 0x58, 0xca, 0xc2, 0x5b, 0xd6, 0xa7, 0xb0, 0xa8, 0xa8, 0x5b, 0x6a, 0x01, 0x1e, 0xc0,
0x9c, 0x40, 0x21, 0xad, 0xc1, 0x3c, 0x77, 0x75, 0xd1, 0x67, 0xa7, 0xd9, 0xac, 0x21, 0xf5, 0xf5,
0xe8, 0x38, 0xc0, 0x0e, 0x45, 0x11, 0xfb, 0x7a, 0x3a, 0xd0, 0x1a, 0x4a, 0xa0, 0x5d, 0x83, 0x19,
0x4f, 0x8d, 0x53, 0xde, 0x88, 0x71, 0xea, 0x33, 0xe6, 0x10, 0x8a, 0xdc, 0x6b, 0x65, 0x2f, 0x23,
0xdf, 0xe0, 0x13, 0x76, 0xeb, 0xef, 0x06, 0xdc, 0x6c, 0xba, 0x17, 0xbd, 0x10, 0x47, 0xc8, 0x9e,
0x79, 0x22, 0x42, 0x5f, 0x1d, 0x87, 0xf3, 0x0f, 0xa9, 0x64, 0xa3, 0x4d, 0xa4, 0x36, 0xda, 0x47,
0xb0, 0xc0, 0x64, 0xc9, 0xbb, 0xb5, 0x42, 0x77, 0xab, 0xda, 0x51, 0xb8, 0xe9, 0x7e, 0x6e, 0x40,
0x5d, 0x03, 0xfb, 0x4b, 0xdd, 0x3a, 0x2e, 0xdc, 0x14, 0x97, 0xf2, 0x7e, 0x7f, 0x14, 0x67, 0xbd,
0xde, 0x85, 0xf7, 0x37, 0xd2, 0xb9, 0x24, 0x09, 0x7c, 0xa7, 0xf1, 0xea, 0x77, 0x06, 0x4c, 0x6f,
0x1f, 0xb6, 0x28, 0x5b, 0x3a, 0x8b, 0x36, 0x5e, 0xaf, 0x4c, 0x70, 0x0f, 0x6a, 0x4c, 0x56, 0x9b,
0x84, 0x38, 0x38, 0x6a, 0x0f, 0xe2, 0x6b, 0x5f, 0x96, 0x8c, 0xee, 0xf2, 0x9c, 0x95, 0x91, 0x9a,
0x0e, 0x37, 0x55, 0x9a, 0x18, 0x85, 0xf7, 0x99, 0xd8, 0x58, 0xd1, 0xa2, 0xac, 0x72, 0x6c, 0x74,
0x66, 0xb6, 0x2c, 0x09, 0x01, 0xed, 0x00, 0xfc, 0xa0, 0xdd, 0xed, 0xb9, 0xd4, 0xd4, 0xbc, 0xc2,
0x71, 0x57, 0x03, 0x9d, 0xdf, 0xee, 0x13, 0x5e, 0x5b, 0x1a, 0x37, 0xc2, 0x12, 0x7e, 0x61, 0xc0,
0x6c, 0x82, 0x8a, 0xf8, 0xe8, 0x1b, 0x50, 0x8d, 0xcd, 0x47, 0x78, 0x5d, 0xa6, 0x16, 0xdf, 0x4e,
0x38, 0xdd, 0x4e, 0x38, 0xde, 0x10, 0x4e, 0x61, 0x8b, 0xe1, 0x80, 0x50, 0x94, 0x15, 0x3b, 0x21,
0x58, 0x17, 0x09, 0x44, 0x12, 0x59, 0x2e, 0x2d, 0xd3, 0x78, 0x33, 0xb6, 0x51, 0xc3, 0x89, 0xf5,
0x27, 0x03, 0xe6, 0x24, 0xc1, 0xef, 0xca, 0x38, 0x26, 0x4c, 0xc7, 0xb6, 0xe0, 0xb6, 0x11, 0x6d,
0xeb, 0x38, 0xa9, 0xba, 0x68, 0xdc, 0xdd, 0x49, 0xbb, 0xbb, 0x33, 0x82, 0xce, 0x67, 0x50, 0x67,
0x4d, 0x56, 0xbd, 0x6a, 0x85, 0xed, 0x70, 0x48, 0x8a, 0x27, 0x5d, 0x82, 0x49, 0xc6, 0x16, 0x9f,
0xa4, 0xac, 0x35, 0xc2, 0xe6, 0x6b, 0xc0, 0x92, 0x4e, 0x18, 0xcb, 0xcc, 0x10, 0xef, 0xa2, 0xe9,
0xb4, 0xd7, 0xc7, 0x57, 0x82, 0xa0, 0x61, 0xcb, 0x89, 0xc3, 0x0a, 0x6b, 0xa5, 0x8b, 0x93, 0xe3,
0x99, 0xe2, 0xe4, 0x08, 0x97, 0xb2, 0x3a, 0x2c, 0x2a, 0x38, 0x88, 0x6f, 0x1d, 0xc0, 0x8d, 0x1d,
0xdc, 0xc7, 0x52, 0x51, 0xf3, 0x3a, 0x46, 0x5f, 0x80, 0x5a, 0x6a, 0x36, 0xe2, 0x5b, 0x87, 0x50,
0x8b, 0x17, 0x76, 0xeb, 0xa7, 0x4d, 0xe7, 0xba, 0x12, 0x1e, 0x26, 0x25, 0x41, 0x36, 0x1d, 0xf1,
0xd1, 0xd7, 0x93, 0x40, 0xc9, 0x9d, 0x48, 0xd9, 0xcb, 0x82, 0xc1, 0xfa, 0x87, 0x92, 0x82, 0x90,
0xed, 0xc3, 0x56, 0x31, 0x2c, 0x13, 0xa6, 0x23, 0xa3, 0x49, 0xa1, 0x53, 0xb4, 0x33, 0xae, 0x31,
0xfe, 0x66, 0x7c, 0x58, 0xb3, 0x7e, 0xff, 0x52, 0xef, 0xf9, 0x14, 0x37, 0xf1, 0xd1, 0xf7, 0x61,
0x8a, 0x9d, 0x1b, 0xb1, 0x2b, 0x8f, 0x7a, 0xdc, 0xc4, 0xc3, 0xd0, 0xae, 0xc6, 0xbf, 0xbf, 0xa2,
0x55, 0x82, 0xe5, 0xaa, 0x39, 0x5a, 0xdc, 0x06, 0x60, 0x12, 0xa4, 0xf0, 0x27, 0x51, 0xac, 0x5f,
0x1a, 0xd0, 0xb0, 0xf1, 0xc0, 0xbb, 0xc0, 0xaf, 0x65, 0xfe, 0x06, 0x4c, 0x31, 0x27, 0x20, 0xfc,
0xfe, 0x1d, 0x37, 0x5f, 0xab, 0x02, 0xee, 0x64, 0x2a, 0xe0, 0x8e, 0x75, 0x08, 0x2b, 0x39, 0x68,
0xd8, 0xc1, 0x4f, 0x86, 0x9d, 0x0e, 0x26, 0x84, 0xd7, 0x98, 0xe3, 0x66, 0xe4, 0xa1, 0xa7, 0xed,
0x5e, 0x1f, 0x3b, 0x1c, 0x0d, 0x6f, 0x59, 0x9f, 0x1b, 0x50, 0x7f, 0xe4, 0x38, 0x6f, 0x43, 0x35,
0x47, 0x55, 0xcd, 0x29, 0x54, 0xed, 0x09, 0x2c, 0xe9, 0xa0, 0x94, 0xd2, 0xab, 0x07, 0xb5, 0x9d,
0x1e, 0x19, 0xf4, 0x08, 0x11, 0x31, 0xc2, 0x84, 0x69, 0x2f, 0x53, 0x93, 0xf5, 0xfc, 0x91, 0x6f,
0xef, 0x0d, 0x98, 0xea, 0xa6, 0x6f, 0xb7, 0xbc, 0x69, 0xed, 0xc2, 0x7c, 0x5a, 0x14, 0x2b, 0x33,
0x74, 0x46, 0x29, 0x33, 0x24, 0x4c, 0xd6, 0x5f, 0x0c, 0x40, 0x87, 0xc3, 0x10, 0x67, 0x8e, 0x93,
0xb7, 0x84, 0x3a, 0x32, 0xdc, 0x50, 0x2e, 0x1a, 0xf1, 0x16, 0xb2, 0x60, 0x76, 0x30, 0x0c, 0xb1,
0xd3, 0xc2, 0x1d, 0xcf, 0x75, 0x08, 0xcd, 0xfe, 0xe6, 0xec, 0x14, 0xcd, 0xda, 0x87, 0x45, 0x05,
0x69, 0x39, 0xa5, 0x7f, 0x61, 0x40, 0x63, 0xbb, 0xed, 0x76, 0x70, 0xff, 0xdd, 0xab, 0x6e, 0x1d,
0xc1, 0x4a, 0x0e, 0x96, 0x72, 0xca, 0x9d, 0xc2, 0xac, 0x98, 0xe9, 0x6d, 0x6e, 0xc0, 0x2d, 0x98,
0x93, 0xe4, 0x94, 0xc3, 0xda, 0x07, 0x94, 0xd1, 0xfd, 0x6d, 0x22, 0xde, 0x87, 0x45, 0x45, 0x5a,
0x39, 0xdc, 0x7f, 0x36, 0x60, 0xa5, 0x95, 0x3a, 0x61, 0x8e, 0x7a, 0x9d, 0x33, 0xb7, 0x3d, 0x88,
0x6f, 0x2c, 0xdd, 0x74, 0xea, 0xd5, 0x4d, 0x52, 0x2f, 0x97, 0x33, 0xc6, 0xa7, 0x63, 0xdc, 0x4e,
0x69, 0x3d, 0x5e, 0xac, 0xf5, 0x84, 0xaa, 0x75, 0xb2, 0xbb, 0x2a, 0xa9, 0xdd, 0x75, 0x0c, 0x66,
0x1e, 0xd0, 0x72, 0x75, 0xc9, 0x80, 0xbe, 0x40, 0xb1, 0x92, 0x41, 0x6b, 0xe8, 0xf3, 0x92, 0x7c,
0x5c, 0xaf, 0xc8, 0x00, 0x35, 0x8a, 0x80, 0x8e, 0xa5, 0x22, 0x40, 0x81, 0xfa, 0xd1, 0x61, 0x78,
0x2b, 0x57, 0x68, 0xa9, 0x15, 0xbc, 0x56, 0xb5, 0xe2, 0x92, 0x5e, 0x8b, 0x12, 0x1c, 0x5f, 0xda,
0x83, 0xeb, 0xaf, 0xd8, 0xc5, 0x46, 0x91, 0x5c, 0xce, 0x04, 0x6f, 0xe2, 0xd9, 0xf5, 0x3f, 0x63,
0x50, 0x4f, 0xef, 0x2f, 0xa9, 0xa2, 0x9a, 0xe3, 0x04, 0x25, 0x76, 0xc0, 0x08, 0x0e, 0xf0, 0x2d,
0xc9, 0xb5, 0x2a, 0x3c, 0xeb, 0xef, 0x7a, 0x5e, 0xb7, 0x8f, 0xd9, 0x0f, 0x12, 0x2f, 0x87, 0xa7,
0xeb, 0xad, 0x30, 0xe8, 0xb9, 0xdd, 0x1f, 0xb6, 0xfb, 0x43, 0x2c, 0x39, 0xde, 0x03, 0x98, 0x3a,
0x6d, 0x77, 0xf0, 0x27, 0xf6, 0x01, 0x2d, 0xf0, 0x5c, 0x35, 0x30, 0x66, 0x46, 0xdf, 0x86, 0x6a,
0x20, 0xd2, 0x8c, 0x29, 0x3a, 0xf2, 0x96, 0x32, 0xb2, 0xe9, 0x86, 0xf7, 0x37, 0xd9, 0xc0, 0x84,
0x1b, 0x7d, 0x04, 0x63, 0xf8, 0x55, 0x63, 0x7a, 0x04, 0x69, 0x63, 0xf8, 0x95, 0xf5, 0x14, 0x96,
0x74, 0x36, 0x2e, 0xe5, 0xbf, 0x9b, 0xff, 0x5b, 0x04, 0xf6, 0xf7, 0x09, 0xfa, 0x2e, 0xcc, 0x74,
0x92, 0x7f, 0x16, 0x50, 0x3d, 0x1e, 0x97, 0xfa, 0x71, 0xc3, 0x5c, 0xd2, 0x91, 0x89, 0x8f, 0x1e,
0x40, 0xf5, 0x27, 0xf1, 0xf3, 0x15, 0x5a, 0xe4, 0x4c, 0xf2, 0xc3, 0x9a, 0x79, 0x53, 0x25, 0xb2,
0x71, 0xe7, 0xf1, 0xdb, 0x88, 0x18, 0x27, 0xbf, 0xca, 0x88, 0x71, 0xe9, 0x27, 0x94, 0x2d, 0x98,
0xeb, 0xca, 0xff, 0x1a, 0xa0, 0xe5, 0xf8, 0xcf, 0x91, 0xcc, 0x6f, 0x0f, 0x66, 0x43, 0xdf, 0x41,
0x7c, 0xf4, 0x10, 0x66, 0x89, 0xf4, 0x08, 0x8f, 0x62, 0xdd, 0x32, 0x3f, 0x0e, 0x98, 0xcb, 0x5a,
0x3a, 0xf1, 0xd1, 0x8f, 0x61, 0xb9, 0xab, 0x7f, 0x01, 0x47, 0x77, 0x32, 0x52, 0xd5, 0x17, 0x68,
0xd3, 0xba, 0x8a, 0x85, 0xf8, 0xe8, 0x14, 0x56, 0xba, 0x79, 0xcf, 0xc9, 0xe8, 0x83, 0x64, 0x82,
0xdc, 0x77, 0x6e, 0xf3, 0xee, 0xd5, 0x4c, 0xc4, 0x47, 0x27, 0x80, 0x42, 0xe5, 0x4d, 0x15, 0xad,
0xf2, 0xb1, 0xda, 0xf7, 0x62, 0xf3, 0xbd, 0x82, 0x5e, 0xe2, 0xa3, 0x0e, 0x34, 0xba, 0x39, 0x0f,
0x76, 0xc8, 0x4a, 0xfd, 0xe6, 0xa3, 0x7d, 0xac, 0x34, 0x3f, 0xb8, 0x92, 0x87, 0xe1, 0xee, 0x2a,
0x2f, 0x4e, 0x02, 0xb7, 0xf6, 0xc1, 0x4c, 0xe0, 0xce, 0x79, 0xaa, 0x7a, 0x06, 0x8b, 0x5d, 0xf5,
0x09, 0x06, 0xe9, 0x47, 0x89, 0x5d, 0x76, 0xbb, 0xa8, 0x9b, 0xf8, 0x68, 0x1f, 0x6a, 0x67, 0xe9,
0x37, 0x05, 0x14, 0xff, 0xeb, 0xa4, 0x3e, 0xad, 0x98, 0x66, 0x5e, 0x97, 0x50, 0x39, 0x53, 0xa4,
0x97, 0x55, 0x56, 0xdf, 0x0d, 0x64, 0x95, 0x75, 0xd5, 0xfd, 0x23, 0x58, 0xe8, 0x65, 0xeb, 0xd6,
0xe8, 0x56, 0x5c, 0x6a, 0xd6, 0x14, 0xe2, 0xcd, 0xd5, 0xfc, 0x4e, 0x36, 0x5f, 0x37, 0x5b, 0x13,
0x16, 0xf3, 0xe9, 0xca, 0xd3, 0xe6, 0x6a, 0x7e, 0x27, 0x73, 0x54, 0xb9, 0x74, 0x21, 0x1c, 0x35,
0x53, 0x1e, 0x31, 0x97, 0xb5, 0x74, 0xe2, 0xa3, 0xfb, 0x30, 0x1d, 0xd3, 0x10, 0xca, 0x30, 0x45,
0x03, 0x17, 0x15, 0x1a, 0x0b, 0x4d, 0x22, 0x66, 0xa0, 0x2c, 0x07, 0x91, 0x43, 0x53, 0xba, 0x42,
0x78, 0x22, 0xea, 0x56, 0x52, 0x49, 0x4b, 0x2c, 0x90, 0xb6, 0xb4, 0x26, 0x16, 0x48, 0x5f, 0x0b,
0x8b, 0x76, 0x4f, 0xa6, 0x04, 0x25, 0x76, 0x8f, 0x5a, 0x22, 0x13, 0xbb, 0x47, 0x53, 0xb5, 0x8a,
0xa2, 0xbc, 0x54, 0x67, 0x12, 0x51, 0x3e, 0x5d, 0xc9, 0x12, 0x51, 0x3e, 0x53, 0x92, 0x8a, 0x54,
0x53, 0x2b, 0x29, 0x39, 0xee, 0xc6, 0x53, 0xf8, 0x1c, 0x77, 0x13, 0x59, 0xf5, 0x73, 0xa8, 0x6b,
0x4b, 0x09, 0xe8, 0x7d, 0x3e, 0x2e, 0xaf, 0xec, 0x61, 0xae, 0x15, 0x33, 0x30, 0xb8, 0x6a, 0x2e,
0x2f, 0xe0, 0x6a, 0x2b, 0x0e, 0x02, 0x6e, 0x4e, 0x11, 0xe0, 0x21, 0xcc, 0xca, 0x79, 0xb6, 0xd8,
0x8a, 0x99, 0x3c, 0x5f, 0x6c, 0x45, 0x25, 0x29, 0xdf, 0x87, 0x5a, 0x26, 0xb3, 0x13, 0x4b, 0xa9,
0x66, 0x9f, 0x62, 0x29, 0x75, 0xc9, 0xe0, 0x73, 0xa8, 0x6b, 0x33, 0x45, 0x61, 0xb9, 0xbc, 0x9c,
0x56, 0x58, 0x2e, 0x3f, 0xd1, 0x7c, 0x00, 0x55, 0x41, 0x16, 0x7b, 0x5f, 0xce, 0xca, 0xc4, 0xde,
0x4f, 0x27, 0x4f, 0xfb, 0x50, 0xcb, 0x4c, 0x2a, 0xb4, 0x53, 0x33, 0x3b, 0xa1, 0x9d, 0x2e, 0x0d,
0xfb, 0x51, 0xf6, 0x96, 0x13, 0x67, 0x2a, 0x68, 0x2d, 0x73, 0x1c, 0x2b, 0x19, 0x97, 0x79, 0xe7,
0x0a, 0x0e, 0x76, 0x74, 0xe7, 0xa4, 0x10, 0xf2, 0xd1, 0x9d, 0x93, 0xd7, 0xc8, 0x47, 0x77, 0x6e,
0x16, 0xc2, 0x7c, 0x25, 0x73, 0x39, 0x97, 0x7d, 0x45, 0xcd, 0x18, 0x64, 0x5f, 0xd1, 0xdd, 0xea,
0x4f, 0x00, 0xa9, 0x37, 0x3f, 0x31, 0xa5, 0xf6, 0xe2, 0x2d, 0xa6, 0xd4, 0x5f, 0x19, 0xb7, 0x6a,
0xcf, 0xe7, 0xd6, 0xd9, 0xbf, 0xc8, 0x1f, 0xd3, 0xef, 0xcb, 0x49, 0x7a, 0xef, 0xbc, 0xff, 0xff,
0x00, 0x00, 0x00, 0xff, 0xff, 0xe6, 0x70, 0x4b, 0xcf, 0xa7, 0x2c, 0x00, 0x00,
0x15, 0x57, 0xdb, 0x99, 0xd8, 0xf3, 0xec, 0xc9, 0xd8, 0xe5, 0x8c, 0x33, 0xee, 0x78, 0xbd, 0x4e,
0x6d, 0x58, 0x22, 0x58, 0x6c, 0xe1, 0x48, 0x11, 0xb0, 0x88, 0x10, 0xff, 0x8b, 0x27, 0xf1, 0x1f,
0xdc, 0x93, 0xe5, 0x10, 0x09, 0x85, 0xc9, 0x74, 0x79, 0x34, 0x78, 0xa6, 0xbb, 0xdd, 0xd5, 0x63,
0x07, 0x2e, 0x2b, 0x2e, 0x48, 0x8b, 0x90, 0x00, 0x21, 0x71, 0x02, 0xc1, 0x9e, 0xe0, 0xc0, 0x81,
0x03, 0x9c, 0x11, 0x77, 0xbe, 0x00, 0x57, 0xbe, 0x00, 0x9f, 0x00, 0x09, 0x75, 0x55, 0x75, 0x75,
0x75, 0x77, 0x75, 0x7b, 0xd2, 0x4e, 0x36, 0x97, 0x96, 0xea, 0xd5, 0xab, 0xaa, 0xdf, 0x7b, 0xf5,
0xde, 0xab, 0x7a, 0xaf, 0x1a, 0xe6, 0x7b, 0xbe, 0x3b, 0xf2, 0xd6, 0xd9, 0x77, 0xcd, 0xf3, 0xdd,
0xc0, 0x45, 0x15, 0xd6, 0x30, 0xef, 0x1c, 0x79, 0xc4, 0x79, 0xd1, 0x3a, 0x58, 0xf7, 0x4e, 0x7b,
0xeb, 0xac, 0x67, 0x9d, 0xda, 0xa7, 0x2f, 0x2e, 0xe8, 0xfa, 0x05, 0xe5, 0x9c, 0xe6, 0x97, 0xf3,
0x59, 0xfc, 0x8e, 0xe7, 0x11, 0x5f, 0x30, 0xe2, 0xef, 0x00, 0x6c, 0xb9, 0xc3, 0xa1, 0xeb, 0x58,
0x84, 0x7a, 0xa8, 0x09, 0x53, 0x3b, 0xbe, 0xbf, 0xe5, 0xda, 0xa4, 0x69, 0xac, 0x1a, 0xf7, 0x2a,
0x56, 0xd4, 0x44, 0x8b, 0x70, 0x7d, 0xc7, 0xf7, 0x0f, 0x68, 0xaf, 0x39, 0xb1, 0x6a, 0xdc, 0xab,
0x5a, 0xa2, 0x85, 0x9f, 0x00, 0x7a, 0x1c, 0x82, 0x7a, 0x64, 0xdb, 0x07, 0x64, 0xf8, 0x92, 0xf8,
0x2d, 0xe7, 0xc4, 0x0d, 0xb9, 0x3f, 0xa1, 0xc4, 0x6f, 0x6d, 0xb3, 0x69, 0xaa, 0x96, 0x68, 0xa1,
0x65, 0xa8, 0x5a, 0xee, 0x80, 0xec, 0x93, 0x73, 0x32, 0x60, 0x13, 0x55, 0xac, 0x98, 0x80, 0xff,
0x6b, 0xc0, 0x8d, 0x2d, 0x9f, 0x74, 0x02, 0xc2, 0xa6, 0xb4, 0xc8, 0x19, 0x7a, 0x04, 0x37, 0x5a,
0x4e, 0x3f, 0xe0, 0x53, 0xef, 0xf7, 0x69, 0xd0, 0x34, 0x56, 0x27, 0xef, 0xcd, 0x6c, 0x2c, 0xad,
0x71, 0xbd, 0x64, 0xd7, 0xb6, 0x52, 0x03, 0xd0, 0xb7, 0xa0, 0xca, 0xb8, 0xc2, 0x4e, 0xb6, 0xe6,
0xcc, 0xc6, 0xf2, 0x1a, 0x25, 0xfe, 0x39, 0xf1, 0x5f, 0x74, 0xbc, 0xfe, 0x0b, 0xaf, 0xe3, 0x77,
0x86, 0x74, 0x4d, 0xf2, 0x58, 0x31, 0x3b, 0x5a, 0x85, 0x99, 0x23, 0x8f, 0xf8, 0x9d, 0xa0, 0xef,
0x3a, 0xad, 0xed, 0xe6, 0x24, 0x13, 0x46, 0x25, 0x21, 0x13, 0xa6, 0x8f, 0x3c, 0x21, 0xeb, 0x35,
0xd6, 0x2d, 0xdb, 0x6c, 0xf4, 0x85, 0x43, 0x7c, 0xd1, 0x5d, 0x11, 0xa3, 0x63, 0x12, 0xfe, 0x14,
0xea, 0x09, 0x81, 0xcb, 0x6c, 0x41, 0x52, 0xc0, 0xc9, 0xd7, 0x12, 0x10, 0xfb, 0x30, 0xf7, 0x98,
0x04, 0xac, 0x4d, 0x59, 0x1f, 0x39, 0x0b, 0x61, 0x73, 0x86, 0x6d, 0xa9, 0xf0, 0xaa, 0xa5, 0x92,
0xd2, 0x6a, 0x99, 0x28, 0x56, 0xcb, 0x64, 0x52, 0x2d, 0xf8, 0x33, 0x03, 0xe6, 0x53, 0x8b, 0x96,
0x92, 0x7b, 0x13, 0x6a, 0x52, 0x10, 0x86, 0x74, 0x92, 0x99, 0x46, 0xb1, 0xec, 0xc9, 0x21, 0xf8,
0xf7, 0x06, 0xd4, 0xdb, 0x02, 0x4b, 0x24, 0xff, 0x3e, 0xd4, 0x7b, 0x51, 0x7b, 0xd7, 0xf5, 0xdb,
0x24, 0x60, 0x88, 0x66, 0x36, 0x70, 0xd1, 0xcc, 0x9c, 0xd3, 0x4a, 0x0f, 0x4d, 0x68, 0x62, 0x42,
0x63, 0x20, 0x85, 0xe6, 0x85, 0x77, 0x60, 0x2e, 0x09, 0x8f, 0x7a, 0xe8, 0xeb, 0xaa, 0xcb, 0x0a,
0x68, 0xf3, 0xc2, 0x1f, 0xe2, 0x0e, 0x4b, 0x61, 0xc2, 0x3f, 0x01, 0x33, 0xd2, 0xf8, 0x23, 0xcf,
0x1b, 0xf4, 0xbb, 0x6c, 0xfe, 0x50, 0x03, 0xa1, 0xc0, 0x2a, 0x44, 0xa3, 0x18, 0xa2, 0x66, 0xab,
0x57, 0x00, 0x76, 0x7d, 0x77, 0x98, 0xd8, 0x6c, 0x85, 0x82, 0x7f, 0x67, 0xc0, 0xed, 0xdc, 0xc5,
0x4b, 0x6d, 0xfc, 0x53, 0x98, 0x8b, 0x02, 0xc4, 0x88, 0xd0, 0x40, 0xd9, 0xfb, 0xf7, 0xf3, 0x76,
0x48, 0xb0, 0x5a, 0x99, 0x81, 0x38, 0x80, 0xe5, 0xc7, 0x24, 0x08, 0xb1, 0x5a, 0xe4, 0x4c, 0xa3,
0x9c, 0xbc, 0x50, 0x76, 0xb5, 0x7d, 0xfd, 0x83, 0x01, 0xef, 0x15, 0x2c, 0x5b, 0x6a, 0x97, 0xb5,
0x7a, 0x99, 0x28, 0xab, 0x97, 0x7f, 0x18, 0xd0, 0x78, 0xe6, 0x77, 0x1c, 0x7a, 0x42, 0x7c, 0xd6,
0xc9, 0xe2, 0x56, 0xa8, 0x91, 0x26, 0x4c, 0x89, 0x60, 0x20, 0x54, 0x12, 0x35, 0xd1, 0x87, 0x70,
0xe3, 0x68, 0x60, 0xab, 0x31, 0x8f, 0x6b, 0x26, 0x45, 0x0d, 0xf9, 0x0e, 0xc9, 0x85, 0xca, 0xc7,
0x55, 0x94, 0xa2, 0xa6, 0xf5, 0x78, 0xad, 0x38, 0xce, 0x54, 0x52, 0x71, 0xe6, 0x29, 0x2c, 0xea,
0x04, 0x28, 0xe7, 0x41, 0xff, 0x32, 0x60, 0xf6, 0x89, 0xdb, 0x77, 0xe4, 0xc9, 0x94, 0xaf, 0x85,
0x15, 0x00, 0x8b, 0x9c, 0x1d, 0x10, 0x4a, 0x3b, 0x3d, 0x22, 0x34, 0xa0, 0x50, 0x8a, 0x62, 0xe3,
0x18, 0x12, 0xaf, 0x00, 0x84, 0x38, 0xda, 0xee, 0xc8, 0xef, 0x12, 0x26, 0x73, 0xc5, 0x52, 0x28,
0xe8, 0x2e, 0xd4, 0x5a, 0xce, 0x79, 0x3f, 0x90, 0xaa, 0xbd, 0xce, 0xe6, 0x48, 0x12, 0xf1, 0x26,
0xd4, 0x14, 0x69, 0xca, 0xa9, 0xe4, 0xdf, 0xa1, 0x63, 0xa7, 0xbc, 0x3a, 0xec, 0x70, 0x1d, 0x4a,
0xc4, 0x39, 0xa2, 0xca, 0x62, 0x14, 0xef, 0x5e, 0xda, 0x87, 0x14, 0xfd, 0x4e, 0x66, 0xf4, 0xab,
0x04, 0x9c, 0x6b, 0xe9, 0x80, 0x13, 0xf6, 0xef, 0x75, 0x1c, 0x7b, 0x40, 0xec, 0x30, 0x74, 0x70,
0xab, 0x50, 0x28, 0x08, 0xc3, 0x2c, 0x6f, 0x59, 0x84, 0x8e, 0x06, 0x01, 0x53, 0x50, 0xc5, 0x4a,
0xd0, 0xf0, 0x31, 0x2c, 0xe7, 0x8b, 0x56, 0x4e, 0x5d, 0x27, 0x30, 0x7b, 0x3c, 0xea, 0x07, 0x63,
0x18, 0xd0, 0xd5, 0x8e, 0xd7, 0x4d, 0xa8, 0x29, 0xeb, 0x94, 0xc3, 0xfa, 0xb9, 0x01, 0x8d, 0x28,
0x66, 0xc7, 0x57, 0xa9, 0x62, 0xd4, 0x57, 0x0a, 0x88, 0x61, 0x98, 0xdd, 0xed, 0x0f, 0x02, 0xe2,
0xb3, 0x0d, 0xad, 0x58, 0xa2, 0x15, 0xae, 0x77, 0x48, 0x5e, 0x05, 0x6d, 0x72, 0x26, 0x6c, 0x3d,
0x6a, 0xe2, 0xbf, 0x18, 0xb0, 0xa8, 0xc3, 0x58, 0xea, 0x48, 0xd9, 0x05, 0x18, 0xc6, 0x77, 0x4c,
0x7e, 0x98, 0x7c, 0x98, 0x17, 0x34, 0xf9, 0x6a, 0xbb, 0xa3, 0xc1, 0x80, 0x9d, 0xc9, 0xca, 0xc8,
0x70, 0x65, 0x47, 0xc0, 0xe5, 0x72, 0x44, 0x4d, 0xfc, 0xab, 0x0c, 0x5c, 0x79, 0xe1, 0x2a, 0x0c,
0x25, 0x0a, 0xac, 0x09, 0x76, 0x13, 0x53, 0x97, 0xbb, 0x52, 0x28, 0xc1, 0xbf, 0x31, 0xe0, 0x96,
0x16, 0xd2, 0xbb, 0x54, 0x21, 0xfe, 0xab, 0x01, 0xe8, 0x69, 0xbf, 0x7b, 0xaa, 0xf0, 0x15, 0x2b,
0xe9, 0x2b, 0x30, 0x17, 0xf2, 0x13, 0x9b, 0x0b, 0xae, 0xa8, 0x2a, 0x43, 0x0f, 0xc1, 0x5b, 0xa4,
0x43, 0x5d, 0x47, 0xa8, 0x4b, 0xb4, 0xd2, 0xca, 0xaa, 0x14, 0xbb, 0xdc, 0xf5, 0x94, 0xcb, 0x7d,
0x0c, 0xd5, 0x96, 0xbd, 0xc1, 0x43, 0x47, 0xee, 0x85, 0x81, 0x2d, 0xcd, 0x02, 0x0e, 0x4f, 0x7c,
0x44, 0x0b, 0x7f, 0x0a, 0x0b, 0x19, 0x71, 0x4b, 0x6d, 0xc0, 0x03, 0xa8, 0x49, 0x14, 0xca, 0x1e,
0xcc, 0x09, 0x57, 0x97, 0x7d, 0x56, 0x92, 0x0d, 0x8f, 0x98, 0xaf, 0x87, 0xc7, 0x01, 0xb1, 0x19,
0x8a, 0xc8, 0xd7, 0x93, 0x81, 0xd6, 0xc8, 0x04, 0xda, 0x55, 0x98, 0x71, 0xb3, 0x71, 0xca, 0x1d,
0x33, 0x4e, 0xfd, 0x8c, 0x3b, 0x44, 0x66, 0xdd, 0x2b, 0xe5, 0x40, 0x63, 0xe7, 0x01, 0x31, 0x3b,
0xfe, 0x9b, 0x01, 0x37, 0xf9, 0xe9, 0x18, 0x22, 0x7b, 0xe6, 0xca, 0x08, 0x7d, 0x79, 0x1c, 0xce,
0x3f, 0xa4, 0x62, 0x43, 0xbb, 0x96, 0x30, 0xb4, 0x8f, 0x60, 0x9e, 0xaf, 0xa5, 0x5a, 0x6b, 0x85,
0x59, 0x6b, 0xb6, 0xa3, 0xd0, 0xe8, 0x7e, 0x6a, 0x40, 0x43, 0x03, 0xfb, 0x0b, 0x35, 0x1d, 0x07,
0x6e, 0xca, 0xab, 0xfd, 0x60, 0x30, 0x8e, 0xb3, 0x5e, 0xed, 0xda, 0xfc, 0x6b, 0xe5, 0x5c, 0x52,
0x16, 0x7c, 0xa7, 0xf1, 0xea, 0xb7, 0x06, 0x4c, 0x6f, 0x1d, 0xb4, 0x19, 0x5b, 0x32, 0x17, 0x37,
0x5e, 0xaf, 0xd8, 0x70, 0x0f, 0xea, 0x7c, 0xad, 0x0e, 0x0d, 0x88, 0x7f, 0xd8, 0x19, 0x46, 0x97,
0xc7, 0x34, 0x39, 0xbc, 0xe3, 0x29, 0xa4, 0x96, 0x2d, 0x54, 0x95, 0x24, 0x86, 0xe1, 0x7d, 0x26,
0x52, 0x56, 0xb8, 0x29, 0xcb, 0x02, 0x1b, 0x9b, 0x99, 0x6f, 0x4b, 0x4c, 0x40, 0xdb, 0x00, 0xdf,
0xeb, 0xf4, 0xfa, 0x0e, 0x53, 0xb5, 0xa8, 0x93, 0xdc, 0xd5, 0x40, 0x17, 0x39, 0x42, 0xcc, 0x6b,
0x29, 0xe3, 0xc6, 0xd8, 0xc2, 0xcf, 0x0d, 0x98, 0x8d, 0x51, 0x51, 0x0f, 0x7d, 0x0d, 0xaa, 0x91,
0xfa, 0xa8, 0xa8, 0xee, 0xd4, 0xa3, 0xdb, 0x89, 0xa0, 0x5b, 0x31, 0xc7, 0x1b, 0xc2, 0x29, 0x75,
0x31, 0x1a, 0x52, 0x86, 0xb2, 0x62, 0xc5, 0x04, 0x7c, 0x1e, 0x43, 0xa4, 0xa1, 0xe6, 0x92, 0x6b,
0x1a, 0x6f, 0x46, 0x37, 0xd9, 0x70, 0x82, 0xff, 0x68, 0x40, 0x4d, 0x59, 0xf8, 0x5d, 0x29, 0xc7,
0x84, 0xe9, 0x48, 0x17, 0x42, 0x37, 0xb2, 0x8d, 0x8f, 0xe2, 0xda, 0x8d, 0xc6, 0xdd, 0xed, 0xa4,
0xbb, 0xdb, 0x63, 0xc8, 0x7c, 0x0a, 0x0d, 0xde, 0xe4, 0x35, 0xb0, 0x76, 0xd0, 0x09, 0x46, 0xb4,
0x78, 0xd2, 0x45, 0xb8, 0xce, 0xd9, 0xa2, 0x93, 0x94, 0xb7, 0xc6, 0x30, 0xbe, 0x26, 0x2c, 0xea,
0x16, 0xa3, 0x5e, 0x78, 0x1a, 0x21, 0xd1, 0xc5, 0x92, 0x72, 0x77, 0x40, 0x2e, 0x05, 0xc1, 0xc2,
0x96, 0x1d, 0x85, 0x15, 0xde, 0x4a, 0x96, 0x38, 0x27, 0x53, 0x25, 0xce, 0x31, 0x2e, 0x65, 0x0d,
0x58, 0xc8, 0xe0, 0xa0, 0x1e, 0xde, 0x87, 0x1b, 0xdb, 0x64, 0x40, 0x94, 0xd2, 0xe8, 0x55, 0x94,
0x3e, 0x0f, 0xf5, 0xc4, 0x6c, 0xd4, 0xc3, 0x07, 0x50, 0x8f, 0x36, 0x76, 0xf3, 0xc7, 0x2d, 0xfb,
0xaa, 0x2b, 0x3c, 0x8c, 0x0b, 0x8b, 0x7c, 0x3a, 0xea, 0xa1, 0xaf, 0xc6, 0x81, 0x52, 0x38, 0x51,
0xc6, 0x96, 0x25, 0x03, 0xfe, 0x7b, 0x26, 0x05, 0xa1, 0x5b, 0x07, 0xed, 0x62, 0x58, 0x26, 0x4c,
0x87, 0x4a, 0x53, 0x42, 0xa7, 0x6c, 0xa7, 0x5c, 0x63, 0xf2, 0xcd, 0xf8, 0xb0, 0x66, 0xff, 0xfe,
0x99, 0xbd, 0xe7, 0x33, 0xdc, 0xd4, 0x43, 0xdf, 0x85, 0x29, 0x7e, 0x6e, 0x44, 0xae, 0x3c, 0xee,
0x71, 0x13, 0x0d, 0x43, 0x3b, 0x1a, 0xff, 0xfe, 0x92, 0x56, 0x08, 0x9e, 0xab, 0xe6, 0x48, 0xb1,
0x02, 0xc0, 0x57, 0x50, 0xc2, 0x9f, 0x42, 0xc1, 0xbf, 0x30, 0xa0, 0x69, 0x91, 0xa1, 0x7b, 0x4e,
0x5e, 0x4b, 0xfd, 0x4d, 0x98, 0xe2, 0x4e, 0x40, 0xc5, 0xfd, 0x3b, 0x6a, 0xbe, 0x56, 0x1d, 0xdd,
0x4e, 0xd5, 0xd1, 0x6d, 0x7c, 0x00, 0x4b, 0x39, 0x68, 0xf8, 0xc1, 0x4f, 0x47, 0xdd, 0x2e, 0xa1,
0x54, 0x54, 0xaa, 0xa3, 0x66, 0xe8, 0xa1, 0x27, 0x9d, 0xfe, 0x80, 0xd8, 0x02, 0x8d, 0x68, 0xe1,
0xcf, 0x0c, 0x68, 0x3c, 0xb2, 0xed, 0xb7, 0x21, 0x9a, 0x9d, 0x15, 0xcd, 0x2e, 0x14, 0xed, 0x09,
0x2c, 0xea, 0xa0, 0x94, 0x92, 0xab, 0x0f, 0xf5, 0xed, 0x3e, 0x1d, 0xf6, 0x29, 0x95, 0x31, 0xc2,
0x84, 0x69, 0x37, 0x55, 0xd9, 0x75, 0xbd, 0xb1, 0x6f, 0xef, 0x4d, 0x98, 0xea, 0x25, 0x6f, 0xb7,
0xa2, 0x89, 0x77, 0x60, 0x2e, 0xb9, 0x14, 0x2f, 0x33, 0x74, 0xc7, 0x29, 0x33, 0xc4, 0x4c, 0xf8,
0xcf, 0x06, 0xa0, 0x83, 0x51, 0x40, 0x52, 0xc7, 0xc9, 0x5b, 0x42, 0x1d, 0x2a, 0x6e, 0xa4, 0x16,
0x8d, 0x44, 0x0b, 0x61, 0x98, 0x1d, 0x8e, 0x02, 0x62, 0xb7, 0x49, 0xd7, 0x75, 0x6c, 0xca, 0xb2,
0xbf, 0x9a, 0x95, 0xa0, 0xe1, 0x3d, 0x58, 0xc8, 0x20, 0x2d, 0x27, 0xf4, 0xcf, 0x0d, 0x68, 0x6e,
0x75, 0x9c, 0x2e, 0x19, 0xbc, 0x7b, 0xd1, 0xf1, 0x21, 0x2c, 0xe5, 0x60, 0x29, 0x27, 0xdc, 0x09,
0xcc, 0xca, 0x99, 0xde, 0xa6, 0x01, 0x6e, 0x42, 0x4d, 0x59, 0xa7, 0x1c, 0xd6, 0x01, 0xa0, 0x94,
0xec, 0x6f, 0x13, 0xf1, 0x1e, 0x2c, 0x64, 0x56, 0x2b, 0x87, 0xfb, 0x4f, 0x06, 0x2c, 0xb5, 0x13,
0x27, 0xcc, 0x61, 0xbf, 0x7b, 0xea, 0x74, 0x86, 0xd1, 0x8d, 0xa5, 0x97, 0x4c, 0xbd, 0x7a, 0x71,
0xea, 0xe5, 0x08, 0xc6, 0xe8, 0x74, 0x8c, 0xda, 0x09, 0xa9, 0x27, 0x8b, 0xa5, 0xbe, 0x96, 0x95,
0x3a, 0xb6, 0xae, 0x4a, 0xc2, 0xba, 0x8e, 0xc0, 0xcc, 0x03, 0x5a, 0xae, 0x2e, 0xe9, 0xb3, 0x77,
0x2c, 0x5e, 0x32, 0x68, 0x8f, 0x3c, 0x51, 0xd8, 0x8f, 0xea, 0x15, 0x29, 0xa0, 0x46, 0x11, 0xd0,
0x89, 0x44, 0x04, 0x28, 0x10, 0x3f, 0x3c, 0x0c, 0x6f, 0xe7, 0x2e, 0x5a, 0x6a, 0x07, 0xaf, 0x54,
0xad, 0xb8, 0x60, 0xd7, 0xa2, 0x18, 0xc7, 0x17, 0xf6, 0x6c, 0xfb, 0x4b, 0x7e, 0xb1, 0xc9, 0xac,
0x5c, 0x4e, 0x05, 0x6f, 0xe2, 0xf1, 0xf6, 0x3f, 0x13, 0xd0, 0x48, 0xda, 0x97, 0x52, 0x51, 0xcd,
0x71, 0x82, 0x12, 0x16, 0x30, 0x86, 0x03, 0x7c, 0x43, 0x71, 0xad, 0x8a, 0xc8, 0xfa, 0x7b, 0xae,
0xdb, 0x1b, 0x10, 0xfe, 0x9b, 0xc5, 0xcb, 0xd1, 0xc9, 0x5a, 0x3b, 0xf0, 0xfb, 0x4e, 0xef, 0xfb,
0x9d, 0xc1, 0x88, 0x28, 0x8e, 0xf7, 0x00, 0xa6, 0x4e, 0x3a, 0x5d, 0xf2, 0x89, 0xb5, 0xcf, 0x0a,
0x3c, 0x97, 0x0d, 0x8c, 0x98, 0xd1, 0x37, 0xa1, 0xea, 0xcb, 0x34, 0x63, 0x8a, 0x8d, 0xbc, 0x9d,
0x19, 0xd9, 0x72, 0x82, 0xfb, 0x1b, 0x7c, 0x60, 0xcc, 0x8d, 0x3e, 0x82, 0x09, 0xf2, 0xaa, 0x39,
0x3d, 0xc6, 0x6a, 0x13, 0xe4, 0x15, 0x7e, 0x0a, 0x8b, 0x3a, 0x1d, 0x97, 0xf2, 0xdf, 0x8d, 0xff,
0x2d, 0x00, 0xff, 0x87, 0x05, 0x7d, 0x1b, 0x66, 0xba, 0xf1, 0x9f, 0x0f, 0xa8, 0x11, 0x8d, 0x4b,
0xfc, 0xfe, 0x61, 0x2e, 0xea, 0xc8, 0xd4, 0x43, 0x0f, 0xa0, 0xfa, 0xa3, 0xe8, 0xf9, 0x0a, 0x2d,
0x08, 0x26, 0xf5, 0x79, 0xce, 0xbc, 0x99, 0x25, 0xf2, 0x71, 0x67, 0xd1, 0xdb, 0x88, 0x1c, 0xa7,
0xbe, 0xca, 0xc8, 0x71, 0xc9, 0x27, 0x94, 0x4d, 0xa8, 0xf5, 0xd4, 0x3f, 0x16, 0xd0, 0xad, 0xe8,
0xff, 0x93, 0xd4, 0xcf, 0x13, 0x66, 0x53, 0xdf, 0x41, 0x3d, 0xf4, 0x10, 0x66, 0xa9, 0xf2, 0x94,
0x8f, 0x22, 0xd9, 0x52, 0xbf, 0x1f, 0x98, 0xb7, 0xb4, 0x74, 0xea, 0xa1, 0x1f, 0xc2, 0xad, 0x9e,
0xfe, 0x1d, 0x1d, 0xdd, 0x49, 0xad, 0x9a, 0x7d, 0xc7, 0x36, 0xf1, 0x65, 0x2c, 0xd4, 0x43, 0x27,
0xb0, 0xd4, 0xcb, 0x7b, 0x94, 0x46, 0x1f, 0xc4, 0x13, 0xe4, 0xbe, 0x96, 0x9b, 0x77, 0x2f, 0x67,
0xa2, 0x1e, 0x3a, 0x06, 0x14, 0x64, 0x5e, 0x66, 0xd1, 0xb2, 0x18, 0xab, 0x7d, 0x75, 0x36, 0xdf,
0x2b, 0xe8, 0xa5, 0x1e, 0xea, 0x42, 0xb3, 0x97, 0xf3, 0x60, 0x87, 0x70, 0xe2, 0x67, 0x21, 0xed,
0x63, 0xa5, 0xf9, 0xc1, 0xa5, 0x3c, 0x1c, 0x77, 0x2f, 0xf3, 0xe2, 0x24, 0x71, 0x6b, 0x1f, 0xcc,
0x24, 0xee, 0x9c, 0xa7, 0xaa, 0x67, 0xb0, 0xd0, 0xcb, 0x3e, 0xc1, 0x20, 0xfd, 0x28, 0x69, 0x65,
0x2b, 0x45, 0xdd, 0xd4, 0x43, 0x7b, 0x50, 0x3f, 0x4d, 0xbe, 0x29, 0xa0, 0xe8, 0x8f, 0xa9, 0xec,
0xd3, 0x8a, 0x69, 0xe6, 0x75, 0x49, 0x91, 0x53, 0x45, 0x7a, 0x55, 0xe4, 0xec, 0xbb, 0x81, 0x2a,
0xb2, 0xae, 0xba, 0x7f, 0x08, 0xf3, 0xfd, 0x74, 0xdd, 0x1a, 0xdd, 0x8e, 0x4a, 0xcd, 0x9a, 0x42,
0xbc, 0xb9, 0x9c, 0xdf, 0xc9, 0xe7, 0xeb, 0xa5, 0x6b, 0xc2, 0x72, 0x3e, 0x5d, 0x79, 0xda, 0x5c,
0xce, 0xef, 0xe4, 0x8e, 0xaa, 0x96, 0x2e, 0xa4, 0xa3, 0xa6, 0xca, 0x23, 0xe6, 0x2d, 0x2d, 0x9d,
0x7a, 0xe8, 0x3e, 0x4c, 0x47, 0x34, 0x84, 0x52, 0x4c, 0xe1, 0xc0, 0x85, 0x0c, 0x8d, 0x87, 0x26,
0x19, 0x33, 0x50, 0x9a, 0x83, 0xaa, 0xa1, 0x29, 0x59, 0x21, 0x3c, 0x96, 0x75, 0x2b, 0xa5, 0xa4,
0x25, 0x37, 0x48, 0x5b, 0x5a, 0x93, 0x1b, 0xa4, 0xaf, 0x85, 0x85, 0xd6, 0x93, 0x2a, 0x41, 0x49,
0xeb, 0xc9, 0x96, 0xc8, 0xa4, 0xf5, 0x68, 0xaa, 0x56, 0x61, 0x94, 0x57, 0xea, 0x4c, 0x32, 0xca,
0x27, 0x2b, 0x59, 0x32, 0xca, 0xa7, 0x4a, 0x52, 0xa1, 0x68, 0xd9, 0x4a, 0x4a, 0x8e, 0xbb, 0x89,
0x14, 0x3e, 0xc7, 0xdd, 0x64, 0x56, 0xfd, 0x1c, 0x1a, 0xda, 0x52, 0x02, 0x7a, 0x5f, 0x8c, 0xcb,
0x2b, 0x7b, 0x98, 0xab, 0xc5, 0x0c, 0x1c, 0x6e, 0x36, 0x97, 0x97, 0x70, 0xb5, 0x15, 0x07, 0x09,
0x37, 0xa7, 0x08, 0xf0, 0x10, 0x66, 0xd5, 0x3c, 0x5b, 0x9a, 0x62, 0x2a, 0xcf, 0x97, 0xa6, 0x98,
0x49, 0xca, 0xf7, 0xa0, 0x9e, 0xca, 0xec, 0xe4, 0x56, 0x66, 0xb3, 0x4f, 0xb9, 0x95, 0xba, 0x64,
0xf0, 0x39, 0x34, 0xb4, 0x99, 0xa2, 0xd4, 0x5c, 0x5e, 0x4e, 0x2b, 0x35, 0x97, 0x9f, 0x68, 0x3e,
0x80, 0xaa, 0x24, 0x4b, 0xdb, 0x57, 0xb3, 0x32, 0x69, 0xfb, 0xc9, 0xe4, 0x69, 0x0f, 0xea, 0xa9,
0x49, 0xa5, 0x74, 0xd9, 0xcc, 0x4e, 0x4a, 0xa7, 0x4b, 0xc3, 0x7e, 0x90, 0xbe, 0xe5, 0x44, 0x99,
0x0a, 0x5a, 0x4d, 0x1d, 0xc7, 0x99, 0x8c, 0xcb, 0xbc, 0x73, 0x09, 0x07, 0x3f, 0xba, 0x73, 0x52,
0x08, 0xf5, 0xe8, 0xce, 0xc9, 0x6b, 0xd4, 0xa3, 0x3b, 0x37, 0x0b, 0xe1, 0xbe, 0x92, 0xba, 0x9c,
0xab, 0xbe, 0x92, 0xcd, 0x18, 0x54, 0x5f, 0xd1, 0xdd, 0xea, 0x8f, 0x01, 0x65, 0x6f, 0x7e, 0x72,
0x4a, 0xed, 0xc5, 0x5b, 0x4e, 0xa9, 0xbf, 0x32, 0x6e, 0xd6, 0x9f, 0xd7, 0xd6, 0xf8, 0x1f, 0xcd,
0x1f, 0xb3, 0xef, 0xcb, 0xeb, 0xec, 0xde, 0x79, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x7a,
0x3c, 0xf8, 0x82, 0xed, 0x2c, 0x00, 0x00,
}

View File

@ -91,6 +91,9 @@ message JoinGroupReq{
string ReqMessage = 2;
string OpUserID = 3;
string OperationID = 4;
int32 JoinSource = 5;
string InviterUserID = 6;
}
message JoinGroupResp{
CommonResp CommonResp = 1;

File diff suppressed because it is too large Load Diff

View File

@ -21,6 +21,10 @@ message GroupInfo{
string creatorUserID = 11;
int32 groupType = 12;
int32 needVerification = 13;
int32 lookMemberInfo =14;
int32 applyMemberFriend = 15;
uint32 notificationUpdateTime = 16;
string notificationUserID = 17;
}
message GroupInfoForSet{
@ -31,6 +35,8 @@ message GroupInfoForSet{
string faceURL = 5;
string ex = 6;
google.protobuf.Int32Value needVerification = 7;
google.protobuf.Int32Value lookMemberInfo = 8;
google.protobuf.Int32Value applyMemberFriend = 9;
}
@ -46,6 +52,7 @@ message GroupMemberFullInfo {
string operatorUserID = 9;
string ex = 10;
uint32 muteEndTime = 11;
string inviterUserID = 12;
}
message PublicUserInfo{