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