✨ 初始化项目
This commit is contained in:
212
im.go
Normal file
212
im.go
Normal file
@@ -0,0 +1,212 @@
|
||||
/**
|
||||
* @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
|
||||
}
|
Reference in New Issue
Block a user