UNPKG

@tencentcloud/roomkit-web-vue3

Version:

<h1 align="center"> TUIRoomKit</h1> Conference (TUIRoomKit) is a product suitable for multi-person audio and video conversation scenarios such as business meetings, webinars, and online education. By integrating this product, you can add room management,

456 lines (448 loc) 14.7 kB
/** * Emoji input interface in the chat screen. * It should be noted that the emoticons in TUIRoomKit are copyrighted. The purchased IM service does not include the * right to use the emoticons. Please replace them with your own emoticons when you go online, otherwise you will * face legal risks. * The yellow face emoji is copyrighted by Tencent Cloud. To use it, authorization is required. * Please contact us through the following link. * * https://cloud.tencent.com/document/product/269/59590 */ export const emojiBaseUrl = 'https://web.sdk.qcloud.com/im/assets/emoji-plugin/'; const deprecatedEmojiBaseUrl = 'https://web.sdk.qcloud.com/im/assets/emoji/'; export const emojiMap: Record<string, string> = { '[期待]': 'emoji_0@2x.png', '[眨眼]': 'emoji_1@2x.png', '[大笑]': 'emoji_2@2x.png', '[姨母笑]': 'emoji_3@2x.png', '[哈哈哈]': 'emoji_4@2x.png', '[愉快]': 'emoji_5@2x.png', '[微笑]': 'emoji_6@2x.png', '[悲伤]': 'emoji_7@2x.png', '[无语]': 'emoji_8@2x.png', '[惊讶]': 'emoji_9@2x.png', '[得意]': 'emoji_10@2x.png', '[色]': 'emoji_11@2x.png', '[星星眼]': 'emoji_12@2x.png', '[憨笑]': 'emoji_13@2x.png', '[恶魔]': 'emoji_14@2x.png', '[恶魔怒]': 'emoji_15@2x.png', '[打哈欠]': 'emoji_16@2x.png', '[哭笑]': 'emoji_17@2x.png', '[傻了]': 'emoji_18@2x.png', '[大哭]': 'emoji_19@2x.png', '[亲亲]': 'emoji_20@2x.png', '[困]': 'emoji_21@2x.png', '[恐惧]': 'emoji_22@2x.png', '[龇牙]': 'emoji_23@2x.png', '[发怒]': 'emoji_24@2x.png', '[机智]': 'emoji_25@2x.png', '[便便]': 'emoji_26@2x.png', '[闭嘴]': 'emoji_27@2x.png', '[叹气]': 'emoji_28@2x.png', '[呵呵]': 'emoji_29@2x.png', '[收声]': 'emoji_30@2x.png', '[骷髅]': 'emoji_31@2x.png', '[口罩]': 'emoji_32@2x.png', '[啤酒]': 'emoji_33@2x.png', '[蛋糕]': 'emoji_34@2x.png', '[红包]': 'emoji_35@2x.png', '[炸弹]': 'emoji_36@2x.png', '[AI]': 'emoji_37@2x.png', '[庆祝]': 'emoji_38@2x.png', '[福]': 'emoji_39@2x.png', '[花]': 'emoji_40@2x.png', '[瓜]': 'emoji_41@2x.png', '[牛]': 'emoji_42@2x.png', '[衰]': 'emoji_43@2x.png', '[惊喜]': 'emoji_44@2x.png', '[白眼]': 'emoji_45@2x.png', '[怪兽]': 'emoji_46@2x.png', '[猪]': 'emoji_47@2x.png', '[咖啡]': 'emoji_48@2x.png', '[OK]': 'emoji_49@2x.png', '[爱心]': 'emoji_50@2x.png', '[太阳]': 'emoji_51@2x.png', '[月亮]': 'emoji_52@2x.png', '[星星]': 'emoji_53@2x.png', '[壕]': 'emoji_54@2x.png', '[发]': 'emoji_55@2x.png', '[857]': 'emoji_56@2x.png', '[666]': 'emoji_57@2x.png', '[禁]': 'emoji_58@2x.png', '[服]': 'emoji_59@2x.png', '[刀]': 'emoji_60@2x.png', '[赞]': 'emoji_61@2x.png', }; const emojiNameMapping: Record<string, string> = { '[微笑]': '[TUIEmoji_Smile]', '[期待]': '[TUIEmoji_Expect]', '[眨眼]': '[TUIEmoji_Blink]', '[大笑]': '[TUIEmoji_Guffaw]', '[姨母笑]': '[TUIEmoji_KindSmile]', '[哈哈哈]': '[TUIEmoji_Haha]', '[愉快]': '[TUIEmoji_Cheerful]', '[无语]': '[TUIEmoji_Speechless]', '[惊讶]': '[TUIEmoji_Amazed]', '[悲伤]': '[TUIEmoji_Sorrow]', '[得意]': '[TUIEmoji_Complacent]', '[傻了]': '[TUIEmoji_Silly]', '[色]': '[TUIEmoji_Lustful]', '[憨笑]': '[TUIEmoji_Giggle]', '[亲亲]': '[TUIEmoji_Kiss]', '[大哭]': '[TUIEmoji_Wail]', '[哭笑]': '[TUIEmoji_TearsLaugh]', '[困]': '[TUIEmoji_Trapped]', '[口罩]': '[TUIEmoji_Mask]', '[恐惧]': '[TUIEmoji_Fear]', '[龇牙]': '[TUIEmoji_BareTeeth]', '[发怒]': '[TUIEmoji_FlareUp]', '[打哈欠]': '[TUIEmoji_Yawn]', '[机智]': '[TUIEmoji_Tact]', '[星星眼]': '[TUIEmoji_Stareyes]', '[闭嘴]': '[TUIEmoji_ShutUp]', '[叹气]': '[TUIEmoji_Sigh]', '[呵呵]': '[TUIEmoji_Hehe]', '[收声]': '[TUIEmoji_Silent]', '[惊喜]': '[TUIEmoji_Surprised]', '[白眼]': '[TUIEmoji_Askance]', '[OK]': '[TUIEmoji_Ok]', '[便便]': '[TUIEmoji_Shit]', '[怪兽]': '[TUIEmoji_Monster]', '[恶魔]': '[TUIEmoji_Daemon]', '[恶魔怒]': '[TUIEmoji_Rage]', '[衰]': '[TUIEmoji_Fool]', '[猪]': '[TUIEmoji_Pig]', '[牛]': '[TUIEmoji_Cow]', '[AI]': '[TUIEmoji_Ai]', '[骷髅]': '[TUIEmoji_Skull]', '[炸弹]': '[TUIEmoji_Bombs]', '[咖啡]': '[TUIEmoji_Coffee]', '[蛋糕]': '[TUIEmoji_Cake]', '[啤酒]': '[TUIEmoji_Beer]', '[花]': '[TUIEmoji_Flower]', '[瓜]': '[TUIEmoji_Watermelon]', '[壕]': '[TUIEmoji_Rich]', '[爱心]': '[TUIEmoji_Heart]', '[月亮]': '[TUIEmoji_Moon]', '[太阳]': '[TUIEmoji_Sun]', '[星星]': '[TUIEmoji_Star]', '[红包]': '[TUIEmoji_RedPacket]', '[庆祝]': '[TUIEmoji_Celebrate]', '[福]': '[TUIEmoji_Bless]', '[发]': '[TUIEmoji_Fortune]', '[服]': '[TUIEmoji_Convinced]', '[禁]': '[TUIEmoji_Prohibit]', '[666]': '[TUIEmoji_666]', '[857]': '[TUIEmoji_857]', '[刀]': '[TUIEmoji_Knife]', '[赞]': '[TUIEmoji_Like]', }; const emojiUrlMapping: Record<string, string> = { '[TUIEmoji_Expect]': 'emoji_0@2x.png', '[TUIEmoji_Blink]': 'emoji_1@2x.png', '[TUIEmoji_Guffaw]': 'emoji_2@2x.png', '[TUIEmoji_KindSmile]': 'emoji_3@2x.png', '[TUIEmoji_Haha]': 'emoji_4@2x.png', '[TUIEmoji_Cheerful]': 'emoji_5@2x.png', '[TUIEmoji_Smile]': 'emoji_6@2x.png', '[TUIEmoji_Sorrow]': 'emoji_7@2x.png', '[TUIEmoji_Speechless]': 'emoji_8@2x.png', '[TUIEmoji_Amazed]': 'emoji_9@2x.png', '[TUIEmoji_Complacent]': 'emoji_10@2x.png', '[TUIEmoji_Lustful]': 'emoji_11@2x.png', '[TUIEmoji_Stareyes]': 'emoji_12@2x.png', '[TUIEmoji_Giggle]': 'emoji_13@2x.png', '[TUIEmoji_Daemon]': 'emoji_14@2x.png', '[TUIEmoji_Rage]': 'emoji_15@2x.png', '[TUIEmoji_Yawn]': 'emoji_16@2x.png', '[TUIEmoji_TearsLaugh]': 'emoji_17@2x.png', '[TUIEmoji_Silly]': 'emoji_18@2x.png', '[TUIEmoji_Wail]': 'emoji_19@2x.png', '[TUIEmoji_Kiss]': 'emoji_20@2x.png', '[TUIEmoji_Trapped]': 'emoji_21@2x.png', '[TUIEmoji_Fear]': 'emoji_22@2x.png', '[TUIEmoji_BareTeeth]': 'emoji_23@2x.png', '[TUIEmoji_FlareUp]': 'emoji_24@2x.png', '[TUIEmoji_Tact]': 'emoji_25@2x.png', '[TUIEmoji_Shit]': 'emoji_26@2x.png', '[TUIEmoji_ShutUp]': 'emoji_27@2x.png', '[TUIEmoji_Sigh]': 'emoji_28@2x.png', '[TUIEmoji_Hehe]': 'emoji_29@2x.png', '[TUIEmoji_Silent]': 'emoji_30@2x.png', '[TUIEmoji_Skull]': 'emoji_31@2x.png', '[TUIEmoji_Mask]': 'emoji_32@2x.png', '[TUIEmoji_Beer]': 'emoji_33@2x.png', '[TUIEmoji_Cake]': 'emoji_34@2x.png', '[TUIEmoji_RedPacket]': 'emoji_35@2x.png', '[TUIEmoji_Bombs]': 'emoji_36@2x.png', '[TUIEmoji_Ai]': 'emoji_37@2x.png', '[TUIEmoji_Celebrate]': 'emoji_38@2x.png', '[TUIEmoji_Bless]': 'emoji_39@2x.png', '[TUIEmoji_Flower]': 'emoji_40@2x.png', '[TUIEmoji_Watermelon]': 'emoji_41@2x.png', '[TUIEmoji_Cow]': 'emoji_42@2x.png', '[TUIEmoji_Fool]': 'emoji_43@2x.png', '[TUIEmoji_Surprised]': 'emoji_44@2x.png', '[TUIEmoji_Askance]': 'emoji_45@2x.png', '[TUIEmoji_Monster]': 'emoji_46@2x.png', '[TUIEmoji_Pig]': 'emoji_47@2x.png', '[TUIEmoji_Coffee]': 'emoji_48@2x.png', '[TUIEmoji_Ok]': 'emoji_49@2x.png', '[TUIEmoji_Heart]': 'emoji_50@2x.png', '[TUIEmoji_Sun]': 'emoji_51@2x.png', '[TUIEmoji_Moon]': 'emoji_52@2x.png', '[TUIEmoji_Star]': 'emoji_53@2x.png', '[TUIEmoji_Rich]': 'emoji_54@2x.png', '[TUIEmoji_Fortune]': 'emoji_55@2x.png', '[TUIEmoji_857]': 'emoji_56@2x.png', '[TUIEmoji_666]': 'emoji_57@2x.png', '[TUIEmoji_Prohibit]': 'emoji_58@2x.png', '[TUIEmoji_Convinced]': 'emoji_59@2x.png', '[TUIEmoji_Knife]': 'emoji_60@2x.png', '[TUIEmoji_Like]': 'emoji_61@2x.png', }; const deprecatedEmojiMap: Record<string, string> = { '[NO]': 'emoji_0@2x.png', '[OK]': 'emoji_1@2x.png', '[下雨]': 'emoji_2@2x.png', '[么么哒]': 'emoji_3@2x.png', '[乒乓]': 'emoji_4@2x.png', '[便便]': 'emoji_5@2x.png', '[信封]': 'emoji_6@2x.png', '[偷笑]': 'emoji_7@2x.png', '[傲慢]': 'emoji_8@2x.png', '[再见]': 'emoji_9@2x.png', '[冷汗]': 'emoji_10@2x.png', '[凋谢]': 'emoji_11@2x.png', '[刀]': 'emoji_12@2x.png', '[删除]': 'emoji_13@2x.png', '[勾引]': 'emoji_14@2x.png', '[发呆]': 'emoji_15@2x.png', '[发抖]': 'emoji_16@2x.png', '[可怜]': 'emoji_17@2x.png', '[可爱]': 'emoji_18@2x.png', '[右哼哼]': 'emoji_19@2x.png', '[右太极]': 'emoji_20@2x.png', '[右车头]': 'emoji_21@2x.png', '[吐]': 'emoji_22@2x.png', '[吓]': 'emoji_23@2x.png', '[咒骂]': 'emoji_24@2x.png', '[咖啡]': 'emoji_25@2x.png', '[啤酒]': 'emoji_26@2x.png', '[嘘]': 'emoji_27@2x.png', '[回头]': 'emoji_28@2x.png', '[困]': 'emoji_29@2x.png', '[坏笑]': 'emoji_30@2x.png', '[多云]': 'emoji_31@2x.png', '[大兵]': 'emoji_32@2x.png', '[大哭]': 'emoji_33@2x.png', '[太阳]': 'emoji_34@2x.png', '[奋斗]': 'emoji_35@2x.png', '[奶瓶]': 'emoji_36@2x.png', '[委屈]': 'emoji_37@2x.png', '[害羞]': 'emoji_38@2x.png', '[尴尬]': 'emoji_39@2x.png', '[左哼哼]': 'emoji_40@2x.png', '[左太极]': 'emoji_41@2x.png', '[左车头]': 'emoji_42@2x.png', '[差劲]': 'emoji_43@2x.png', '[弱]': 'emoji_44@2x.png', '[强]': 'emoji_45@2x.png', '[彩带]': 'emoji_46@2x.png', '[彩球]': 'emoji_47@2x.png', '[得意]': 'emoji_48@2x.png', '[微笑]': 'emoji_49@2x.png', '[心碎了]': 'emoji_50@2x.png', '[快哭了]': 'emoji_51@2x.png', '[怄火]': 'emoji_52@2x.png', '[怒]': 'emoji_53@2x.png', '[惊恐]': 'emoji_54@2x.png', '[惊讶]': 'emoji_55@2x.png', '[憨笑]': 'emoji_56@2x.png', '[手枪]': 'emoji_57@2x.png', '[打哈欠]': 'emoji_58@2x.png', '[抓狂]': 'emoji_59@2x.png', '[折磨]': 'emoji_60@2x.png', '[抠鼻]': 'emoji_61@2x.png', '[抱抱]': 'emoji_62@2x.png', '[抱拳]': 'emoji_63@2x.png', '[拳头]': 'emoji_64@2x.png', '[挥手]': 'emoji_65@2x.png', '[握手]': 'emoji_66@2x.png', '[撇嘴]': 'emoji_67@2x.png', '[擦汗]': 'emoji_68@2x.png', '[敲打]': 'emoji_69@2x.png', '[晕]': 'emoji_70@2x.png', '[月亮]': 'emoji_71@2x.png', '[棒棒糖]': 'emoji_72@2x.png', '[汽车]': 'emoji_73@2x.png', '[沙发]': 'emoji_74@2x.png', '[流汗]': 'emoji_75@2x.png', '[流泪]': 'emoji_76@2x.png', '[激动]': 'emoji_77@2x.png', '[灯泡]': 'emoji_78@2x.png', '[炸弹]': 'emoji_79@2x.png', '[熊猫]': 'emoji_80@2x.png', '[爆筋]': 'emoji_81@2x.png', '[爱你]': 'emoji_82@2x.png', '[爱心]': 'emoji_83@2x.png', '[爱情]': 'emoji_84@2x.png', '[猪头]': 'emoji_85@2x.png', '[猫咪]': 'emoji_86@2x.png', '[献吻]': 'emoji_87@2x.png', '[玫瑰]': 'emoji_88@2x.png', '[瓢虫]': 'emoji_89@2x.png', '[疑问]': 'emoji_90@2x.png', '[白眼]': 'emoji_91@2x.png', '[皮球]': 'emoji_92@2x.png', '[睡觉]': 'emoji_93@2x.png', '[磕头]': 'emoji_94@2x.png', '[示爱]': 'emoji_95@2x.png', '[礼品袋]': 'emoji_96@2x.png', '[礼物]': 'emoji_97@2x.png', '[篮球]': 'emoji_98@2x.png', '[米饭]': 'emoji_99@2x.png', '[糗大了]': 'emoji_100@2x.png', '[红双喜]': 'emoji_101@2x.png', '[红灯笼]': 'emoji_102@2x.png', '[纸巾]': 'emoji_103@2x.png', '[胜利]': 'emoji_104@2x.png', '[色]': 'emoji_105@2x.png', '[药]': 'emoji_106@2x.png', '[菜刀]': 'emoji_107@2x.png', '[蛋糕]': 'emoji_108@2x.png', '[蜡烛]': 'emoji_109@2x.png', '[街舞]': 'emoji_110@2x.png', '[衰]': 'emoji_111@2x.png', '[西瓜]': 'emoji_112@2x.png', '[调皮]': 'emoji_113@2x.png', '[象棋]': 'emoji_114@2x.png', '[跳绳]': 'emoji_115@2x.png', '[跳跳]': 'emoji_116@2x.png', '[车厢]': 'emoji_117@2x.png', '[转圈]': 'emoji_118@2x.png', '[鄙视]': 'emoji_119@2x.png', '[酷]': 'emoji_120@2x.png', '[钞票]': 'emoji_121@2x.png', '[钻戒]': 'emoji_122@2x.png', '[闪电]': 'emoji_123@2x.png', '[闭嘴]': 'emoji_124@2x.png', '[闹钟]': 'emoji_125@2x.png', '[阴险]': 'emoji_126@2x.png', '[难过]': 'emoji_127@2x.png', '[雨伞]': 'emoji_128@2x.png', '[青蛙]': 'emoji_129@2x.png', '[面条]': 'emoji_130@2x.png', '[鞭炮]': 'emoji_131@2x.png', '[风车]': 'emoji_132@2x.png', '[飞吻]': 'emoji_133@2x.png', '[飞机]': 'emoji_134@2x.png', '[饥饿]': 'emoji_135@2x.png', '[香蕉]': 'emoji_136@2x.png', '[骷髅]': 'emoji_137@2x.png', '[麦克风]': 'emoji_138@2x.png', '[麻将]': 'emoji_139@2x.png', '[鼓掌]': 'emoji_140@2x.png', '[龇牙]': 'emoji_141@2x.png', }; export const emojiList = Object.keys(emojiMap); export function decodeMessageText(payload: string) { const renderDom: { name: string; text?: string; src?: string }[] = []; function pushTextNode(text: string) { renderDom.push({ name: 'text', text, }); } function pushEmojiNode(src: string) { renderDom.push({ name: 'img', src, }); } /** * Text Message * **/ let temp = payload; let left = -1; let right = -1; while (temp !== '') { left = temp.indexOf('['); right = temp.indexOf(']'); switch (left) { case 0: if (right === -1) { pushTextNode(temp); temp = ''; } else { const emojiKey = temp.slice(0, right + 1); const emojiSrc = emojiUrlMapping[emojiKey] ? emojiBaseUrl + emojiUrlMapping[emojiKey] : deprecatedEmojiMap[emojiKey] ? deprecatedEmojiBaseUrl + deprecatedEmojiMap[emojiKey] : null; if (emojiSrc) { pushEmojiNode(emojiSrc); temp = temp.substring(right + 1); } else { pushTextNode('['); temp = temp.slice(1); } } break; case -1: pushTextNode(temp); temp = ''; break; default: pushTextNode(temp.slice(0, left)); temp = temp.substring(left); break; } } return renderDom; } export function decodeSendTextMsg(payload: string) { /** * Text Message * **/ let temp = payload; let left = -1; let right = -1; let result = ''; while (temp !== '') { temp = temp.replace('\n', ''); left = temp.indexOf('['); right = temp.indexOf(']'); switch (left) { case 0: if (right === -1) { result += temp; temp = ''; } else { const emojiKey = temp.slice(0, right + 1); if (emojiKey in emojiNameMapping) { result += emojiNameMapping[emojiKey]; temp = temp.substring(right + 1); } else { result += '['; temp = temp.slice(1); } } break; case -1: result += temp; temp = ''; break; default: result += temp.slice(0, left); temp = temp.substring(left); break; } } return result; }