mirror of
https://github.com/TencentCloud/TIMSDK.git
synced 2026-10-22 01:06:31 +08:00
87e0eec7e4
Co-authored-by: chenximo <chenximo@tencent.com>
193 lines
5.4 KiB
JavaScript
193 lines
5.4 KiB
JavaScript
import { emojiMap, emojiUrl } from './emojiMap'
|
||
|
||
/** 传入message.element(群系统消息SystemMessage,群提示消息GroupTip除外)
|
||
* content = {
|
||
* type: 'TIMTextElem',
|
||
* content: {
|
||
* text: 'AAA[龇牙]AAA[龇牙]AAA[龇牙AAA]'
|
||
* }
|
||
*}
|
||
**/
|
||
|
||
// 群提示消息的含义 (opType)
|
||
const GROUP_TIP_TYPE = {
|
||
MEMBER_JOIN: 1,
|
||
MEMBER_QUIT: 2,
|
||
MEMBER_KICKED_OUT: 3,
|
||
MEMBER_SET_ADMIN: 4, // 被设置为管理员
|
||
MEMBER_CANCELED_ADMIN: 5, // 被取消管理员
|
||
GROUP_INFO_MODIFIED: 6, // 修改群资料,转让群组为该类型,msgBody.msgGroupNewInfo.ownerAccount表示新群主的ID
|
||
MEMBER_INFO_MODIFIED: 7, // 修改群成员信息
|
||
}
|
||
|
||
// 解析小程序text, 表情信息也是[嘻嘻]文本
|
||
export function parseText(message) {
|
||
const renderDom = []
|
||
let temp = message.payload.text
|
||
let left = -1
|
||
let right = -1
|
||
while (temp !== '') {
|
||
left = temp.indexOf('[')
|
||
right = temp.indexOf(']')
|
||
switch (left) {
|
||
case 0:
|
||
if (right === -1) {
|
||
renderDom.push({
|
||
name: 'span',
|
||
text: temp,
|
||
})
|
||
temp = ''
|
||
} else {
|
||
const _emoji = temp.slice(0, right + 1)
|
||
if (emojiMap[_emoji]) {
|
||
renderDom.push({
|
||
name: 'img',
|
||
src: emojiUrl + emojiMap[_emoji],
|
||
})
|
||
temp = temp.substring(right + 1)
|
||
} else {
|
||
renderDom.push({
|
||
name: 'span',
|
||
text: '[',
|
||
})
|
||
temp = temp.slice(1)
|
||
}
|
||
}
|
||
break
|
||
case -1:
|
||
renderDom.push({
|
||
name: 'span',
|
||
text: temp,
|
||
})
|
||
temp = ''
|
||
break
|
||
default:
|
||
renderDom.push({
|
||
name: 'span',
|
||
text: temp.slice(0, left),
|
||
})
|
||
temp = temp.substring(left)
|
||
break
|
||
}
|
||
}
|
||
return renderDom
|
||
}
|
||
// 解析群系统消息
|
||
export function parseGroupSystemNotice(message) {
|
||
const { payload } = message
|
||
const groupName = payload.groupProfile.name || payload.groupProfile.groupID
|
||
const { groupID } = payload.groupProfile
|
||
let text
|
||
switch (payload.operationType) {
|
||
case 1:
|
||
text = `${payload.operatorID} 申请加入群组:${groupName}(群ID:${groupID})`
|
||
break
|
||
case 2:
|
||
text = `成功加入群组:${groupName} (群ID:${groupID})`
|
||
break
|
||
case 3:
|
||
text = `申请加入群组:${groupName} (群ID:${groupID})被拒绝`
|
||
break
|
||
case 4:
|
||
text = `被管理员${payload.operatorID}踢出群组:${groupName}(群ID:${groupID})`
|
||
break
|
||
case 5:
|
||
text = `群:${groupName} (群ID:${groupID})已被${payload.operatorID}解散`
|
||
break
|
||
case 6:
|
||
text = `我(用户ID:${payload.operatorID})成功创建群聊:${groupName}(群ID:${groupID})`
|
||
break
|
||
case 7:
|
||
text = `用户ID:${payload.operatorID}邀请你加群:${groupName}(群ID:${groupID})`
|
||
break
|
||
case 8:
|
||
text = `你退出群组:${groupName}(群ID:${groupID})`
|
||
break
|
||
case 9:
|
||
text = `你被${payload.operatorID}设置为群:${groupName}(群ID:${groupID})的管理员`
|
||
break
|
||
case 10:
|
||
text = `你被${payload.operatorID}撤销群:${groupName} (群ID:${groupID})的管理员身份`
|
||
break
|
||
case 255:
|
||
text = `自定义群系统通知: ${payload.userDefinedField}`
|
||
break
|
||
}
|
||
return text
|
||
}
|
||
// 解析群提示消息
|
||
export function parseGroupTip(message) {
|
||
const { payload } = message
|
||
const userName = message.nick || payload.userIDList.join(',')
|
||
let tip
|
||
let user
|
||
switch (payload.operationType) {
|
||
case GROUP_TIP_TYPE.MEMBER_JOIN:
|
||
tip = `${userName} 加入群聊`
|
||
break
|
||
case GROUP_TIP_TYPE.MEMBER_QUIT:
|
||
tip = `群成员退群:${userName}`
|
||
break
|
||
case GROUP_TIP_TYPE.MEMBER_KICKED_OUT:
|
||
tip = `群成员被踢:${userName}`
|
||
break
|
||
case GROUP_TIP_TYPE.MEMBER_SET_ADMIN:
|
||
tip = `${payload.operatorID}将 ${userName}设置为管理员`
|
||
break
|
||
case GROUP_TIP_TYPE.MEMBER_CANCELED_ADMIN:
|
||
tip = `${payload.operatorID}将 ${userName}取消作为管理员`
|
||
break
|
||
case GROUP_TIP_TYPE.GROUP_INFO_MODIFIED:
|
||
tip = '群资料修改'
|
||
break
|
||
case GROUP_TIP_TYPE.MEMBER_INFO_MODIFIED:
|
||
for (const member of payload.memberList) {
|
||
if (member.muteTime > 0) {
|
||
tip = `群成员:${member.userID}被禁言${member.muteTime}秒`
|
||
} else {
|
||
tip = `群成员:${member.userID}被取消禁言`
|
||
}
|
||
}
|
||
break
|
||
case 256:
|
||
user = message.nick || message.from
|
||
if (payload.text === '无应答') {
|
||
user = payload.userIDList.join(',')
|
||
}
|
||
tip = payload.text === '结束群聊' ? '结束群聊' : `"${user}" ${payload.text}`
|
||
break
|
||
}
|
||
return [{
|
||
name: 'groupTip',
|
||
text: tip,
|
||
}]
|
||
}
|
||
|
||
// 解析图片消息
|
||
export function parseImage(message) {
|
||
const renderDom = [{
|
||
name: 'image',
|
||
// 这里默认渲染的是 1080P 的图片
|
||
src: message.payload.imageInfoArray[0].url,
|
||
}]
|
||
return renderDom
|
||
}
|
||
// 解析视频消息
|
||
export function parseVideo(message) {
|
||
const renderDom = [{
|
||
name: 'video',
|
||
src: message.payload.videoUrl,
|
||
}]
|
||
return renderDom
|
||
}
|
||
// 解析语音消息
|
||
export function parseAudio(message) {
|
||
const renderDom = [{
|
||
name: 'audio',
|
||
src: message.payload.url,
|
||
second: message.payload.second === 0 ? 1 : message.payload.second,
|
||
}]
|
||
return renderDom
|
||
}
|
||
|