ketracel/src/ketracel/server.moon

60 lines
1.3 KiB
Plaintext

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
}