You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tencent-im/im_test.go

1512 lines
34 KiB
Go

/**
* @Author: Echo
* @Email:1711788888@qq.com
* @Date: 2021/8/27 1:40
* @Desc: TODO
*/
package im_test
import (
"fmt"
"math/rand"
"strconv"
"testing"
"time"
"git.echol.cn/loser/tencent-im"
"git.echol.cn/loser/tencent-im/account"
"git.echol.cn/loser/tencent-im/group"
"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"
)
const (
assistant = "assistant"
accountPrefix = "test"
test1 = "test1"
test2 = "test2"
test3 = "test3"
test4 = "test4"
test5 = "test5"
test6 = "test6"
test7 = "test7"
test8 = "test8"
test9 = "test9"
)
func NewIM() im.IM {
return im.NewIM(&im.Options{
AppId: 1400564830,
AppSecret: "0d2a321b087fdb8fd5ed5ea14fe0489139086eb1b03541774fc9feeab8f2bfd3",
UserId: "administrator",
Expiration: 3600,
})
}
// 处理错误
func handleError(t *testing.T, callName string, err error) {
if e, ok := err.(im.Error); ok {
t.Fatalf("call %s failed, code:%d, message:%s.", callName, e.Code(), e.Message())
} else {
t.Fatalf("call %s failed, err:%s.", callName, e.Error())
}
}
func testUserIds() []string {
return []string{
test1,
test2,
test3,
test4,
test5,
test6,
test7,
test8,
test9,
}
}
// GetUserSig 获取UserSig签名
func TestIm_GetUserSig(t *testing.T) {
tim := NewIM()
for i := 0; i < 1000; i++ {
tim.GetUserSig(assistant)
}
t.Log("Success")
}
// 导入单个账号
func TestIm_Account_ImportAccount(t *testing.T) {
if err := NewIM().Account().ImportAccount(&account.Account{
UserId: assistant,
Nickname: "小助手",
FaceUrl: "http://www.qq.com",
}); err != nil {
t.Fatal(err)
}
t.Log("Success")
}
// 导入多个帐号
func TestIm_Account_ImportAccounts(t *testing.T) {
failedAccounts, err := NewIM().Account().ImportAccounts(
test1,
test2,
test3,
test4,
test5,
test6,
test7,
test8,
test9,
)
if err != nil {
t.Fatal(err)
}
t.Log(failedAccounts)
}
// 删除单个账号
func TestIm_Account_DeleteAccount(t *testing.T) {
err := NewIM().Account().DeleteAccount(test1)
if err != nil {
t.Fatal(err)
}
t.Log("Success")
}
// 删除多个帐号
func TestIm_Account_DeleteAccounts(t *testing.T) {
deleteResults, err := NewIM().Account().DeleteAccounts(
test1,
test2,
test3,
test4,
test5,
test6,
test7,
test8,
test9,
)
if err != nil {
t.Fatal(err)
}
t.Log(deleteResults)
}
// 查询多个帐号
func TestIm_Account_CheckAccounts(t *testing.T) {
checkResults, err := NewIM().Account().CheckAccounts(
test1,
test2,
test3,
test4,
test5,
test6,
test7,
test8,
test9,
)
if err != nil {
t.Fatal(err)
}
t.Log(checkResults)
}
// 使帐号登录状态失效
func TestIm_Account_KickAccount(t *testing.T) {
if err := NewIM().Account().KickAccount(test1); err != nil {
t.Fatal(err)
}
t.Log("Success")
}
// 查询帐号在线状态
func TestIm_Account_QueryAccountOnlineStatus(t *testing.T) {
ret, err := NewIM().Account().GetAccountOnlineState(test2, true)
if err != nil {
t.Fatal(err)
}
t.Log(ret)
}
// 查询多个帐号在线状态
func TestIm_Account_QueryAccountsOnlineStatus(t *testing.T) {
resp, err := NewIM().Account().GetAccountsOnlineState([]string{
test1,
test2,
})
if err != nil {
t.Fatal(err)
}
t.Log(resp.Results)
t.Log(resp.Errors)
}
// 全员推送
func TestIm_Push_PushMessage(t *testing.T) {
message := push.NewMessage()
message.SetSender(assistant)
message.SetLifeTime(5000)
message.SetContent(push.MsgTextContent{
Text: "Hello Tencent IM",
})
message.OfflinePush().SetTitle("你好腾讯IM")
message.OfflinePush().SetDesc("你好腾讯IM我来了~~~")
message.OfflinePush().SetPushFlag(push.PushFlagYes)
message.OfflinePush().SetExt(map[string]interface{}{
"url": "http://www.tencent.com",
})
message.OfflinePush().SetAndroidExtAsHuaweiIntentParam(push.HuaweiIntentParamIntent)
message.OfflinePush().SetApnsBadgeMode(push.BadgeModeNormal)
taskId, err := NewIM().Push().PushMessage(message)
if err != nil {
handleError(t, "push.PushMessage", err)
}
t.Log(taskId)
}
// 设置应用属性名称
func TestIm_Push_SetAttrNames(t *testing.T) {
if err := NewIM().Push().SetAttrNames(map[int]string{
0: "age",
1: "city",
}); err != nil {
handleError(t, "push.SetAttrNames", err)
}
t.Log("Success")
}
// 获取应用属性名称
func TestIm_Push_GetAttrNames(t *testing.T) {
ret, err := NewIM().Push().GetAttrNames()
if err != nil {
handleError(t, "push.GetAttrNames", err)
}
t.Log(ret)
}
// 获取用户属性
func TestIm_Push_GetUserAttrs(t *testing.T) {
ret, err := NewIM().Push().GetUserAttrs(test1)
if err != nil {
handleError(t, "push.GetUserAttrs", err)
}
t.Log(ret)
}
// 设置用户属性
func TestIm_Push_SetUserAttrs(t *testing.T) {
err := NewIM().Push().SetUserAttrs(map[string]map[string]interface{}{
test1: {
"age": 20,
"city": "成都",
},
})
if err != nil {
handleError(t, "push.SetUserAttrs", err)
}
t.Log("Success")
}
// 删除用户属性
func TestIm_Push_DeleteUserAttrs(t *testing.T) {
err := NewIM().Push().DeleteUserAttrs(map[string][]string{
test1: {"age", "city"},
})
if err != nil {
handleError(t, "push.DeleteUserAttrs", err)
}
t.Log("Success")
}
// 获取用户标签
func TestIm_Push_GetUserTags(t *testing.T) {
ret, err := NewIM().Push().GetUserTags(test1)
if err != nil {
handleError(t, "push.GetUserTags", err)
}
t.Log(ret)
}
// 添加用户标签
func TestIm_Push_AddUserTags(t *testing.T) {
err := NewIM().Push().AddUserTags(map[string][]string{
test1: {"chengdu"},
})
if err != nil {
handleError(t, "push.AddUserTags", err)
}
t.Log("Success")
}
// 删除用户标签
func TestIm_Push_DeleteUserTags(t *testing.T) {
err := NewIM().Push().DeleteUserTags(map[string][]string{
test1: {"chengdu"},
})
if err != nil {
handleError(t, "push.DeleteUserTags", err)
}
t.Log("Success")
}
// 删除用户所有标签
func TestIm_Push_DeleteUserAllTags(t *testing.T) {
err := NewIM().Push().DeleteUserAllTags(test1, test2)
if err != nil {
handleError(t, "push.DeleteUserAllTags", err)
}
t.Log("Success")
}
// 设置资料
func TestIm_Profile_SetProfile(t *testing.T) {
p := profile.NewProfile()
p.SetUserId(assistant)
p.SetNickname("小助手")
p.SetAvatar("http://www.qq.com")
p.SetGender(profile.GenderTypeMale)
p.SetLocation(1, 23, 7465, 92)
p.SetLanguage(20)
if err := NewIM().Profile().SetProfile(p); err != nil {
handleError(t, "profile.SetProfile", err)
}
t.Log("Success")
}
// 获取资料
func TestIm_Profile_GetProfile(t *testing.T) {
profiles, err := NewIM().Profile().GetProfiles([]string{
assistant,
}, []string{
profile.StandardAttrNickname,
profile.StandardAttrGender,
profile.StandardAttrBirthday,
profile.StandardAttrLocation,
profile.StandardAttrLanguage,
})
if err != nil {
handleError(t, "profile.GetProfiles", err)
}
for _, p := range profiles {
t.Log(p.GetUserId())
t.Log(p.GetNickname())
t.Log(p.GetGender())
t.Log(p.GetBirthday())
t.Log(p.GetLocation())
t.Log(p.GetLanguage())
}
}
// 拉取运营数据
func TestIm_Operation_GetOperationData(t *testing.T) {
data, err := NewIM().Operation().GetOperationData()
if err != nil {
handleError(t, "operation.GetOperationData", err)
}
t.Log(data[0].AppId)
t.Log(data[0].AppName)
t.Log(data[0].ActiveUserNum)
t.Log("Success")
}
// 拉取运营数据
func TestIm_Operation_GetHistoryData(t *testing.T) {
files, err := NewIM().Operation().GetHistoryData(operation.ChatTypeC2C, time.Date(2021, time.November, 4, 14, 0, 0, 0, time.Local))
if err != nil {
handleError(t, "operation.GetHistoryData", err)
}
t.Log(files)
t.Log("Success")
}
// 获取服务器IP地址
func TestIm_Operation_GetIpList(t *testing.T) {
ips, err := NewIM().Operation().GetIPList()
if err != nil {
handleError(t, "operation.GetIPList", err)
}
t.Log(ips)
t.Log("Success")
}
// 设置全局禁言
func TestIm_Mute_SetNoSpeaking(t *testing.T) {
var privateMuteTime uint = 400
var groupMuteTime uint = 200
if err := NewIM().Mute().SetNoSpeaking(assistant, &privateMuteTime, &groupMuteTime); err != nil {
handleError(t, "mute.SetNoSpeaking", err)
}
t.Log("Success")
}
// 查询全局禁言
func TestIm_Mute_GetNoSpeaking(t *testing.T) {
ret, err := NewIM().Mute().GetNoSpeaking(assistant)
if err != nil {
handleError(t, "mute.GetNoSpeaking", err)
}
t.Log(ret.PrivateMuteTime)
t.Log(ret.GroupMuteTime)
}
// 添加好友
func TestIm_SNS_AddFriends(t *testing.T) {
var (
userIds = testUserIds()
friends = make([]*sns.Friend, 0, len(userIds))
friend *sns.Friend
)
for _, userId := range userIds {
friend = sns.NewFriend(userId)
friend.SetAddSource("android")
friends = append(friends, friend)
}
failUserIds, err := NewIM().Account().ImportAccounts(userIds...)
if err != nil {
handleError(t, "account.ImportAccounts", err)
}
t.Log(failUserIds)
results, err := NewIM().SNS().AddFriends(assistant, true, false, friends...)
if err != nil {
handleError(t, "sns.AddFriends", err)
}
t.Log(results)
}
// 导入好友
func TestIm_SNS_ImportFriends(t *testing.T) {
var (
userIds = testUserIds()
friends = make([]*sns.Friend, 0, len(userIds))
friend *sns.Friend
now = time.Now().Unix()
)
for _, userId := range userIds {
friend = sns.NewFriend(userId)
friend.SetAddSource("android")
friend.SetGroup("测试组")
friend.SetAddWording("测试一下")
friend.SetAddTime(now)
friend.SetRemark("测试好友")
friend.SetRemarkTime(now)
friends = append(friends, friend)
}
failUserIds, err := NewIM().Account().ImportAccounts(userIds...)
if err != nil {
handleError(t, "account.ImportAccounts", err)
}
t.Log(failUserIds)
results, err := NewIM().SNS().ImportFriends(assistant, friends...)
if err != nil {
handleError(t, "sns.ImportFriends", err)
}
t.Log(results)
t.Log("Success")
}
// 更新单个好友
func TestIm_SNS_UpdateFriend(t *testing.T) {
friend := sns.NewFriend(test1)
friend.SetAddSource("android") // 忽略更新
friend.SetGroup("测试组")
friend.SetAddWording("更新单个好友") // 忽略更新
friend.SetAddTime(time.Now().Unix()) // 忽略更新
friend.SetRemark("更新单个好友")
friend.SetRemarkTime(time.Now().Unix()) // 忽略更新
err := NewIM().SNS().UpdateFriend(assistant, friend)
if err != nil {
handleError(t, "sns.UpdateFriend", err)
}
t.Log("Success")
}
// 更新好友
func TestIm_SNS_UpdateFriends(t *testing.T) {
var (
total = 10
friends = make([]*sns.Friend, 0, total)
friend *sns.Friend
now = time.Now().Unix()
)
for i := 0; i < total; i++ {
friend = sns.NewFriend(accountPrefix + strconv.Itoa(i))
friend.SetAddSource("android")
friend.SetGroup("测试组")
friend.SetAddWording("测试一下")
friend.SetAddTime(now)
friend.SetRemark("测试好友")
friend.SetRemarkTime(now)
friends = append(friends, friend)
}
results, err := NewIM().SNS().UpdateFriends(assistant, friends...)
if err != nil {
handleError(t, "sns.UpdateFriends", err)
}
t.Log(results)
t.Log("Success")
}
// 删除好友
func TestIm_SNS_DeleteFriends(t *testing.T) {
var userIds = testUserIds()
results, err := NewIM().SNS().DeleteFriends(assistant, false, userIds...)
if err != nil {
handleError(t, "sns.DeleteFriends", err)
}
t.Log(results)
t.Log("Success")
}
// 删除所有好友
func TestIm_SNS_DeleteAllFriends(t *testing.T) {
err := NewIM().SNS().DeleteAllFriends(assistant)
if err != nil {
handleError(t, "sns.DeleteAllFriends", err)
}
t.Log("Success")
}
// 校验好友
func TestIm_SNS_CheckFriends(t *testing.T) {
var userIds = testUserIds()
results, err := NewIM().SNS().CheckFriends(assistant, sns.CheckTypeSingle, userIds...)
if err != nil {
handleError(t, "sns.CheckFriends", err)
}
t.Log(results)
t.Log("Success")
}
// 拉取指定好友
func TestIm_SNS_GetFriends(t *testing.T) {
var userIds = testUserIds()
friends, err := NewIM().SNS().GetFriends(assistant, []string{
sns.FriendAttrAddSource,
sns.FriendAttrRemark,
sns.FriendAttrRemarkTime, // 此Tag无效GetFriends内部忽略了
sns.FriendAttrAddTime,
sns.FriendAttrAddWording,
sns.FriendAttrGroup,
sns.StandardAttrNickname,
sns.StandardAttrBirthday,
}, userIds...)
if err != nil {
handleError(t, "sns.GetFriends", err)
}
// 第一种获取方式
for _, friend := range friends {
if friend.IsValid() {
t.Log(friend.GetUserId())
t.Log(friend.GetAddSource())
t.Log(friend.GetRemark())
t.Log(friend.GetRemarkTime())
t.Log(friend.GetGroup())
t.Log(friend.GetNickname())
t.Log(friend.GetBirthday())
fmt.Println()
}
}
// 第二种获取方式
for _, friend := range friends {
if err = friend.GetError(); err != nil {
t.Log(fmt.Sprintf("获取账号%s失败%s", friend.GetUserId(), err.Error()))
} else {
t.Log(friend.GetUserId())
t.Log(friend.GetAddSource())
t.Log(friend.GetRemark())
t.Log(friend.GetRemarkTime())
t.Log(friend.GetGroup())
t.Log(friend.GetNickname())
t.Log(friend.GetBirthday())
fmt.Println()
}
}
}
// 拉取好友
func TestIm_SNS_FetchFriends(t *testing.T) {
var (
err error
ret *sns.FetchFriendsRet
s = NewIM().SNS()
startIndex = 0
standardSequence = 0
customSequence = 0
)
for ret == nil || ret.HasMore {
ret, err = s.FetchFriends(assistant, startIndex, standardSequence, customSequence)
if err != nil {
handleError(t, "sns.FetchFriends", err)
}
startIndex = ret.StartIndex
standardSequence = ret.StandardSequence
customSequence = ret.CustomSequence
t.Log("下一个开始点:", ret.StartIndex)
t.Log("标准排序:", ret.StandardSequence)
t.Log("自定义排序:", ret.CustomSequence)
t.Log("好友总数:", ret.Total)
t.Log("是否还有数据:", ret.HasMore)
t.Log("好友列表:")
fmt.Println()
for _, friend := range ret.List {
if err = friend.GetError(); err != nil {
t.Log(fmt.Sprintf("获取账号%s失败%s", friend.GetUserId(), err.Error()))
} else {
t.Log(friend.GetUserId())
t.Log(friend.GetAddSource())
t.Log(friend.GetRemark())
t.Log(friend.GetRemarkTime())
t.Log(friend.GetGroup())
t.Log(friend.GetNickname())
t.Log(friend.GetBirthday())
fmt.Println()
}
}
}
}
// 续拉取好友
func TestIm_SNS_PullFriends(t *testing.T) {
err := NewIM().SNS().PullFriends(assistant, func(ret *sns.FetchFriendsRet) {
t.Log("下一个开始点:", ret.StartIndex)
t.Log("标准排序:", ret.StandardSequence)
t.Log("自定义排序:", ret.CustomSequence)
t.Log("好友总数:", ret.Total)
t.Log("是否还有数据:", ret.HasMore)
t.Log("好友列表:")
fmt.Println()
for _, friend := range ret.List {
if err := friend.GetError(); err != nil {
t.Log(fmt.Sprintf("获取账号%s失败%s", friend.GetUserId(), err.Error()))
} else {
t.Log(friend.GetUserId())
t.Log(friend.GetAddSource())
t.Log(friend.GetRemark())
t.Log(friend.GetRemarkTime())
t.Log(friend.GetGroup())
t.Log(friend.GetNickname())
t.Log(friend.GetBirthday())
fmt.Println()
}
}
})
if err != nil {
handleError(t, "sns.PullFriends", err)
}
t.Log("Success")
}
// 添加黑名单
func TestIm_SNS_AddBlacklist(t *testing.T) {
var userIds = testUserIds()
results, err := NewIM().SNS().AddBlacklist(assistant, userIds...)
if err != nil {
handleError(t, "sns.AddBlacklist", err)
}
t.Log(results)
t.Log("Success")
}
// 删除黑名单
func TestIm_SNS_DeleteBlacklist(t *testing.T) {
var userIds = testUserIds()
results, err := NewIM().SNS().DeleteBlacklist(assistant, userIds...)
if err != nil {
handleError(t, "sns.DeleteBlacklist", err)
}
t.Log(results)
t.Log("Success")
}
// 拉取黑名单
func TestIm_SNS_FetchBlacklist(t *testing.T) {
var (
err error
ret *sns.FetchBlacklistRet
s = NewIM().SNS()
startIndex = 0
maxLimited = 2
standardSequence = 0
)
for ret == nil || ret.HasMore {
ret, err = s.FetchBlacklist(assistant, startIndex, maxLimited, standardSequence)
if err != nil {
handleError(t, "sns.FetchBlacklist", err)
}
startIndex = ret.StartIndex
standardSequence = ret.StandardSequence
t.Log("下一个开始点:", startIndex)
t.Log("标准排序:", standardSequence)
t.Log("黑名单列表:")
fmt.Println()
for _, blacklist := range ret.List {
t.Log(blacklist.UserId)
t.Log(blacklist.Time)
fmt.Println()
}
}
t.Log("Success")
}
// 续拉取黑名单
func TestIm_SNS_PullBlacklist(t *testing.T) {
err := NewIM().SNS().PullBlacklist(assistant, 2, func(ret *sns.FetchBlacklistRet) {
t.Log("下一个开始点:", ret.StartIndex)
t.Log("标准排序:", ret.StandardSequence)
t.Log("黑名单列表:")
fmt.Println()
for _, blacklist := range ret.List {
t.Log(blacklist.UserId)
t.Log(blacklist.Time)
fmt.Println()
}
})
if err != nil {
handleError(t, "sns.PullBlacklist", err)
}
t.Log("Success")
}
// 校验黑名单
func TestIm_SNS_CheckBlacklist(t *testing.T) {
var userIds = testUserIds()
results, err := NewIM().SNS().CheckBlacklist(assistant, sns.BlacklistCheckTypeSingle, userIds...)
if err != nil {
handleError(t, "sns.CheckBlacklist", err)
}
for _, result := range results {
if result.ResultCode == 0 {
t.Log(result.UserId)
t.Log(result.Relation)
switch result.Relation {
case sns.BlackCheckResultTypeNO:
t.Log("From_Account 的黑名单中没有 To_Account但无法确定 To_Account 的黑名单中是否有 From_Account")
case sns.BlackCheckResultTypeAWithB:
t.Log("From_Account 的黑名单中有 To_Account但无法确定 To_Account 的黑名单中是否有 From_Account")
}
} else {
t.Log(result.ResultCode)
t.Log(result.ResultInfo)
}
fmt.Println()
}
t.Log("Success")
}
// 添加分组
func TestIm_SNS_AddGroups(t *testing.T) {
var userIds = testUserIds()
_, results, err := NewIM().SNS().AddGroups("assistant", []string{
"测试5",
"测试6",
}, userIds)
if err != nil {
handleError(t, "sns.AddGroups", err)
}
t.Log(results)
t.Log("Success")
}
// 删除分组
func TestIm_SNS_DeleteGroups(t *testing.T) {
_, err := NewIM().SNS().DeleteGroups("assistant", "测试3", "测试4")
if err != nil {
handleError(t, "sns.DeleteGroups", err)
}
t.Log("Success")
}
// 拉取分组
func TestIm_SNS_GetGroups(t *testing.T) {
var (
err error
lastSequence int
results []*sns.GroupResult
)
lastSequence, results, err = NewIM().SNS().GetGroups("assistant", lastSequence, true, "测试1", "测试2")
if err != nil {
handleError(t, "sns.GetGroups", err)
}
t.Log(results)
t.Log("Success")
}
// 发送单聊消息
func TestIm_Private_SendMessage(t *testing.T) {
message := private.NewMessage()
message.SetSender(assistant)
message.SetReceivers(test1)
message.SetLifeTime(30000)
message.SetTimestamp(time.Now().Unix())
message.SetContent(private.MsgTextContent{
Text: "Hello world",
})
message.OfflinePush().SetTitle("你好腾讯IM")
message.OfflinePush().SetDesc("你好腾讯IM我来了~~~")
message.OfflinePush().SetPushFlag(private.PushFlagYes)
message.OfflinePush().SetExt(map[string]interface{}{
"url": "http://www.tencent.com",
})
message.OfflinePush().SetAndroidExtAsHuaweiIntentParam(private.HuaweiIntentParamIntent)
message.OfflinePush().SetApnsBadgeMode(private.BadgeModeNormal)
ret, err := NewIM().Private().SendMessage(message)
if err != nil {
handleError(t, "private.SendMessage", err)
}
t.Log(ret.MsgKey)
t.Log(ret.MsgTime)
t.Log("Success")
}
// 批量发单聊消息
func TestIm_Private_SendMessages(t *testing.T) {
message := private.NewMessage()
message.SetSender("assistant")
message.AddReceivers("test1", "test2")
message.SetContent(private.MsgTextContent{
Text: "Hello world",
})
ret, err := NewIM().Private().SendMessages(message)
if err != nil {
handleError(t, "private.SendMessages", err)
}
t.Log(ret.MsgKey)
t.Log(ret.Errors)
}
// 导入单聊消息
func TestIm_Private_ImportMessage(t *testing.T) {
message := private.NewMessage()
message.SetSender("assistant")
message.SetReceivers("test1")
message.SetTimestamp(time.Now().Unix())
message.SetSyncOtherMachine(private.SyncOtherMachineYes)
message.SetContent(private.MsgTextContent{
Text: "Hello world",
})
err := NewIM().Private().ImportMessage(message)
if err != nil {
handleError(t, "private.ImportMessage", err)
}
t.Log("Success")
}
// 查询单聊消息
func TestIm_Private_FetchMessages(t *testing.T) {
var (
err error
p = NewIM().Private()
ret *private.FetchMessagesRet
arg = &private.FetchMessagesArg{
FromUserId: test1,
ToUserId: assistant,
MaxLimited: 5,
MinTime: time.Now().Add(-20 * time.Hour).Unix(),
MaxTime: time.Now().Unix(),
}
)
for ret == nil || ret.HasMore {
ret, err = p.FetchMessages(arg)
if err != nil {
handleError(t, "private.FetchMessages", err)
}
if ret.HasMore {
arg.LastMsgKey = ret.LastMsgKey
arg.MaxTime = ret.LastMsgTime
}
t.Log(ret.HasMore)
t.Log(ret.LastMsgKey)
t.Log(ret.LastMsgTime)
t.Log(ret.Count)
t.Log(ret.List)
fmt.Println()
}
}
// 分页拉取所有消息
func TestIm_Private_PullMessages(t *testing.T) {
err := NewIM().Private().PullMessages(&private.PullMessagesArg{
FromUserId: "test1",
ToUserId: "assistant",
MaxLimited: 5,
MinTime: time.Now().Add(-30 * time.Hour).Unix(),
MaxTime: time.Now().Unix(),
}, func(ret *private.FetchMessagesRet) {
t.Log(ret.HasMore)
t.Log(ret.LastMsgKey)
t.Log(ret.LastMsgTime)
t.Log(ret.Count)
t.Log(ret.List)
fmt.Println()
})
if err != nil {
handleError(t, "private.PullMessages", err)
}
t.Log("Success")
}
// 撤销消息
func TestIm_Private_RevokeMessage(t *testing.T) {
err := NewIM().Private().RevokeMessage(assistant, test1, "31906_833502_1572869830")
if err != nil {
handleError(t, "private.RevokeMessage", err)
}
t.Log("Success")
}
// 设置单聊消息已读
func TestIm_Private_SetMessageRead(t *testing.T) {
err := NewIM().Private().SetMessageRead(assistant, test1)
if err != nil {
handleError(t, "private.SetMessageRead", err)
}
t.Log("Success")
}
// 获取未读消息数
func TestIm_Private_GetUnreadMessageNum(t *testing.T) {
ret, err := NewIM().Private().GetUnreadMessageNum(assistant, test1, test2)
if err != nil {
handleError(t, "private.GetUnreadMessageNum", err)
}
t.Log(ret.Total)
t.Log(ret.Results)
t.Log(ret.Errors)
}
// 创建群组
func TestIm_Group_CreateGroup(t *testing.T) {
g := group.NewGroup()
g.SetName("测试群2")
g.SetGroupType(group.TypePrivate)
g.SetMaxMemberNum(30)
g.SetAvatar("http://www.baidu.com")
g.SetGroupId("test_group2")
g.SetIntroduction("这是一个测试群")
g.SetNotification("这是一个测试群公告")
for i := 1; i < 10; i++ {
member := group.NewMember(accountPrefix + strconv.Itoa(i))
member.SetJoinTime(time.Now())
g.AddMembers(member)
}
groupId, err := NewIM().Group().CreateGroup(g)
if err != nil {
handleError(t, "group.CreateGroup", err)
}
t.Log(groupId)
}
// 解散单个群
func TestIm_Group_DestroyGroup(t *testing.T) {
err := NewIM().Group().DestroyGroup("test_group2")
if err != nil {
handleError(t, "group.DestroyGroup", err)
}
t.Log("Success")
}
// 获取单个群详细资料
func TestIm_Group_GetGroup(t *testing.T) {
g, err := NewIM().Group().GetGroup("test_group2")
if err != nil {
handleError(t, "group.GetGroup", err)
}
if g != nil {
t.Log(g.GetGroupId())
t.Log(g.GetName())
t.Log(g.GetGroupType())
t.Log(g.GetOwner())
t.Log(g.GetAvatar())
}
}
// 获取多个群详细资料
func TestIm_Group_GetGroups(t *testing.T) {
groups, err := NewIM().Group().GetGroups([]string{
"test_group2",
})
if err != nil {
handleError(t, "group.GetGroups", err)
}
for _, g := range groups {
if err = g.GetError(); err != nil {
t.Error(err)
} else {
t.Log(g.GetGroupId())
t.Log(g.GetName())
t.Log(g.GetGroupType())
t.Log(g.GetOwner())
t.Log(g.GetAvatar())
}
}
}
// 添加群成员
func TestIm_Group_AddGroupMembers(t *testing.T) {
results, err := NewIM().Group().AddMembers("test_group2", []string{
test1,
test2,
}, true)
if err != nil {
handleError(t, "group.AddMembers", err)
}
t.Log(results)
}
// 删除群成员
func TestIm_Group_DeleteGroupMembers(t *testing.T) {
err := NewIM().Group().DeleteMembers("test_group2", []string{
test1,
test2,
test3,
}, "测试删除", true)
if err != nil {
handleError(t, "group.DeleteMembers", err)
}
t.Log("Success")
}
// 转让群组
func TestIm_Group_ChangeGroupOwner(t *testing.T) {
err := NewIM().Group().ChangeGroupOwner("test_group2", test1)
if err != nil {
handleError(t, "group.ChangeGroupOwner", err)
}
t.Log("Success")
}
// 修改群基础资料
func TestIm_Group_UpdateGroup(t *testing.T) {
g := group.NewGroup()
g.SetName("测试群1")
g.SetGroupType(group.TypePublic)
g.SetMaxMemberNum(30)
g.SetAvatar("http://www.baidu.com")
g.SetGroupId("test_group2")
g.SetIntroduction("这是一个测试群")
g.SetNotification("这是一个测试群公告")
err := NewIM().Group().UpdateGroup(g)
if err != nil {
handleError(t, "group.UpdateGroup", err)
}
t.Log("Success")
}
// 查询用户在群组中的身份
func TestIm_Group_GetRolesInGroup(t *testing.T) {
ret, err := NewIM().Group().GetRolesInGroup("test_group2", []string{
test1,
test2,
test3,
})
if err != nil {
handleError(t, "group.GetRolesInGroup", err)
}
t.Log(ret)
}
// 拉取群成员详细资料
func TestIm_Group_FetchGroupMembers(t *testing.T) {
ret, err := NewIM().Group().FetchMembers("test_group1", 3, 2)
if err != nil {
handleError(t, "group.FetchMembers", err)
}
t.Log(ret.HasMore)
t.Log(ret.Total)
for _, member := range ret.List {
t.Log(member.GetUserId())
}
}
// 拉取群成员详细资料
func TestIm_Group_PullGroupMembers(t *testing.T) {
err := NewIM().Group().PullMembers(&group.PullMembersArg{
GroupId: "test_group2",
Limit: 3,
}, func(ret *group.FetchMembersRet) {
t.Log(ret.HasMore)
t.Log(ret.Total)
for _, member := range ret.List {
t.Log(member.GetUserId())
}
})
if err != nil {
handleError(t, "group.PullMembers", err)
}
}
// 拉取App中的所有群组
func TestIm_Group_FetchGroupIds(t *testing.T) {
ret, err := NewIM().Group().FetchGroupIds(3, 7964653962)
if err != nil {
handleError(t, "group.FetchGroupIds", err)
}
t.Log(ret.Total)
t.Log(ret.Next)
t.Log(ret.HasMore)
t.Log(ret.List)
}
// 拉取App中的所有群组
func TestIm_Group_FetchGroups(t *testing.T) {
ret, err := NewIM().Group().FetchGroups(50, 7964653962)
if err != nil {
handleError(t, "group.FetchGroups", err)
}
t.Log(ret.Total)
t.Log(ret.Next)
t.Log(ret.HasMore)
for _, g := range ret.List {
t.Log(g.GetGroupId())
t.Log(g.GetOwner())
t.Log(g.GetName())
}
}
// 续拉取App中的所有群组
func TestIm_Group_PullGroups(t *testing.T) {
err := NewIM().Group().PullGroups(&group.PullGroupsArg{
Limit: 50,
}, func(ret *group.FetchGroupsRet) {
t.Log(ret.Total)
t.Log(ret.Next)
t.Log(ret.HasMore)
for _, g := range ret.List {
t.Log(g.GetGroupId())
t.Log(g.GetOwner())
t.Log(g.GetName())
}
})
if err != nil {
handleError(t, "group.PullGroups", err)
}
}
// 修改群成员资料
func TestIm_Group_UpdateGroupMember(t *testing.T) {
member := group.NewMember(test1)
member.SetRole("Admin")
member.SetNameCard("这是一个测试名片信息")
member.SetMsgFlag(group.MsgFlagAcceptAndNotify)
err := NewIM().Group().UpdateMember("test_group2", member)
if err != nil {
handleError(t, "group.UpdateMember", err)
}
t.Log("Success")
}
// 拉取用户所加入的群组
func TestIm_Group_FetchMemberGroups(t *testing.T) {
ret, err := NewIM().Group().FetchMemberGroups(&group.FetchMemberGroupsArg{
UserId: test1,
Limit: 3,
Offset: 0,
IsWithLiveRoomGroups: true,
IsWithNoActiveGroups: true,
})
if err != nil {
handleError(t, "group.FetchMemberGroups", err)
}
t.Log(ret.Total)
t.Log(ret.HasMore)
t.Log(ret.List)
}
// 续拉取用户所加入的群组
func TestIm_Group_PullMemberGroups(t *testing.T) {
err := NewIM().Group().PullMemberGroups(&group.PullMemberGroupsArg{
UserId: test1,
Limit: 3,
IsWithLiveRoomGroups: true,
IsWithNoActiveGroups: true,
}, func(ret *group.FetchMemberGroupsRet) {
t.Log(ret.Total)
t.Log(ret.HasMore)
t.Log(ret.List)
})
if err != nil {
handleError(t, "group.PullMemberGroups", err)
}
}
// 批量禁言
func TestIm_Group_ForbidSendMessage(t *testing.T) {
err := NewIM().Group().ForbidSendMessage("test_group1", []string{
test1,
}, 1000)
if err != nil {
handleError(t, "group.ForbidSendMessage", err)
}
t.Log("Success")
}
// 取消禁言
func TestIm_Group_AllowSendMessage(t *testing.T) {
err := NewIM().Group().AllowSendMessage("test_group2", []string{
test1,
test2,
})
if err != nil {
t.Fatal(err)
}
t.Log("Success")
}
// 获取被禁言群成员列表
func TestIm_Group_GetShuttedUpMembers(t *testing.T) {
shuttedUps, err := NewIM().Group().GetShuttedUpMembers("test_group2")
if err != nil {
handleError(t, "group.GetShuttedUpMembers", err)
}
t.Log(shuttedUps)
}
// 撤回单条群消息
func TestIm_Group_RevokeMessage(t *testing.T) {
err := NewIM().Group().RevokeMessage("test_group2", 100)
if err != nil {
handleError(t, "group.RevokeMessage", err)
}
t.Log("Success")
}
// 撤回多条群消息
func TestIm_Group_RevokeMessages(t *testing.T) {
results, err := NewIM().Group().RevokeMessages("test_group2", 100)
if err != nil {
handleError(t, "group.RevokeMessages", err)
}
t.Log(results)
}
// 设置成员未读消息计数
func TestIm_Group_SetMemberUnreadMsgNum(t *testing.T) {
err := NewIM().Group().SetMemberUnreadMsgNum("test_group2", test1, 100)
if err != nil {
handleError(t, "group.SetMemberUnreadMsgNum", err)
}
t.Log("Success")
}
// 撤回指定用户发送的消息
func TestIm_Group_RevokeMemberMessages(t *testing.T) {
err := NewIM().Group().RevokeMemberMessages("test_group2", test1)
if err != nil {
handleError(t, "group.RevokeMemberMessages", err)
}
t.Log("Success")
}
// 在群组中发送普通消息
func TestIm_Group_SendMessage(t *testing.T) {
message := group.NewMessage()
message.SetSender(test1)
message.SetNoLastMsg()
message.SetPriority("first")
// message.SetOnlineOnlyFlag(group.OnlineOnlyFlagYes)
message.SetContent(private.MsgTextContent{
Text: "Hello world",
})
message.OfflinePush().SetTitle("你好腾讯IM")
message.OfflinePush().SetDesc("你好腾讯IM我来了~~~")
message.OfflinePush().SetPushFlag(private.PushFlagYes)
message.OfflinePush().SetExt(map[string]interface{}{
"url": "http://www.tencent.com",
})
message.OfflinePush().SetAndroidExtAsHuaweiIntentParam(private.HuaweiIntentParamIntent)
message.OfflinePush().SetApnsBadgeMode(private.BadgeModeNormal)
message.AtAllMembers()
message.AtMembers(test2)
message.ClearAtMembers()
ret, err := NewIM().Group().SendMessage("test_group2", message)
if err != nil {
handleError(t, "group.SendMessage", err)
}
t.Log(ret.MsgSeq)
t.Log(ret.MsgTime)
}
// 在群组中发送普通消息
func TestIm_Group_SendNotification(t *testing.T) {
err := NewIM().Group().SendNotification("test_group2", "Hello welcome to the test group", test1)
if err != nil {
handleError(t, "group.SendNotification", err)
}
t.Log("Success")
}
// 导入群基础资料
func TestIm_Group_ImportGroup(t *testing.T) {
g := group.NewGroup()
g.SetName("测试群1")
g.SetGroupType(group.TypePublic)
g.SetMaxMemberNum(30)
g.SetAvatar("http://www.baidu.com")
g.SetIntroduction("这是一个测试群")
g.SetNotification("这是一个测试群公告")
groupId, err := NewIM().Group().ImportGroup(g)
if err != nil {
handleError(t, "group.ImportGroup", err)
}
t.Log(groupId)
}
// 导入群消息
func TestIm_Group_ImportMessages(t *testing.T) {
message := group.NewMessage()
message.SetSender(test1)
message.SetSendTime(time.Now().Unix())
message.SetRandom(rand.Uint32())
message.SetContent(private.MsgTextContent{
Text: "Hello world",
})
results, err := NewIM().Group().ImportMessages("test_group2", message)
if err != nil {
handleError(t, "group.ImportMessages", err)
}
t.Log(results)
}
// 导入多个群成员
func TestIm_Group_ImportMembers(t *testing.T) {
members := make([]*group.Member, 0)
for i := 1; i < 10; i++ {
member := group.NewMember()
member.SetUserId("test" + strconv.Itoa(i))
member.SetRole("Admin")
member.SetUnreadMsgNum(10)
member.SetJoinTime(time.Now())
members = append(members, member)
}
results, err := NewIM().Group().ImportMembers("test_group2", members...)
if err != nil {
handleError(t, "group.ImportMembers", err)
}
t.Log(results)
}
// 拉取群历史消息
func TestIm_Group_FetchMessages(t *testing.T) {
ret, err := NewIM().Group().FetchMessages("test_group2", 5)
if err != nil {
handleError(t, "group.FetchMessages", err)
}
t.Log(ret)
}
// 续拉取群历史消息
func TestIm_Group_PullMessages(t *testing.T) {
err := NewIM().Group().PullMessages("test_group2", 5, func(ret *group.FetchMessagesRet) {
t.Log(ret)
})
if err != nil {
handleError(t, "group.PullMessages", err)
}
}
// 拉取会话列表
func TestIm_RecentContact_FetchSessions(t *testing.T) {
ret, err := NewIM().RecentContact().FetchSessions(&recentcontact.FetchSessionsArg{
UserId: assistant,
})
if err != nil {
handleError(t, "recentcontact.FetchSessions", err)
}
t.Log(ret)
t.Log("Success")
}
// 拉取会话列表
func TestIm_RecentContact_PullSessions(t *testing.T) {
err := NewIM().RecentContact().PullSessions(&recentcontact.PullSessionsArg{
UserId: assistant,
}, func(ret *recentcontact.FetchSessionsRet) {
t.Log(ret)
})
if err != nil {
handleError(t, "recentcontact.PullSessions", err)
}
t.Log("Success")
}
// 删除单个会话
func TestIm_RecentContact_DeleteSession(t *testing.T) {
err := NewIM().RecentContact().DeleteSession(assistant, test1, recentcontact.SessionTypeC2C, true)
if err != nil {
handleError(t, "recentcontact.DeleteSession", err)
}
t.Log("Success")
}