Commit eba8d3b3 authored by nanahira's avatar nanahira

improve

parent 33f56956
{ {
"name": "koishi-plugin-hisoutensoku-jammer", "name": "koishi-plugin-hisoutensoku-jammer",
"version": "1.1.9", "version": "1.1.10",
"description": "A Koishi Plugin jamming hisoutensoku plays in group.", "description": "A Koishi Plugin jamming hisoutensoku plays in group.",
"main": "dist/index.js", "main": "dist/index.js",
"dependencies": { "dependencies": {
......
import type { Context } from "koishi-core"; import type { Context } from "koishi-core";
import _ from "lodash"; import _, { last } from "lodash";
import "source-map-support/register"; import "source-map-support/register";
import type { Logger } from "koishi-utils"; import type { Logger } from "koishi-utils";
...@@ -56,6 +56,7 @@ const chineseCharacterList = [ ...@@ -56,6 +56,7 @@ const chineseCharacterList = [
class HisoutensokuJammer { class HisoutensokuJammer {
log: Logger; log: Logger;
targetCtx: Context; targetCtx: Context;
lastMessageMap = new Map<string, string>();
constructor(private ctx: Context, private config: HisoutensokuJammerConfig) { constructor(private ctx: Context, private config: HisoutensokuJammerConfig) {
this.targetCtx = config.target(ctx); this.targetCtx = config.target(ctx);
this.log = ctx.logger("hisoutensoku-jammer"); this.log = ctx.logger("hisoutensoku-jammer");
...@@ -63,30 +64,39 @@ class HisoutensokuJammer { ...@@ -63,30 +64,39 @@ class HisoutensokuJammer {
apply() { apply() {
this.targetCtx.middleware(async (session, next) => { this.targetCtx.middleware(async (session, next) => {
const sender = session.userId;
const message = session.content; const message = session.content;
this.handleMessage(message).then(); this.handleMessage(message, sender).then();
return next(); return next();
}); });
} }
async handleMessage(message: string) { async handleMessage(message: string, sender: string) {
let realMessage = message.trim().split('\n').join(' '); let realMessage = message.trim().split('\n').join(' ');
for (let chineseCharacter of chineseCharacterList) { for (let chineseCharacter of chineseCharacterList) {
realMessage = realMessage.replace(chineseCharacter.characterRegExp, chineseCharacter.value) realMessage = realMessage.replace(chineseCharacter.characterRegExp, chineseCharacter.value)
} }
const messageMatch: RegExpMatchArray = realMessage.match( const lastMessage = this.lastMessageMap.get(sender);
/([1-2]? ?\d? ?\d ?)(([^\d][1-2]?\d{1,2}){3}).+?([1-6] ?\d ?\d ?\d ?\d)/g 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) { if (!messageMatch) {
return; return;
} }
const attackPromises = messageMatch.map((pattern) => { const attackPromises = messageMatch.map((pattern) => {
const patternMatch = pattern.match( 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 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); return this.startAttack(address, port);
}); });
const results: boolean[] = await Promise.all(attackPromises); 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