koishi-plugin-forward-hime 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cache.d.ts +17 -0
- package/lib/index.d.ts +5 -2
- package/lib/index.js +111 -12
- package/lib/message.d.ts +3 -0
- package/package.json +1 -2
package/lib/cache.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Context } from "koishi";
|
|
2
|
+
export interface MsgCache {
|
|
3
|
+
platform: string;
|
|
4
|
+
bot: string;
|
|
5
|
+
guild: string;
|
|
6
|
+
msgid: string;
|
|
7
|
+
uuid: string;
|
|
8
|
+
}
|
|
9
|
+
declare module "@koishijs/cache" {
|
|
10
|
+
interface Tables {
|
|
11
|
+
msgCache: MsgCache;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export declare function msgCache(ctx: Context, mc: MsgCache): Promise<void>;
|
|
15
|
+
export declare function msgCacheDelete(ctx: Context, key: string): Promise<void>;
|
|
16
|
+
export declare function msgCacheFindByKey(ctx: Context, key: string): Promise<MsgCache>;
|
|
17
|
+
export declare function msgCacheFindByUUID(ctx: Context, uuid: string): Promise<any[]>;
|
package/lib/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Context } from "koishi";
|
|
2
2
|
import { ConfigSet } from "./config";
|
|
3
|
-
export declare const reusable = true;
|
|
4
3
|
export declare const name = "forward hime - \u8F6C\u53D1\u59EC";
|
|
5
|
-
export declare const usage = "\n# forward hime - \u8F6C\u53D1\u59EC <sub>v1.2.
|
|
4
|
+
export declare const usage = "\n# forward hime - \u8F6C\u53D1\u59EC <sub>v1.2.1</sub>\n## \u914D\u7F6E\u8BF4\u660E\n1. \u6DFB\u52A0 `\u4E92\u901A\u8F6C\u53D1\u7EC4`\n2. \u4E3A\u6DFB\u52A0\u7684 `\u4E92\u901A\u8F6C\u53D1\u7EC4` \u914D\u7F6E\u8F6C\u53D1\u8282\u70B9\u3002\u6BCF\u4E2A\u8F6C\u53D1\u8282\u70B9\u5BF9\u5E94\u67D0\u4E2A\u5E73\u53F0\u7684\u4E00\u4E2A\u9891\u9053\u6216\u7FA4\u7EC4\n\n\u6CE8\u610F\uFF1A\u5F53\u672A\u914D\u7F6E`cache`\u65F6\uFF0C\u8DE8\u5E73\u53F0\u5220\u9664\u3001\u8DE8\u5E73\u53F0\u56DE\u590D\u7B49\u529F\u80FD\u5C06\u65E0\u6CD5\u6B63\u5E38\u5DE5\u4F5C\u3002\n## \u7279\u6027\n- \u53EF\u4EE5\u914D\u7F6E\u591A\u4E2A `\u4E92\u901A\u8F6C\u53D1\u7EC4`\uFF0C\u6BCF\u4E2A `\u4E92\u901A\u8F6C\u53D1\u7EC4` \u4E4B\u95F4\u76F8\u4E92\u72EC\u7ACB\n- \u542F\u7528\u63D2\u4EF6\u540E\uFF0C\u5F53\u4E00\u4E2A `\u4E92\u901A\u8F6C\u53D1\u7EC4` \u4E2D\u7684\u4EFB\u610F\u8282\u70B9\u6536\u5230\u6D88\u606F\u65F6\uFF0C\u63D2\u4EF6\u4F1A\u81EA\u52A8\u5C06\u6D88\u606F\u8F6C\u53D1\u7ED9**\u8FD9\u4E2A**`\u4E92\u901A\u8F6C\u53D1\u7EC4`\u4E2D\u7684\u5176\u4ED6\u8282\u70B9\u3002\n---";
|
|
5
|
+
export declare const reusable = true;
|
|
6
|
+
export declare const inject: {
|
|
7
|
+
optional: string[];
|
|
8
|
+
};
|
|
6
9
|
export declare const Config: import("schemastery")<ConfigSet>;
|
|
7
10
|
export declare function apply(ctx: Context, cfg: ConfigSet): void;
|
package/lib/index.js
CHANGED
|
@@ -22,6 +22,7 @@ var src_exports = {};
|
|
|
22
22
|
__export(src_exports, {
|
|
23
23
|
Config: () => Config,
|
|
24
24
|
apply: () => apply,
|
|
25
|
+
inject: () => inject,
|
|
25
26
|
name: () => name,
|
|
26
27
|
reusable: () => reusable,
|
|
27
28
|
usage: () => usage
|
|
@@ -156,35 +157,107 @@ function at2Name({ head, content }) {
|
|
|
156
157
|
}
|
|
157
158
|
__name(at2Name, "at2Name");
|
|
158
159
|
|
|
160
|
+
// src/cache.ts
|
|
161
|
+
function cacheNotEnabled(ctx) {
|
|
162
|
+
if (!ctx.cache) {
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
__name(cacheNotEnabled, "cacheNotEnabled");
|
|
168
|
+
async function msgCache(ctx, mc) {
|
|
169
|
+
if (cacheNotEnabled(ctx)) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const key = mc.guild + ":" + mc.msgid;
|
|
173
|
+
logger.debug("[message-cache]", key, mc);
|
|
174
|
+
await ctx.cache.set("msgCache", key, mc, 7200 * 1e3);
|
|
175
|
+
}
|
|
176
|
+
__name(msgCache, "msgCache");
|
|
177
|
+
async function msgCacheDelete(ctx, key) {
|
|
178
|
+
if (cacheNotEnabled(ctx)) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
await ctx.cache.delete("msgCache", key);
|
|
182
|
+
}
|
|
183
|
+
__name(msgCacheDelete, "msgCacheDelete");
|
|
184
|
+
async function msgCacheFindByKey(ctx, key) {
|
|
185
|
+
if (cacheNotEnabled(ctx)) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
return await ctx.cache.get("msgCache", key);
|
|
189
|
+
}
|
|
190
|
+
__name(msgCacheFindByKey, "msgCacheFindByKey");
|
|
191
|
+
async function msgCacheFindByUUID(ctx, uuid) {
|
|
192
|
+
if (cacheNotEnabled(ctx)) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
let caches = await ctx.cache.entries("msgCache");
|
|
196
|
+
let result = [];
|
|
197
|
+
for await (const item of caches) {
|
|
198
|
+
if (item[1].uuid === uuid) {
|
|
199
|
+
result.push(item);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
__name(msgCacheFindByUUID, "msgCacheFindByUUID");
|
|
205
|
+
|
|
159
206
|
// src/message.ts
|
|
160
207
|
async function MessageForward(ctx, node, session) {
|
|
161
208
|
try {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
209
|
+
botExistsCheck(ctx, node);
|
|
210
|
+
const uuid = session.channelId + ":" + session.messageId;
|
|
211
|
+
await ctx.bots[`${node.Platform}:${node.BotID}`].sendMessage(node.Guild, MsgDecorator(session, node)).then((res) => {
|
|
212
|
+
let mc = {
|
|
213
|
+
platform: node.Platform,
|
|
214
|
+
bot: node.BotID,
|
|
215
|
+
guild: node.Guild,
|
|
216
|
+
msgid: res[0],
|
|
217
|
+
uuid
|
|
218
|
+
};
|
|
219
|
+
msgCache(ctx, mc);
|
|
220
|
+
logger.debug("Forward", mc);
|
|
221
|
+
});
|
|
169
222
|
} catch (error) {
|
|
170
223
|
logger.error(`ERROR:<MessageSend> ${error}`);
|
|
171
224
|
}
|
|
172
225
|
}
|
|
173
226
|
__name(MessageForward, "MessageForward");
|
|
227
|
+
async function MessageDelete(ctx, msg) {
|
|
228
|
+
try {
|
|
229
|
+
botExistsCheck(ctx, { Platform: msg.platform, BotID: msg.bot, Guild: msg.guild });
|
|
230
|
+
await ctx.bots[`${msg.platform}:${msg.bot}`].deleteMessage(msg.guild, msg.msgid);
|
|
231
|
+
} catch (error) {
|
|
232
|
+
logger.error(`ERROR:<MessageDelete> ${error}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
__name(MessageDelete, "MessageDelete");
|
|
236
|
+
function botExistsCheck(ctx, node) {
|
|
237
|
+
if (ctx.bots[`${node.Platform}:${node.BotID}`] == void 0) {
|
|
238
|
+
throw new Error("Bot Not Found");
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
__name(botExistsCheck, "botExistsCheck");
|
|
174
242
|
|
|
175
243
|
// src/index.ts
|
|
176
|
-
var reusable = true;
|
|
177
244
|
var name = `forward hime - 转发姬`;
|
|
178
|
-
var version = `<sub>v1.2.
|
|
245
|
+
var version = `<sub>v1.2.1</sub>`;
|
|
179
246
|
var usage = `
|
|
180
247
|
# ${name} ${version}
|
|
181
248
|
## 配置说明
|
|
182
249
|
1. 添加 \`互通转发组\`
|
|
183
250
|
2. 为添加的 \`互通转发组\` 配置转发节点。每个转发节点对应某个平台的一个频道或群组
|
|
251
|
+
|
|
252
|
+
注意:当未配置\`cache\`时,跨平台删除、跨平台回复等功能将无法正常工作。
|
|
184
253
|
## 特性
|
|
185
254
|
- 可以配置多个 \`互通转发组\`,每个 \`互通转发组\` 之间相互独立
|
|
186
255
|
- 启用插件后,当一个 \`互通转发组\` 中的任意节点收到消息时,插件会自动将消息转发给**这个**\`互通转发组\`中的其他节点。
|
|
187
256
|
---`;
|
|
257
|
+
var reusable = true;
|
|
258
|
+
var inject = {
|
|
259
|
+
optional: ["cache"]
|
|
260
|
+
};
|
|
188
261
|
var Config = createConfig();
|
|
189
262
|
function apply(ctx, cfg) {
|
|
190
263
|
ctx.on("message-created", async (session) => {
|
|
@@ -195,9 +268,16 @@ function apply(ctx, cfg) {
|
|
|
195
268
|
if (group.Nodes[k].Guild === session.channelId && group.Nodes[k].Platform === session.platform && group.Nodes[k].BotID !== session.userId) {
|
|
196
269
|
logger.debug(
|
|
197
270
|
"[message-created]",
|
|
198
|
-
session.messageId
|
|
199
|
-
session.elements
|
|
271
|
+
session.channelId + ":" + session.messageId
|
|
200
272
|
);
|
|
273
|
+
let uuid = session.channelId + ":" + session.messageId;
|
|
274
|
+
msgCache(ctx, {
|
|
275
|
+
platform: session.platform,
|
|
276
|
+
bot: group.Nodes[k].BotID,
|
|
277
|
+
guild: session.channelId,
|
|
278
|
+
msgid: session.messageId,
|
|
279
|
+
uuid
|
|
280
|
+
});
|
|
201
281
|
hitGroup.push(g);
|
|
202
282
|
break;
|
|
203
283
|
}
|
|
@@ -213,7 +293,25 @@ function apply(ctx, cfg) {
|
|
|
213
293
|
}
|
|
214
294
|
});
|
|
215
295
|
ctx.on("message-deleted", async (session) => {
|
|
216
|
-
|
|
296
|
+
const cacheKey = session.channelId + ":" + session.messageId;
|
|
297
|
+
logger.debug("[message-deleted]", cacheKey);
|
|
298
|
+
msgCacheFindByKey(ctx, cacheKey).then((res) => {
|
|
299
|
+
if (res) {
|
|
300
|
+
logger.debug("[msgCacheFindByKey]", res);
|
|
301
|
+
msgCacheDelete(ctx, cacheKey);
|
|
302
|
+
const uuid = res.uuid;
|
|
303
|
+
msgCacheFindByUUID(ctx, uuid).then((res2) => {
|
|
304
|
+
if (res2) {
|
|
305
|
+
for (const k in res2) {
|
|
306
|
+
logger.debug("[message-delete]", res2[k][1]);
|
|
307
|
+
msgCacheDelete(ctx, res2[k][0]).then(() => {
|
|
308
|
+
MessageDelete(ctx, res2[k][1]);
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
});
|
|
217
315
|
});
|
|
218
316
|
ctx.on("message-updated", async (session) => {
|
|
219
317
|
logger.debug("[message-updated]", session.messageId, session);
|
|
@@ -224,6 +322,7 @@ __name(apply, "apply");
|
|
|
224
322
|
0 && (module.exports = {
|
|
225
323
|
Config,
|
|
226
324
|
apply,
|
|
325
|
+
inject,
|
|
227
326
|
name,
|
|
228
327
|
reusable,
|
|
229
328
|
usage
|
package/lib/message.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import { Context, Session } from "koishi";
|
|
2
2
|
import { ForwardNode } from "./config";
|
|
3
|
+
import { MsgCache } from "./cache";
|
|
3
4
|
export declare function MessageForward(ctx: Context, node: ForwardNode, session: Session): Promise<void>;
|
|
5
|
+
export declare function MessageDelete(ctx: Context, msg: MsgCache): Promise<void>;
|
|
6
|
+
export declare function MessageEdit(ctx: Context, node: ForwardNode, session: Session): Promise<void>;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "koishi-plugin-forward-hime",
|
|
3
3
|
"description": "多群组消息互通",
|
|
4
|
-
"version": "1.2.
|
|
4
|
+
"version": "1.2.1",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "xianii",
|
|
7
7
|
"email": "jiyucheng007@gmail.com"
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
"lib"
|
|
13
13
|
],
|
|
14
14
|
"koishi": {
|
|
15
|
-
"preview": true,
|
|
16
15
|
"browser": true
|
|
17
16
|
},
|
|
18
17
|
"license": "MIT",
|