发送消息中处理 表情和文字

例如:   12[信封][多云] 00 (展示在输入框的内容)
替换成:<span>12</span><img src="https://web.sdk.qcloud.com/im/assets/emoji/emoji_6@2x.png" mode="" alt="表情" style='width:20px;height:20px' ><img src="https://web.sdk.qcloud.com/im/assets/emoji/emoji_31@2x.png" mode="" alt="表情" style='width:20px;height:20px' ><span>00</span>  (发送的实际内容)



具体代码如下

// 发送文本
sendTextMessage(){if (this.content.trim() !== '') {let text = '';let arr = this.parseText(this.content); // 解析发送消息的内容,是数组let newArr = [];// 是图片的 替换 成 img标签,是文本的 替换成 span 标签if(arr.length > 0){newArr = [];arr.forEach(element => {if(element.name == 'img'){element.text = `<img src="${element.text}" mode="" alt="表情" style='width:20px;height:20px' >`} else if(element.name == 'span'){element.text = `<span>${element.text}</span>`}newArr.push(element.text)});}// 替换成功的数组 转成 字符串text = newArr.join('');let message = this.$tim.createTextMessage({to: this.imid,conversationType: this.TIM.TYPES.CONV_C2C,payload: {text: text},});this.sendMessage(message);this.content = "";}
},
// 发送表情
sendemoFun(item){this.iconShow = !this.iconShow;  // 表情包 显示隐藏this.content = this.content + item.alt; // 发送表情 输入框显示的内容
},// 解析text, 表情信息也是[嘻嘻]文本 , 发送富文本parseText(message) {const renderDom = [];// let temp = message.payload.text;let temp = message;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',text: 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;},

整个页面代码如下

腾讯IM 对接的pc端即时通讯,发送图片,发送文本,发送表情

<template><div class="chatindex base_width"><div class="mainbox base_width"><!--已经收到的消息--><div class="messagelist" id="myDIV"  ref="pronbit"><div v-for="(item,index) in messageList" :key="index" :id="item.id" ><div class="time-lag">{{renderMessageDate(item, index)}}</div><div class="message-item" :class="item.flow=='user'?'self':''"><div class="avatar"><img :src="item.userinfo.face" v-if="item.userinfo.face" class="avatarimg"><img :src="avatarUrl" v-else class="avatarimg"></div><div class="content" :class="item.flow=='user'?'selfdirection':''"><div class="message-text" v-if="!['TIMImageElem','TIMSoundElem'].includes(item.type)"><div v-if="item.content.title" class="title" v-html="item.content.title"></div><div class="flex images" v-if="item.content.images&&item.content.images.length>0"><img :src="img" mode="aspectFit" v-for="(img,index) in item.content.images":key="index" @click.stop="predivImage(item.content.images)"></div><!-- <div class="order-type-msg flex area-between"v-if="item.type=='TIMCustomElem'&&item.content.ordertype"><div class="order-type-name">{{item.content.ordertype}}</div><div class="order-price">{{item.content.orderPrice}}</div></div> --></div><div class="flex imageInfo" v-if="item.type=='TIMImageElem'"><img :src="item.content.imageInfo.url" mode="aspectFit"@click.stop="predivImage([item.content.imageInfo.url])":style="{ width: item.content.imageInfo.width + 'px', height: item.content.imageInfo.height+ 'px' }"></div><!-- 语音 不支持查看 --><div v-if="item.type=='TIMSoundElem'" class="title">[暂不支持,请在手机端打开查看]</div><!-- <audioim v-if="item.type=='TIMSoundElem'" :src="item.content.soundurl":duration="item.content.soundSecond"></audioim> --><div class="gray isPeerRead" v-if="item.flow=='user'">{{item.isPeerRead?'已读':'未读'}}</div></div></div></div></div><!-- 发送消息 --><div class="action-box"><div class="flexbox imgtop"><el-tooltip class="item" effect="light" content="照片" placement="bottom" :hide-after="1000"><div class="zhaopian"><img src="@/assets/img/webimg/imgs.png" mode="" alt="照片" class="zpimg"  ><input type="file" name="pic" accept="image/*" id="imagePicker" @change="sendImg" class="inputimg"></div></el-tooltip><el-tooltip class="item" effect="light" content="表情" placement="bottom" :hide-after="1000"><div class="zhaopian"><img src="@/assets/img/icons/face-emoji.svg" alt="" @click="handleEmoji" class="zpimg" ><div class="icons" v-if="iconShow"><img :src="item.url" alt="item.alt" v-for="(item,i) in emojiList" :key="i" class="emoimg" @click.stop="sendemoFun(item)"></div></div></el-tooltip></div><div class="safeBottom"><div class="action-top flex flex_between"><div class="message-input"><el-inputtype="textarea":rows="5"placeholder=""v-model="content"resize="none"></el-input></div><div class="send-message-btn" @click="sendTextMessage" >发送</div></div></div></div></div> </div>
</template><script>
// import apiUrl from '@/api/main'
import resetTime from "@/util/check.js";
import { mapState } from 'vuex'
import formatTime from '@/util/check.js';import {emojiMap,emojiUrl
} from './components/emoji.js';export default {components: {},data() {return {messageList: [],imid: '', // im useriduserimID: localStorage.getItem("userimID"), //用户手机号 ,im useriduserID: localStorage.getItem("userid"), //用户iduserSig: localStorage.getItem("userSig"),order: {type: '',price: '',content: '',photos: ''},avatarUrl: localStorage.getItem('avatarUrl'),//聊天文本框content: '',nametitle:'',photo:'',isCompleted: false,initTop: 0,isRefresh: false,iconShow:false, // 表情框显示emojiList:[], // this.$chatMsg.emojiList};},filters:{// 时间fifterTime(value) {let time = value ? value.replace(/-/g, '/') : '';if (time) {return resetTime.timeago(new Date(time).getTime());}}},computed: {...mapState({allConversation: state => state.allConversation,}),// allConversation() {//   return this.$store.state.allConversation;// },},watch: {},created() {this.emojiList = []for(var key in emojiMap){this.emojiList.push({url:emojiUrl+emojiMap[key],alt:key});}},mounted() {let that = this;if(this.$route.query.userid){this.imid = this.$route.query.userid;}if (localStorage.getItem("userimID")) {this.$tim.login({userID: localStorage.getItem("userimID"),userSig: localStorage.getItem("userSig")}).then(function(res) {that.$tim.on(that.TIM.EVENT.SDK_READY, function(event) {that.sdk_ready();});});}this.$nextTick(()=>{this.refreshData(); // 在顶部时下拉刷新数据});},methods: {sdk_ready() {//获取消息列表this.initListener(); // 收到新消息this.getMsgList();},// 初始化监听器initListener() {// 收到新消息this.$tim.on(this.TIM.EVENT.MESSAGE_RECEIVED, this.onReceiveMessage);},//接收 更新消息onReceiveMessage({data: messageList}) {let that = this;console.log('更新消息==', messageList);messageList.map(item => {that.messageList.push({flow: item.flow == 'out' ? 'user' : 'heuser',id: that.randomString(),type: item.type,time: item.time * 1000,isPeerRead: item.isPeerRead, //true已读userinfo: {username: item.nick,face: item.avatar},content: that.resetMsgItem(item)})})setTimeout(() => {that.scrollToBottom();}, 50);},// 加载初始页面消息getMsgList(type = '') {// 打开某个会话时,第一次拉取消息列表if (!this.isCompleted) {// 如果请求还没回来,又拉,此时做一下防御let list = [];let that = this;let promise = this.$tim.getMessageList({conversationID: 'C2C' + this.imid,nextReqMessageID: this.nextReqMessageID,count: 300});promise.then(function(imResponse) {console.log(imResponse,'页面消息')const messageList = imResponse.data.messageList; // 消息列表。const nextReqMessageID = imResponse.data.nextReqMessageID; // 用于续拉,分页续拉时需传入该字段。const isCompleted = imResponse.data.isCompleted; // 表示是否已经拉完所有消息。that.nextReqMessageID = nextReqMessageID;that.isCompleted = isCompleted;messageList.map((item, index) => {if (['TIMFileElem', 'TIMVideoFileElem'].includes(item.type)) {messageList.splice(index, 1);return;}list.push({flow: item.flow == 'out' ? 'user' : 'heuser',id: that.randomString(),type: item.type,time: item.time * 1000,isPeerRead: item.isPeerRead, //true已读userinfo: {username: item.nick,face: item.avatar},content: that.resetMsgItem(item)});})that.messageList = [...list, ...that.messageList];if (type == '') {setTimeout(() => {that.scrollToBottom();}, 50)}console.log(that.messageList)});} else {this.$message('没有更多啦');}},// 向上加载刷线refreshData(){var oTag = this.$refs.pronbit;var disX = 0;var disY = 0;var t = 0;var that = this;oTag.onmousedown = function(ev) {var oEvent = ev || event;disX = oEvent.clientX;disY = oEvent.clientY;oTag.onmousemove = function(ev) {var oEvent = ev || event;t = oEvent.clientY - disY;if (t > 0 && t > 20) {that.isRefresh = true;}};oTag.ononmouseout = oTag.onmouseup = function() {oTag.onmousemove = null;oTag.onmouseup = null;that.isRefresh = false;if (t > 0 && that.initTop == 0) { // that.initTop == 0 必须在顶部时,才能下拉刷新that.getMsgList(1);}};return false; //chrome、ff、IE9};},renderMessageDate(message, index) {if (index === 0) {let date = new Date(message.time)return formatTime.formatTime(date)} else {if (message.time - this.messageList[index - 1].time > 5 * 60 * 1000) {let date = new Date(message.time)return formatTime.formatTime(date)}}return '';},resetMsgItem(item) {//重置数据格式let content = {};if (item.type == 'TIMTextElem') {content['title'] = item.payload.text;} else if (item.type == 'TIMCustomElem') {if (!item.payload.data) {return;}let customData = JSON.parse(item.payload.data);content['businessID'] = customData.businessID;} else if (item.type == 'TIMSoundElem') {content['soundurl'] = item.payload.url;content['soundSecond'] = item.payload.second;} else if (item.type == 'TIMImageElem') {if (item.payload.imageInfoArray.length <= 0) return;item.payload.imageInfoArray.forEach(val => {if (val.type == 0) {content['imageInfo'] = val;if (val.width > 300) {val.width = 300;val.height = val.height / 300 * val.width;}}})}return content;},sendMessage(message) {let that = this;let promise = this.$tim.sendMessage(message);promise.then(function(imResponse) {// 发送成功console.log('发送成功');let item = imResponse.data.message;that.messageList.push({flow: item.flow == 'out' ? 'user' : 'heuser',id: that.randomString(),type: item.type,time: item.time * 1000,isPeerRead: item.isPeerRead, //true已读userinfo: {username: item.nick,face: item.avatar},content: that.resetMsgItem(item)})setTimeout(() => {that.scrollToBottom();}, 50)}).catch(function(imError) {// 发送失败this.$message.error(imError);console.warn('sendMessage error:', imError);});},// 如果是div 有滚动条  让滚动条滚到最底部scrollToBottom() {console.log('让滚动条滚到最底部')this.$nextTick(()=>{var scrollDom = document.getElementById('myDIV');scrollDom.scrollTop = scrollDom.scrollHeight});},// 预览图片predivImage(src){window.open(src,"_blank");},// 发送文本sendTextMessage(){if (this.content.trim() !== '') {let text = '';let arr = this.parseText(this.content);let newArr = [];if(arr.length > 0){newArr = [];arr.forEach(element => {if(element.name == 'img'){element.text = `<img src="${element.text}" mode="" alt="表情" style='width:20px;height:20px' >`} else if(element.name == 'span'){element.text = `<span>${element.text}</span>`}newArr.push(element.text)});}text = newArr.join('');let message = this.$tim.createTextMessage({to: this.imid,conversationType: this.TIM.TYPES.CONV_C2C,payload: {text: text},});this.sendMessage(message);this.content = "";} },// 发送表情sendemoFun(item){this.iconShow = !this.iconShow;this.content = this.content + item.alt;},// 解析text, 表情信息也是[嘻嘻]文本 , 发送富文本parseText(message) {const renderDom = [];// let temp = message.payload.text;let temp = message;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',text: 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;},randomString(len) {len = len || 24;var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz';var maxPos = $chars.length;var pwd = '';for (let i = 0; i < len; i++) {pwd += $chars.charAt(Math.floor(Math.random() * maxPos));}return pwd;},// 扩展消息===========// 发送照片sendImg(){let that = this;let message = that.$tim.createImageMessage({to: that.imid,conversationType: that.TIM.TYPES.CONV_C2C,payload: {file: document.getElementById('imagePicker'),},onProgress: function(event) {console.log('file uploading:', event)}});that.sendMessage(message);},// 发送表情handleEmoji(){this.iconShow = !this.iconShow;},},}
</script>
<style lang='scss' >.vvv{background-color: #fff;}
// @import url(); 引入公共css类
.chatindex{// background-color:  #FFF;padding: 20px 0 33px;margin: 0 auto;.mainbox{height: 650px;background-color:  #F8F8F8;border-radius: 13px;padding: 17px 0 84px;position: relative;.nametitle{padding-left: 27px;border-bottom: 1px solid #ccc;padding-bottom: 25px;padding-top: 15px;font-size: 20px;font-weight: 540;}.tabsbox{height: 40px;line-height: 41px;border-bottom: 1px solid  #ECECEC;padding-left: 67px;p{font-size: 15px;color: #333333;margin-right: 53px;cursor: pointer;}.active{font-weight: 600;color: #305BFE;border-bottom: 3px solid #305BFE;}}.textbox{// padding: 0 67px;// box-sizing: border-box;}}}
.messagelist{height: 450px;overflow: auto;
}
.time-lag {font-size: 12px;text-align: center;margin-top:20px;
}
.message-item {margin-top: 30px;margin-bottom: 30px;overflow: hidden;display: flex;padding: 20px;background-color: #F8F8F8;
}.avatar{width: 40px;height: 40px;margin-right: 20px;// flex-shrink: 0;// flex-grow: 0;border-radius: 50%;.avatarimg{width: 40px;height: 40px;border-radius: 50%;}
}// 右侧 自己发的消息
.message-item.self {overflow: hidden;display: flex;justify-content: flex-start;flex-direction: row-reverse;
}
.message-item.self .avatar {margin-left: 20px;margin-right: 0;
}.content{max-width:560px;padding:18px;border-radius: 10px;display: flex;align-items: flex-end;>div:not(:last-child){margin:0 0 11px;}text{color:#F07300!important;}}.message-item .message-text {background-size: 100% 100%;padding:10px 13px 1px 18px;font-size: 14px;font-weight: 400;color: #424242;text-align: left!important;flex:1;background-color: #fff;.title{margin-bottom:16px;}}.images{img{width: 128px;height: 146px;margin:30px 46px 0 0;}}.order-type-msg{margin:29px 0 16px;}.flex.area-between {display: flex;flex-wrap: wrap;align-items: center;justify-content: space-between;}.order-type-name{font-size: 16px;color: #939393;margin-right: 30px;}.order-price{font-size: 12px;color: #FF0000;}.evaluate{color: #424242;>div{margin-right:26px;}margin-bottom:16px;}.afterSale{padding:20px 0 16px;border-top:1px solid #F8F8F8;>div{margin:0 0 20px;}}.gray{color:#848282;}.imageInfo{>img{max-width:200px;max-height:200px;}}.isPeerRead{margin:0 10px 0 10px;font-size: 12px;}.selfdirection{flex-direction: row-reverse;}// 发送消息.action-box{width: 100%;position: absolute;bottom: 0;left: 0;z-index: 100;// background: #fff;border-top: 1px solid #ccc;.action-top {padding:10px;// backdrop-filter: blur(0.27px);background: #F5F5F5;}.message-input {background: #F2F2F2;border-radius: 16px;.el-textarea__inner{width: 1130px;font-size: 12px;}}.add-icon-more{width:25px;height:25px;margin-left:10px;}.send-message-btn{cursor: pointer;font-size: 12px;width:80px;height:40px;line-height: 40px;color:#FFFFFF;background: #771B21;border-radius: 5px;text-align: center;margin-left:10px;}.noClick {pointer-events: none;}.imgtop{padding-top: 10px;.zpimg{cursor: pointer;width: 20px;height: 20px;margin-right: 10px;}.zhaopian{margin-left: 10px;margin-right: 0px;width: 20px;height: 20px;position: relative;.inputimg{width: 20px;height: 20px;position: absolute;cursor: pointer;outline: medium none;filter: alpha(opacity=0);-moz-opacity: 0;opacity: 0;top: 0;left: 0px;}.icons{position: absolute;// top: -370px;top: 20px;left: 0;width: 250px;height: 200px;overflow: auto;background-color: #fff;box-shadow: 2px 1px 29px 1px rgba(63, 58, 58, 0.1);z-index: 888;border-radius: 10px;padding: 15px 15px;}}}}.emoimg{width: 20px;height: 20px;margin: 2px;}</style>

页面展示:

emoji.js 表情js文件

export const emojiUrl = 'https://web.sdk.qcloud.com/im/assets/emoji/';
export const emojiMap = {'[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 emojiName = ['[龇牙]', '[调皮]', '[流汗]', '[偷笑]', '[再见]', '[敲打]', '[擦汗]', '[猪头]', '[玫瑰]', '[流泪]', '[大哭]', '[嘘]', '[酷]', '[抓狂]', '[委屈]', '[便便]', '[炸弹]', '[菜刀]', '[可爱]', '[色]', '[害羞]', '[得意]', '[吐]', '[微笑]', '[怒]', '[尴尬]', '[惊恐]', '[冷汗]', '[爱心]', '[示爱]', '[白眼]', '[傲慢]', '[难过]', '[惊讶]', '[疑问]', '[困]', '[么么哒]', '[憨笑]', '[爱情]', '[衰]', '[撇嘴]', '[阴险]', '[奋斗]', '[发呆]', '[右哼哼]', '[抱抱]', '[坏笑]', '[飞吻]', '[鄙视]', '[晕]', '[大兵]', '[可怜]', '[强]', '[弱]', '[握手]', '[胜利]', '[抱拳]', '[凋谢]', '[米饭]', '[蛋糕]', '[西瓜]', '[啤酒]', '[瓢虫]', '[勾引]', '[OK]', '[爱你]', '[咖啡]', '[月亮]', '[刀]', '[发抖]', '[差劲]', '[拳头]', '[心碎了]', '[太阳]', '[礼物]', '[皮球]', '[骷髅]', '[挥手]', '[闪电]', '[饥饿]', '[困]', '[咒骂]', '[折磨]', '[抠鼻]', '[鼓掌]', '[糗大了]', '[左哼哼]', '[打哈欠]', '[快哭了]', '[吓]', '[篮球]', '[乒乓]', '[NO]', '[跳跳]', '[怄火]', '[转圈]', '[磕头]', '[回头]', '[跳绳]', '[激动]', '[街舞]', '[献吻]', '[左太极]', '[右太极]', '[闭嘴]', '[猫咪]', '[红双喜]', '[鞭炮]', '[红灯笼]', '[麻将]', '[麦克风]', '[礼品袋]', '[信封]', '[象棋]', '[彩带]', '[蜡烛]', '[爆筋]', '[棒棒糖]', '[奶瓶]', '[面条]', '[香蕉]', '[飞机]', '[左车头]', '[车厢]', '[右车头]', '[多云]', '[下雨]', '[钞票]', '[熊猫]', '[灯泡]', '[风车]', '[闹钟]', '[雨伞]', '[彩球]', '[钻戒]', '[沙发]', '[纸巾]', '[手枪]', '[青蛙]'];

【数组,字符串】发送消息中处理 同时发送的表情和文字,一串字符串中 替换 某些 字符 并添加 标签相关推荐

  1. 创建钉钉群聊机器人,使用Python发送消息,使用DolphinScheduler发送告警

    文章目录 获取自定义机器人Webhook 使用Python发送消息 使用curl发送消息 使用DolphinScheduler发送告警 获取自定义机器人Webhook 1.1.创建群(然后将别人移出群 ...

  2. javasocket连续给服务器发送消息,Java通过Socket发送和接收多条消息

    我们需要实现一个Socket客户端,它应该连接到一个接受TCP连接的服务器.如果我通过netcap与服务器进行通信,我会立即得到它的响应(通过命令行).Java通过Socket发送和接收多条消息 的工 ...

  3. Android笔记(三十一)Android中线程之间的通信(三)子线程给主线程发送消息...

    先看简单示例:点击按钮,2s之后,TextView改变内容. package cn.lixyz.handlertest;import android.app.Activity; import andr ...

  4. python 使用钉钉机器人发送消息至钉钉

    如果你在使用钉钉,并且经常需要发送某些消息到钉钉群中,例如在监控某些数据,当出现异常的时候,及时发送消息通知钉钉群:或者在完成某些操作,发送消息到钉钉群中,那么我们可以使用钉钉机器人,实现自动化信息同 ...

  5. 领英使用手册—领英linkedin发送消息和InMail使用的方法技巧

    一.消息和InMail 联络人脉 联络人脉,保持人脉圈的热度.了解向联系人发送消息的基本信息,联系您所关注的会员,拓展人脉圈. 向好友发送消息 您可以直接从以下版块向联系人发送消息: 消息页面 联系人 ...

  6. 微信群发频繁发送消息,请稍后再试?

    微信群发消息是我们日常工作和生活中的常见操作,无论是为了推广产品,还是为了组织活动,或者是朋友之间的聊天,都需要经常发送消息.然而,当你频繁地群发消息时,你可能会收到微信提示"频繁发送消息, ...

  7. RabbitMQ消息队列,发送消息失败、消息持久化、消费者失败处理方法和发送消息

    项目是使用springboot项目开发的,前是代码实现,后面有分析发送消息失败.消息持久化.消费者失败处理方法和发送消息解决方法及手动确认的模式 先引入pom.xml <!--rabbitmq- ...

  8. Kafka生产者是如何发送消息的?

    (一)生产者的原理 当有数据要从生产者发往消费者的时候,在kafka底层有这样一套流程.首先生产者调用send方法发送消息后,会先经过一层拦截器,接着进入序列化器.序列化器主要用于对消息的Key和Va ...

  9. IBM MQ向MQ发送消息

    1.  查看目前已创建的队列管理器及运行状态:dspmq 2.  在同一台机器上模拟,建立并启动两个队列管理器 分别用于SEND发送和RE接收消息 创建:crtmqm  SEND.crtmqm  RE ...

最新文章

  1. 搜索页面scroll下拉时候进行刷新,显示更多搜索值
  2. java 跨类 调用 model_Model.java中的这两个方法,为什么不能在子类中调用,或者包内调用也行啊。...
  3. GDAL的一个BUG
  4. 强悍的 Linux —— 权限管理(组及用户管理)
  5. 冒着被开除的风险也要给大家看看看这份Spring Cloud 总结
  6. php是哪种化学药剂,常用化学试剂 英文缩写一览表
  7. Enterprise Library 4.0 - May 2008 发布了
  8. Android背景图片设置
  9. sim800a指令_SIM800A_硬件设计手册-LCSC.PDF
  10. 家(单位)电信宽带,50M上行带宽,不用浪费了,发布Web(网站)应用刚好
  11. SQL sever 查询及格率
  12. Hibernate入门简介----张冬
  13. zblog asp 升级到PHP,Zblog之php版本 千呼万唤始出来
  14. 输入两个正整数m和n,求其最大公约数和最小公倍数(常见的错误代码分析)
  15. 支付宝个人支付接口(蚂蚁金服官方接口)
  16. 菜鸟学习c语言之路开始
  17. Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储(转)
  18. 攻防世界MISC高手区Avatar
  19. 桌面虚拟化各厂家解决方案
  20. 三色灯的点亮逻辑 | 可自定义

热门文章

  1. ResetEvent
  2. 干货|跨境电商应该如何选品?选品步骤、方法、工具全解析
  3. Pandas简明教程
  4. JAXConf刚刚超过一周!
  5. 微信小程序 图片自适应
  6. Chrome V8 引擎移植到 Android
  7. 未来二维码:从吃穿住行到“生死救援”的华丽转身
  8. 初始化Windows数据盘(Windows 2008)
  9. 碎片化学习Java(六)-- Java预测子女身高
  10. qt android wifi,QtScrcpy: Android实时投屏软件,此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限...