From 1c6ec56c81eb0fe9684fabd77caa4c083a7ce00b Mon Sep 17 00:00:00 2001
From: linyuchen <lin.yu.chen@hotmail.com>
Date: Wed, 31 Jan 2024 18:45:39 +0800
Subject: [PATCH 01/11] Update README.md

---
 README.md | 2 --
 1 file changed, 2 deletions(-)

diff --git a/README.md b/README.md
index 0fb8b43..3d9652c 100644
--- a/README.md
+++ b/README.md
@@ -23,14 +23,12 @@
 
 主要功能:
 - [x] 发送好友消息
-- [x] 发送临时消息
 - [x] 发送群消息
 - [x] 获取好友列表
 - [x] 获取群列表
 - [x] 获取群成员列表
 - [x] 撤回消息
 - [x] 上报好友消息
-- [x] 上报临时消息
 - [x] 上报群消息
 
 消息格式支持:

From 0fd8da06968574fe4f3a79acfa8502f0f498ed2f Mon Sep 17 00:00:00 2001
From: linyuchen <lin.yu.chen@foxmail.com>
Date: Fri, 2 Feb 2024 21:56:17 +0800
Subject: [PATCH 02/11] =?UTF-8?q?fix:=20=E5=81=B6=E5=B0=94=E5=87=BA?=
 =?UTF-8?q?=E7=8E=B0=E4=B8=8D=E8=83=BD=E4=B8=8A=E6=8A=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 manifest.json   | 2 +-
 src/renderer.ts | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/manifest.json b/manifest.json
index 6908490..ec5a7f6 100644
--- a/manifest.json
+++ b/manifest.json
@@ -4,7 +4,7 @@
     "name": "LLOneBot",
     "slug": "LLOneBot",
     "description": "LiteLoaderQQNT的OneBotApi",
