summaryrefslogtreecommitdiff
path: root/irc.lua
diff options
context:
space:
mode:
authorubq323 <ubq323@ubq323.website>2025-02-25 23:43:41 +0000
committerubq323 <ubq323@ubq323.website>2025-02-25 23:43:41 +0000
commit4dec20e4ff11b61be57a6cfbdb289327d9e1eb7d (patch)
treecc2ffe0357c1110236270ad46dc2006cdb01bf89 /irc.lua
parente03937bbe51f3dd8e0d8ecc732999f5c4578fa94 (diff)
the Restructuring
Diffstat (limited to 'irc.lua')
-rw-r--r--irc.lua96
1 files changed, 0 insertions, 96 deletions
diff --git a/irc.lua b/irc.lua
deleted file mode 100644
index a2fb7bf..0000000
--- a/irc.lua
+++ /dev/null
@@ -1,96 +0,0 @@
-local cqueues = require'cqueues'
-local socket = require'cqueues.socket'
-local pprint = require'pprint'
-local rirc = require'rirc'
-local Queue = require'queue'
-local Channel = require'channel'
-
-local Irc = {}
-
-function Irc._send(self, args)
- args.source = args.source or self.nodename
- local sent = rirc.send(self.sock, args)
- print('>', sent)
-end
-
-function Irc.check_config(self, vars)
- for x in vars:gmatch("%S+") do
- assert(self[x], "missing conf field "..x) end end
-
-function Irc.make(wilson, conf)
- local self = setmetatable(conf, {__index=Irc})
-
- for k,v in pairs {
- wilson = wilson,
- inbox = Queue.make(),
- } do self[k] = v end
-
- self:check_config "host port password nodename"
-
- return self
-end
-
-function Irc._connect(self)
- self.sock = assert(socket.connect(self.host, self.port))
- self:_send{'PASS', self.password, '0210-IRC', 'wilson|'}
- self:_send{'SERVER', self.nodename, '1', 'i am wilson'}
-end
-
-function Irc.run(self)
- local cq = cqueues.new()
- self:_connect()
- cq:wrap(self.recving, self)
- cq:wrap(self.sending, self)
- print('irc',cq:loop())
-end
-
-function Irc.recving(self)
- for line in self.sock:lines "*l" do
- print('<', line)
- local msg = rirc.parse(line)
- if msg.op == 'PING' then
- self:_send{'PONG', msg.args[1]}
- elseif msg.op == 'PRIVMSG' then
- local channel_name = msg.args[1]
- local body = msg.args[2]
- local sender = msg.source
- self.wilson:deliver(Channel(self, channel_name), {
- body = body,
- sender = sender..'[i]'
- })
- elseif msg.op == 'ERROR' then
- error(msg.args[1])
- end
- end
-end
-
-function Irc.sending(self)
- local nicks_channels = {}
- local function ensure_joined(nick, channel)
- if not nicks_channels[nick] then
- self:_send{'NICK', nick, 1, 'username', 'host', 1, '+', 'realname'}
- nicks_channels[nick] = {}
- end
- if not nicks_channels[nick][channel] then
- self:_send{source=nick, 'JOIN', channel}
- nicks_channels[nick][channel] = true
- end
- end
- local function say(nick, channel, body)
- ensure_joined(nick, channel)
- self:_send{source=nick, 'PRIVMSG', channel, body}
- end
-
- say('WILSON', '#test', 'i am wilson')
-
- for dest_channel, message in self.inbox:iter() do
- local channel_name = dest_channel.descriptor
- say(message.sender, channel_name, message.body)
- end
-end
-
-function Irc.post(self, dest_channel, message)
- self.inbox:enqueue(dest_channel, message)
-end
-
-return Irc