213 lines
4.9 KiB
Go
213 lines
4.9 KiB
Go
/**
|
||
* @Author: Echo
|
||
* @Author: 1711788888@qq.com
|
||
* @Date: 2022/9/26 20:29
|
||
* @Desc: 腾讯云IM
|
||
*/
|
||
|
||
package im
|
||
|
||
import (
|
||
"sync"
|
||
"time"
|
||
|
||
"git.echol.cn/loser/tencent-im/account"
|
||
"git.echol.cn/loser/tencent-im/callback"
|
||
"git.echol.cn/loser/tencent-im/group"
|
||
"git.echol.cn/loser/tencent-im/internal/core"
|
||
"git.echol.cn/loser/tencent-im/internal/sign"
|
||
"git.echol.cn/loser/tencent-im/mute"
|
||
"git.echol.cn/loser/tencent-im/operation"
|
||
"git.echol.cn/loser/tencent-im/private"
|
||
"git.echol.cn/loser/tencent-im/profile"
|
||
"git.echol.cn/loser/tencent-im/push"
|
||
"git.echol.cn/loser/tencent-im/recentcontact"
|
||
"git.echol.cn/loser/tencent-im/sns"
|
||
)
|
||
|
||
type Error = core.Error
|
||
|
||
type (
|
||
IM interface {
|
||
// GetUserSig 获取UserSig签名
|
||
GetUserSig(userId string, expiration ...int) UserSig
|
||
// SNS 获取关系链管理接口
|
||
SNS() sns.API
|
||
// Mute 获取全局禁言管理接口
|
||
Mute() mute.API
|
||
// Push 获取全员推送接口
|
||
Push() push.API
|
||
// Group 获取群组管理接口
|
||
Group() group.API
|
||
// Account 获取账号管理接口
|
||
Account() account.API
|
||
// Profile 获取资料管理接口
|
||
Profile() profile.API
|
||
// Private 获取私聊消息接口
|
||
Private() private.API
|
||
// Operation 获取运营管理接口
|
||
Operation() operation.API
|
||
// RecentContact 获取最近联系人接口
|
||
RecentContact() recentcontact.API
|
||
// Callback 获取回调接口
|
||
Callback() callback.Callback
|
||
}
|
||
|
||
Options struct {
|
||
AppId int // 应用SDKAppID,可在即时通信 IM 控制台 的应用卡片中获取。
|
||
AppSecret string // 密钥信息,可在即时通信 IM 控制台 的应用详情页面中获取,具体操作请参见 获取密钥
|
||
UserId string // 用户ID
|
||
Expiration int // UserSig过期时间
|
||
}
|
||
|
||
UserSig struct {
|
||
UserSig string // 用户签名
|
||
ExpireAt int64 // 签名过期时间
|
||
}
|
||
|
||
im struct {
|
||
opt *Options
|
||
client core.Client
|
||
sns struct {
|
||
once sync.Once
|
||
instance sns.API
|
||
}
|
||
mute struct {
|
||
once sync.Once
|
||
instance mute.API
|
||
}
|
||
push struct {
|
||
once sync.Once
|
||
instance push.API
|
||
}
|
||
group struct {
|
||
once sync.Once
|
||
instance group.API
|
||
}
|
||
account struct {
|
||
once sync.Once
|
||
instance account.API
|
||
}
|
||
profile struct {
|
||
once sync.Once
|
||
instance profile.API
|
||
}
|
||
private struct {
|
||
once sync.Once
|
||
instance private.API
|
||
}
|
||
operation struct {
|
||
once sync.Once
|
||
instance operation.API
|
||
}
|
||
recentcontact struct {
|
||
once sync.Once
|
||
instance recentcontact.API
|
||
}
|
||
callback struct {
|
||
once sync.Once
|
||
instance callback.Callback
|
||
}
|
||
}
|
||
)
|
||
|
||
func NewIM(opt *Options) IM {
|
||
return &im{opt: opt, client: core.NewClient(&core.Options{
|
||
AppId: opt.AppId,
|
||
AppSecret: opt.AppSecret,
|
||
UserId: opt.UserId,
|
||
Expiration: opt.Expiration,
|
||
})}
|
||
}
|
||
|
||
// GetUserSig 获取UserSig签名
|
||
func (i *im) GetUserSig(userId string, expiration ...int) UserSig {
|
||
if len(expiration) == 0 {
|
||
expiration = append(expiration, i.opt.Expiration)
|
||
}
|
||
|
||
userSig, _ := sign.GenUserSig(i.opt.AppId, i.opt.AppSecret, userId, expiration[0])
|
||
expireAt := time.Now().Add(time.Duration(i.opt.Expiration) * time.Second).Unix()
|
||
return UserSig{UserSig: userSig, ExpireAt: expireAt}
|
||
}
|
||
|
||
// SNS 获取关系链管理接口ok
|
||
func (i *im) SNS() sns.API {
|
||
i.sns.once.Do(func() {
|
||
i.sns.instance = sns.NewAPI(i.client)
|
||
})
|
||
return i.sns.instance
|
||
}
|
||
|
||
// Mute 获取全局禁言管理接口ok
|
||
func (i *im) Mute() mute.API {
|
||
i.mute.once.Do(func() {
|
||
i.mute.instance = mute.NewAPI(i.client)
|
||
})
|
||
return i.mute.instance
|
||
}
|
||
|
||
// Push 获取全员推送接口
|
||
func (i *im) Push() push.API {
|
||
i.push.once.Do(func() {
|
||
i.push.instance = push.NewAPI(i.client)
|
||
})
|
||
return i.push.instance
|
||
}
|
||
|
||
// Group 获取群组管理接口
|
||
func (i *im) Group() group.API {
|
||
i.group.once.Do(func() {
|
||
i.group.instance = group.NewAPI(i.client)
|
||
})
|
||
return i.group.instance
|
||
}
|
||
|
||
// Account 获取账号管理接口ok
|
||
func (i *im) Account() account.API {
|
||
i.account.once.Do(func() {
|
||
i.account.instance = account.NewAPI(i.client)
|
||
})
|
||
return i.account.instance
|
||
}
|
||
|
||
// Profile 获取资料管理接口ok
|
||
func (i *im) Profile() profile.API {
|
||
i.profile.once.Do(func() {
|
||
i.profile.instance = profile.NewAPI(i.client)
|
||
})
|
||
return i.profile.instance
|
||
}
|
||
|
||
// Private 获取私聊消息接口ok
|
||
func (i *im) Private() private.API {
|
||
i.private.once.Do(func() {
|
||
i.private.instance = private.NewAPI(i.client)
|
||
})
|
||
return i.private.instance
|
||
}
|
||
|
||
// Operation 获取运营管理接口ok
|
||
func (i *im) Operation() operation.API {
|
||
i.operation.once.Do(func() {
|
||
i.operation.instance = operation.NewAPI(i.client)
|
||
})
|
||
return i.operation.instance
|
||
}
|
||
|
||
// RecentContact 获取最近联系人接口ok
|
||
func (i *im) RecentContact() recentcontact.API {
|
||
i.recentcontact.once.Do(func() {
|
||
i.recentcontact.instance = recentcontact.NewAPI(i.client)
|
||
})
|
||
return i.recentcontact.instance
|
||
}
|
||
|
||
// Callback 获取回调接口
|
||
func (i *im) Callback() callback.Callback {
|
||
i.callback.once.Do(func() {
|
||
i.callback.instance = callback.NewCallback(i.opt.AppId)
|
||
})
|
||
return i.callback.instance
|
||
}
|