message-facade.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import {
  2. emojiMap,
  3. emojiUrl
  4. } from './emojiMap';
  5. /** 传入message.element(群系统消息SystemMessage,群提示消息GroupTip除外)
  6. * content = {
  7. * type: 'TIMTextElem',
  8. * content: {
  9. * text: 'AAA[龇牙]AAA[龇牙]AAA[龇牙AAA]'
  10. * }
  11. *}
  12. **/
  13. // 群提示消息的含义 (opType)
  14. const GROUP_TIP_TYPE = {
  15. MEMBER_JOIN: 1,
  16. MEMBER_QUIT: 2,
  17. MEMBER_KICKED_OUT: 3,
  18. MEMBER_SET_ADMIN: 4,
  19. // 被设置为管理员
  20. MEMBER_CANCELED_ADMIN: 5,
  21. // 被取消管理员
  22. GROUP_INFO_MODIFIED: 6,
  23. // 修改群资料,转让群组为该类型,msgBody.msgGroupNewInfo.ownerAccount表示新群主的ID
  24. MEMBER_INFO_MODIFIED: 7 // 修改群成员信息
  25. }; // 解析小程序text, 表情信息也是[嘻嘻]文本
  26. export function parseText(message) {
  27. const renderDom = [];
  28. let temp = message.payload.text;
  29. let left = -1;
  30. let right = -1;
  31. while (temp !== '') {
  32. left = temp.indexOf('[');
  33. right = temp.indexOf(']');
  34. switch (left) {
  35. case 0:
  36. if (right === -1) {
  37. renderDom.push({
  38. name: 'span',
  39. text: temp
  40. });
  41. temp = '';
  42. } else {
  43. const _emoji = temp.slice(0, right + 1);
  44. if (emojiMap[_emoji]) {
  45. renderDom.push({
  46. name: 'img',
  47. src: emojiUrl + emojiMap[_emoji]
  48. });
  49. temp = temp.substring(right + 1);
  50. } else {
  51. renderDom.push({
  52. name: 'span',
  53. text: '['
  54. });
  55. temp = temp.slice(1);
  56. }
  57. }
  58. break;
  59. case -1:
  60. renderDom.push({
  61. name: 'span',
  62. text: temp
  63. });
  64. temp = '';
  65. break;
  66. default:
  67. renderDom.push({
  68. name: 'span',
  69. text: temp.slice(0, left)
  70. });
  71. temp = temp.substring(left);
  72. break;
  73. }
  74. }
  75. return renderDom;
  76. }
  77. // 解析图片消息
  78. export function parseImage(message) {
  79. const renderDom = [{
  80. name: 'image',
  81. // 这里默认渲染的是 1080P 的图片
  82. src: message.payload.imageInfoArray[0].url
  83. }];
  84. return renderDom;
  85. } // 解析视频消息
  86. export function parseVideo(message) {
  87. const renderDom = {
  88. name: 'video',
  89. src: message.payload.videoUrl
  90. };
  91. return renderDom;
  92. } // 解析语音消息
  93. export function parseAudio(message) {
  94. const renderDom = {
  95. name: 'audio',
  96. src: message.payload.url,
  97. second: message.payload.second === 0 ? 1 : message.payload.second
  98. };
  99. return renderDom;
  100. }