tencent-im/sns/friend.go

207 lines
5.0 KiB
Go
Raw Normal View History

2022-09-27 11:31:23 +08:00
/**
* @Author: Echo
* @Email:1711788888@qq.com
* @Date: 2021/8/30 2:55 下午
* @Desc: 好友关系
*/
package sns
import (
"errors"
"fmt"
"strings"
"git.echol.cn/loser/tencent-im/internal/entity"
)
var (
errNotSetAccount = errors.New("the friend's account is not set")
errNotSetAddSource = errors.New("the friend's add source is not set")
)
type Friend struct {
entity.User
customAttrs map[string]interface{}
}
func NewFriend(userId ...string) *Friend {
f := new(Friend)
f.customAttrs = make(map[string]interface{})
if len(userId) > 0 {
f.SetUserId(userId[0])
}
return f
}
// SetAddSource 设置添加来源
func (f *Friend) SetAddSource(addSource string) {
f.SetAttr(FriendAttrAddSource, "AddSource_Type_"+addSource)
}
// GetAddSource 获取添加来源
func (f *Friend) GetAddSource() (addSource string, exist bool) {
var v interface{}
if v, exist = f.GetAttr(FriendAttrAddSource); exist {
addSource = strings.TrimLeft(v.(string), "AddSource_Type_")
}
return
}
// GetSrcAddSource 获取添加来源(原始的)
func (f *Friend) GetSrcAddSource() (addSource string, exist bool) {
var v interface{}
if v, exist = f.GetAttr(FriendAttrAddSource); exist {
addSource = v.(string)
}
return
}
// SetRemark 设置备注
func (f *Friend) SetRemark(remark string) {
f.SetAttr(FriendAttrRemark, remark)
}
// GetRemark 获取备注
func (f *Friend) GetRemark() (remark string, exist bool) {
var v interface{}
if v, exist = f.GetAttr(FriendAttrRemark); exist {
remark = v.(string)
}
return
}
// SetGroup 设置分组
func (f *Friend) SetGroup(groupName ...string) {
f.SetAttr(FriendAttrGroup, groupName)
}
// GetGroup 获取分组
func (f *Friend) GetGroup() (groups []string, exist bool) {
var v interface{}
if v, exist = f.GetAttr(FriendAttrGroup); exist && v != nil {
if vv, ok := v.([]interface{}); ok {
for _, group := range vv {
groups = append(groups, group.(string))
}
}
}
return
}
// SetAddWording 设置形成好友关系时的附言信息
func (f *Friend) SetAddWording(addWording string) {
f.SetAttr(FriendAttrAddWording, addWording)
}
// GetAddWording 获取形成好友关系时的附言信息
func (f *Friend) GetAddWording() (addWording string, exist bool) {
var v interface{}
if v, exist = f.GetAttr(FriendAttrAddWording); exist {
addWording = v.(string)
}
return
}
// SetAddTime 设置添加时间(忽略)
func (f *Friend) SetAddTime(addTime int64) {
f.SetAttr(FriendAttrAddTime, addTime)
}
// GetAddTime 获取添加时间
func (f *Friend) GetAddTime() (addTime int64, exist bool) {
var v interface{}
if v, exist = f.GetAttr(FriendAttrAddTime); exist {
addTime = v.(int64)
}
return
}
// SetRemarkTime 设置备注时间
func (f *Friend) SetRemarkTime(remarkTime int64) {
f.SetAttr(FriendAttrRemarkTime, remarkTime)
}
// GetRemarkTime 获取备注时间
func (f *Friend) GetRemarkTime() (remarkTime int64, exist bool) {
var v interface{}
if v, exist = f.GetAttr(FriendAttrRemarkTime); exist {
remarkTime = v.(int64)
}
return
}
// SetSNSCustomAttr 设置SNS自定义关系数据自定义字段需要单独申请请在 IM 控制台 >应用配置>功能配置申请自定义好友字段申请提交后自定义好友字段将在5分钟内生效
func (f *Friend) SetSNSCustomAttr(name string, value interface{}) {
if f.customAttrs == nil {
f.customAttrs = make(map[string]interface{})
}
f.customAttrs[fmt.Sprintf("%s_%s", "Tag_SNS_Custom", name)] = value
}
// GetSNSCustomAttr 设置SNS自定义关系数据 (自定义字段需要单独申请,请在 IM 控制台 >应用配置>功能配置申请自定义好友字段申请提交后自定义好友字段将在5分钟内生效
func (f *Friend) GetSNSCustomAttr(name string) (value interface{}, exist bool) {
if f.customAttrs == nil {
return
}
value, exist = f.customAttrs[fmt.Sprintf("%s_%s", "Tag_SNS_Custom", name)]
return
}
// GetSNSAttrs 获取SNS标准关系数据
func (f *Friend) GetSNSAttrs() (attrs map[string]interface{}) {
attrs = make(map[string]interface{})
for k, v := range f.GetAttrs() {
switch k {
case FriendAttrAddSource, FriendAttrRemark, FriendAttrGroup, FriendAttrAddWording, FriendAttrAddTime, FriendAttrRemarkTime:
attrs[k] = v
}
}
return
}
// GetSNSCustomAttrs 获取SNS自定义关系数据自定义字段需要单独申请请在 IM 控制台 >应用配置>功能配置申请自定义好友字段申请提交后自定义好友字段将在5分钟内生效
func (f *Friend) GetSNSCustomAttrs() (attrs map[string]interface{}) {
attrs = make(map[string]interface{})
if f.customAttrs == nil {
return
}
for k, v := range f.customAttrs {
switch k {
case FriendAttrAddSource, FriendAttrRemark, FriendAttrGroup, FriendAttrAddWording, FriendAttrAddTime, FriendAttrRemarkTime:
default:
attrs[k] = v
}
}
return
}
// checkError 检测参数错误
func (f *Friend) checkError() error {
if f.GetUserId() == "" {
return errNotSetAccount
}
if _, exist := f.GetSrcAddSource(); !exist {
return errNotSetAddSource
}
return nil
}