Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import shlex
- from collections import defaultdict
- from twisted.words.protocols import irc
- from twisted.internet import protocol
- def extract_nick(user):
- return user.split('!')[0]
- class KickAssBot(irc.IRCClient):
- def __init__(self):
- self.programmers = {}
- self.questions = defaultdict(list)
- def _get_nickname(self):
- return self.factory.nickname
- nickname = property(_get_nickname)
- def signedOn(self):
- self.join(self.factory.channel)
- print "Signed on as %s." % (self.nickname,)
- def joined(self, channel):
- print "Joined %s." % (channel,)
- def privmsg(self, user, channel, msg):
- if channel != self.factory.channel:
- return
- commands = {
- 'beer': self.cmd_beer,
- 'ask': self.cmd_ask,
- 'programs': self.cmd_programs,
- 'tasks': self.cmd_tasks
- }
- if msg.startswith('!'):
- args = shlex.split(msg)
- command, args = args[0][1:], args[1:]
- try:
- commands[command](user, channel, *args)
- except KeyError:
- print "I don't know this command: %s" % command
- def cmd_beer(self, user, channel, *args):
- nick = extract_nick(user)
- minors = ["krolle", "PacMan"]
- if nick in minors:
- self.say(channel, "heh.. you want a beer young one?")
- self.say(channel, "nah.. I don't think so, Minors don't get"
- " no beer FFS!!1!! out, OUT you go!")
- self.me(channel, "tells Kyle123 about this...")
- else:
- self.me(channel, "Gives %s a beer" % nick)
- def cmd_programs(self, user, channel, *languages):
- nick = extract_nick(user)
- new_programmer = nick not in self.programmers
- if new_programmer:
- self.say(channel, "We have a new programmer: %s, Abilities:: %s"
- % (nick, ", ".join(languages)))
- else:
- current = self.programmers[nick]
- new = set(languages) - current
- removed = current - set(languages)
- if not (new or removed):
- self.say(channel, "Alas! %s has abandoned us." % nick)
- del self.programmers[nick]
- else:
- if new:
- self.say(channel, "Programmer %s has added the following"
- " languages to his repetoire: %s"
- % (nick, ", ".join(sorted(new))))
- if removed:
- self.say(channel, "Programmer %s has removed the following"
- " languages from repetoire: %s"
- % (nick, ", ".join(sorted(removed))))
- self.programmers[nick] = set(languages)
- self.say(channel, "The skillset of %s is as follows: %s"
- % (nick, ", ".join(sorted(self.programmers[nick]))))
- self.programmers[nick] = set(languages)
- def cmd_ask(self, user, channel, language, question):
- able_programmers = []
- for programmer, languages in self.programmers.iteritems():
- if language in languages:
- able_programmers.append(programmer)
- if able_programmers:
- msg = ", ".join(sorted(able_programmers))
- self.say(channel, "Calling in: %s" % msg)
- self.questions[language].append(question)
- def cmd_tasks(self, user, channel, *args):
- nick = extract_nick(user)
- if nick in self.programmers:
- self.say(channel, "The following tasks are assigned to you:")
- for language in self.programmers[nick]:
- if self.questions[language]:
- self.say(channel, ">>> %s" % language)
- for i, question in enumerate(self.questions[language]):
- self.say(channel, "%s. %s" % (i, question))
- class KickAssBotFactory(protocol.ClientFactory):
- protocol = KickAssBot
- def __init__(self, channel, nickname='KicksLethesAss'):
- self.channel = channel
- self.nickname = nickname
- def clientConnectionLost(self, connector, reason):
- print "Lost connection (%s), reconnecting." % (reason,)
- connector.connect()
- from twisted.internet import reactor
- if __name__ == "__main__":
- reactor.connectTCP('irc.warez-bb.org', 6667, KickAssBotFactory('#' + "coding"))
- reactor.run()
Add Comment
Please, Sign In to add comment