Guest User

Untitled

a guest
May 10th, 2018
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.54 KB | None | 0 0
  1. local socket = require 'socket'
  2. local client = require 'irc.client'
  3. local parser = require 'irc.parser'
  4.  
  5. local credentials = {
  6. ['username'] = 'password';
  7. }
  8.  
  9. local server = assert(socket.bind('*', 6667))
  10.  
  11. server:settimeout(0)
  12.  
  13. local handlers = {
  14. ['PASS'] = function(self, prefix, pass)
  15. if self.status ~= 'pre-auth' then return end
  16. self.password = pass
  17. return true
  18. end;
  19.  
  20. ['NICK'] = function(self, prefix, nick)
  21. self.nick = nick
  22. return true
  23. end;
  24.  
  25. ['USER'] = function(self, prefix, user, host, server, real)
  26. local pass = credentials[user]
  27. if self.password == credentials[user] and self.nick then
  28. self.user = user
  29. self.status = 'authed'
  30. print('succesfully authed user ' .. self.user .. ' of nick ' .. self.nick)
  31. else
  32. error('Disconnect Me')
  33. end
  34. return true
  35. end;
  36. }
  37.  
  38. local clients = {}
  39. local sockets = {server}
  40.  
  41. local read, write, err
  42. while not err do
  43. read, write, err = socket.select(sockets, nil)
  44. for i = 1, #read do
  45. local sock = read[i]
  46. if sock == server then
  47. local s = sock:accept()
  48. local function send(self, data)
  49. return s:send(data)
  50. end
  51. local c = client.new(send, handlers)
  52. clients[c.socket] = c
  53. table.insert(sockets, s)
  54. else
  55. local line = sock:receive('*l')
  56. local prefix, cmd, args = parser.parse_line(line)
  57. clients[sock]:handle(prefix, cmd, args)
  58. end
  59. end
  60. end
Add Comment
Please, Sign In to add comment