tencent-im/sns/friend.go
2022-09-27 11:31:23 +08:00

207 lines
5.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @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
}