186 lines
5.8 KiB
Dart
186 lines
5.8 KiB
Dart
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<ImResult> 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<V2TimMessage> 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<ImResult> 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<ImResult> 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,
|
||
// );
|
||
}
|
||
}
|