Commit b248c4a8 authored by nanahira's avatar nanahira

add message log

parent d7cad63e
import 'source-map-support/register'; import 'source-map-support/register';
import { Context, Logger, Next, Session, Cache, segment } from 'koishi'; import { Logger, Next, Session, Cache, segment } from 'koishi';
import { import { HisoutensokuJammerPluginConfig } from './config';
HisoutensokuJammerPluginConfig,
HisoutensokuJammerPluginConfigLike,
} from './config';
import { import {
DefinePlugin, DefinePlugin,
InjectConfig,
UseMiddleware, UseMiddleware,
InjectLogger, InjectLogger,
Inject, Inject,
UseEvent, UseEvent,
OnApply, OnApply,
BasePlugin,
} from 'koishi-thirdeye'; } from 'koishi-thirdeye';
import { Attacker } from './attacker'; import { Attacker } from './attacker';
import moment from 'moment'; import moment from 'moment';
import { chineseCharacterList } from './chinese-replace'; import { chineseCharacterList } from './chinese-replace';
import { createWorker, Worker } from 'tesseract.js'; import { Worker } from 'tesseract.js';
import _ from 'lodash';
export * from './config'; export * from './config';
declare module 'koishi' { declare module 'koishi' {
// eslint-disable-next-line @typescript-eslint/no-namespace
namespace Cache { namespace Cache {
interface Tables { interface Tables {
lastMessages: string; lastMessages: string;
...@@ -38,12 +37,10 @@ const PROTOCOL_BASE64 = 'base64://'; ...@@ -38,12 +37,10 @@ const PROTOCOL_BASE64 = 'base64://';
name: 'hisoutensoku-jammer', name: 'hisoutensoku-jammer',
schema: HisoutensokuJammerPluginConfig, schema: HisoutensokuJammerPluginConfig,
}) })
export default class HisoutensokuJammerPlugin implements OnApply { export default class HisoutensokuJammerPlugin
constructor( extends BasePlugin<HisoutensokuJammerPluginConfig>
private ctx: Context, implements OnApply
config: HisoutensokuJammerPluginConfigLike, {
) {}
@InjectLogger() @InjectLogger()
private log: Logger; private log: Logger;
...@@ -54,9 +51,6 @@ export default class HisoutensokuJammerPlugin implements OnApply { ...@@ -54,9 +51,6 @@ export default class HisoutensokuJammerPlugin implements OnApply {
this.cache.table('lastMessages', { maxAge: 600000 }); this.cache.table('lastMessages', { maxAge: 600000 });
} }
@InjectConfig()
private config: HisoutensokuJammerPluginConfig;
ocrWorker: Worker; ocrWorker: Worker;
@UseEvent('ready') @UseEvent('ready')
...@@ -138,12 +132,15 @@ export default class HisoutensokuJammerPlugin implements OnApply { ...@@ -138,12 +132,15 @@ export default class HisoutensokuJammerPlugin implements OnApply {
); );
} }
this.log.info(`Parsing message from ${sender}: ${receivedMessage}`);
let messageMatch = receivedMessage.match(matcherGlobal); let messageMatch = receivedMessage.match(matcherGlobal);
if (useCache) { if (useCache) {
const lastMessage = await this.cache.get('lastMessages', sender); const lastMessage = await this.cache.get('lastMessages', sender);
const currentMessage = receivedMessage; const currentMessage = receivedMessage;
if (lastMessage) { if (lastMessage) {
receivedMessage = `${lastMessage} ${receivedMessage}`; receivedMessage = `${lastMessage} ${receivedMessage}`;
this.log.info(`Merged message from ${sender}: ${receivedMessage}`);
if (!messageMatch) { if (!messageMatch) {
messageMatch = receivedMessage.match(matcherGlobal); messageMatch = receivedMessage.match(matcherGlobal);
} }
...@@ -159,6 +156,9 @@ export default class HisoutensokuJammerPlugin implements OnApply { ...@@ -159,6 +156,9 @@ export default class HisoutensokuJammerPlugin implements OnApply {
const results: { address: string; port: number }[] = []; const results: { address: string; port: number }[] = [];
for (const pattern of messageMatch) { for (const pattern of messageMatch) {
const patternMatch = pattern.match(matcherSingle); const patternMatch = pattern.match(matcherSingle);
if ((patternMatch?.length || 0) <= 6) {
continue;
}
const firstDigit = patternMatch[2].replace(/[^\d]+/g, ''); const firstDigit = patternMatch[2].replace(/[^\d]+/g, '');
const address = `${firstDigit}.${patternMatch[3] const address = `${firstDigit}.${patternMatch[3]
.split(/[^\d]+/) .split(/[^\d]+/)
...@@ -179,7 +179,17 @@ export default class HisoutensokuJammerPlugin implements OnApply { ...@@ -179,7 +179,17 @@ export default class HisoutensokuJammerPlugin implements OnApply {
} }
} }
} }
return results;
const filteredResults = _.uniqWith(
results,
(a, b) => a.address === b.address && a.port === b.port,
);
this.log.info(
`Got addresses: ${filteredResults
.map((e) => `${e.address}:${e.port}`)
.join(', ')}.`,
);
return filteredResults;
} }
private async handleMessage( private async handleMessage(
...@@ -188,7 +198,7 @@ export default class HisoutensokuJammerPlugin implements OnApply { ...@@ -188,7 +198,7 @@ export default class HisoutensokuJammerPlugin implements OnApply {
useCache = true, useCache = true,
) { ) {
const targets = await this.getTargetsFromMessage(message, sender, useCache); const targets = await this.getTargetsFromMessage(message, sender, useCache);
if (!targets) return; if (!targets?.length) return;
const results: boolean[] = await Promise.all( const results: boolean[] = await Promise.all(
targets.map((target) => { targets.map((target) => {
return this.startAttack(target.address, target.port); return this.startAttack(target.address, target.port);
......
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