Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local socket = require 'socket'
- local client = require 'irc.client'
- local parser = require 'irc.parser'
- local credentials = {
- ['username'] = 'password';
- }
- local server = assert(socket.bind('*', 6667))
- server:settimeout(0)
- local handlers = {
- ['PASS'] = function(self, prefix, pass)
- if self.status ~= 'pre-auth' then return end
- self.password = pass
- return true
- end;
- ['NICK'] = function(self, prefix, nick)
- self.nick = nick
- return true
- end;
- ['USER'] = function(self, prefix, user, host, server, real)
- local pass = credentials[user]
- if self.password == credentials[user] and self.nick then
- self.user = user
- self.status = 'authed'
- print('succesfully authed user ' .. self.user .. ' of nick ' .. self.nick)
- else
- error('Disconnect Me')
- end
- return true
- end;
- }
- local clients = {}
- local sockets = {server}
- local read, write, err
- while not err do
- read, write, err = socket.select(sockets, nil)
- for i = 1, #read do
- local sock = read[i]
- if sock == server then
- local s = sock:accept()
- local function send(self, data)
- return s:send(data)
- end
- local c = client.new(send, handlers)
- clients[c.socket] = c
- table.insert(sockets, s)
- else
- local line = sock:receive('*l')
- local prefix, cmd, args = parser.parse_line(line)
- clients[sock]:handle(prefix, cmd, args)
- end
- end
- end
Add Comment
Please, Sign In to add comment