Advertisement
PaymentOption

Basic IRC Server for CannonOS

Jun 3rd, 2012
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. -- IRC server by PaymentOption for Cannon OS --
  2. VERSION = "Alpha 0.0.1"
  3. -----------------------------------------------
  4.  
  5. rednet.open("top"); rednet.open("bottom")
  6. rednet.open("front"); rednet.open("back")
  7. rednet.open("right"); rednet.open("left")
  8.  
  9. -- VARS --
  10. tUsers = {} -- Each user will have their computer ID and a set username
  11. nOP = 0 -- This will be the user with Operator priveleges
  12.  
  13. sServerName = "testServer"
  14.  
  15. tConversation = {} -- This is where we will store each line of the conversation: {user, message}
  16. ----------
  17.  
  18. -- Connection related functions --
  19. function connectUser( _nSender)
  20. rednet.send( _nSender, "a;sodifu39798d0f3") -- This will be our request for their username: a;sodifu39798d0f3
  21.  
  22. sender, message = rednet.receive(0.2)
  23.  
  24. if sender == _nSender then
  25. tUsers[#tUsers+1] = {name = message, id = _nSender}
  26. rednet.send( _nSender, "ifjdslfije") -- This will be our connection confirmation message: ifjdslfije
  27. sleep(0.1); rednet.send( _nSender, tostring( sServerName ) ) -- Give the user the designated server name
  28. print("User: "..sender.." Connected")
  29. else print("User: ".._nSender.." not Connected") end
  30.  
  31. if #tUsers == 1 then nOP = tUsers[1].id; tUsers[1].name = "@"..tUsers[1].name end
  32. end
  33. ----------------------------------
  34.  
  35. -- Converstaion related functions --
  36. function logMessage( _nSender, _sMessage)
  37. if _sMessage == "dslifj" then
  38. for i=1, #tUsers do
  39. if tUsers[i].id == _nSender then table.remove( tUsers, i); print("User: ".._nSender.." Disconnected")
  40. return true end
  41. end
  42. end
  43.  
  44. if _nSender == nOP then
  45. if string.find( _sMessage, "!kick" ) then
  46. local nKickUser = tonumber(string.sub( _sMessage, string.len("!kick "), string.len( _sMessage )))
  47. for i=1, #tUsers do -- This will be our kicked notificatio message: dlskjfiejdlijfklsdj
  48. if tUsers[i].id == nKickUser then table.remove( tUsers, i); rednet.send( nKickUser, "dlskjfiejdlijfklsdj") end
  49. end
  50. end
  51. end
  52.  
  53. tConversation[#tConversation+1] = {user = tonumber(_nSender), message = tostring(_sMessage)}
  54. local senderIndex = 0 -- We'll store the index number of the user who sent the message here for sending references
  55.  
  56. if #tUsers > 0 then
  57. for i=1, #tUsers do
  58. if tUsers[i].id == _nSender then senderIndex = i end
  59. end
  60. end
  61.  
  62. if #tUsers > 0 then
  63. for i=1, #tUsers do
  64. for i = 1, #tUsers do
  65. if _sMessage == tUsers[i].name or _sMessage == "@"..tUsers[i].name then return false end
  66. end
  67. rednet.send(tUsers[i].id, tostring(tUsers[senderIndex].name).."> ".._sMessage)
  68. end
  69. end
  70. end
  71. ------------------------------------
  72.  
  73. term.clear(); term.setCursorPos(1,1)
  74. while true do
  75. sender, message = rednet.receive()
  76.  
  77. if message == "dlsk;fje3ijoidsjfl" then -- This will be our connection request message: dlsk;fje3ijoidsjfl
  78. connectUser( sender )
  79. end
  80.  
  81. if sender == nOP and string.find( message, "!kick " ) then
  82. local sTemp = string.sub( message, string.len("!kick "), string.len(message))
  83. local sKickUser = string.sub(sTemp, 2, string.len(sTemp))
  84. for i=1, #tUsers do -- This will be our kicked notificatio message: dlskjfiejdlijfklsdj
  85. if tUsers[i].name == sKickUser then rednet.send( tUsers[i].id, "dlskjfiejdlijfklsdj"); table.remove( tUsers, i) end
  86. end
  87. elseif #tUsers > 0 then
  88. for i=1, #tUsers do
  89. if tUsers[i].id == sender then logMessage( sender, message ) end
  90. end
  91. end
  92. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement