From 853442a5e8894d61fc832f40ec70a7de1f29db18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8C=8C?= Date: Sun, 18 Jun 2023 11:57:31 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=86=E8=8A=82=E4=BC=98=E5=8C=96=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E5=8F=91=E9=80=81=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/default_config/bot.yaml | 6 +- config/default_config/group.yaml | 8 +- config/default_config/redis.yaml | 8 +- config/default_config/renderer.yaml | 2 +- lib/adapter/WebSocket/ComWeChat.js | 117 ++++++++----- lib/adapter/WebSocket/go-cqhttp.js | 245 ++++++++++++++++++++-------- lib/adapter/stdin.js | 38 ++++- lib/bot.js | 5 + package.json | 6 +- plugins/other/update.js | 7 +- 10 files changed, 308 insertions(+), 134 deletions(-) diff --git a/config/default_config/bot.yaml b/config/default_config/bot.yaml index 72a0b2c..d82d861 100644 --- a/config/default_config/bot.yaml +++ b/config/default_config/bot.yaml @@ -5,12 +5,12 @@ log_level: info port: 2536 # chromium其他路径 -chromium_path: +chromium_path: # puppeteer接口地址 -puppeteer_ws: +puppeteer_ws: # 米游社接口代理地址,国际服用 -proxyAddress: +proxyAddress: # 上线时给主人推送帮助 online_msg: true diff --git a/config/default_config/group.yaml b/config/default_config/group.yaml index f68bd31..1cc00ab 100644 --- a/config/default_config/group.yaml +++ b/config/default_config/group.yaml @@ -6,8 +6,8 @@ default: onlyReplyAt: 0 # 是否只仅关注主动@机器人的消息, 0-否 1-是 botAlias: # 开启后则只回复@机器人的消息及特定前缀的消息,支持多个 - 云崽 - - 云宝 - + - 云宝 + imgAddLimit: 0 #添加表情是否限制 0-所有群员都可以添加 1-群管理员才能添加 2-主人才能添加 imgMaxSize: 2 #添加表情图片大小限制,默认2m addPrivate: 1 #是否允许私聊添加 1-允许 0-禁止 @@ -16,11 +16,11 @@ default: #禁用功能,功能名称,例如:十连、角色查询、体力查询、用户绑定、抽卡记录、添加表情、欢迎新人、退群通知 #禁用功能,功能名称,例如:云崽帮助、角色素材、今日素材、养成计算、米游社公告 - disable: + disable: - 禁用示例 - 支持多个 # 群单独设置,自动覆盖默认值 123456: groupCD: 500 # 群聊中所有指令操作冷却时间,单位毫秒,0则无限制 - singleCD: 2000 # 群聊中个人操作冷却时间,单位毫秒 + singleCD: 2000 # 群聊中个人操作冷却时间,单位毫秒 \ No newline at end of file diff --git a/config/default_config/redis.yaml b/config/default_config/redis.yaml index 8d12fc8..e9be883 100644 --- a/config/default_config/redis.yaml +++ b/config/default_config/redis.yaml @@ -4,7 +4,7 @@ host: 127.0.0.1 port: 6379 # redis用户名,可以为空 username: -# redis密码,没有密码可以为空 -password: -# redis数据库 -db: 0 +# redis密码,没有密码可以为空 +password: +# redis数据库 +db: 0 \ No newline at end of file diff --git a/config/default_config/renderer.yaml b/config/default_config/renderer.yaml index c544e1c..f44866b 100644 --- a/config/default_config/renderer.yaml +++ b/config/default_config/renderer.yaml @@ -1,2 +1,2 @@ # 渲染后端, 默认为 puppeteer -name: +name: \ No newline at end of file diff --git a/lib/adapter/WebSocket/ComWeChat.js b/lib/adapter/WebSocket/ComWeChat.js index 038a234..8313bd5 100644 --- a/lib/adapter/WebSocket/ComWeChat.js +++ b/lib/adapter/WebSocket/ComWeChat.js @@ -1,5 +1,7 @@ import { WebSocketServer } from "ws" import { randomUUID } from "crypto" +import path from "node:path" +import fs from "node:fs" export default class ComWeChatAdapter { toStr(data) { @@ -30,12 +32,24 @@ export default class ComWeChatAdapter { resolve({ ...data, ...data.data }))) } - uploadFile(data, file) { - return data.sendApi("upload_file", { - type: "data", - data: file.replace(/^base64:\/\//, ""), - name: randomUUID(), - }) + uploadFile(data, file, name) { + const opts = { name } + + if (file.match(/^https?:\/\//)) { + opts.type = "url" + opts.url = file + } else if (file.match(/^base64:\/\//)) { + opts.type = "data" + opts.data = file.replace(/^base64:\/\//, "") + } else if (fs.existsSync(file)) { + opts.type = "data", + opts.data = fs.readFileSync(file).toString("base64") + } else { + opts.type = "path" + opts.path = file + } + + return data.sendApi("upload_file", opts) } async makeMsg(data, msg) { @@ -48,7 +62,7 @@ export default class ComWeChatAdapter { else if (!i.data) i = { type: i.type, data: { ...i, type: undefined }} if (i.data.file) - i.data = { file_id: (await this.uploadFile(data, i.data.file)).file_id } + i.data = { file_id: (await this.uploadFile(data, i.data.file, randomUUID())).file_id } switch (i.type) { case "at": if (i.data.qq == "all") @@ -66,6 +80,9 @@ export default class ComWeChatAdapter { } async sendFriendMsg(data, msg) { + if (msg?.type == "node") + return this.sendForwardMsg(msg => this.sendFriendMsg(data, msg), msg.data) + logger.info(`${logger.blue(`[${data.self_id}]`)} 发送好友消息:[${data.user_id}] ${this.makeLog(msg)}`) return data.sendApi("send_message", { detail_type: "private", @@ -75,6 +92,9 @@ export default class ComWeChatAdapter { } async sendGroupMsg(data, msg) { + if (msg?.type == "node") + return this.sendForwardMsg(msg => this.sendGroupMsg(data, msg), msg.data) + logger.info(`${logger.blue(`[${data.self_id}]`)} 发送群消息:[${data.group_id}] ${this.makeLog(msg)}`) return data.sendApi("send_message", { detail_type: "group", @@ -83,7 +103,7 @@ export default class ComWeChatAdapter { }) } - async makeForwardMsg(send, msg) { + async sendForwardMsg(send, msg) { const messages = [] for (const i of msg) messages.push(await send(i.message)) @@ -178,6 +198,51 @@ export default class ComWeChatAdapter { }) } + async sendFile(data, send, file, name) { + return send(segment.custom("file", { + file_id: (await this.uploadFile(data, file, name || path.basename(file))).file_id + })) + } + + pickFriend(data, user_id) { + const i = { ...data, user_id } + return { + sendMsg: msg => this.sendFriendMsg(i, msg), + recallMsg: () => false, + makeForwardMsg: Bot.makeForwardMsg, + sendForwardMsg: msg => this.sendForwardMsg(msg => this.sendFriendMsg(i, msg), msg), + sendFile: (file, name) => this.sendFile(i, msg => this.sendFriendMsg(i, msg), file, name), + getInfo: () => this.getFriendInfo(i), + getAvatarUrl: async () => (await this.getFriendInfo(i))["wx.avatar"], + } + } + + pickMember(data, group_id, user_id) { + const i = { ...data, group_id, user_id } + return { + ...this.pickFriend(i, user_id), + getInfo: () => this.getGroupMemberInfo(i), + getAvatarUrl: async () => (await this.getGroupMemberInfo(i))["wx.avatar"], + } + } + + pickGroup(data, group_id) { + const i = { ...data, group_id } + return { + sendMsg: msg => this.sendGroupMsg(i, msg), + recallMsg: () => false, + makeForwardMsg: Bot.makeForwardMsg, + sendForwardMsg: msg => this.sendForwardMsg(msg => this.sendGroupMsg(i, msg), msg), + sendFile: (file, name) => this.sendFile(i, msg => this.sendGroupMsg(i, msg), file, name), + getInfo: () => this.getGroupInfo(i), + getAvatarUrl: async () => (await this.getGroupInfo(i))["wx.avatar"], + getMemberArray: () => this.getGroupMemberArray(i), + getMemberList: () => this.getGroupMemberList(i), + getMemberMap: () => this.getGroupMemberMap(i), + pickMember: user_id => this.pickMember(i, i.group_id, user_id), + } + } + async connect(data) { const status = await data.sendApi("get_status", {}) for (const bot of status.bots) @@ -188,44 +253,14 @@ export default class ComWeChatAdapter { version: data.version, stat: { start_time: data.time }, - pickFriend: user_id => { - const i = { ...data, user_id } - return { - sendMsg: msg => this.sendFriendMsg(i, msg), - recallMsg: () => false, - makeForwardMsg: msg => this.makeForwardMsg(msg => this.sendFriendMsg(i, msg), msg), - getInfo: () => this.getFriendInfo(i), - getAvatarUrl: async () => (await this.getFriendInfo(i))["wx.avatar"], - } - }, + pickFriend: user_id => this.pickFriend(data, user_id), getFriendArray: () => this.getFriendArray(data), getFriendList: () => this.getFriendList(data), getFriendMap: () => this.getFriendMap(data), - pickMember: (group_id, user_id) => { - const i = { ...data, group_id, user_id } - return { - ...Bot[data.self_id].pickFriend(user_id), - getInfo: () => this.getGroupMemberInfo(i), - getAvatarUrl: async () => (await this.getGroupMemberInfo(i))["wx.avatar"], - } - }, - - pickGroup: group_id => { - const i = { ...data, group_id } - return { - sendMsg: msg => this.sendGroupMsg(i, msg), - recallMsg: () => false, - makeForwardMsg: msg => this.makeForwardMsg(msg => this.sendGroupMsg(i, msg), msg), - getInfo: () => this.getGroupInfo(i), - getAvatarUrl: async () => (await this.getGroupInfo(i))["wx.avatar"], - getMemberArray: () => this.getGroupMemberArray(i), - getMemberList: () => this.getGroupMemberList(i), - getMemberMap: () => this.getGroupMemberMap(i), - pickMember: user_id => Bot[data.self_id].pickMember(i.group_id, user_id), - } - }, + pickMember: (group_id, user_id) => this.pickMember(data, group_id, user_id), + pickGroup: group_id => this.pickGroup(data, group_id), getGroupArray: () => this.getGroupArray(data), getGroupList: () => this.getGroupList(data), diff --git a/lib/adapter/WebSocket/go-cqhttp.js b/lib/adapter/WebSocket/go-cqhttp.js index 58f0cc9..2ccfe00 100644 --- a/lib/adapter/WebSocket/go-cqhttp.js +++ b/lib/adapter/WebSocket/go-cqhttp.js @@ -1,5 +1,6 @@ import { WebSocketServer } from "ws" import { randomUUID } from "crypto" +import path from "node:path" export default class gocqhttpAdapter { toStr(data) { @@ -47,6 +48,9 @@ export default class gocqhttpAdapter { } sendFriendMsg(data, msg) { + if (msg?.type == "node") + return this.sendFriendForwardMsg(data, msg.data) + logger.info(`${logger.blue(`[${data.self_id}]`)} 发送好友消息:[${data.user_id}] ${this.makeLog(msg)}`) return data.sendApi("send_msg", { user_id: data.user_id, @@ -55,6 +59,9 @@ export default class gocqhttpAdapter { } sendGroupMsg(data, msg) { + if (msg?.type == "node") + return this.sendGroupForwardMsg(data, msg.data) + logger.info(`${logger.blue(`[${data.self_id}]`)} 发送群消息:[${data.group_id}] ${this.makeLog(msg)}`) return data.sendApi("send_msg", { group_id: data.group_id, @@ -63,6 +70,9 @@ export default class gocqhttpAdapter { } sendGuildMsg(data, msg) { + if (msg?.type == "node") + return this.sendGuildForwardMsg(data, msg.data) + logger.info(`${logger.blue(`[${data.self_id}]`)} 发送频道消息:[${data.guild_id}-${data.channel_id}] ${this.makeLog(msg)}`) return data.sendApi("send_guild_channel_msg", { guild_id: data.guild_id, @@ -99,7 +109,7 @@ export default class gocqhttpAdapter { return messages } - async makeFriendForwardMsg(data, msg) { + async sendFriendForwardMsg(data, msg) { logger.info(`${logger.blue(`[${data.self_id}]`)} 发送好友转发消息:[${data.user_id}] ${this.makeLog(msg)}`) msg = await data.sendApi("send_private_forward_msg", { user_id: data.user_id, @@ -109,7 +119,7 @@ export default class gocqhttpAdapter { return msg } - async makeGroupForwardMsg(data, msg) { + async sendGroupForwardMsg(data, msg) { logger.info(`${logger.blue(`[${data.self_id}]`)} 发送群转发消息:[${data.group_id}] ${this.makeLog(msg)}`) msg = await data.sendApi("send_group_forward_msg", { group_id: data.group_id, @@ -119,7 +129,7 @@ export default class gocqhttpAdapter { return msg } - async makeGuildForwardMsg(data, msg) { + async sendGuildForwardMsg(data, msg) { const messages = [] for (const i of msg) messages.push(await this.sendGuildMsg(data, i.message)) @@ -317,6 +327,165 @@ export default class gocqhttpAdapter { }) } + downloadFile(data, url, thread_count, headers) { + return data.sendApi("download_file", { + url, + thread_count, + headers, + }) + } + + async makeFile(data, file, name) { + if (!name) + name = path.basename(file) + if (file.match(/^https?:\/\//)) + file = (await this.downloadFile(data, file)).file + else if (fs.existsSync(file)) + file = path.resolve(file) + return { file, name } + } + + async sendFriendFile(data, file, name) { + return data.sendApi("upload_private_file", { + user_id: data.user_id, + ...await this.makeFile(data, file, name), + }) + } + + async sendGroupFile(data, file, folder, name) { + return data.sendApi("upload_group_file", { + group_id: data.group_id, + folder, + ...await this.makeFile(data, file, name), + }) + } + + deleteGroupFile(data, file_id, busid) { + return data.sendApi("delete_group_file", { + group_id: data.group_id, + file_id, + busid, + }) + } + + createGroupFileFolder(data, name) { + return data.sendApi("create_group_file_folder", { + group_id: data.group_id, + name, + }) + } + + getGroupFileSystemInfo(data) { + return data.sendApi("get_group_file_system_info", { + group_id: data.group_id, + }) + } + + getGroupFiles(data, folder_id) { + if (folder_id) + return data.sendApi("get_group_files_by_folder", { + group_id: data.group_id, + folder_id, + }) + return data.sendApi("get_group_root_files", { + group_id: data.group_id, + }) + } + + getGroupFileUrl(data, file_id, busid) { + return data.sendApi("get_group_file_url", { + group_id: data.group_id, + file_id, + busid, + }) + } + + getGroupFs(data) { + return { + upload: (file, folder, name) => this.sendGroupFile(data, file, folder, name), + rm: (file_id, busid) => this.deleteGroupFile(data, file_id, busid), + mkdir: name => this.createGroupFileFolder(data, name), + df: () => this.getGroupFileSystemInfo(data), + ls: folder_id => this.getGroupFiles(data, folder_id), + download: (file_id, busid) => this.getGroupFileUrl(data, file_id, busid), + } + } + + pickFriend(data, user_id) { + const i = { ...data, user_id } + return { + sendMsg: msg => this.sendFriendMsg(i, msg), + recallMsg: message_id => this.recallMsg(i, message_id), + makeForwardMsg: Bot.makeForwardMsg, + sendForwardMsg: msg => this.sendFriendForwardMsg(i, msg), + sendFile: (file, name) => this.sendFriendFile(i, file, name), + getInfo: () => this.getFriendInfo(i), + getAvatarUrl: () => `https://q1.qlogo.cn/g?b=qq&s=0&nk=${i.user_id}`, + } + } + + pickMember(data, group_id, user_id) { + if (typeof group_id == "string" && group_id.match("-")) { + group_id = group_id.split("-") + const i = { ...data, guild_id: group_id[0], channel_id: group_id[1], user_id } + return { + ...this.pickGroup(i, `${i.guild_id}-${i.channel_id}`), + getInfo: () => this.getGuildMemberInfo(i), + getAvatarUrl: async () => (await this.getGuildMemberInfo(i)).avatar_url, + } + } else { + const i = { ...data, group_id, user_id } + return { + ...this.pickFriend(i, i.user_id), + getInfo: () => this.getGroupMemberInfo(i), + poke: () => this.sendGroupMsg(i, segment.poke(i.user_id)), + } + } + } + + pickGroup(data, group_id) { + if (typeof group_id == "string" && group_id.match("-")) { + group_id = group_id.split("-") + const i = { ...data, guild_id: group_id[0], channel_id: group_id[1] } + return { + sendMsg: msg => this.sendGuildMsg(i, msg), + recallMsg: message_id => this.recallMsg(i, message_id), + makeForwardMsg: Bot.makeForwardMsg, + sendForwardMsg: msg => this.sendGuildForwardMsg(i, msg), + getInfo: () => this.getGuildInfo(i), + getChannelArray: () => this.getGuildChannelArray(i), + getChannelList: () => this.getGuildChannelList(i), + getChannelMap: () => this.getGuildChannelMap(i), + getMemberArray: () => this.getGuildMemberArray(i), + getMemberList: () => this.getGuildMemberList(i), + getMemberMap: () => this.getGuildMemberMap(i), + pickMember: user_id => this.pickMember(i, `${i.guild_id}-${i.channel_id}`, user_id), + } + } + + const i = { ...data, group_id } + return { + sendMsg: msg => this.sendGroupMsg(i, msg), + recallMsg: message_id => this.recallMsg(i, message_id), + makeForwardMsg: Bot.makeForwardMsg, + sendForwardMsg: msg => this.sendGroupForwardMsg(i, msg), + sendFile: (file, name) => this.sendGroupFile(data, file, undefined, name), + getInfo: () => this.getGroupInfo(i), + getAvatarUrl: () => `https://p.qlogo.cn/gh/${i.group_id}/${i.group_id}/0`, + getMemberArray: () => this.getGroupMemberArray(i), + getMemberList: () => this.getGroupMemberList(i), + getMemberMap: () => this.getGroupMemberMap(i), + pickMember: user_id => this.pickMember(i, i.group_id, user_id), + pokeMember: user_id => this.sendGroupMsg(i, segment.poke(user_id)), + setName: group_name => this.setGroupName(i, group_name), + setAvatar: file => this.setGroupAvatar(i, file), + setAdmin: (user_id, enable) => this.setGroupAdmin(i, user_id, enable), + setCard: (user_id, card) => this.setGroupCard(i, user_id, card), + setTitle: (user_id, special_title, duration) => this.setGroupTitle(i, user_id, special_title, duration), + fs: this.getGroupFs(i), + } + } + async connect(data) { Bot[data.self_id] = { sendApi: data.sendApi, @@ -326,78 +495,14 @@ export default class gocqhttpAdapter { recallMsg: message_id => this.recallMsg(data, message_id), getForwardMsg: message_id => this.getForwardMsg(data, message_id), - pickFriend: user_id => { - const i = { ...data, user_id } - return { - sendMsg: msg => this.sendFriendMsg(i, msg), - recallMsg: message_id => this.recallMsg(i, message_id), - makeForwardMsg: msg => this.makeFriendForwardMsg(i, msg), - getInfo: () => this.getFriendInfo(i), - getAvatarUrl: () => `https://q1.qlogo.cn/g?b=qq&s=0&nk=${i.user_id}`, - } - }, + pickFriend: user_id => this.pickFriend(data, user_id), getFriendArray: () => this.getFriendArray(data), getFriendList: () => this.getFriendList(data), getFriendMap: () => this.getFriendMap(data), - pickMember: (group_id, user_id) => { - if (typeof group_id == "string" && group_id.match("-")) { - group_id = group_id.split("-") - const i = { ...data, guild_id: group_id[0], channel_id: group_id[1], user_id } - return { - ...Bot[data.self_id].pickGroup(`${i.guild_id}-${i.channel_id}`), - getInfo: () => this.getGuildMemberInfo(i), - getAvatarUrl: async () => (await this.getGuildMemberInfo(i)).avatar_url, - } - } else { - const i = { ...data, group_id, user_id } - return { - ...Bot[data.self_id].pickFriend(i.user_id), - getInfo: () => this.getGroupMemberInfo(i), - poke: () => this.sendGroupMsg(i, segment.poke(i.user_id)), - } - } - }, - - pickGroup: group_id => { - if (typeof group_id == "string" && group_id.match("-")) { - group_id = group_id.split("-") - const i = { ...data, guild_id: group_id[0], channel_id: group_id[1] } - return { - sendMsg: msg => this.sendGuildMsg(i, msg), - recallMsg: message_id => this.recallMsg(i, message_id), - makeForwardMsg: msg => this.makeGuildForwardMsg(i, msg), - getInfo: () => this.getGuildInfo(i), - getChannelArray: () => this.getGuildChannelArray(i), - getChannelList: () => this.getGuildChannelList(i), - getChannelMap: () => this.getGuildChannelMap(i), - getMemberArray: () => this.getGuildMemberArray(i), - getMemberList: () => this.getGuildMemberList(i), - getMemberMap: () => this.getGuildMemberMap(i), - pickMember: user_id => Bot[data.self_id].pickMember(`${i.guild_id}-${i.channel_id}`, user_id), - } - } - - const i = { ...data, group_id } - return { - sendMsg: msg => this.sendGroupMsg(i, msg), - recallMsg: message_id => this.recallMsg(i, message_id), - makeForwardMsg: msg => this.makeGroupForwardMsg(i, msg), - getInfo: () => this.getGroupInfo(i), - getAvatarUrl: () => `https://p.qlogo.cn/gh/${i.group_id}/${i.group_id}/0`, - getMemberArray: () => this.getGroupMemberArray(i), - getMemberList: () => this.getGroupMemberList(i), - getMemberMap: () => this.getGroupMemberMap(i), - pickMember: user_id => Bot[data.self_id].pickMember(i.group_id, user_id), - pokeMember: user_id => this.sendGroupMsg(i, segment.poke(user_id)), - setName: group_name => this.setGroupName(i, group_name), - setAvatar: file => this.setGroupAvatar(i, file), - setAdmin: (user_id, enable) => this.setGroupAdmin(i, user_id, enable), - setCard: (user_id, card) => this.setGroupCard(i, user_id, card), - setTitle: (user_id, special_title, duration) => this.setGroupTitle(i, user_id, special_title, duration), - } - }, + pickMember: (group_id, user_id) => this.pickMember(data, group_id, user_id), + pickGroup: group_id => this.pickGroup(data, group_id), getGroupArray: () => this.getGroupArray(data), getGroupList: () => this.getGroupList(data), diff --git a/lib/adapter/stdin.js b/lib/adapter/stdin.js index 168f0ba..dce9aae 100644 --- a/lib/adapter/stdin.js +++ b/lib/adapter/stdin.js @@ -1,4 +1,5 @@ import fs from "node:fs" +import path from "node:path" export default class stdinAdapter { async makeBuffer(file) { @@ -43,6 +44,9 @@ export default class stdinAdapter { break case "at": break + case "node": + this.sendForwardMsg(i.data) + break default: i = JSON.stringify(i) if (i.match("\n")) @@ -57,7 +61,7 @@ export default class stdinAdapter { logger.info(`${logger.blue(`[stdin]`)} 撤回消息:${message_id}`) } - makeForwardMsg(msg) { + sendForwardMsg(msg) { const messages = [] for (const i of msg) messages.push(this.sendMsg(i.message)) @@ -65,6 +69,32 @@ export default class stdinAdapter { return messages } + async sendFile(file, name) { + let buffer + if (Buffer.isBuffer(file)) { + buffer = file + } else if (file.match(/^https?:\/\//)) { + buffer = Buffer.from(await (await fetch(file)).arrayBuffer()) + } else if (!fs.existsSync(file)) { + logger.error(`${logger.blue(`[stdin]`)} 发送文件错误:找不到文件 ${logger.red(file)}`) + return false + } + + const files = `${process.cwd()}/data/${Date.now()}-${name || path.basename(file)}` + logger.info(`${logger.blue(`[stdin]`)} 发送文件:${file}\n文件已保存到:${logger.cyan(files)}`) + return fs.copyFileSync(buffer || file, files) + } + + pickFriend() { + return { + sendMsg: msg => this.sendMsg(msg), + recallMsg: message_id => this.recallMsg(message_id), + makeForwardMsg: Bot.makeForwardMsg, + sendForwardMsg: msg => this.sendForwardMsg(msg), + sendFile: (file, name) => this.sendFile(file, name), + } + } + message(msg) { const data = { bot: Bot.stdin, @@ -89,11 +119,7 @@ export default class stdinAdapter { nickname: "标准输入", stat: { start_time: Date.now()/1000 }, version: { impl: "stdin" }, - pickFriend: () => ({ - sendMsg: msg => this.sendMsg(msg), - recallMsg: message_id => this.recallMsg(message_id), - makeForwardMsg: msg => this.makeForwardMsg(msg), - }), + pickFriend: () => this.pickFriend(), fl: new Map().set("stdin", {}), } Bot.stdin.pickUser = Bot.stdin.pickFriend diff --git a/lib/bot.js b/lib/bot.js index 599c158..c73f351 100644 --- a/lib/bot.js +++ b/lib/bot.js @@ -150,4 +150,9 @@ export default class Yunzai extends EventEmitter { if (msg) return msg } } + + makeForwardMsg(msg) { + msg.replace = () => msg + return { type: "node", data: msg } + } } \ No newline at end of file diff --git a/package.json b/package.json index 617f0f0..6e0accf 100644 --- a/package.json +++ b/package.json @@ -30,15 +30,15 @@ "node-schedule": "^2.1.1", "node-xlsx": "^0.23.0", "pm2": "^5.3.0", - "puppeteer": "^20.5.0", + "puppeteer": "^20.7.2", "redis": "^4.6.7", - "sequelize": "^6.31.1", + "sequelize": "^6.32.1", "sqlite3": "^5.1.6", "ws": "^8.13.0", "yaml": "^2.3.1" }, "devDependencies": { - "eslint": "^8.41.0", + "eslint": "^8.43.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.27.5", "eslint-plugin-n": "^16.0.0", diff --git a/plugins/other/update.js b/plugins/other/update.js index 1105b7c..561e6a7 100644 --- a/plugins/other/update.js +++ b/plugins/other/update.js @@ -104,11 +104,14 @@ export class update extends plugin { let type = '更新' if (this.e.msg.includes('强制')) { type = '强制更新' - cm = `git fetch --all && git reset --hard && ${cm}` + cm = `git reset --hard && git pull --rebase --allow-unrelated-histories` } if (plugin) { - cm = `git -C ./plugins/${plugin}/ pull --no-rebase` + if (type == '强制更新') + cm = `git -C 'plugins/${plugin}' reset --hard && git -C 'plugins/${plugin}' pull --rebase --allow-unrelated-histories` + else + cm = `git -C 'plugins/${plugin}' pull --no-rebase` } this.oldCommitId = await this.getcommitId(plugin)