pfgpastebin

pfgbot source 0.1

Jan 28th, 2015
374
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.31 KB | None | 0 0
  1. import socket
  2.  
  3. class IRCClient:
  4. socket = None
  5. connected = False
  6. nickname = 'pfgbot'
  7. channels = ['#ircbots']
  8.  
  9. def __init__(self):
  10. self.socket = socket.socket()
  11. self.socket.connect(('irc.atheme.org', 6667))
  12. self.send("NICK %s" % self.nickname)
  13. self.send("USER %(nick)s %(nick)s %(nick)s :%(nick)s" % {'nick':self.nickname})
  14.  
  15. while True:
  16. buf = self.socket.recv(4096)
  17. lines = buf.split("\n")
  18. for data in lines:
  19. data = str(data).strip()
  20.  
  21. if data == '':
  22. continue
  23. print "I<", data
  24.  
  25. # server ping/pong?
  26. if data.find('PING') != -1:
  27. n = data.split(':')[1]
  28. self.send('PONG :' + n)
  29. if self.connected == False:
  30. self.perform()
  31. self.connected = True
  32.  
  33. args = data.split(None, 3)
  34. if len(args) != 4:
  35. continue
  36. ctx = {}
  37. ctx['sender'] = args[0][1:]
  38. ctx['type'] = args[1]
  39. ctx['target'] = args[2]
  40. ctx['msg'] = args[3][1:]
  41.  
  42. # whom to reply?
  43. target = ctx['target']
  44. if ctx['target'] == self.nickname:
  45. target = ctx['sender'].split("!")[0]
  46.  
  47. # some basic commands
  48.  
  49.  
  50.  
  51. # directed to the bot?
  52. if ctx['type'] == 'PRIVMSG' and (ctx['msg'].lower()[0:len(self.nickname)] == self.nickname.lower() or ctx['target'] == self.nickname):
  53. try:
  54. # something is speaking to the bot
  55. owner = "pfgatheme"
  56. nick = ctx['sender'].split('!')[0]
  57. isOwner = nick == owner
  58. password = '*****'
  59.  
  60. query = ctx['msg']
  61. if ctx['target'] != self.nickname:
  62. query = query[len(self.nickname):]
  63. query = query.lstrip(':,;. ')
  64. # do something intelligent here, like query a chatterbot
  65. print 'someone spoke to us: ', query
  66. #self.say('-_-', target)
  67. if query == '':
  68. self.say('Hello', target)
  69. elif query == 'nick':
  70. self.say('You are ' + nick, target)
  71. elif query == 'help':
  72. self.say('Help:', target)
  73. self.say('about, quit, join <channel>, nick', target)
  74. elif query == 'about':
  75. self.say('I am pfgbot. My source is not currently available. I was made by pfgatheme.', target)
  76. elif (query == 'quit') and isOwner:
  77. self.say('It is now safe to turn off your computer.',target)
  78. self.send('QUIT :Goodbye')
  79. elif (query.split(" ")[0] == "join") and isOwner:
  80. self.send("JOIN %s" % query.split(" ")[1])
  81. self.say('hello!', query.split(" ")[1])
  82. self.send('ns identify ' + password)
  83. elif (query == 'quit') or (query.split(" ")[0] == "join") or (query == 'usr') or (query == 'raw'):
  84. self.say('You are not my master. ' + owner + " is my master.", target)
  85. else:
  86. self.say('Hello -_-',target)
  87. except:
  88. self.say('An internal error occured',target)
  89. def send(self, msg):
  90. print "I>",msg
  91. self.socket.send(msg+"\r\n")
  92.  
  93. def say(self, msg, to):
  94. self.send("PRIVMSG %s :%s" % (to, msg))
  95.  
  96. def perform(self):
  97. #self.send("PRIVMSG R : Register <>")
  98. self.send("PRIVMSG R : Login <>")
  99. self.send("MODE %s +x" % self.nickname)
  100. for c in self.channels:
  101. self.send("JOIN %s" % c)
  102. # say hello to every channel
  103. #self.say('hello!', c)
  104.  
  105. IRCClient()
Advertisement
Add Comment
Please, Sign In to add comment