ketracel/src/ketracel.moon

63 lines
1.7 KiB
Plaintext

irce = require "irce"
socket = require "socket"
config =
server: os.getenv("IRC_HOST") or "127.0.0.1"
nick: os.getenv("IRC_NICK") or "Ketracel"
user: os.getenv("IRC_USER") or "white"
real: os.getenv("IRC_REAL") or "The favorite of the Jem'Hadar"
oper: os.getenv("IRC_OPER")
channels: { "#ketracel", "#opers" }
debug: os.getenv("KETRACEL_DEBUG")
irc = irce.new!
running = true
-- load IRC modules
assert irc\load_module require "irce.modules.base"
assert irc\load_module require "irce.modules.message"
assert irc\load_module require "irce.modules.channel"
assert irc\load_module require "irce.modules.motd"
assert irc\load_module require "irce.modules.oper"
client = socket.tcp!
client\settimeout 1
-- irc engine callbacks
irc\set_send_func (message) =>
client\send message
if config.debug
irc\set_callback irce.RAW, (send, message) =>
print string.format "%s %s", (send and ">" or "<"), message
irc\set_callback "CTCP", (sender, origin, command, params, pm) =>
if command == "VERSION"
self\CTCP_REPLY origin, "VERSION", string.format("Ketracel white - dev (%s, %s)", irce._VERSION, _VERSION)
irc\set_callback "001", (...) =>
for k, chan in ipairs config.channels
assert irc\JOIN chan
irc\set_callback "PRIVMSG", (sender, origin, message, pm) =>
if message == "?quit"
assert self\QUIT "Ran out of white"
running = false
-- connect to irc server
assert client\connect config.server, 6667
assert irc\NICK config.nick
assert irc\USER config.user, config.real
print "Ketracel loaded using " .. irce._VERSION .. " running on " .. _VERSION
if config.oper
irc\OPER config.nick, config.oper
print "IRC operator status requested for " .. config.nick
while running
irc\process client\receive!
client\close!