outsourced events
This commit is contained in:
		
							
								
								
									
										58
									
								
								src/bot.mjs
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								src/bot.mjs
									
									
									
									
									
								
							@@ -2,56 +2,21 @@ import { logger } from "./inc/log";
 | 
			
		||||
import { read, cfg } from "./inc/cfg";
 | 
			
		||||
import { wrapper } from "./inc/wrapper";
 | 
			
		||||
 | 
			
		||||
import triggers from "./inc/trigger/main";
 | 
			
		||||
import triggers from "./inc/trigger";
 | 
			
		||||
import events from "./inc/events";
 | 
			
		||||
 | 
			
		||||
read().then(() => {
 | 
			
		||||
  let bot = new wrapper();
 | 
			
		||||
 | 
			
		||||
  const self = {
 | 
			
		||||
    _trigger: new Map(),
 | 
			
		||||
    trigger: trigger
 | 
			
		||||
    trigger: trigger,
 | 
			
		||||
    bot: bot
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  triggers.forEach(mod => mod(self));
 | 
			
		||||
 | 
			
		||||
  bot.on("message", e => {
 | 
			
		||||
    for (var [name, trigger] of self._trigger.entries()) {
 | 
			
		||||
      if (!trigger.call.exec(e.message))
 | 
			
		||||
        continue;
 | 
			
		||||
      if (!trigger.clients.includes(e.type))
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      let active = false;
 | 
			
		||||
      if (e.type === "irc" && cfg.trigger[e.network + e.channel]) {
 | 
			
		||||
        if (cfg.trigger[e.network + e.channel][trigger.name])
 | 
			
		||||
          active = true;
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
        active = trigger.active;
 | 
			
		||||
      if (!active)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if ((e.self.set !== "all" && e.self.set !== trigger.set) && trigger.set !== "all")
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (trigger.level > e.user.level.level) {
 | 
			
		||||
        e.reply(`no permission, min level ${trigger.level} required`);
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      e = Object.assign(e, parseArgs(e.message));
 | 
			
		||||
      trigger.f(e);
 | 
			
		||||
    }
 | 
			
		||||
    logger.info(`${e.network} -> ${e.channel} -> ${e.user.nick}: ${e.message}`);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  bot.on("ctcp:version", e => {
 | 
			
		||||
    const versions = [
 | 
			
		||||
      "AmIRC.1 (8 Bit) for Commodore Amiga 500",
 | 
			
		||||
      "HexChat 0.72 [x86] / Windows 95c [500MHz]"
 | 
			
		||||
    ];
 | 
			
		||||
    e.write(`notice ${e.user.nick} :\u0001VERSION ${versions[~~(Math.random() * versions.length)]}\u0001`);
 | 
			
		||||
  });
 | 
			
		||||
  events.forEach(event => event(self));
 | 
			
		||||
  
 | 
			
		||||
})
 | 
			
		||||
.catch(err => {
 | 
			
		||||
  logger.error(`(main) ${err.message}`);
 | 
			
		||||
@@ -65,13 +30,4 @@ function trigger(args) {
 | 
			
		||||
  this.set = args.set || "all"; // uwe, nxy, f0ck, all
 | 
			
		||||
  this.clients = args.clients || ["irc", "tg", "discord"];
 | 
			
		||||
  this.f = args.f;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const parseArgs = (msg) => {
 | 
			
		||||
  let args = msg.trim().split(" ");
 | 
			
		||||
  let cmd = args.shift();
 | 
			
		||||
  return {
 | 
			
		||||
    cmd: cmd.replace(/^(\.|\/|\!)/, ""),
 | 
			
		||||
    args: args
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										12
									
								
								src/inc/events/ctcp.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/inc/events/ctcp.mjs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
import { logger } from "../log";
 | 
			
		||||
 | 
			
		||||
const versions = [
 | 
			
		||||
  "AmIRC.1 (8 Bit) for Commodore Amiga 500",
 | 
			
		||||
  "HexChat 0.72 [x86] / Windows 95c [500MHz]"
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
export default self => {
 | 
			
		||||
  self.bot.on("ctcp:version", e => {
 | 
			
		||||
    e.write(`notice ${e.user.nick} :\u0001VERSION ${versions[~~(Math.random() * versions.length)]}\u0001`);
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										6
									
								
								src/inc/events/index.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								src/inc/events/index.mjs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
import ctcp from "./ctcp";
 | 
			
		||||
import message from "./message";
 | 
			
		||||
 | 
			
		||||
export default [
 | 
			
		||||
  ctcp, message
 | 
			
		||||
];
 | 
			
		||||
							
								
								
									
										44
									
								
								src/inc/events/message.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								src/inc/events/message.mjs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
import { logger } from "../log";
 | 
			
		||||
import { read, cfg } from "../cfg";
 | 
			
		||||
 | 
			
		||||
const parseArgs = (msg) => {
 | 
			
		||||
  let args = msg.trim().split(" ");
 | 
			
		||||
  let cmd = args.shift();
 | 
			
		||||
  return {
 | 
			
		||||
    cmd: cmd.replace(/^(\.|\/|\!)/, ""),
 | 
			
		||||
    args: args
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export default self => {
 | 
			
		||||
  self.bot.on("message", e => {
 | 
			
		||||
    for (var [name, trigger] of self._trigger.entries()) {
 | 
			
		||||
      if (!trigger.call.exec(e.message))
 | 
			
		||||
        continue;
 | 
			
		||||
      if (!trigger.clients.includes(e.type))
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      let active = false;
 | 
			
		||||
      if (e.type === "irc" && cfg.trigger[e.network + e.channel]) {
 | 
			
		||||
        if (cfg.trigger[e.network + e.channel][trigger.name])
 | 
			
		||||
          active = true;
 | 
			
		||||
      }
 | 
			
		||||
      else
 | 
			
		||||
        active = trigger.active;
 | 
			
		||||
      if (!active)
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if ((e.self.set !== "all" && e.self.set !== trigger.set) && trigger.set !== "all")
 | 
			
		||||
        continue;
 | 
			
		||||
 | 
			
		||||
      if (trigger.level > e.user.level.level) {
 | 
			
		||||
        e.reply(`no permission, min level ${trigger.level} required`);
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
      
 | 
			
		||||
      e = Object.assign(e, parseArgs(e.message));
 | 
			
		||||
      trigger.f(e);
 | 
			
		||||
    }
 | 
			
		||||
    logger.info(`${e.network} -> ${e.channel} -> ${e.user.nick}: ${e.message}`);
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user