irce = require "irce" socket = require "socket" get_client_modules = (irc) -> irc\load_module require "irce.modules.base" irc\load_module require "irce.modules.message" irc\load_module require "irce.modules.channel" class Client new: (nick) => @nick = nick sock = socket.tcp! irc = irce.new! get_client_modules irc irc\set_send_func (message) => print string.format "[client %s] > %s", nick, message if os.getenv "DEBUG" sock\send message sock\connect "127.0.0.1", 6667 irc\NICK nick irc\USER nick, nick @socket = sock @irc = irc wait_for: (event, checker) => running = true nick = @nick @irc\set_callback event, (...) => if checker and not checker ... return print string.format "[client %s] ! got event %s", nick, event if os.getenv "DEBUG" running = false while running msg = assert @socket\receive! print string.format "[client %s] < %s", nick, msg if os.getenv "DEBUG" @irc\process msg @irc\clear_callback event quit: => @irc\QUIT "bye" @socket\close! { :Client }