irce = require "irce" ln = require "ln" socket = require "socket" class Server new: (config) => @config = config sock = socket.tcp! irc = irce.new! irc\load_module require "irce.modules.ngircd" irc\load_module require "ketracel.bots.ketracel" irc\set_send_func (message) => sock\send message if config.debug ln.log {"msg": "debug enabled"}, config irc\set_callback irce.RAW, (send, message) => sigil = send and ">" or "<" print string.format "%s %s", (send and ">" or "<"), message ln.log msg: "Ketracel loaded", irce: irce._VERSION, lua: _VERSION assert sock\connect config.server, 6667 assert irc\REGISTER config.spass, "ketracel", "0.0.1", config.sname, config.sreal, config.nicklen @irc = irc @socket = sock wait_for: (event, checker) => running = true @irc\set_callback event, (...) => if checker and not checker(...) return print "! got event " .. event if os.getenv "DEBUG" running = false while running @irc\process @socket\receive! @irc\clear_callback event run: => running = true @irc\set_callback "DIE", (why) => ln.err why, {msg: "told to die"} running = false while running @irc\process @socket\receive! @socket\close! { :Server }