import IMSDK, { MessageStatus } from "openim-uniapp-polyfill"; /** * 撤回消息 * @param {string} conversationID - 会话ID * @param {string} clientMsgID - 消息客户端ID * @returns {Promise} 撤回结果 */ export const revokeMessage = async ({conversationID, clientMsgID, revokerName, revokerId}) => { try { const result = await IMSDK.asyncApi( IMSDK.IMMethods.RevokeMessage, IMSDK.uuid(), { conversationID, clientMsgID, // revokerName, // revokerId } ); return result; } catch (error) { console.error("撤回消息失败:", error); throw error; } }; /** * 检查消息是否可以撤回 * @param {Object} message - 消息对象 * @param {string} currentUserID - 当前用户ID * @returns {boolean} 是否可以撤回 */ export const canRevokeMessage = (message, currentUserID) => { console.log('检查消息是否可以撤回:', { messageSendID: message.sendID, currentUserID: currentUserID, messageStatus: message.status, contentType: message.contentType, sendTime: message.sendTime, now: Date.now() }); // 只能撤回自己发送的消息 if (message.sendID !== currentUserID) { console.log('不是自己发送的消息'); return false; } // 检查消息状态是否为成功 if (message.status !== MessageStatus.Succeed) { console.log('消息状态不是成功:', message.status); return false; } // 检查消息类型是否支持撤回 const revokableTypes = [ 101, // 文本消息 102, // 图片消息 103, // 语音消息 104, // 视频消息 105, // 文件消息 106, // @消息 110, // 自定义消息 ]; if (!revokableTypes.includes(message.contentType)) { console.log('不支持撤回的消息类型:', message.contentType); return false; } // 检查消息发送时间是否在2分钟内(可配置) const now = Date.now(); const messageTime = message.sendTime; const timeLimit = 2 * 60 * 1000; // 2分钟 if (now - messageTime > timeLimit) { console.log('消息发送时间超过2分钟'); return false; } console.log('消息可以撤回'); return true; };