From 76cf749182bbc3ac2059c62fa03dc83272a965b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8C=8C?= Date: Thu, 29 Jun 2023 20:25:21 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=86=E8=8A=82=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/default_config/bot.yaml | 2 +- lib/plugins/stdin.js | 35 +++++++++++++++++++++++++--------- package.json | 3 ++- plugins/adapter/ComWeChat.js | 1 + plugins/adapter/go-cqhttp.js | 11 ++++++++++- 5 files changed, 40 insertions(+), 12 deletions(-) diff --git a/config/default_config/bot.yaml b/config/default_config/bot.yaml index d82d861..b89d9d4 100644 --- a/config/default_config/bot.yaml +++ b/config/default_config/bot.yaml @@ -1,7 +1,7 @@ # 日志等级:trace,debug,info,warn,fatal,mark,error,off # mark时只显示执行命令,不显示聊天记录 log_level: info -# WebSocket 端口 +# HTTP 端口 port: 2536 # chromium其他路径 diff --git a/lib/plugins/stdin.js b/lib/plugins/stdin.js index afaf254..c8e0b2a 100644 --- a/lib/plugins/stdin.js +++ b/lib/plugins/stdin.js @@ -1,5 +1,7 @@ +import fetch from "node-fetch" import fs from "node:fs" import path from "node:path" +import { fileTypeFromBuffer } from "file-type" Bot.adapter.push(new class stdinAdapter { constructor() { @@ -18,6 +20,19 @@ Bot.adapter.push(new class stdinAdapter { return file } + async fileType(data) { + const file = {} + try { + file.url = data.replace(/^base64:\/\/.*/, "base64://...") + file.buffer = await this.makeBuffer(data) + file.type = await fileTypeFromBuffer(file.buffer) + file.path = `${Bot[this.id].data_dir}${Date.now()}.${file.type.ext}` + } catch (err) { + logger.error(`文件类型检测错误:${logger.red(err)}`) + } + return file + } + async sendMsg(msg) { if (!Array.isArray(msg)) msg = [msg] @@ -26,6 +41,11 @@ Bot.adapter.push(new class stdinAdapter { i = { type: "text", data: { text: i }} else if (!i.data) i = { type: i.type, data: { ...i, type: undefined }} + + let file + if (i.data.file) + file = await this.fileType(i.data.file) + switch (i.type) { case "text": if (i.data.text.match("\n")) @@ -33,19 +53,16 @@ Bot.adapter.push(new class stdinAdapter { logger.info(`${logger.blue(`[${this.id}]`)} 发送文本:${i.data.text}`) break case "image": - i.file = `${Bot[this.id].data_dir}${Date.now()}.png` - logger.info(`${logger.blue(`[${this.id}]`)} 发送图片:${i.data.file.replace(/^base64:\/\/.*/, "base64://...")}\n文件已保存到:${logger.cyan(i.file)}`) - fs.writeFileSync(i.file, await this.makeBuffer(i.data.file)) + logger.info(`${logger.blue(`[${this.id}]`)} 发送图片:${file.url}\n文件已保存到:${logger.cyan(file.path)}`) + fs.writeFileSync(file.path, file.buffer) break case "record": - i.file = `${Bot[this.id].data_dir}${Date.now()}.mp3` - logger.info(`${logger.blue(`[${this.id}]`)} 发送音频:${i.data.file.replace(/^base64:\/\/.*/, "base64://...")}\n文件已保存到:${logger.cyan(i.file)}`) - fs.writeFileSync(i.file, await this.makeBuffer(i.data.file)) + logger.info(`${logger.blue(`[${this.id}]`)} 发送音频:${file.url}\n文件已保存到:${logger.cyan(file.path)}`) + fs.writeFileSync(file.path, file.buffer) break case "video": - i.file = `${Bot[this.id].data_dir}${Date.now()}.mp4` - logger.info(`${logger.blue(`[${this.id}]`)} 发送视频:${i.data.file.replace(/^base64:\/\/.*/, "base64://...")}\n文件已保存到:${logger.cyan(i.file)}`) - fs.writeFileSync(i.file, await this.makeBuffer(i.data.file)) + logger.info(`${logger.blue(`[${this.id}]`)} 发送视频:${file.url}\n文件已保存到:${logger.cyan(file.path)}`) + fs.writeFileSync(file.path, file.buffer) break case "reply": break diff --git a/package.json b/package.json index baea256..56bef36 100644 --- a/package.json +++ b/package.json @@ -17,9 +17,10 @@ }, "dependencies": { "art-template": "^4.13.2", - "chalk": "^5.2.0", + "chalk": "^5.3.0", "chokidar": "^3.5.3", "express": "^4.18.2", + "file-type": "^18.5.0", "https-proxy-agent": "7.0.0", "image-size": "^1.0.2", "lodash": "^4.17.21", diff --git a/plugins/adapter/ComWeChat.js b/plugins/adapter/ComWeChat.js index 11454f9..756f74e 100644 --- a/plugins/adapter/ComWeChat.js +++ b/plugins/adapter/ComWeChat.js @@ -197,6 +197,7 @@ Bot.adapter.push(new class ComWeChatAdapter { } async sendFile(data, send, file, name = path.basename(file)) { + logger.info(`${logger.blue(`[${data.self_id}]`)} 发送文件:${name}(${file})`) return send(segment.custom("file", { file_id: (await this.uploadFile(data, file, name)).file_id })) diff --git a/plugins/adapter/go-cqhttp.js b/plugins/adapter/go-cqhttp.js index 5d72531..ed9f32b 100644 --- a/plugins/adapter/go-cqhttp.js +++ b/plugins/adapter/go-cqhttp.js @@ -291,6 +291,7 @@ Bot.adapter.push(new class gocqhttpAdapter { } setGroupName(data, group_name) { + logger.info(`${logger.blue(`[${data.self_id}]`)} 设置群名:[${data.group_id}] ${group_name}`) return data.sendApi("set_group_name", { group_id: data.group_id, group_name, @@ -298,13 +299,15 @@ Bot.adapter.push(new class gocqhttpAdapter { } setGroupAvatar(data, file) { + logger.info(`${logger.blue(`[${data.self_id}]`)} 设置群头像:[${data.group_id}] ${file}`) return data.sendApi("set_group_portrait", { group_id: data.group_id, - file: segment.image(file).data.file, + file: segment.image(file).file, }) } setGroupAdmin(data, user_id, enable) { + logger.info(`${logger.blue(`[${data.self_id}]`)} ${enable ? "设置" : "取消"}群管理员:[${data.group_id}] ${user_id}`) return data.sendApi("set_group_admin", { group_id: data.group_id, user_id, @@ -313,6 +316,7 @@ Bot.adapter.push(new class gocqhttpAdapter { } setGroupCard(data, user_id, card) { + logger.info(`${logger.blue(`[${data.self_id}]`)} 设置群名片:[${data.group_id}] ${user_id} ${card}`) return data.sendApi("set_group_card", { group_id: data.group_id, user_id, @@ -321,6 +325,7 @@ Bot.adapter.push(new class gocqhttpAdapter { } setGroupTitle(data, user_id, special_title, duration) { + logger.info(`${logger.blue(`[${data.self_id}]`)} 设置群头衔:[${data.group_id}] ${user_id} ${special_title} ${duration}`) return data.sendApi("set_group_special_title", { group_id: data.group_id, user_id, @@ -346,6 +351,7 @@ Bot.adapter.push(new class gocqhttpAdapter { } async sendFriendFile(data, file, name) { + logger.info(`${logger.blue(`[${data.self_id}]`)} 发送好友文件:[${data.user_id}] ${name}(${file})`) return data.sendApi("upload_private_file", { user_id: data.user_id, ...await this.makeFile(data, file, name), @@ -353,6 +359,7 @@ Bot.adapter.push(new class gocqhttpAdapter { } async sendGroupFile(data, file, folder, name) { + logger.info(`${logger.blue(`[${data.self_id}]`)} 发送群文件:[${data.group_id}] ${folder||""}/${name}(${file})`) return data.sendApi("upload_group_file", { group_id: data.group_id, folder, @@ -361,6 +368,7 @@ Bot.adapter.push(new class gocqhttpAdapter { } deleteGroupFile(data, file_id, busid) { + logger.info(`${logger.blue(`[${data.self_id}]`)} 删除群文件:[${data.group_id}] ${file_id}(${busid})`) return data.sendApi("delete_group_file", { group_id: data.group_id, file_id, @@ -369,6 +377,7 @@ Bot.adapter.push(new class gocqhttpAdapter { } createGroupFileFolder(data, name) { + logger.info(`${logger.blue(`[${data.self_id}]`)} 创建群文件夹:[${data.group_id}] ${name}`) return data.sendApi("create_group_file_folder", { group_id: data.group_id, name,