mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-04-24 10:22:36 +08:00
95 lines
2.9 KiB
Go
95 lines
2.9 KiB
Go
package group
|
|
|
|
import (
|
|
"Open_IM/pkg/common/constant"
|
|
"Open_IM/pkg/common/tracelog"
|
|
pbConversation "Open_IM/pkg/proto/conversation"
|
|
sdkws "Open_IM/pkg/proto/sdkws"
|
|
"Open_IM/pkg/utils"
|
|
"context"
|
|
"errors"
|
|
"math/big"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func GetPublicUserInfoOne(ctx context.Context, userID string) (*sdkws.PublicUserInfo, error) {
|
|
return nil, errors.New("todo")
|
|
}
|
|
|
|
func GetUsersInfo(ctx context.Context, userIDs []string) ([]*sdkws.UserInfo, error) {
|
|
return nil, errors.New("todo")
|
|
}
|
|
|
|
func GetUserInfoMap(ctx context.Context, userIDs []string) (map[string]*sdkws.UserInfo, error) {
|
|
users, err := GetUsersInfo(ctx, userIDs)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return utils.SliceToMap(users, func(e *sdkws.UserInfo) string {
|
|
return e.UserID
|
|
}), nil
|
|
}
|
|
|
|
func GetPublicUserInfo(ctx context.Context, userIDs []string) ([]*sdkws.PublicUserInfo, error) {
|
|
return nil, errors.New("todo")
|
|
}
|
|
|
|
func GetPublicUserInfoMap(ctx context.Context, userIDs []string) (map[string]*sdkws.PublicUserInfo, error) {
|
|
users, err := GetPublicUserInfo(ctx, userIDs)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return utils.SliceToMap(users, func(e *sdkws.PublicUserInfo) string {
|
|
return e.UserID
|
|
}), nil
|
|
}
|
|
|
|
func GetUsername(ctx context.Context, userIDs []string) (map[string]string, error) {
|
|
if len(userIDs) == 0 {
|
|
return map[string]string{}, nil
|
|
}
|
|
users, err := GetPublicUserInfo(ctx, userIDs)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if ids := utils.Single(userIDs, utils.Slice(users, func(e *sdkws.PublicUserInfo) string {
|
|
return e.UserID
|
|
})); len(ids) > 0 {
|
|
return nil, constant.ErrUserIDNotFound.Wrap(strings.Join(ids, ","))
|
|
}
|
|
return utils.SliceToMapAny(users, func(e *sdkws.PublicUserInfo) (string, string) {
|
|
return e.UserID, e.Nickname
|
|
}), nil
|
|
}
|
|
|
|
func GroupNotification(ctx context.Context, groupID string) {
|
|
var conversationReq pbConversation.ModifyConversationFieldReq
|
|
conversation := pbConversation.Conversation{
|
|
OwnerUserID: tracelog.GetOpUserID(ctx),
|
|
ConversationID: utils.GetConversationIDBySessionType(groupID, constant.GroupChatType),
|
|
ConversationType: constant.GroupChatType,
|
|
GroupID: groupID,
|
|
}
|
|
conversationReq.Conversation = &conversation
|
|
conversationReq.OperationID = tracelog.GetOperationID(ctx)
|
|
conversationReq.FieldType = constant.FieldGroupAtType
|
|
conversation.GroupAtType = constant.GroupNotification
|
|
conversationReq.UserIDList = cacheResp.UserIDList
|
|
|
|
_, err = pbConversation.NewConversationClient(s.etcdConn.GetConn("", config.Config.RpcRegisterName.OpenImConversationName)).ModifyConversationField(ctx, &conversationReq)
|
|
tracelog.SetCtxInfo(ctx, "ModifyConversationField", err, "req", &conversationReq, "resp", conversationReply)
|
|
}
|
|
|
|
func genGroupID(ctx context.Context, groupID string) string {
|
|
if groupID != "" {
|
|
return groupID
|
|
}
|
|
groupID = utils.Md5(tracelog.GetOperationID(ctx) + strconv.FormatInt(time.Now().UnixNano(), 10))
|
|
bi := big.NewInt(0)
|
|
bi.SetString(groupID[0:8], 16)
|
|
groupID = bi.String()
|
|
return groupID
|
|
}
|