koishi-plugin-recorder
Advanced tools
Comparing version 1.0.0-alpha.10 to 2.0.0-alpha.0
@@ -1,16 +0,11 @@ | ||
/// <reference types="node" /> | ||
import { Context, Meta } from 'koishi-core'; | ||
import { WriteStream } from 'fs'; | ||
import { Meta, Context } from 'koishi-core'; | ||
declare module 'koishi-core/dist/context' { | ||
interface EventMap { | ||
'record-opened'(stream: WriteStream, path: string): any; | ||
'record-closing'(stream: WriteStream, path: string): any; | ||
'record-writing'(chunk: string, meta: Meta): any; | ||
'record-written'(chunk: string, meta: Meta): any; | ||
'before-record'(meta: Meta<'message' | 'send'>): any; | ||
} | ||
} | ||
export interface RecorderOptions { | ||
transform?(meta: Meta): string; | ||
target?(meta: Meta): string | void; | ||
folder?: string; | ||
} | ||
export declare const name = "recorder"; | ||
export declare function apply(ctx: Context, options?: RecorderOptions): void; |
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const koishi_core_1 = require("koishi-core"); | ||
const fs_1 = require("fs"); | ||
@@ -9,45 +8,25 @@ const path_1 = require("path"); | ||
} | ||
const refs = new WeakSet(); | ||
const defaultOptions = { | ||
target(meta) { | ||
if (refs.has(meta) || meta.$ctxType !== 'group') | ||
return; | ||
return `messages/${meta.groupId}.txt`; | ||
}, | ||
transform(meta) { | ||
refs.add(meta); | ||
return JSON.stringify(pick(meta, ['$ctxType', '$ctxId', 'userId', 'message'])); | ||
}, | ||
}; | ||
const streams = {}; | ||
const cwd = process.cwd(); | ||
exports.name = 'recorder'; | ||
function apply(ctx, options = {}) { | ||
options = { ...defaultOptions, ...options }; | ||
function handleMessage(meta) { | ||
const target = options.target(meta); | ||
if (!target) | ||
async function handleMessage(meta) { | ||
if (meta.$ctxType !== 'group' || meta.postType === 'message' && meta.$group.assignee !== ctx.app.selfId) | ||
return; | ||
const output = options.transform(meta) + '\n'; | ||
const path = path_1.resolve(process.cwd(), target); | ||
if (await ctx.serialize('before-record', meta)) | ||
return; | ||
const output = JSON.stringify(pick(meta, ['time', 'userId', 'message'])) + '\n'; | ||
const path = path_1.resolve(cwd, options.folder || 'messages', `${meta.groupId}.txt`); | ||
if (!streams[path]) { | ||
const folder = path_1.dirname(path); | ||
if (!fs_1.existsSync(folder)) | ||
if (!fs_1.existsSync(folder)) { | ||
fs_1.mkdirSync(folder, { recursive: true }); | ||
} | ||
streams[path] = fs_1.createWriteStream(path, { flags: 'a' }); | ||
streams[path].on('close', () => delete streams[path]); | ||
ctx.app.receiver.emit('record-opened', streams[path], path); | ||
} | ||
ctx.app.receiver.emit('record-writing', output, meta); | ||
streams[path].write(output, () => { | ||
ctx.app.receiver.emit('record-written', output, meta); | ||
}); | ||
streams[path].write(output); | ||
} | ||
koishi_core_1.onStop(() => { | ||
for (const key in streams) { | ||
ctx.app.receiver.emit('record-closing', streams[key], key); | ||
streams[key].close(); | ||
} | ||
}); | ||
ctx.receiver.on('message', handleMessage); | ||
ctx.receiver.on('before-send', handleMessage); | ||
ctx.on('attach-group', handleMessage); | ||
ctx.on('before-send', handleMessage); | ||
} | ||
exports.apply = apply; |
{ | ||
"name": "koishi-plugin-recorder", | ||
"description": "Save Chat Records for Koishi", | ||
"version": "1.0.0-alpha.10", | ||
"version": "2.0.0-alpha.0", | ||
"main": "dist/index.js", | ||
"typings": "dist/index.d.ts", | ||
"files": [ | ||
"dist" | ||
], | ||
"author": "Shigma <1700011071@pku.edu.cn>", | ||
@@ -11,3 +14,4 @@ "license": "MIT", | ||
"build": "tsc -b", | ||
"lint": "eslint src --ext .ts" | ||
"lint": "eslint src --ext .ts", | ||
"prepack": "tsc -b" | ||
}, | ||
@@ -35,8 +39,8 @@ "repository": { | ||
"del": "^5.1.0", | ||
"koishi-test-utils": "^3.2.1" | ||
"koishi-test-utils": "^4.0.0-alpha.0" | ||
}, | ||
"dependencies": { | ||
"koishi-core": "^1.11.1", | ||
"koishi-core": "^2.0.0-alpha.0", | ||
"koishi-utils": "^1.0.4" | ||
} | ||
} |
# [koishi-plugin-recorder](https://koishi.js.org/plugins/recorder.html) | ||
[](https://www.npmjs.com/package/koishi-plugin-recorder) |
2838
4
42
+ Added@hapi/bourne@3.0.0(transitive)
+ Added@types/accepts@1.3.7(transitive)
+ Added@types/body-parser@1.19.5(transitive)
+ Added@types/connect@3.4.38(transitive)
+ Added@types/content-disposition@0.5.8(transitive)
+ Added@types/cookies@0.9.0(transitive)
+ Added@types/express@5.0.0(transitive)
+ Added@types/express-serve-static-core@5.0.6(transitive)
+ Added@types/http-assert@1.5.6(transitive)
+ Added@types/http-errors@2.0.4(transitive)
+ Added@types/keygrip@1.0.6(transitive)
+ Added@types/koa@2.15.0(transitive)
+ Added@types/koa-bodyparser@4.3.12(transitive)
+ Added@types/koa-compose@3.2.8(transitive)
+ Added@types/koa-router@7.4.8(transitive)
+ Added@types/mime@1.3.5(transitive)
+ Added@types/node@22.13.8(transitive)
+ Added@types/qs@6.9.18(transitive)
+ Added@types/range-parser@1.2.7(transitive)
+ Added@types/send@0.17.4(transitive)
+ Added@types/serve-static@1.15.7(transitive)
+ Addedaccepts@1.3.8(transitive)
+ Addedbytes@3.1.2(transitive)
+ Addedcache-content-type@1.0.1(transitive)
+ Addedcall-bind-apply-helpers@1.0.2(transitive)
+ Addedcall-bound@1.0.3(transitive)
+ Addedco@4.6.0(transitive)
+ Addedco-body@6.2.0(transitive)
+ Addedcontent-disposition@0.5.4(transitive)
+ Addedcontent-type@1.0.5(transitive)
+ Addedcookies@0.9.1(transitive)
+ Addedcopy-to@2.0.1(transitive)
+ Addeddeep-equal@1.0.1(transitive)
+ Addeddelegates@1.0.0(transitive)
+ Addeddepd@1.1.22.0.0(transitive)
+ Addeddestroy@1.2.0(transitive)
+ Addeddunder-proto@1.0.1(transitive)
+ Addedee-first@1.1.1(transitive)
+ Addedencodeurl@1.0.2(transitive)
+ Addedes-define-property@1.0.1(transitive)
+ Addedes-errors@1.3.0(transitive)
+ Addedes-object-atoms@1.1.1(transitive)
+ Addedescape-html@1.0.3(transitive)
+ Addedfastest-levenshtein@1.0.16(transitive)
+ Addedfresh@0.5.2(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedget-intrinsic@1.3.0(transitive)
+ Addedget-proto@1.0.1(transitive)
+ Addedgopd@1.2.0(transitive)
+ Addedhas-flag@4.0.0(transitive)
+ Addedhas-symbols@1.1.0(transitive)
+ Addedhas-tostringtag@1.0.2(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addedhttp-assert@1.5.0(transitive)
+ Addedhttp-errors@1.8.12.0.0(transitive)
+ Addediconv-lite@0.4.24(transitive)
+ Addedinflation@2.1.0(transitive)
+ Addedinherits@2.0.4(transitive)
+ Addedis-generator-function@1.1.0(transitive)
+ Addedis-regex@1.2.1(transitive)
+ Addedkeygrip@1.1.0(transitive)
+ Addedkoa@2.16.0(transitive)
+ Addedkoa-bodyparser@4.4.1(transitive)
+ Addedkoa-compose@4.2.0(transitive)
+ Addedkoa-convert@2.0.0(transitive)
+ Addedkoa-router@10.1.1(transitive)
+ Addedkoishi-core@2.5.2(transitive)
+ Addedkoishi-utils@3.2.6(transitive)
+ Addedlru-cache@6.0.0(transitive)
+ Addedmath-intrinsics@1.1.0(transitive)
+ Addedmedia-typer@0.3.0(transitive)
+ Addedmethods@1.1.2(transitive)
+ Addedmime-db@1.52.0(transitive)
+ Addedmime-types@2.1.35(transitive)
+ Addednegotiator@0.6.3(transitive)
+ Addedobject-inspect@1.13.4(transitive)
+ Addedon-finished@2.4.1(transitive)
+ Addedonly@0.0.2(transitive)
+ Addedparseurl@1.3.3(transitive)
+ Addedpath-to-regexp@6.3.0(transitive)
+ Addedqs@6.14.0(transitive)
+ Addedraw-body@2.5.2(transitive)
+ Addedsafe-buffer@5.2.1(transitive)
+ Addedsafe-regex-test@1.1.0(transitive)
+ Addedsafer-buffer@2.1.2(transitive)
+ Addedsetprototypeof@1.2.0(transitive)
+ Addedside-channel@1.1.0(transitive)
+ Addedside-channel-list@1.0.0(transitive)
+ Addedside-channel-map@1.0.1(transitive)
+ Addedside-channel-weakmap@1.0.2(transitive)
+ Addedstatuses@1.5.02.0.1(transitive)
+ Addedsupports-color@8.1.1(transitive)
+ Addedtoidentifier@1.0.1(transitive)
+ Addedtsscmp@1.0.6(transitive)
+ Addedtype-is@1.6.18(transitive)
+ Addedundici-types@6.20.0(transitive)
+ Addedunpipe@1.0.0(transitive)
+ Addedvary@1.1.2(transitive)
+ Addedyallist@4.0.0(transitive)
+ Addedylru@1.4.0(transitive)
- Removedaxios@0.19.2(transitive)
- Removedescape-string-regexp@3.0.0(transitive)
- Removedfollow-redirects@1.5.10(transitive)
- Removedkoishi-core@1.12.0(transitive)
- Removedleven@3.1.0(transitive)
- Removedws@7.5.10(transitive)
Updatedkoishi-core@^2.0.0-alpha.0