From cae525429a5e37fa606da13ed2680f8002d05b40 Mon Sep 17 00:00:00 2001 From: idranme Date: Sun, 4 Aug 2024 19:21:44 +0800 Subject: [PATCH 01/12] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 333f2a6..047b6e5 100644 --- a/README.md +++ b/README.md @@ -13,11 +13,11 @@ TG群: ## 设置界面 -图片名称 +设置界面 ## HTTP 调用示例 -![](doc/image/example.jpg) +HTTP调用示例 ## 支持的 api 和功能详情 @@ -35,7 +35,6 @@ TG群: - [x] 群禁言事件上报 - [x] 优化加群成功事件上报 - [x] 清理缓存api -- [ ] 无头模式 - [ ] 框架对接文档 ## onebot11文档 From 74d9a083aaf52d3a300eed583faad6549f1c2c2c Mon Sep 17 00:00:00 2001 From: idranme Date: Sun, 4 Aug 2024 19:28:13 +0800 Subject: [PATCH 02/12] Update README.md --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 047b6e5..838902d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LLOneBot -LiteLoaderQQNT插件,使你的NTQQ支持OneBot11协议进行QQ机器人开发 +LiteLoaderQQNT 插件,实现 OneBot 11 协议进行 QQ 机器人开发 > [!CAUTION]\ > **请不要在 QQ 官方群聊和任何影响力较大的简中互联网平台(包括但不限于:B站,微博,知乎,抖音等)发布和讨论*任何*与本插件存在相关性的信息** @@ -19,7 +19,7 @@ TG群: HTTP调用示例 -## 支持的 api 和功能详情 +## 支持的 API 见 @@ -37,10 +37,6 @@ TG群: - [x] 清理缓存api - [ ] 框架对接文档 -## onebot11文档 - - - ## Stargazers over time [![Stargazers over time](https://starchart.cc/LLOneBot/LLOneBot.svg?variant=adaptive)](https://starchart.cc/LLOneBot/LLOneBot) From 799593b7884cb8860f8d88a2188829a1ccb0113a Mon Sep 17 00:00:00 2001 From: idranme Date: Sun, 4 Aug 2024 19:48:17 +0800 Subject: [PATCH 03/12] chore: support yarn berry --- .gitignore | 15 ++++++++++++--- .yarnrc.yml | 1 + package.json | 5 +++-- 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 .yarnrc.yml diff --git a/.gitignore b/.gitignore index 0dc9ec5..a3d980a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,15 @@ -node_modules/ +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions + package-lock.json -dist/ -out/ +yarn.lock +node_modules +dist +out + .idea/ .DS_Store diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..3186f3f --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/package.json b/package.json index 25882bf..b5973d9 100644 --- a/package.json +++ b/package.json @@ -39,8 +39,9 @@ "eslint-plugin-n": "^15.0.0 || ^16.0.0", "eslint-plugin-promise": "^6.0.0", "ts-node": "^10.9.2", - "typescript": "*", + "typescript": "^5.5.4", "vite": "^5.1.4", "vite-plugin-cp": "^4.0.8" - } + }, + "packageManager": "yarn@4.4.0" } From c86797afc888e87a854b7739be649c0902df8976 Mon Sep 17 00:00:00 2001 From: idranme Date: Sun, 4 Aug 2024 19:54:32 +0800 Subject: [PATCH 04/12] chore: remove unused eslint --- package.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/package.json b/package.json index b5973d9..b62fcdf 100644 --- a/package.json +++ b/package.json @@ -31,13 +31,8 @@ "@types/fluent-ffmpeg": "^2.1.24", "@types/node": "^20.11.24", "@types/ws": "^8.5.12", - "@typescript-eslint/eslint-plugin": "^6.4.0", "electron": "^29.0.1", "electron-vite": "^2.0.0", - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0 || ^16.0.0", - "eslint-plugin-promise": "^6.0.0", "ts-node": "^10.9.2", "typescript": "^5.5.4", "vite": "^5.1.4", From 898e85615000ca32769c5178527690d3990afc21 Mon Sep 17 00:00:00 2001 From: idranme Date: Sun, 4 Aug 2024 20:22:07 +0800 Subject: [PATCH 05/12] poke require `>=25765` --- electron.vite.config.ts | 2 +- src/common/config.ts | 1 - src/common/types.ts | 1 - src/main/main.ts | 22 +--------------------- src/onebot11/action/msg/SendMsg.ts | 3 ++- src/renderer/index.ts | 5 ----- 6 files changed, 4 insertions(+), 30 deletions(-) diff --git a/electron.vite.config.ts b/electron.vite.config.ts index a469511..9c1d7eb 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -45,7 +45,7 @@ let config = { ...external.map(genCpModule), { src: './manifest.json', dest: 'dist' }, { src: './icon.jpg', dest: 'dist' }, - { src: './src/ntqqapi/native/crychic/crychic-win32-x64.node', dest: 'dist/main/' }, + // { src: './src/ntqqapi/native/crychic/crychic-win32-x64.node', dest: 'dist/main/' }, // { src: './src/ntqqapi/native/moehook/MoeHoo-win32-x64.node', dest: 'dist/main/' }, // { src: './src/ntqqapi/native/moehook/MoeHoo-linux-x64.node', dest: 'dist/main/' }, ], diff --git a/src/common/config.ts b/src/common/config.ts index 3d039a7..d9a1eea 100644 --- a/src/common/config.ts +++ b/src/common/config.ts @@ -53,7 +53,6 @@ export class ConfigUtil { reportSelfMessage: false, autoDeleteFile: false, autoDeleteFileSecond: 60, - enablePoke: false, musicSignUrl: '', } diff --git a/src/common/types.ts b/src/common/types.ts index 80f15e0..b4d722d 100644 --- a/src/common/types.ts +++ b/src/common/types.ts @@ -28,7 +28,6 @@ export interface Config { autoDeleteFile?: boolean autoDeleteFileSecond?: number ffmpeg?: string // ffmpeg路径 - enablePoke?: boolean musicSignUrl?: string ignoreBeforeLoginMsg?: boolean } diff --git a/src/main/main.ts b/src/main/main.ts index aadd755..69ac2fe 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -48,7 +48,6 @@ import { dbUtil } from '../common/db' import { setConfig } from './setConfig' import { NTQQUserApi } from '../ntqqapi/api/user' import { NTQQGroupApi } from '../ntqqapi/api/group' -import { crychic } from '../ntqqapi/native/crychic' import { OB11FriendPokeEvent, OB11GroupPokeEvent } from '../onebot11/event/notice/OB11PokeEvent' import { checkNewVersion, upgradeLLOneBot } from '../common/utils/upgrade' import { log } from '../common/utils/log' @@ -209,26 +208,7 @@ function onLoad() { } async function startReceiveHook() { - startHook().then() - if (getConfigUtil().getConfig().enablePoke) { - if (qqPkgInfo.buildVersion > '23873') { - log(`当前版本${qqPkgInfo.buildVersion}不支持发送戳一戳模块`) - } - else { - crychic.loadNode() - crychic.registerPokeHandler((id, isGroup) => { - log(`收到戳一戳消息了!是否群聊:${isGroup},id:${id}`) - let pokeEvent: OB11FriendPokeEvent | OB11GroupPokeEvent - if (isGroup) { - pokeEvent = new OB11GroupPokeEvent(parseInt(id)) - } - else { - pokeEvent = new OB11FriendPokeEvent(parseInt(selfInfo.uin), parseInt(id)) - } - postOb11Event(pokeEvent) - }) - } - } + startHook() registerReceiveHook<{ msgList: Array }>([ReceiveCmdS.NEW_MSG, ReceiveCmdS.NEW_ACTIVE_MSG], async (payload) => { diff --git a/src/onebot11/action/msg/SendMsg.ts b/src/onebot11/action/msg/SendMsg.ts index 2c92a51..b5eb8b2 100644 --- a/src/onebot11/action/msg/SendMsg.ts +++ b/src/onebot11/action/msg/SendMsg.ts @@ -23,7 +23,7 @@ import { OB11MessageVideo, OB11PostSendMsg, } from '../../types' -import { NTQQMsgApi, Peer } from '../../../ntqqapi/api/msg' +import { NTQQMsgApi } from '../../../ntqqapi/api/msg' import { SendMsgElementConstructor } from '../../../ntqqapi/constructor' import BaseAction from '../BaseAction' import { ActionName, BaseCheckResult } from '../types' @@ -37,6 +37,7 @@ import { uri2local } from '../../../common/utils' import { crychic } from '../../../ntqqapi/native/crychic' import { NTQQGroupApi } from '../../../ntqqapi/api' import { CustomMusicSignPostData, IdMusicSignPostData, MusicSign, MusicSignPostData } from '../../../common/utils/sign' +import { Peer } from '../../../ntqqapi/types/msg' function checkSendMessage(sendMsgList: OB11MessageData[]) { function checkUri(uri: string): boolean { diff --git a/src/renderer/index.ts b/src/renderer/index.ts index 8efc0a0..eb1be0d 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -186,11 +186,6 @@ async function onSettingWindowCreated(view: Element) { SettingItem('', null, SettingButton('保存', 'config-ob11-save', 'primary')), ]), SettingList([ - SettingItem( - '戳一戳消息, 暂时只支持Windows版的LLOneBot', - `重启QQ后生效,如果导致QQ崩溃请勿开启此项, 群戳一戳只能收到群号`, - SettingSwitch('enablePoke', config.enablePoke), - ), SettingItem( '使用 Base64 编码获取文件', '调用 /get_image、/get_record、/get_file 时,没有 url 时添加 Base64 字段', From 4bf992c4a96631309d5effec0be05e4127411492 Mon Sep 17 00:00:00 2001 From: idranme Date: Sun, 4 Aug 2024 20:31:29 +0800 Subject: [PATCH 06/12] chore: deps --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b62fcdf..cf08773 100644 --- a/package.json +++ b/package.json @@ -32,10 +32,10 @@ "@types/node": "^20.11.24", "@types/ws": "^8.5.12", "electron": "^29.0.1", - "electron-vite": "^2.0.0", + "electron-vite": "^2.3.0", "ts-node": "^10.9.2", "typescript": "^5.5.4", - "vite": "^5.1.4", + "vite": "^5.3.5", "vite-plugin-cp": "^4.0.8" }, "packageManager": "yarn@4.4.0" From 4bee2ba06297116a83d525922025b3612fda3244 Mon Sep 17 00:00:00 2001 From: idranme Date: Sun, 4 Aug 2024 20:35:31 +0800 Subject: [PATCH 07/12] reduce icon size --- electron.vite.config.ts | 2 +- icon.jpg | Bin 42457 -> 0 bytes icon.webp | Bin 0 -> 22334 bytes manifest.json | 2 +- 4 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 icon.jpg create mode 100644 icon.webp diff --git a/electron.vite.config.ts b/electron.vite.config.ts index 9c1d7eb..7fa9507 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -44,7 +44,7 @@ let config = { targets: [ ...external.map(genCpModule), { src: './manifest.json', dest: 'dist' }, - { src: './icon.jpg', dest: 'dist' }, + { src: './icon.webp', dest: 'dist' }, // { src: './src/ntqqapi/native/crychic/crychic-win32-x64.node', dest: 'dist/main/' }, // { src: './src/ntqqapi/native/moehook/MoeHoo-win32-x64.node', dest: 'dist/main/' }, // { src: './src/ntqqapi/native/moehook/MoeHoo-linux-x64.node', dest: 'dist/main/' }, diff --git a/icon.jpg b/icon.jpg deleted file mode 100644 index 67ca0dad9fd0ac2964870c168090f40abbe3fc52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42457 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 z 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 diff --git a/icon.webp b/icon.webp new file mode 100644 index 0000000000000000000000000000000000000000..5f07709dfbcb1e0a6533a4dfbc5f92969125a4bf GIT binary patch literal 22334 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 Date: Sun, 4 Aug 2024 22:07:55 +0800 Subject: [PATCH 08/12] optimise --- README.md | 2 +- electron.vite.config.ts | 3 ++- manifest.json | 4 ++-- package.json | 1 - scripts/gen-manifest.ts | 38 ++++++++++++++++++++++++++++++++++++++ scripts/gen-version.ts | 22 ---------------------- src/global.d.ts | 2 +- src/renderer/index.ts | 9 +++++---- 8 files changed, 49 insertions(+), 32 deletions(-) create mode 100644 scripts/gen-manifest.ts delete mode 100644 scripts/gen-version.ts diff --git a/README.md b/README.md index 838902d..d64dc4e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LLOneBot -LiteLoaderQQNT 插件,实现 OneBot 11 协议进行 QQ 机器人开发 +LiteLoaderQQNT 插件,实现 OneBot 11 协议,帮助进行 QQ 机器人开发 > [!CAUTION]\ > **请不要在 QQ 官方群聊和任何影响力较大的简中互联网平台(包括但不限于:B站,微博,知乎,抖音等)发布和讨论*任何*与本插件存在相关性的信息** diff --git a/electron.vite.config.ts b/electron.vite.config.ts index 7fa9507..1259f35 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -1,6 +1,6 @@ import cp from 'vite-plugin-cp' -import './scripts/gen-version' import path from 'node:path' +import './scripts/gen-manifest' const external = [ 'silk-wasm', @@ -32,6 +32,7 @@ let config = { external, input: 'src/main/main.ts', }, + minify: true, }, resolve: { alias: { diff --git a/manifest.json b/manifest.json index 0344957..f6e8266 100644 --- a/manifest.json +++ b/manifest.json @@ -1,9 +1,9 @@ { "manifest_version": 4, "type": "extension", - "name": "LLOneBot v3.27.4", + "name": "LLOneBot", "slug": "LLOneBot", - "description": "使你的NTQQ支持OneBot11协议进行QQ机器人开发", + "description": "实现 OneBot 11 协议,帮助进行 QQ 机器人开发", "version": "3.27.4", "icon": "./icon.webp", "authors": [ diff --git a/package.json b/package.json index cf08773..d4f13ae 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,6 @@ "@types/ws": "^8.5.12", "electron": "^29.0.1", "electron-vite": "^2.3.0", - "ts-node": "^10.9.2", "typescript": "^5.5.4", "vite": "^5.3.5", "vite-plugin-cp": "^4.0.8" diff --git a/scripts/gen-manifest.ts b/scripts/gen-manifest.ts new file mode 100644 index 0000000..58f8674 --- /dev/null +++ b/scripts/gen-manifest.ts @@ -0,0 +1,38 @@ +import { version } from '../src/version' +import { writeFileSync } from 'node:fs' + +const manifest = { + manifest_version: 4, + type: 'extension', + name: 'LLOneBot', + slug: 'LLOneBot', + description: '实现 OneBot 11 协议,帮助进行 QQ 机器人开发', + version, + icon: './icon.webp', + authors: [ + { + name: 'linyuchen', + link: 'https://github.com/linyuchen' + } + ], + repository: { + repo: 'linyuchen/LiteLoaderQQNT-OneBotApi', + branch: 'main', + release: { + tag: 'latest', + name: 'LLOneBot.zip' + } + }, + platform: [ + 'win32', + 'linux', + 'darwin' + ], + injects: { + renderer: './renderer/index.js', + main: './main/main.cjs', + preload: './preload/preload.cjs' + } +} + +writeFileSync('manifest.json', JSON.stringify(manifest, null, 2)) \ No newline at end of file diff --git a/scripts/gen-version.ts b/scripts/gen-version.ts deleted file mode 100644 index b702dee..0000000 --- a/scripts/gen-version.ts +++ /dev/null @@ -1,22 +0,0 @@ -import fs from 'fs' -import path from 'path' -import { version } from '../src/version' - -const manifestPath = path.join(__dirname, '../manifest.json') - -function readManifest(): any { - if (fs.existsSync(manifestPath)) { - return JSON.parse(fs.readFileSync(manifestPath, 'utf-8')) - } -} - -function writeManifest(manifest: any) { - fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2)) -} - -const manifest = readManifest() -if (version !== manifest.version) { - manifest.version = version - manifest.name = `LLOneBot v${version}` - writeManifest(manifest) -} diff --git a/src/global.d.ts b/src/global.d.ts index 6f1eb56..1baf170 100644 --- a/src/global.d.ts +++ b/src/global.d.ts @@ -3,6 +3,6 @@ import { type LLOneBot } from './preload' declare global { interface Window { llonebot: LLOneBot - LiteLoader: any + LiteLoader: Record } } diff --git a/src/renderer/index.ts b/src/renderer/index.ts index eb1be0d..d0429fa 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -4,6 +4,7 @@ import { SettingButton, SettingItem, SettingList, SettingSwitch, SettingSelect } // @ts-ignore import StyleRaw from './style.css?raw' import { iconSvg } from './icon' +import { version } from '../version' // 打开设置界面时触发 @@ -53,8 +54,8 @@ async function onSettingWindowCreated(view: Element) { '
', ``, ` -
-
`, +
+ `, SettingList([ SettingItem( '正在检查 LLOneBot 更新', @@ -399,7 +400,7 @@ async function onSettingWindowCreated(view: Element) { const buttonDom = view.querySelector('#llonebot-update-button')! if (ResultVersion.version === '') { - titleDom.innerHTML = '检查更新失败' + titleDom.innerHTML = `当前版本为 v${version},检查更新失败` buttonDom.innerHTML = '点击重试' buttonDom.addEventListener('click', async () => { @@ -412,7 +413,7 @@ async function onSettingWindowCreated(view: Element) { titleDom.innerHTML = '当前已是最新版本 v' + ResultVersion.version buttonDom.innerHTML = '无需更新' } else { - titleDom.innerHTML = '已检测到最新版本 v' + ResultVersion.version + titleDom.innerHTML = `当前版本为 v${version},最新版本为 v${ResultVersion.version}` buttonDom.innerHTML = '点击更新' buttonDom.dataset.type = 'primary' From 6ffa41e0d6c51771f2a865497962fc9328e4ab31 Mon Sep 17 00:00:00 2001 From: idranme Date: Sun, 4 Aug 2024 22:14:07 +0800 Subject: [PATCH 09/12] prioritise local versions --- src/renderer/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/index.ts b/src/renderer/index.ts index d0429fa..f176c0c 100644 --- a/src/renderer/index.ts +++ b/src/renderer/index.ts @@ -410,7 +410,7 @@ async function onSettingWindowCreated(view: Element) { return } if (!ResultVersion.result) { - titleDom.innerHTML = '当前已是最新版本 v' + ResultVersion.version + titleDom.innerHTML = '当前已是最新版本 v' + version buttonDom.innerHTML = '无需更新' } else { titleDom.innerHTML = `当前版本为 v${version},最新版本为 v${ResultVersion.version}` From b28dd3a723b1aaef5f5f2cc9c94c824015682935 Mon Sep 17 00:00:00 2001 From: idranme Date: Sun, 4 Aug 2024 22:44:20 +0800 Subject: [PATCH 10/12] Update publish.yml --- .github/workflows/publish.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 35efece..f5e159a 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -9,10 +9,10 @@ jobs: runs-on: ubuntu-latest steps: - name: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: setup node - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: 18 From fa2df2a3cdc6c8cfa20966f33119a257fd914da9 Mon Sep 17 00:00:00 2001 From: idranme Date: Sun, 4 Aug 2024 23:11:59 +0800 Subject: [PATCH 11/12] opt --- src/common/utils/file.ts | 22 ++++++++-------------- src/ntqqapi/hook.ts | 2 +- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/common/utils/file.ts b/src/common/utils/file.ts index c400e80..2b2aafa 100644 --- a/src/common/utils/file.ts +++ b/src/common/utils/file.ts @@ -1,11 +1,9 @@ -import fs from 'fs' -import fsPromise from 'fs/promises' -import util from 'util' +import fs from 'node:fs' +import fsPromise from 'node:fs/promises' import path from 'node:path' import { log, TEMP_DIR } from './index' import { dbUtil } from '../db' import * as fileType from 'file-type' -import { net } from 'electron' import { randomUUID, createHash } from 'node:crypto' export function isGIF(path: string) { @@ -36,7 +34,6 @@ export function checkFileReceived(path: string, timeout: number = 3000): Promise } export async function file2base64(path: string) { - const readFile = util.promisify(fs.readFile) let result = { err: '', data: '', @@ -52,7 +49,7 @@ export async function file2base64(path: string) { result.err = e.toString() return result } - const data = await readFile(path) + const data = await fsPromise.readFile(path) // 转换为Base64编码 result.data = data.toString('base64') } catch (err) { @@ -90,7 +87,6 @@ export interface HttpDownloadOptions { headers?: Record | string } export async function httpDownload(options: string | HttpDownloadOptions): Promise { - let chunks: Buffer[] = [] let url: string let headers: Record = { 'User-Agent': @@ -108,12 +104,10 @@ export async function httpDownload(options: string | HttpDownloadOptions): Promi } } } - const fetchRes = await net.fetch(url, { headers }) + const fetchRes = await fetch(url, { headers }) if (!fetchRes.ok) throw new Error(`下载文件失败: ${fetchRes.statusText}`) - const blob = await fetchRes.blob() - let buffer = await blob.arrayBuffer() - return Buffer.from(buffer) + return Buffer.from(await fetchRes.arrayBuffer()) } type Uri2LocalRes = { @@ -152,7 +146,7 @@ export async function uri2local(uri: string, fileName: string = null): Promise|]/g, '_') res.fileName = fileName filePath = path.join(TEMP_DIR, randomUUID() + fileName) - fs.writeFileSync(filePath, buffer) + await fsPromise.writeFile(filePath, buffer) } catch (e: any) { res.errMsg = `${url}下载失败,` + e.toString() return res @@ -217,7 +211,7 @@ export async function uri2local(uri: string, fileName: string = null): Promise Date: Mon, 5 Aug 2024 00:23:41 +0800 Subject: [PATCH 12/12] Change description --- README.md | 4 ++-- scripts/gen-manifest.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d64dc4e..ca1690e 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # LLOneBot -LiteLoaderQQNT 插件,实现 OneBot 11 协议,帮助进行 QQ 机器人开发 +LiteLoaderQQNT 插件,实现 OneBot 11 协议,用以 QQ 机器人开发 > [!CAUTION]\ -> **请不要在 QQ 官方群聊和任何影响力较大的简中互联网平台(包括但不限于:B站,微博,知乎,抖音等)发布和讨论*任何*与本插件存在相关性的信息** +> **请不要在 QQ 官方群聊和任何影响力较大的简中互联网平台(包括但不限于: B站,微博,知乎,抖音等)发布和讨论*任何*与本插件存在相关性的信息** TG群: diff --git a/scripts/gen-manifest.ts b/scripts/gen-manifest.ts index 58f8674..a4b41a6 100644 --- a/scripts/gen-manifest.ts +++ b/scripts/gen-manifest.ts @@ -6,7 +6,7 @@ const manifest = { type: 'extension', name: 'LLOneBot', slug: 'LLOneBot', - description: '实现 OneBot 11 协议,帮助进行 QQ 机器人开发', + description: '实现 OneBot 11 协议,用以 QQ 机器人开发', version, icon: './icon.webp', authors: [