Advertisement
Guest User

Untitled

a guest
Mar 4th, 2015
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.94 KB | None | 0 0
  1. import socket
  2. import _thread
  3.  
  4. class Message():
  5. nick = ""
  6. login = ""
  7. hostname = ""
  8. target = ""
  9. text = ""
  10. command = ""
  11. target = ""
  12.  
  13. class bot():
  14. admins = []
  15. adminpw = "password"
  16.  
  17. run = True
  18.  
  19. def __init__(self,nick):
  20. self.irc = socket.socket ( socket.AF_INET, socket.SOCK_STREAM )
  21. self.nick = nick
  22.  
  23. def connect(self,host,port):
  24. self.irc.connect ( ( host, port ) )
  25. print(self.irc.recv ( 4096 ))
  26. self.irc.send( 'NICK '+self.nick+'\r\n' )
  27. self.irc.send( 'USER '+(self.nick+' ')*3+'Python IRC\r\n' )
  28.  
  29. def join(self,channel):
  30. self.irc.send ( 'JOIN '+channel+'\r\n' )
  31.  
  32. def send(self,target,message):
  33. self.irc.send( 'PRIVMSG '+target+' :'+message+'\r\n')
  34.  
  35. def do(self,target,action):
  36. self.irc.send( 'PRIVMSG '+target+' :\001ACTION '+action+'\r\n' )
  37.  
  38. def part(self,channel):
  39. self.irc.send ( 'PART '+channel+'\r\n' )
  40.  
  41. def addadmin(self,nick):
  42. self.admins.append(nick)
  43.  
  44. def isadmin(self,nick):
  45. return nick in self.admins
  46.  
  47. def checkpw(self,pw):
  48. return pw == self.adminpw
  49.  
  50. def disconnect(self,message=""):
  51. self.irc.send( 'QUIT '+message+'\r\n' )
  52.  
  53. def notice(self,target,text):
  54. self.irc.send( 'NOTICE '+target+' :'+text+'\r\n' )
  55.  
  56. def run(self):
  57. try:
  58. while self.run:
  59. lines = self.irc.recv ( 4096 ).strip().split("\r\n")
  60. for line in lines:
  61. print(line)
  62. _thread.start_new_thread(lambda line: self.handleline(line.strip()),(line,))
  63. finally:
  64. self.quit()
  65.  
  66. def quit(self):
  67. self.run = False
  68. self.irc.close()
  69.  
  70. def handleline(self,line):
  71. message = Message()
  72. if line.startswith("PING "):
  73. self.irc.send( 'PONG ' + " ".join(line.split()[1:]) + '\r\n' )
  74. return
  75.  
  76. senderinfo = line.split(" ")[0]
  77. message.command = line.split(" ")[1]
  78.  
  79. exclamation = senderinfo.find("!")
  80. at = senderinfo.find("@")
  81. if senderinfo.startswith(":"):
  82. if exclamation > 0 and at > 0 and exclamation < at:
  83. message.nick = senderinfo[1:exclamation]
  84. message.login = senderinfo[exclamation+ 1:at]
  85. message.hostname = senderinfo[at+1:]
  86.  
  87. message.target = line.split(" ")[2]
  88.  
  89.  
  90. if message.command == "PRIVMSG":
  91. message.text = " ".join(line.split(" ")[3:])[1:].strip()
  92. if message.target[0] not in "#&+!":
  93. message.target = message.nick
  94. if message.text.startswith("\001ACTION"):
  95. message.text = message.text[8:]
  96. try: self.onPrivateAction(message)
  97. except: traceback.print_exc(file=sys.stdout)
  98. else:
  99. try: self.onPrivateMessage(message)
  100. except: traceback.print_exc(file=sys.stdout)
  101. else:
  102. if message.text.startswith("\001ACTION"):
  103. message.text = message.text[8:]
  104. try: self.onAction(message)
  105. except: traceback.print_exc(file=sys.stdout)
  106. else:
  107. try: self.onMessage(message)
  108. except: traceback.print_exc(file=sys.stdout)
  109. elif message.command == "JOIN":
  110. try: self.onJoin(message)
  111. except: traceback.print_exc(file=sys.stdout)
  112. elif message.command == "PART":
  113. try: self.onPart(message)
  114. except: traceback.print_exc(file=sys.stdout)
  115. elif message.command == "NICK":
  116. try: self.onNick(message)
  117. except: traceback.print_exc(file=sys.stdout)
  118. elif message.command == "NOTICE":
  119. try: self.onNotice(message)
  120. except: traceback.print_exc(file=sys.stdout)
  121. elif message.command == "QUIT":
  122. try: self.onQuit(message)
  123. except: traceback.print_exc(file=sys.stdout)
  124. elif message.command == "KICK":
  125. try: self.onKick(message)
  126. except: traceback.print_exc(file=sys.stdout)
  127. elif message.command == "MODE":
  128. try: self.onMode(message)
  129. except: traceback.print_exc(file=sys.stdout)
  130. elif message.command == "TOPIC":
  131. try: self.onTopic(message)
  132. except: traceback.print_exc(file=sys.stdout)
  133. elif message.command == "INVITE":
  134. try: self.onInvite(message)
  135. except: traceback.print_exc(file=sys.stdout)
  136.  
  137.  
  138. def onMessage(self,message):
  139. if message.text.startswith(":d "):
  140. print(" ".join(message.text.split(" ")[1:]))
  141.  
  142. def onKick(self,message):
  143. pass
  144.  
  145. def onJoin(self,message):
  146. pass
  147.  
  148. def onLoad(self,bot):
  149. pass
  150.  
  151. def onUnload(self,bot):
  152. pass
  153.  
  154. def onMessage(self,message):
  155. pass
  156.  
  157. def getHelp(self,message):
  158. pass
  159.  
  160. def onPrivateMessage(self,message):
  161. pass
  162.  
  163. def onPrivateAction(self,message):
  164. pass
  165.  
  166. def onAction(self,message):
  167. pass
  168.  
  169. def onNotice(self,message):
  170. pass
  171.  
  172. def onNick(self,message):
  173. pass
  174.  
  175. def onQuit(self,message):
  176. pass
  177.  
  178. def onKick(self,message):
  179. pass
  180.  
  181. def onMode(self,message):
  182. pass
  183.  
  184. def onTopic(self,message):
  185. pass
  186.  
  187. def onInvite(self,message):
  188. pass
  189.  
  190. def onPart(self,message):
  191. pass
  192.  
  193.  
  194. if __name__=="__main__":
  195. network = 'irc.compsoc.kent.ac.uk'
  196. port = 6667
  197. nick = 'simplebot'
  198. channels = ['#bottesting']
  199. admins = []
  200.  
  201. ircbot = bot(nick)
  202. ircbot.connect(network,port)
  203. for channel in channels:
  204. ircbot.join(channel)
  205.  
  206.  
  207. for admin in admins:
  208. ircbot.addadmin(admin)
  209.  
  210. ircbot.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement