diff --git a/package.json b/package.json
index 5caeb688..ceac2f08 100644
--- a/package.json
+++ b/package.json
@@ -50,6 +50,7 @@
     "commander": "^12.0.0",
     "cors": "^2.8.5",
     "express": "^5.0.0-beta.2",
+    "fast-xml-parser": "^4.3.6",
     "file-type": "^19.0.0",
     "fluent-ffmpeg": "^2.1.2",
     "image-size": "^1.1.1",
diff --git a/src/onebot11/action/index.ts b/src/onebot11/action/index.ts
index e264a7d3..c08c812d 100644
--- a/src/onebot11/action/index.ts
+++ b/src/onebot11/action/index.ts
@@ -46,6 +46,7 @@ import GetFile from './file/GetFile';
 import { GoCQHTTGetForwardMsgAction } from './go-cqhttp/GetForwardMsg';
 import GetFriendMsgHistory from './go-cqhttp/GetFriendMsgHistory';
 import { GetCookies } from './user/GetCookies';
+import { SetMsgEmojiLike } from '@/onebot11/action/msg/SetMsgEmojiLike';
 
 export const actionHandlers = [
   new GetFile(),
@@ -80,6 +81,7 @@ export const actionHandlers = [
   new SetGroupCard(),
   new GetImage(),
   new GetRecord(),
+  new SetMsgEmojiLike(),
   // new CleanCache(),
   new GetCookies(),
   //以下为go-cqhttp api
diff --git a/src/onebot11/action/msg/SetMsgEmojiLike.ts b/src/onebot11/action/msg/SetMsgEmojiLike.ts
new file mode 100644
index 00000000..fe31c934
--- /dev/null
+++ b/src/onebot11/action/msg/SetMsgEmojiLike.ts
@@ -0,0 +1,27 @@
+import { ActionName } from '../types';
+import BaseAction from '../BaseAction';
+import { dbUtil } from '@/common/utils/db';
+import { NTQQMsgApi } from '@/core/apis';
+
+interface Payload {
+    message_id: number,
+    emoji_id: string
+}
+
+export class SetMsgEmojiLike extends BaseAction<Payload, any> {
+  actionName = ActionName.SetMsgEmojiLike;
+
+  protected async _handle(payload: Payload) {
+    const msg = await dbUtil.getMsgByShortId(payload.message_id);
+    if (!msg) {
+      throw new Error('msg not found');
+    }
+    if (!payload.emoji_id){
+      throw new Error('emojiId not found');
+    }
+    return await NTQQMsgApi.setEmojiLike({
+      chatType: msg.chatType,
+      peerUid: msg.peerUid
+    }, msg.msgSeq, payload.emoji_id, true);
+  }
+}
diff --git a/src/onebot11/action/types.ts b/src/onebot11/action/types.ts
index 87df233b..9eb34215 100644
--- a/src/onebot11/action/types.ts
+++ b/src/onebot11/action/types.ts
@@ -34,6 +34,7 @@ export enum ActionName {
     SendGroupMsg = 'send_group_msg',
     SendPrivateMsg = 'send_private_msg',
     DeleteMsg = 'delete_msg',
+    SetMsgEmojiLike = 'set_msg_emoji_like',
     SetGroupAddRequest = 'set_group_add_request',
     SetFriendAddRequest = 'set_friend_add_request',
     SetGroupLeave = 'set_group_leave',
@@ -51,6 +52,7 @@ export enum ActionName {
     GetRecord = 'get_record',
     CleanCache = 'clean_cache',
     GetCookies = "get_cookies",
+
     // 以下为go-cqhttp api
     GoCQHTTP_SendForwardMsg = 'send_forward_msg',
     GoCQHTTP_SendGroupForwardMsg = 'send_group_forward_msg',
diff --git a/src/onebot11/constructor.ts b/src/onebot11/constructor.ts
index f3e23b2e..e70cd105 100644
--- a/src/onebot11/constructor.ts
+++ b/src/onebot11/constructor.ts
@@ -1,3 +1,4 @@
+import fastXmlParser, { XMLParser } from 'fast-xml-parser';
 import {
   OB11Group,
   OB11GroupMember,
@@ -42,6 +43,7 @@ import { ob11Config } from '@/onebot11/config';
 import { deleteGroup, getFriend, getGroupMember, groupMembers, selfInfo, tempGroupCodeMap } from '@/common/data';
 import { NTQQFileApi, NTQQGroupApi, NTQQUserApi } from '../core/src/apis';
 import http from 'http';
+import { OB11GroupMsgEmojiLikeEvent } from '@/onebot11/event/notice/OB11MsgEmojiLikeEvent';
 
 
 export class OB11Constructor {
@@ -320,6 +322,38 @@ export class OB11Constructor {
       }
 
       if (grayTipElement) {
+        const xmlElement = grayTipElement.xmlElement;
+
+        if (xmlElement?.templId === '10382') {
+          // 表情回应消息
+          // "content":
+          //  "<gtip align=\"center\">
+          //    <qq uin=\"u_snYxnEfja-Po_\" col=\"3\" jp=\"3794\"/>
+          //    <nor txt=\"回应了你的\"/>
+          //    <url jp= \"\" msgseq=\"74711\" col=\"3\" txt=\"消息:\"/>
+          //    <face type=\"1\" id=\"76\">  </face>
+          //  </gtip>",
+          const emojiLikeData = new fastXmlParser.XMLParser({
+            ignoreAttributes: false,
+            attributeNamePrefix: ''
+          }).parse(xmlElement.content);
+          logDebug('收到表情回应我的消息', emojiLikeData);
+          try {
+            const senderUin = emojiLikeData.gtip.qq.jp;
+            const msgSeq = emojiLikeData.gtip.url.msgseq;
+            const emojiId = emojiLikeData.gtip.face.id;
+            const replyMsg = await dbUtil.getMsgBySeq(msg.peerUid, msgSeq);
+            if (!replyMsg) {
+              return;
+            }
+            return new OB11GroupMsgEmojiLikeEvent(parseInt(msg.peerUid), parseInt(senderUin), replyMsg.id!, [{
+              emoji_id: emojiId,
+              count: 1
+            }]);
+          } catch (e: any) {
+            logError('解析表情回应消息失败', e.stack);
+          }
+        }
         if (grayTipElement.subElementType == GrayTipElementSubType.INVITE_NEW_MEMBER) {
           logDebug('收到新人被邀请进群消息', grayTipElement);
           const xmlElement = grayTipElement.xmlElement;
diff --git a/src/onebot11/event/notice/OB11MsgEmojiLikeEvent.ts b/src/onebot11/event/notice/OB11MsgEmojiLikeEvent.ts
new file mode 100644
index 00000000..0351f468
--- /dev/null
+++ b/src/onebot11/event/notice/OB11MsgEmojiLikeEvent.ts
@@ -0,0 +1,21 @@
+import {OB11GroupNoticeEvent} from "./OB11GroupNoticeEvent";
+
+export interface MsgEmojiLike {
+  emoji_id: string,
+  count: number
+}
+
+export class OB11GroupMsgEmojiLikeEvent extends OB11GroupNoticeEvent {
+  notice_type = "group_msg_emoji_like";
+  message_id: number;
+  sub_type: "ban" | "lift_ban";
+  likes: MsgEmojiLike[]
+
+  constructor(groupId: number, userId: number, messageId: number, likes: MsgEmojiLike[]) {
+    super();
+    this.group_id = groupId;
+    this.user_id = userId;  // 可为空,表示是对别人的消息操作,如果是对bot自己的消息则不为空
+    this.message_id = messageId;
+    this.likes = likes;
+  }
+}