import 'package:logger/logger.dart'; import 'package:loopin/IM/im_result.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_priority_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/offlinePushInfo.dart'; import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; final logger = Logger(); class IMMessage { /// 发送文本消息 Future sendText({ required String text, String? toUserID, String? groupID, String? data, }) async { // 必须且只能设置一个:toUserID(单聊)或 groupID(群聊) if ((toUserID == null && groupID == null) || (toUserID != null && groupID != null)) { return ImResult( success: false, code: -1, desc: "只能指定一个 receiver(toUserID)或 groupID", ); } // 创建消息 final createRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createTextMessage(text: text); if (createRes.code != 0 || createRes.data == null) { return ImResult( success: false, code: createRes.code, desc: "创建消息失败", ); } final V2TimMessage? messageInfo = createRes.data?.messageInfo; V2TimValueCallback sendRes; // 单聊 if (toUserID != null) { sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage( message: messageInfo, receiver: toUserID, groupID: "", priority: MessagePriorityEnum.V2TIM_PRIORITY_DEFAULT, onlineUserOnly: false, isExcludedFromUnreadCount: false, isExcludedFromLastMessage: false, needReadReceipt: false, offlinePushInfo: OfflinePushInfo(title: "新消息", desc: text), cloudCustomData: "", localCustomData: "", ); } else { // 群聊 sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage( message: messageInfo, receiver: "", groupID: groupID!, priority: MessagePriorityEnum.V2TIM_PRIORITY_DEFAULT, onlineUserOnly: false, isExcludedFromUnreadCount: false, isExcludedFromLastMessage: false, needReadReceipt: false, offlinePushInfo: OfflinePushInfo(title: "新群聊消息", desc: text), cloudCustomData: "", localCustomData: "", ); } return ImResult( success: sendRes.code == 0, code: sendRes.code, desc: sendRes.desc, data: sendRes.data, ); } /// 发送自定义消息 Future sendCustomMessage({ required String data, String? toUserID, String? groupID, String? description, String? extension, }) async { // 校验逻辑:单聊或群聊,二选一 if ((toUserID == null && groupID == null) || (toUserID != null && groupID != null)) { return ImResult( success: false, code: -1, desc: "只能指定一个 receiver(toUserID)或 groupID", ); } // 1. 创建自定义消息 final createRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createCustomMessage( data: data, desc: description ?? '', extension: extension ?? '', ); if (createRes.code != 0 || createRes.data?.id == null) { return ImResult( success: false, code: createRes.code, desc: "创建自定义消息失败", ); } final V2TimMessage? messageInfo = createRes.data?.messageInfo; // 2. 发送消息 final sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage( message: messageInfo, receiver: toUserID ?? '', groupID: groupID ?? '', priority: MessagePriorityEnum.V2TIM_PRIORITY_DEFAULT, onlineUserOnly: false, isExcludedFromUnreadCount: false, isExcludedFromLastMessage: false, needReadReceipt: false, offlinePushInfo: OfflinePushInfo( title: "自定义消息", desc: description ?? '您收到一条自定义消息', ), cloudCustomData: "", localCustomData: "", ); return ImResult( success: sendRes.code == 0, code: sendRes.code, desc: sendRes.desc, ); } /// 构造单聊伪消息 Future insertTimeLabel(String data, String userId) async { final customMsgRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createCustomMessage( data: data, desc: "时间标签", extension: "", ); if (customMsgRes.code != 0 || customMsgRes.data?.id == null) { return ImResult( success: false, code: customMsgRes.code, desc: "创建时间标签消息失败", ); } final timeMsg = customMsgRes.data!.messageInfo; timeMsg!.localCustomData = 'time_label'; return ImResult( success: true, code: customMsgRes.code, desc: "success", data: timeMsg, ); // final sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage( // message: timeMsg, // receiver: userId, // groupID: "", // onlineUserOnly: false, // isExcludedFromUnreadCount: true, // isExcludedFromLastMessage: true, // needReadReceipt: false, // cloudCustomData: "", // localCustomData: "time_label", // ); // return ImResult( // success: sendRes.code == 0, // code: sendRes.code, // desc: sendRes.code == 0 ? "时间标签发送成功" : sendRes.desc, // data: timeMsg, // ); } }