60 lines
1.3 KiB
Plaintext
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
|
|
}
|