Guest User

Untitled

a guest
Oct 18th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.49 KB | None | 0 0
  1. import shlex
  2. from collections import defaultdict
  3.  
  4. from twisted.words.protocols import irc
  5. from twisted.internet import protocol
  6.  
  7. def extract_nick(user):
  8. return user.split('!')[0]
  9.  
  10.  
  11. class KickAssBot(irc.IRCClient):
  12. def __init__(self):
  13. self.programmers = {}
  14. self.questions = defaultdict(list)
  15.  
  16.  
  17. def _get_nickname(self):
  18. return self.factory.nickname
  19. nickname = property(_get_nickname)
  20.  
  21.  
  22. def signedOn(self):
  23. self.join(self.factory.channel)
  24. print "Signed on as %s." % (self.nickname,)
  25.  
  26.  
  27. def joined(self, channel):
  28. print "Joined %s." % (channel,)
  29.  
  30.  
  31. def privmsg(self, user, channel, msg):
  32. if channel != self.factory.channel:
  33. return
  34.  
  35. commands = {
  36. 'beer': self.cmd_beer,
  37. 'ask': self.cmd_ask,
  38. 'programs': self.cmd_programs,
  39. 'tasks': self.cmd_tasks
  40. }
  41. if msg.startswith('!'):
  42. args = shlex.split(msg)
  43. command, args = args[0][1:], args[1:]
  44. try:
  45. commands[command](user, channel, *args)
  46. except KeyError:
  47. print "I don't know this command: %s" % command
  48.  
  49.  
  50. def cmd_beer(self, user, channel, *args):
  51. nick = extract_nick(user)
  52. minors = ["krolle", "PacMan"]
  53.  
  54. if nick in minors:
  55. self.say(channel, "heh.. you want a beer young one?")
  56. self.say(channel, "nah.. I don't think so, Minors don't get"
  57. " no beer FFS!!1!! out, OUT you go!")
  58. self.me(channel, "tells Kyle123 about this...")
  59. else:
  60. self.me(channel, "Gives %s a beer" % nick)
  61.  
  62.  
  63. def cmd_programs(self, user, channel, *languages):
  64. nick = extract_nick(user)
  65. new_programmer = nick not in self.programmers
  66. if new_programmer:
  67. self.say(channel, "We have a new programmer: %s, Abilities:: %s"
  68. % (nick, ", ".join(languages)))
  69. else:
  70. current = self.programmers[nick]
  71. new = set(languages) - current
  72. removed = current - set(languages)
  73. if not (new or removed):
  74. self.say(channel, "Alas! %s has abandoned us." % nick)
  75. del self.programmers[nick]
  76. else:
  77. if new:
  78. self.say(channel, "Programmer %s has added the following"
  79. " languages to his repetoire: %s"
  80. % (nick, ", ".join(sorted(new))))
  81. if removed:
  82. self.say(channel, "Programmer %s has removed the following"
  83. " languages from repetoire: %s"
  84. % (nick, ", ".join(sorted(removed))))
  85.  
  86. self.programmers[nick] = set(languages)
  87. self.say(channel, "The skillset of %s is as follows: %s"
  88. % (nick, ", ".join(sorted(self.programmers[nick]))))
  89.  
  90.  
  91. self.programmers[nick] = set(languages)
  92.  
  93.  
  94. def cmd_ask(self, user, channel, language, question):
  95. able_programmers = []
  96. for programmer, languages in self.programmers.iteritems():
  97. if language in languages:
  98. able_programmers.append(programmer)
  99.  
  100. if able_programmers:
  101. msg = ", ".join(sorted(able_programmers))
  102. self.say(channel, "Calling in: %s" % msg)
  103.  
  104. self.questions[language].append(question)
  105.  
  106.  
  107. def cmd_tasks(self, user, channel, *args):
  108. nick = extract_nick(user)
  109. if nick in self.programmers:
  110. self.say(channel, "The following tasks are assigned to you:")
  111. for language in self.programmers[nick]:
  112. if self.questions[language]:
  113. self.say(channel, ">>> %s" % language)
  114. for i, question in enumerate(self.questions[language]):
  115. self.say(channel, "%s. %s" % (i, question))
  116.  
  117.  
  118. class KickAssBotFactory(protocol.ClientFactory):
  119. protocol = KickAssBot
  120.  
  121. def __init__(self, channel, nickname='KicksLethesAss'):
  122. self.channel = channel
  123. self.nickname = nickname
  124.  
  125.  
  126. def clientConnectionLost(self, connector, reason):
  127. print "Lost connection (%s), reconnecting." % (reason,)
  128. connector.connect()
  129.  
  130.  
  131. from twisted.internet import reactor
  132.  
  133.  
  134. if __name__ == "__main__":
  135. reactor.connectTCP('irc.warez-bb.org', 6667, KickAssBotFactory('#' + "coding"))
  136. reactor.run()
Add Comment
Please, Sign In to add comment