-    "version": "2.1.1",
+    "version": "2.1.2",
     "thumbnail": "./icon.png",
     "authors": [{
         "name": "linyuchen",
diff --git a/src/renderer.ts b/src/renderer.ts
index d999610..9c39876 100644
--- a/src/renderer.ts
+++ b/src/renderer.ts
@@ -615,7 +615,7 @@ async function onSettingWindowCreated(view: Element) {
 
 }
 
-setTimeout(onLoad, 2000)
+setTimeout(onLoad, 5000)
 
 export {
     onSettingWindowCreated

From 1554f1b08e385cf442af77e1882743dd2aa5286c Mon Sep 17 00:00:00 2001
From: linyuchen <lin.yu.chen@foxmail.com>
Date: Sat, 3 Feb 2024 15:08:24 +0800
Subject: [PATCH 03/11] =?UTF-8?q?=E6=96=B0=E5=A2=9Ejson=E6=B6=88=E6=81=AF?=
 =?UTF-8?q?=E4=B8=8A=E6=8A=A5=EF=BC=8C=E6=96=B0=E5=A2=9Edebug=E6=A8=A1?=
 =?UTF-8?q?=E5=BC=8F=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=BC=80=E5=85=B3=E6=8E=A7?=
 =?UTF-8?q?=E5=88=B6=E4=B8=8A=E6=8A=A5=E6=96=87=E4=BB=B6base64=E7=BC=96?=
 =?UTF-8?q?=E7=A0=81=EF=BC=8C=E6=96=B0=E5=A2=9E=E8=AF=AD=E9=9F=B3=E6=B6=88?=
 =?UTF-8?q?=E6=81=AF=E4=B8=8A=E6=8A=A5=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=92=A4?=
 =?UTF-8?q?=E5=9B=9E=E6=B6=88=E6=81=AFid=E7=B1=BB=E5=9E=8B=E4=B8=8D?=
 =?UTF-8?q?=E6=AD=A3=E5=B8=B8=E3=80=82=E4=BF=AE=E5=A4=8D@=E5=85=A8?=
 =?UTF-8?q?=E4=BD=93=E6=88=90=E5=91=98=E4=B8=8A=E6=8A=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 README.md                |  12 ++--
 manifest.json            |   2 +-
 package-lock.json        |  17 ++++++
 package.json             |   1 +
 src/common/IPCChannel.ts |   3 +-
 src/common/types.ts      |  87 ++++++++++++++++-----------
 src/global.d.ts          |   4 +-
 src/main/HttpServer.ts   |  48 ++++++++++-----
 src/main/IPCSend.ts      |   2 +-
 src/main/main.ts         |  32 +++++++++-
 src/main/utils.ts        |  19 ++++++
 src/preload.ts           |   5 +-
 src/renderer.ts          | 127 +++++++++++++++++++++++++++++++--------
 13 files changed, 273 insertions(+), 86 deletions(-)

diff --git a/README.md b/README.md
index 3d9652c..be0bd24 100644
--- a/README.md
+++ b/README.md
@@ -36,7 +36,9 @@
 - [x] 图片
 - [x] 引用消息
 - [x] @群成员
-- [x] 发送语音(只测试了silk编码的amr)
+- [x] 语音
+- [x] json消息(只上报)
+- [ ] 红包
 - [ ] 转发消息记录
 - [ ] xml
 
@@ -97,16 +99,16 @@
 <br/>
 
 <details>
-    <summary>QQ多开时事件没有上报</summary>
+    <summary>QQ变得很卡</summary>
 <br/>
-    小概率事件,有可能是IPC通信串台了(不确定),重启QQ可解决,目前正在想办法修复
+    这是你的群特别多导致的,因为启动后会批量获取群成员列表,获取完之后就正常了
 </details>
 <br/>
 
 <details>
-    <summary>QQ变得很卡</summary>
+    <summary>撤回消息无效</summary>
 <br/>
-    这是你的群特别多导致的,因为启动后会批量获取群成员列表,获取完之后就正常了
+    如果接口调用的传的`message`是number类型会导致精度丢失,使用string类型可解决,详情见<a href="https://github.com/linyuchen/LiteLoaderQQNT-OneBotApi/issues/17">issue#17</a>
 </details>
 <br/>
 
diff --git a/manifest.json b/manifest.json
index ec5a7f6..5d625a8 100644
--- a/manifest.json
+++ b/manifest.json
@@ -4,7 +4,7 @@
     "name": "LLOneBot",
     "slug": "LLOneBot",
     "description": "LiteLoaderQQNT的OneBotApi",
-    "version": "2.1.2",
+    "version": "2.2.0",
     "thumbnail": "./icon.png",
     "authors": [{
         "name": "linyuchen",
diff --git a/package-lock.json b/package-lock.json
index eee467c..bad3962 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,6 +10,7 @@
       "license": "ISC",
       "dependencies": {
         "express": "^4.18.2",
+        "json-bigint": "^1.0.0",
         "uuid": "^9.0.1"
       },
       "devDependencies": {
@@ -2751,6 +2752,14 @@
         "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
       }
     },
+    "node_modules/bignumber.js": {
+      "version": "9.1.2",
+      "resolved": "https://mirrors.cloud.tencent.com/npm/bignumber.js/-/bignumber.js-9.1.2.tgz",
+      "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==",
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/body-parser": {
       "version": "1.20.1",
       "resolved": "https://mirrors.cloud.tencent.com/npm/body-parser/-/body-parser-1.20.1.tgz",
@@ -4009,6 +4018,14 @@
         "node": ">=4"
       }
     },
+    "node_modules/json-bigint": {
+      "version": "1.0.0",
+      "resolved": "https://mirrors.cloud.tencent.com/npm/json-bigint/-/json-bigint-1.0.0.tgz",
+      "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
+      "dependencies": {
+        "bignumber.js": "^9.0.0"
+      }
+    },
     "node_modules/json-buffer": {
       "version": "3.0.1",
       "resolved": "https://mirrors.cloud.tencent.com/npm/json-buffer/-/json-buffer-3.0.1.tgz",
diff --git a/package.json b/package.json
index 4cdd843..cd84ed2 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
   "license": "ISC",
   "dependencies": {
     "express": "^4.18.2",
+    "json-bigint": "^1.0.0",
     "uuid": "^9.0.1"
   },
   "devDependencies": {
diff --git a/src/common/IPCChannel.ts b/src/common/IPCChannel.ts
index a45a084..c505539 100644
--- a/src/common/IPCChannel.ts
+++ b/src/common/IPCChannel.ts
@@ -10,4 +10,5 @@ export const CHANNEL_POST_ONEBOT_DATA = "llonebot_post_onebot_data"
 export const CHANNEL_SET_SELF_INFO= "llonebot_set_self_info"
 export const CHANNEL_DOWNLOAD_FILE= "llonebot_download_file"
 export const CHANNEL_DELETE_FILE= "llonebot_delete_file"
-export const CHANNEL_GET_RUNNING_STATUS= "llonebot_get_running_status"
\ No newline at end of file
+export const CHANNEL_GET_RUNNING_STATUS= "llonebot_get_running_status"
+export const CHANNEL_FILE2BASE64= "llonebot_file2base64"
\ No newline at end of file
diff --git a/src/common/types.ts b/src/common/types.ts
index e9f7627..e35c910 100644
--- a/src/common/types.ts
+++ b/src/common/types.ts
@@ -1,5 +1,6 @@
 export enum AtType {
     notAt = 0,
+    atAll = 1,
     atUser = 2
 }
 
@@ -9,7 +10,7 @@ export enum ChatType {
     temp = 100
 }
 
-export type GroupMemberInfo = {
+export interface GroupMemberInfo {
     avatarPath: string;
     cardName: string;
     cardType: number;
@@ -30,12 +31,12 @@ export const OnebotGroupMemberRole = {
 }
 
 
-export type SelfInfo = {
+export interface SelfInfo {
     user_id: string;
     nickname: string;
 }
 
-export type User = {
+export interface User {
     avatarUrl?: string;
     bio?: string;  // 签名
     nickName: string;
@@ -43,19 +44,46 @@ export type User = {
     uin: string; // QQ号
 }
 
-export type Group = {
+export interface Group {
     uid: string; // 群号
     name: string;
     members?: GroupMemberInfo[];
 }
 
-export type Peer = {
+export interface Peer {
     chatType: ChatType
     name: string
     uid: string  // qq号
 }
 
-export type MessageElement = {
+export interface PttElement {
+    canConvert2Text: boolean
+    duration: number  // 秒数
+    fileBizId: null
+    fileId: number // 0
+    fileName: string // "e4d09c784d5a2abcb2f9980bdc7acfe6.amr"
+    filePath: string // "/Users//Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/nt_qq_a6b15c9820595d25a56c1633ce19ad40/nt_data/Ptt/2023-11/Ori/e4d09c784d5a2abcb2f9980bdc7acfe6.amr"
+    fileSize: string // "4261"
+    fileSubId: string // "0"
+    fileUuid: string // "90j3z7rmRphDPrdVgP9udFBaYar#oK0TWZIV"
+    formatType: string // 1
+    invalidState: number // 0
+    md5HexStr: string // "e4d09c784d5a2abcb2f9980bdc7acfe6"
+    playState: number // 0
+    progress: number // 0
+    text: string // ""
+    transferStatus: number // 0
+    translateStatus: number // 0
+    voiceChangeType: number // 0
+    voiceType: number // 0
+    waveAmplitudes: number[]
+}
+
+export interface ArkElement{
+    bytesData: string
+}
+
+export interface MessageElement {
     raw: {
         msgId: string,
         msgTime: string,
@@ -83,28 +111,8 @@ export type MessageElement = {
                 fileName: string
                 fileUuid: string
             },
-            pttElement: {
-                canConvert2Text: boolean
-                duration: number  // 秒数
-                fileBizId: null
-                fileId: number // 0
-                fileName: string // "e4d09c784d5a2abcb2f9980bdc7acfe6.amr"
-                filePath: string // "/Users/C5366155/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ/nt_qq_a6b15c9820595d25a56c1633ce19ad40/nt_data/Ptt/2023-11/Ori/e4d09c784d5a2abcb2f9980bdc7acfe6.amr"
-                fileSize: string // "4261"
-                fileSubId: string // "0"
-                fileUuid: string // "90j3z7rmRphDPrdVgP9udFBaYar#oK0TWZIV"
-                formatType: string // 1
-                invalidState: number // 0
-                md5HexStr: string // "e4d09c784d5a2abcb2f9980bdc7acfe6"
-                playState: number // 0
-                progress: number // 0
-                text: string // ""
-                transferStatus: number // 0
-                translateStatus: number // 0
-                voiceChangeType: number // 0
-                voiceType: number // 0
-                waveAmplitudes: number[]
-            }
+            pttElement: PttElement,
+            arkElement: ArkElement
         }[]
     }
     peer: Peer,
@@ -115,8 +123,17 @@ export type MessageElement = {
     }
 }
 
+export enum MessageType {
+    text = "text",
+    image = "image",
+    voice = "record",
+    at = "at",
+    reply = "reply",
+    json = "json"
+}
+
 export type SendMessage = {
-    type: "text",
+    type: MessageType.text,
     content: string,
     data?: {
         text: string, // 纯文本
@@ -128,7 +145,7 @@ export type SendMessage = {
         file: string // 本地路径
     }
 } | {
-    type: "at",
+    type: MessageType.at,
     atType?: AtType,
     content?: string,
     atUid?: string,
@@ -137,7 +154,7 @@ export type SendMessage = {
         qq: string // at的qq号
     }
 } | {
-    type: "reply",
+    type: MessageType.reply,
     msgId: string,
     msgSeq: string,
     senderUin: string,
@@ -149,7 +166,7 @@ export type SendMessage = {
 export type PostDataAction = "send_private_msg" | "send_group_msg" | "get_group_list"
     | "get_friend_list" | "delete_msg" | "get_login_info" | "get_group_member_list" | "get_group_member_info"
 
-export type PostDataSendMsg = {
+export interface PostDataSendMsg {
     action: PostDataAction
     message_type?: "private" | "group"
     params?: {
@@ -163,12 +180,14 @@ export type PostDataSendMsg = {
     ipc_uuid?: string
 }
 
-export type Config = {
+export interface Config {
     port: number,
     hosts: string[],
+    enableBase64?: boolean
+    debug?: boolean
 }
 
-export type SendMsgResult = {
+export interface SendMsgResult {
     status: number,
     retcode: number,
     data: any,
diff --git a/src/global.d.ts b/src/global.d.ts
index 6f38bfb..221edbf 100644
--- a/src/global.d.ts
+++ b/src/global.d.ts
@@ -4,7 +4,7 @@ import {
     GroupMemberInfo,
     MessageElement,
     Peer,
-    PostDataSendMsg,
+    PostDataSendMsg, PttElement,
     SelfInfo,
     SendMessage, SendMsgResult,
     User
@@ -27,6 +27,7 @@ declare var LLAPI: {
     getGroupMemberList(group_id: string, num: number): Promise<{result: { infos: Map<string, GroupMemberInfo> }}>
     getPeer(): Promise<Peer>
     add_qmenu(func: (qContextMenu: Node)=>void): void
+    Ptt2Text(msgId:string, peer: Peer, elements: MessageElement[]): Promise<any>
 
 };
 
@@ -47,6 +48,7 @@ declare var llonebot: {
     deleteFile(path: string[]):Promise<void>;
     getRunningStatus(): Promise<boolean>;
     sendSendMsgResult(sessionId: string, msgResult: SendMsgResult): void;
+    file2base64(path: string): Promise<{err: string, data: string}>;
 };
 
 declare global {
diff --git a/src/main/HttpServer.ts b/src/main/HttpServer.ts
index 4a891f7..16c5af5 100644
--- a/src/main/HttpServer.ts
+++ b/src/main/HttpServer.ts
@@ -1,6 +1,7 @@
 import {log} from "./utils";
 
 const express = require("express");
+const JSONbig = require('json-bigint');
 import {sendIPCRecallQQMsg, sendIPCSendQQMsg} from "./IPCSend";
 import {OnebotGroupMemberRole, PostDataAction, PostDataSendMsg, SendMessage, SendMsgResult} from "../common/types";
 import {friends, groups, selfInfo} from "./data";
@@ -21,12 +22,10 @@ function checkSendMessage(sendMsgList: SendMessage[]) {
             } else if (["image", "voice", "record"].includes(type)) {
                 if (!data["file"]) {
                     return 400;
-                }
-                else{
+                } else {
                     if (checkUri(data["file"])) {
                         return 200;
-                    }
-                    else{
+                    } else {
                         return 400;
                     }
                 }
@@ -36,16 +35,16 @@ function checkSendMessage(sendMsgList: SendMessage[]) {
             } else if (type === "reply" && !data["id"]) {
                 return 400;
             }
-        }
-        else{
+        } else {
             return 400
         }
     }
     return 200;
 }
+
 // ==end==
 
-function handlePost(jsonData: any, handleSendResult: (data: SendMsgResult)=>void) {
+function handlePost(jsonData: any, handleSendResult: (data: SendMsgResult) => void) {
     log("API receive post:" + JSON.stringify(jsonData))
     if (!jsonData.params) {
         jsonData.params = JSON.parse(JSON.stringify(jsonData));
@@ -137,7 +136,7 @@ function handlePost(jsonData: any, handleSendResult: (data: SendMsgResult)=>void
             }
         })
     } else if (jsonData.action == "delete_msg") {
-        sendIPCRecallQQMsg(jsonData.message_id)
+        sendIPCRecallQQMsg(String(jsonData.message_id))
     }
     return resData
 }
@@ -147,14 +146,29 @@ export function startExpress(port: number) {
     const app = express();
     // 中间件,用于解析POST请求的请求体
     app.use(express.urlencoded({extended: true, limit: "500mb"}));
-    app.use(express.json({limit: '500mb'}));
+    app.use(express.json({
+        limit: '500mb',
+        verify: (req: any, res: any, buf: any, encoding: any) => {
+            req.rawBody = buf
+        }
+    }));
+    app.use((req: any, res: any, next: any) => {
+        try {
+            req.body = JSONbig.parse(req.rawBody.toString());
+            next();
+        } catch (error) {
+            next(error);
+        }
+    });
 
     function parseToOnebot12(action: PostDataAction) {
         app.post('/' + action, (req: any, res: any) => {
             let jsonData: PostDataSendMsg = req.body;
             jsonData.action = action
-            let resData = handlePost(jsonData, (data:SendMsgResult)=>{res.send(data)})
-            if (resData){
+            let resData = handlePost(jsonData, (data: SendMsgResult) => {
+                res.send(data)
+            })
+            if (resData) {
                 res.send(resData)
             }
         });
@@ -175,8 +189,10 @@ export function startExpress(port: number) {
     // 处理POST请求的路由
     app.post('/', (req: any, res: any) => {
         let jsonData: PostDataSendMsg = req.body;
-        let resData = handlePost(jsonData, (data:SendMsgResult)=>{res.send(data)})
-        if (resData){
+        let resData = handlePost(jsonData, (data: SendMsgResult) => {
+            res.send(data)
+        })
+        if (resData) {
             res.send(resData)
         }
     });
@@ -193,8 +209,10 @@ export function startExpress(port: number) {
                 jsonData.action = "send_private_msg"
             }
         }
-        let resData = handlePost(jsonData, (data:SendMsgResult)=>{res.send(data)})
-        if (resData){
+        let resData = handlePost(jsonData, (data: SendMsgResult) => {
+            res.send(data)
+        })
+        if (resData) {
             res.send(resData)
         }
     })
diff --git a/src/main/IPCSend.ts b/src/main/IPCSend.ts
index 8d7d3bf..2bf00c4 100644
--- a/src/main/IPCSend.ts
+++ b/src/main/IPCSend.ts
@@ -31,5 +31,5 @@ export function sendIPCSendQQMsg(postData: PostDataSendMsg, handleSendResult: (d
 }
 
 export function sendIPCRecallQQMsg(message_id: string) {
-    sendIPCMsg(CHANNEL_RECALL_MSG, {message_id});
+    sendIPCMsg(CHANNEL_RECALL_MSG, {message_id: message_id});
 }
\ No newline at end of file
diff --git a/src/main/main.ts b/src/main/main.ts
index de0a992..a2c3946 100644
--- a/src/main/main.ts
+++ b/src/main/main.ts
@@ -2,6 +2,7 @@
 
 import * as path from "path";
 import {ipcMain} from 'electron';
+import * as util from 'util';
 
 import {Config, Group, SelfInfo, User} from "../common/types";
 import {
@@ -13,11 +14,11 @@ import {
     CHANNEL_SET_CONFIG,
     CHANNEL_START_HTTP_SERVER,
     CHANNEL_UPDATE_FRIENDS,
-    CHANNEL_UPDATE_GROUPS, CHANNEL_DELETE_FILE, CHANNEL_GET_RUNNING_STATUS
+    CHANNEL_UPDATE_GROUPS, CHANNEL_DELETE_FILE, CHANNEL_GET_RUNNING_STATUS, CHANNEL_FILE2BASE64
 } from "../common/IPCChannel";
 import {ConfigUtil} from "./config";
 import {startExpress} from "./HttpServer";
-import {CONFIG_DIR, isGIF, log} from "./utils";
+import {checkFileReceived, CONFIG_DIR, isGIF, log} from "./utils";
 import {friends, groups, selfInfo} from "./data";
 import {} from "../global";
 
@@ -54,7 +55,6 @@ function onLoad() {
             let base64Data = arg.uri.split("base64://")[1]
             try {
                 const buffer = Buffer.from(base64Data, 'base64');
-
                 fs.writeFileSync(filePath, buffer);
             } catch (e: any) {
                 return {
@@ -180,6 +180,32 @@ function onLoad() {
     ipcMain.handle(CHANNEL_GET_RUNNING_STATUS, (event: any, arg: any) => {
         return running;
     })
+
+    ipcMain.handle(CHANNEL_FILE2BASE64, async (event: any, path: string): Promise<{err: string, data: string}> => {
+        const readFile = util.promisify(fs.readFile);
+        let result = {
+            err: "",
+            data: ""
+        }
+        try {
+            // 读取文件内容
+            // if (!fs.existsSync(path)){
+            //     path = path.replace("\\Ori\\", "\\Thumb\\");
+            // }
+            try {
+                await checkFileReceived(path, 5000);
+            } catch (e: any) {
+                result.err = e.toString();
+                return result;
+            }
+            const data = await readFile(path);
+            // 转换为Base64编码
+            result.data = data.toString('base64');
+        } catch (err) {
+            result.err = err.toString();
+        }
+        return result;
+    })
 }
 
 
diff --git a/src/main/utils.ts b/src/main/utils.ts
index 2a52378..7084d83 100644
--- a/src/main/utils.ts
+++ b/src/main/utils.ts
@@ -26,3 +26,22 @@ export function isGIF(path: string) {
     return buffer.toString() === 'GIF8'
 }
 
+
+// 定义一个异步函数来检查文件是否存在
+export function checkFileReceived(path: string, timeout: number=3000): Promise<void> {
+    return new Promise((resolve, reject) => {
+        const startTime = Date.now();
+
+        function check() {
+            if (fs.existsSync(path)) {
+                resolve();
+            } else if (Date.now() - startTime > timeout) {
+                reject(new Error(`文件不存在: ${path}`));
+            } else {
+                setTimeout(check, 100);
+            }
+        }
+
+        check();
+    });
+}
\ No newline at end of file
diff --git a/src/preload.ts b/src/preload.ts
index 8252323..93be597 100644
--- a/src/preload.ts
+++ b/src/preload.ts
@@ -14,7 +14,7 @@ import {
     CHANNEL_UPDATE_FRIENDS,
     CHANNEL_UPDATE_GROUPS,
     CHANNEL_DELETE_FILE,
-    CHANNEL_GET_RUNNING_STATUS
+    CHANNEL_GET_RUNNING_STATUS, CHANNEL_FILE2BASE64
 } from "./common/IPCChannel";
 
 
@@ -70,6 +70,9 @@ contextBridge.exposeInMainWorld("llonebot", {
     },
     getRunningStatus: () => {
         return ipcRenderer.invoke(CHANNEL_GET_RUNNING_STATUS);
+    },
+    file2base64: (localFilePath: string) => {
+        return ipcRenderer.invoke(CHANNEL_FILE2BASE64, localFilePath);
     }
     // startExpress,
 });
\ No newline at end of file
diff --git a/src/renderer.ts b/src/renderer.ts
index 9c39876..c541327 100644
--- a/src/renderer.ts
+++ b/src/renderer.ts
@@ -6,12 +6,14 @@ import {
     AtType,
     ChatType,
     Group,
-    MessageElement,
+    MessageElement, MessageType,
     OnebotGroupMemberRole,
     Peer,
-    PostDataSendMsg, SendMsgResult,
+    PostDataSendMsg,
+    SendMsgResult,
     User
 } from "./common/types";
+import {checkFileReceived} from "./main/utils";
 
 let self_qq: string = ""
 let groups: Group[] = []
@@ -123,6 +125,7 @@ async function getGroupMember(group_qq: string, member_uid: string) {
 
 async function handleNewMessage(messages: MessageElement[]) {
     console.log("llonebot 收到消息:", messages);
+    const {debug, enableBase64} = await window.llonebot.getConfig();
     for (let message of messages) {
         let onebot_message_data: any = {
             self: {
@@ -141,6 +144,9 @@ async function handleNewMessage(messages: MessageElement[]) {
             raw_message: "",
             font: 14
         }
+        if (debug) {
+            onebot_message_data.raw = JSON.parse(JSON.stringify(message))
+        }
         if (message.raw.chatType == ChatType.group) {
             let group_id = message.peer.uid
             let group = (await getGroup(group_id))!
@@ -181,10 +187,11 @@ async function handleNewMessage(messages: MessageElement[]) {
                 data: {},
                 type: "unknown"
             }
-            if (element.textElement?.atType == AtType.atUser) {
+            if (element.textElement && element.textElement?.atType !== AtType.notAt) {
                 message_data["type"] = "at"
-                if (element.textElement.atUid != "0") {
-                    message_data["data"]["mention"] = element.textElement.atUid
+                if (element.textElement.atType == AtType.atAll) {
+                    message_data["data"]["mention"] = "all"
+                    message_data["data"]["qq"] = "all"
                 } else {
                     let uid = element.textElement.atNtUid
                     let atMember = await getGroupMember(message.peer.uid, uid)
@@ -198,15 +205,36 @@ async function handleNewMessage(messages: MessageElement[]) {
                 message_data["type"] = "image"
                 message_data["data"]["file_id"] = element.picElement.fileUuid
                 message_data["data"]["path"] = element.picElement.sourcePath
-                let startS = "file://"
-                if (!element.picElement.sourcePath.startsWith("/")) {
-                    startS += "/"
-                }
-                // todo: 转成base64
-                message_data["data"]["file"] = startS + element.picElement.sourcePath
+                message_data["data"]["file"] = element.picElement.sourcePath
             } else if (element.replyElement) {
                 message_data["type"] = "reply"
                 message_data["data"]["id"] = msgHistory.find(msg => msg.raw.msgSeq == element.replyElement.replayMsgSeq)?.raw.msgId
+            } else if (element.pttElement) {
+                message_data["type"] = MessageType.voice;
+                message_data["data"]["file"] = element.pttElement.filePath
+                message_data["data"]["file_id"] = element.pttElement.fileUuid
+                // console.log("收到语音消息", message.raw.msgId, message.peer, element.pttElement)
+                // window.LLAPI.Ptt2Text(message.raw.msgId, message.peer, messages).then(text => {
+                //     console.log("语音转文字结果", text);
+                // }).catch(err => {
+                //     console.log("语音转文字失败", err);
+                // })
+            } else if (element.arkElement) {
+                message_data["type"] = MessageType.json;
+                message_data["data"]["data"] = element.arkElement.bytesData;
+            }
+            if (message_data.data.file) {
+                let filePath: string = message_data.data.file;
+                message_data.data.file = "file://" + filePath
+                if (enableBase64) {
+                    // filePath = filePath.replace("\\Ori\\", "\\Thumb\\")
+                    let {err, data} = await window.llonebot.file2base64(filePath);
+                    if (err) {
+                        console.log("文件转base64失败", err)
+                    } else {
+                        message_data.data.file = "base64://" + data
+                    }
+                }
             }
             onebot_message_data.message.push(message_data)
         }
@@ -285,11 +313,18 @@ async function listenSendMessage(postData: PostDataSendMsg) {
                     message.type = "text"
                     message.atType = AtType.atUser
                     let atUid = message.data?.qq || message.atUid
-                    let group = await getGroup(postData.params.group_id)
-                    let atMember = group.members.find(member => member.uin == atUid)
-                    message.atNtUid = atMember.uid
-                    message.atUid = atUid
-                    message.content = `@${atMember.cardName || atMember.nick}`
+                    if (atUid == "all") {
+                        message.atType = AtType.atAll
+                        atUid = "0";
+                        message.content = `@全体成员`
+                    }
+                    else {
+                        let group = await getGroup(postData.params.group_id)
+                        let atMember = group.members.find(member => member.uin == atUid)
+                        message.atNtUid = atMember.uid
+                        message.atUid = atUid
+                        message.content = `@${atMember.cardName || atMember.nick}`
+                    }
                 } else if (message.type == "text") {
                     message.content = message.data?.text || message.content
                 } else if (message.type == "image" || message.type == "voice" || message.type == "record") {
@@ -443,6 +478,7 @@ function onLoad() {
                     listenSendMessage(postData).then().catch(err => console.log("listenSendMessage err", err))
                 })
                 window.llonebot.listenRecallMessage((arg: { message_id: string }) => {
+                    // console.log("listenRecallMessage", arg)
                     recallMessage(arg.message_id)
                 })
                 window.llonebot.log("llonebot loaded");
@@ -534,7 +570,7 @@ function onLoad() {
 // 打开设置界面时触发
 async function onSettingWindowCreated(view: Element) {
     window.llonebot.log("setting window created");
-    const {port, hosts} = await window.llonebot.getConfig()
+    let config = await window.llonebot.getConfig()
 
     function creatHostEleStr(host: string) {
         let eleStr = `
@@ -544,22 +580,23 @@ async function onSettingWindowCreated(view: Element) {
                 style="width:60%;padding: 5px"
                 placeholder="如果localhost上报失败试试局域网ip"/>
             </setting-item>
+
             `
         return eleStr
     }
 
     let hostsEleStr = ""
-    for (const host of hosts) {
+    for (const host of config.hosts) {
         hostsEleStr += creatHostEleStr(host);
     }
     let html = `
     <div class="config_view">
         <setting-section>
-            <setting-panel style="padding: 10px">
+            <setting-panel>
                 <setting-list class="wrap">
                     <setting-item class="vertical-list-item" data-direction="row">
                         <setting-text>监听端口</setting-text>
-                        <input id="port" type="number" value="${port}"/>
+                        <input id="port" type="number" value="${config.port}"/>
                     </setting-item>
                     <div>
                         <button id="addHost" class="q-button">添加上报地址</button>
@@ -570,8 +607,32 @@ async function onSettingWindowCreated(view: Element) {
                     <button id="save" class="q-button">保存(监听端口重启QQ后生效)</button>
                 </setting-list>
             </setting-panel>
+            <setting-panel>
+                <setting-item data-direction="row" class="hostItem vertical-list-item">
+                    <div>
+                        <div>上报文件进行base64编码</div>
+                        <div class="tips">不开启时,上报文件将以本地路径形式发送</div>
+                    </div>
+                    <setting-switch id="switchBase64" ${config.enableBase64 ? "is-active" : ""}></setting-switch>
+                </setting-item>
+                <setting-item data-direction="row" class="hostItem vertical-list-item">
+                    <div>
+                        <div>debug模式</div>
+                        <div class="tips">开启后上报消息添加raw字段附带原始消息</div>
+                    </div>
+                    <setting-switch id="debug" ${config.debug ? "is-active" : ""}></setting-switch>
+                </setting-item>
+            </setting-panel>
         </setting-section>
     </div>
+        <style>
+            setting-panel {
+                padding: 10px;
+            }
+            .tips {
+                font-size: 0.75rem;
+            }
+    </style>
     `
 
     const parser = new DOMParser();
@@ -588,6 +649,23 @@ async function onSettingWindowCreated(view: Element) {
 
     doc.getElementById("addHost").addEventListener("click", () => addHostEle())
 
+    function switchClick(eleId: string, configKey: string) {
+        doc.getElementById(eleId)?.addEventListener("click", (e) => {
+            const switchEle = e.target as HTMLInputElement
+            if (config[configKey]) {
+                config[configKey] = false
+                switchEle.removeAttribute("is-active")
+            } else {
+                config[configKey] = true
+                switchEle.setAttribute("is-active", "")
+            }
+            window.llonebot.setConfig(config)
+        })
+    }
+
+    switchClick("debug", "debug");
+    switchClick("switchBase64", "enableBase64");
+
     doc.getElementById("save")?.addEventListener("click",
         () => {
             const portEle: HTMLInputElement = document.getElementById("port") as HTMLInputElement
@@ -602,12 +680,13 @@ async function onSettingWindowCreated(view: Element) {
                     hosts.push(hostEle.value);
                 }
             }
-            window.llonebot.setConfig({
-                port: parseInt(port),
-                hosts: hosts
-            })
+            config.port = parseInt(port);
+            config.hosts = hosts;
+            window.llonebot.setConfig(config);
             alert("保存成功");
         })
+
+
     doc.body.childNodes.forEach(node => {
         view.appendChild(node);
     });

From b3981f22f299f3bc8aeb34e432f48846f77d98f7 Mon Sep 17 00:00:00 2001
From: linyuchen <lin.yu.chen@foxmail.com>
Date: Sat, 3 Feb 2024 15:18:22 +0800
Subject: [PATCH 04/11] =?UTF-8?q?fix:=20bigint=E8=A7=A3=E6=9E=90=E5=A4=B1?=
 =?UTF-8?q?=E8=B4=A5=E5=AF=BC=E8=87=B4500?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/main/HttpServer.ts | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/main/HttpServer.ts b/src/main/HttpServer.ts
index 16c5af5..f3fa148 100644
--- a/src/main/HttpServer.ts
+++ b/src/main/HttpServer.ts
@@ -149,7 +149,7 @@ export function startExpress(port: number) {
     app.use(express.json({
         limit: '500mb',
         verify: (req: any, res: any, buf: any, encoding: any) => {
-            req.rawBody = buf
+            req.rawBody = buf;
         }
     }));
     app.use((req: any, res: any, next: any) => {
@@ -157,7 +157,8 @@ export function startExpress(port: number) {
             req.body = JSONbig.parse(req.rawBody.toString());
             next();
         } catch (error) {
-            next(error);
+            // next(error);
+            next();
         }
     });
 

From ebc3968c4eadec93fdfff55f0c6aa927d484857b Mon Sep 17 00:00:00 2001
From: linyuchen <lin.yu.chen@foxmail.com>
Date: Sat, 3 Feb 2024 15:46:23 +0800
Subject: [PATCH 05/11] =?UTF-8?q?fix:=20=E4=B8=8D=E6=94=AF=E6=8C=81?=
 =?UTF-8?q?=E7=9A=84=E6=B6=88=E6=81=AF=E4=B8=8D=E5=86=8D=E4=B8=8A=E6=8A=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/renderer.ts | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/renderer.ts b/src/renderer.ts
index c541327..e03b5ca 100644
--- a/src/renderer.ts
+++ b/src/renderer.ts
@@ -236,7 +236,9 @@ async function handleNewMessage(messages: MessageElement[]) {
                     }
                 }
             }
-            onebot_message_data.message.push(message_data)
+            if (message_data.type !== "unknown"){
+                onebot_message_data.message.push(message_data);
+            }
         }
         if (msgHistory.length > 10000) {
             msgHistory.splice(0, 100)
@@ -625,13 +627,13 @@ async function onSettingWindowCreated(view: Element) {
             </setting-panel>
         </setting-section>
     </div>
-        <style>
-            setting-panel {
-                padding: 10px;
-            }
-            .tips {
-                font-size: 0.75rem;
-            }
+    <style>
+        setting-panel {
+            padding: 10px;
+        }
+        .tips {
+            font-size: 0.75rem;
+        }
     </style>
     `
 

From a249139fe02368d47abae78ae42ac2e6b70a7d06 Mon Sep 17 00:00:00 2001
From: linyuchen <lin.yu.chen@hotmail.com>
Date: Sat, 3 Feb 2024 16:08:57 +0800
Subject: [PATCH 06/11] Update README.md

---
 README.md | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/README.md b/README.md
index be0bd24..2eb3b2e 100644
--- a/README.md
+++ b/README.md
@@ -105,13 +105,6 @@
 </details>
 <br/>
 
-<details>
-    <summary>撤回消息无效</summary>
-<br/>
-    如果接口调用的传的`message`是number类型会导致精度丢失,使用string类型可解决,详情见<a href="https://github.com/linyuchen/LiteLoaderQQNT-OneBotApi/issues/17">issue#17</a>
-</details>
-<br/>
-
 <details>
     <summary>如何查看日志</summary>
 <br/>

From fae61fbbde7aa3fe9c0d213799f759c03662558f Mon Sep 17 00:00:00 2001
From: linyuchen <lin.yu.chen@foxmail.com>
Date: Sat, 3 Feb 2024 19:25:38 +0800
Subject: [PATCH 07/11] =?UTF-8?q?fix:=20=E5=A4=9C=E9=97=B4=E6=A8=A1?=
 =?UTF-8?q?=E5=BC=8F=E8=BE=93=E5=85=A5=E6=A1=86=E9=A2=9C=E8=89=B2=20feat:?=
 =?UTF-8?q?=20log=E5=BC=80=E5=85=B3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/common/types.ts | 13 +++++++------
 src/main/main.ts    |  7 ++-----
 src/main/utils.ts   | 12 +++++++++++-
 src/renderer.ts     | 15 ++++++++++++++-
 4 files changed, 34 insertions(+), 13 deletions(-)

diff --git a/src/common/types.ts b/src/common/types.ts
index e35c910..3e5a094 100644
--- a/src/common/types.ts
+++ b/src/common/types.ts
@@ -181,15 +181,16 @@ export interface PostDataSendMsg {
 }
 
 export interface Config {
-    port: number,
-    hosts: string[],
+    port: number
+    hosts: string[]
     enableBase64?: boolean
     debug?: boolean
+    log?: boolean
 }
 
 export interface SendMsgResult {
-    status: number,
-    retcode: number,
-    data: any,
-    message: string,
+    status: number
+    retcode: number
+    data: any
+    message: string
 }
\ No newline at end of file
diff --git a/src/main/main.ts b/src/main/main.ts
index a2c3946..c0840cd 100644
--- a/src/main/main.ts
+++ b/src/main/main.ts
@@ -18,7 +18,7 @@ import {
 } from "../common/IPCChannel";
 import {ConfigUtil} from "./config";
 import {startExpress} from "./HttpServer";
-import {checkFileReceived, CONFIG_DIR, isGIF, log} from "./utils";
+import {checkFileReceived, CONFIG_DIR, getConfigUtil, isGIF, log} from "./utils";
 import {friends, groups, selfInfo} from "./data";
 import {} from "../global";
 
@@ -32,10 +32,7 @@ function onLoad() {
     log("main onLoaded");
 
     // const config_dir = browserWindow.LiteLoader.plugins["LLOneBot"].path.data;
-    function getConfigUtil() {
-        const configFilePath = path.join(CONFIG_DIR, `config_${selfInfo.user_id}.json`)
-        return new ConfigUtil(configFilePath)
-    }
+
 
     if (!fs.existsSync(CONFIG_DIR)) {
         fs.mkdirSync(CONFIG_DIR, {recursive: true});
diff --git a/src/main/utils.ts b/src/main/utils.ts
index 7084d83..bfafa66 100644
--- a/src/main/utils.ts
+++ b/src/main/utils.ts
@@ -1,11 +1,21 @@
 import * as path from "path";
 import {json} from "express";
 import {selfInfo} from "./data";
+import {ConfigUtil} from "./config";
 
 const fs = require('fs');
 
 export const CONFIG_DIR = global.LiteLoader.plugins["LLOneBot"].path.data;
+
+export function getConfigUtil() {
+    const configFilePath = path.join(CONFIG_DIR, `config_${selfInfo.user_id}.json`)
+    return new ConfigUtil(configFilePath)
+}
+
 export function log(msg: any) {
+    if (!getConfigUtil().getConfig().log){
+        return
+    }
     let currentDateTime = new Date().toLocaleString();
     const date = new Date();
     const year = date.getFullYear();
@@ -44,4 +54,4 @@ export function checkFileReceived(path: string, timeout: number=3000): Promise<v
 
         check();
     });
-}
\ No newline at end of file
+}
diff --git a/src/renderer.ts b/src/renderer.ts
index e03b5ca..d080e15 100644
--- a/src/renderer.ts
+++ b/src/renderer.ts
@@ -592,7 +592,7 @@ async function onSettingWindowCreated(view: Element) {
         hostsEleStr += creatHostEleStr(host);
     }
     let html = `
-    <div class="config_view">
+    <div class="config_view llonebot">
         <setting-section>
             <setting-panel>
                 <setting-list class="wrap">
@@ -624,6 +624,13 @@ async function onSettingWindowCreated(view: Element) {
                     </div>
                     <setting-switch id="debug" ${config.debug ? "is-active" : ""}></setting-switch>
                 </setting-item>
+                <setting-item data-direction="row" class="hostItem vertical-list-item">
+                    <div>
+                        <div>日志</div>
+                        <div class="tips">日志目录:${window.LiteLoader.plugins["LLOneBot"].path.data}</div>
+                    </div>
+                    <setting-switch id="log" ${config.log ? "is-active" : ""}></setting-switch>
+                </setting-item>
             </setting-panel>
         </setting-section>
     </div>
@@ -634,6 +641,11 @@ async function onSettingWindowCreated(view: Element) {
         .tips {
             font-size: 0.75rem;
         }
+        @media (prefers-color-scheme: dark){
+            .llonebot input {
+                color: white;
+            }
+        }
     </style>
     `
 
@@ -667,6 +679,7 @@ async function onSettingWindowCreated(view: Element) {
 
     switchClick("debug", "debug");
     switchClick("switchBase64", "enableBase64");
+    switchClick("log", "log");
 
     doc.getElementById("save")?.addEventListener("click",
         () => {

From 7ba7af13a8ce18e05666324c4507498473d885d5 Mon Sep 17 00:00:00 2001
From: linyuchen <lin.yu.chen@foxmail.com>
Date: Sat, 3 Feb 2024 19:27:31 +0800
Subject: [PATCH 08/11] ver: 2.3.0

---
 manifest.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/manifest.json b/manifest.json
index 5d625a8..967fea2 100644
--- a/manifest.json
+++ b/manifest.json
@@ -4,7 +4,7 @@
     "name": "LLOneBot",
     "slug": "LLOneBot",
     "description": "LiteLoaderQQNT的OneBotApi",
-    "version": "2.2.0",
+    "version": "2.3.0",
     "thumbnail": "./icon.png",
     "authors": [{
         "name": "linyuchen",

From 070eee6c1cf8f765d98a339a96881ed52358348f Mon Sep 17 00:00:00 2001
From: linyuchen <lin.yu.chen@foxmail.com>
Date: Sat, 3 Feb 2024 19:31:22 +0800
Subject: [PATCH 09/11] docs: README update

---
 README.md | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/README.md b/README.md
index 2eb3b2e..88eb629 100644
--- a/README.md
+++ b/README.md
@@ -105,17 +105,11 @@
 </details>
 <br/>
 
-<details>
-    <summary>如何查看日志</summary>
-<br/>
-    LiteLoaderQQNT/data/LLOneBot/*.log
-</details>
-<br/>
 
 ## TODO
 
-- [x] 接口返回更详细的错误信息,目前消息发不出去也会返回发送成功(这河里吗)
 - [ ] 转发消息记录 
+- [ ] 好友点赞api
 - [ ] 支持websocket,等个有缘人提PR实现
 - [ ] 重构摆脱LLAPI,目前调用LLAPI只能在renderer进程调用,需重构成在main进程调用
 

From 19d7ecd4f09a7041d776a7a3334e5cd202ab9d65 Mon Sep 17 00:00:00 2001
From: YuChuXi <cyu245656@gamil.com>
Date: Sun, 4 Feb 2024 02:54:56 +0800
Subject: [PATCH 10/11] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AE=BE=E7=BD=AE?=
 =?UTF-8?q?=E9=A1=B9=EF=BC=9A=E4=B8=8A=E6=8A=A5=E8=87=AA=E8=BA=AB=E6=B6=88?=
 =?UTF-8?q?=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/common/types.ts |  1 +
 src/renderer.ts     | 18 +++++++++++++++---
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/common/types.ts b/src/common/types.ts
index 3e5a094..1a00311 100644
--- a/src/common/types.ts
+++ b/src/common/types.ts
@@ -185,6 +185,7 @@ export interface Config {
     hosts: string[]
     enableBase64?: boolean
     debug?: boolean
+    reportSelfMessage?: boolean
     log?: boolean
 }
 
diff --git a/src/renderer.ts b/src/renderer.ts
index d080e15..058fabd 100644
--- a/src/renderer.ts
+++ b/src/renderer.ts
@@ -125,7 +125,7 @@ async function getGroupMember(group_qq: string, member_uid: string) {
 
 async function handleNewMessage(messages: MessageElement[]) {
     console.log("llonebot 收到消息:", messages);
-    const {debug, enableBase64} = await window.llonebot.getConfig();
+    const {debug, enableBase64, reportSelfMessage} = await window.llonebot.getConfig();
     for (let message of messages) {
         let onebot_message_data: any = {
             self: {
@@ -244,8 +244,12 @@ async function handleNewMessage(messages: MessageElement[]) {
             msgHistory.splice(0, 100)
         }
         msgHistory.push(message)
-        console.log("发送上传消息给ipc main", onebot_message_data)
-        window.llonebot.postData(onebot_message_data);
+        if (reportSelfMessage || (onebot_message_data["user_id"] != (await window.LLAPI.getAccountInfo()).uin)){
+            console.log("发送上传消息给ipc main", onebot_message_data);
+            window.llonebot.postData(onebot_message_data);
+        } else {
+            console.log("没上传自己的消息给ipc main", onebot_message_data);
+        }
     }
 }
 
@@ -624,6 +628,13 @@ async function onSettingWindowCreated(view: Element) {
                     </div>
                     <setting-switch id="debug" ${config.debug ? "is-active" : ""}></setting-switch>
                 </setting-item>
+                <setting-item data-direction="row" class="hostItem vertical-list-item">
+                    <div>
+                        <div>是否上报自身消息</div>
+                        <div class="tips">开启后不再上报自己发出的消息</div>
+                    </div>
+                    <setting-switch id="reportSelfMessage" ${config.reportSelfMessage ? "is-active" : ""}></setting-switch>
+                </setting-item>
                 <setting-item data-direction="row" class="hostItem vertical-list-item">
                     <div>
                         <div>日志</div>
@@ -679,6 +690,7 @@ async function onSettingWindowCreated(view: Element) {
 
     switchClick("debug", "debug");
     switchClick("switchBase64", "enableBase64");
+    switchClick("reportSelfMessage", "reportSelfMessage");
     switchClick("log", "log");
 
     doc.getElementById("save")?.addEventListener("click",

From d09fc78747fcb2435b2da3ee286e05dce1fcccbd Mon Sep 17 00:00:00 2001
From: YuChuXi <81864000+YuChuXi@users.noreply.github.com>
Date: Sun, 4 Feb 2024 03:04:02 +0800
Subject: [PATCH 11/11] =?UTF-8?q?=E6=94=B9=E4=BA=86=E6=96=87=E6=9C=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/renderer.ts | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/renderer.ts b/src/renderer.ts
index 058fabd..3dcefda 100644
--- a/src/renderer.ts
+++ b/src/renderer.ts
@@ -630,8 +630,8 @@ async function onSettingWindowCreated(view: Element) {
                 </setting-item>
                 <setting-item data-direction="row" class="hostItem vertical-list-item">
                     <div>
-                        <div>是否上报自身消息</div>
-                        <div class="tips">开启后不再上报自己发出的消息</div>
+                        <div>上报自身消息</div>
+                        <div class="tips">开启后上报自己发出的消息</div>
                     </div>
                     <setting-switch id="reportSelfMessage" ${config.reportSelfMessage ? "is-active" : ""}></setting-switch>
                 </setting-item>
@@ -725,4 +725,4 @@ setTimeout(onLoad, 5000)
 
 export {
     onSettingWindowCreated
-}
\ No newline at end of file
+}