From dbc091688f1edbbffb8c70e29778a9437b2d0e47 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 22 Apr 2012 17:43:15 +0200 Subject: Improved topic module --- modules/topic.py | 60 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 16 deletions(-) (limited to 'modules') diff --git a/modules/topic.py b/modules/topic.py index d878a91..7f4ca10 100644 --- a/modules/topic.py +++ b/modules/topic.py @@ -6,24 +6,52 @@ import re class Module(ModuleBase): def __init__(self, manager): ModuleBase.__init__(self, manager) - + def commands(self): - return [('!topic []', 'Fügt einen Text zum Thema des Chatraums hinzu oder zeigt das aktuelle Topic an')] - + return [ + ('!topic [s[how]]', 'Zeigt das aktuelle Topic mit IDs an'), + ('!topic a[dd] ', 'Fügt einen Text zum Thema des Chatraums hinzu'), + ('!topic d[el[ete]] ', 'Entfernt das Topic mit der ID') + ] + def groupchat(self, room, nick, text, handler): - if not re.match(r'!topic(?:\W|\Z)', text): + if not re.match(r'!topic(?:\s|\Z)', text): return - - if not re.match(r'!topic\W', text): - handler.reply(handler.get_topic()) - return - - topic = re.sub(r'!topic\W+', '', text) - if topic == '': + + if re.match(r'!topic(?:\s+(?:s(?:how)?)?\s*)?\Z', text): + topic = handler.get_topic() + if topic is None or topic == '': + handler.reply('Es ist kein Topic gesetzt.') + return + topics = [s.strip() for s in topic.split('|')] + idtopics = zip(range(len(topics)), topics) + idtopicstrings = ["%i: %s" % t for t in idtopics] + handler.reply('Aktuelles Topic:\n\n' + '\n'.join(idtopicstrings)) return - + oldtopic = handler.get_topic() - if oldtopic != '' and oldtopic != None: - topic += ' | ' + oldtopic - - handler.set_topic(topic) + + if re.match(r'!topic\s+a(?:dd)?\s', text): + topic = re.sub(r'!topic\s+a(?:dd)?\s+', '', text) + if topic == '': + return + + if oldtopic != '' and oldtopic is not None: + topic += ' | ' + oldtopic + + handler.set_topic(topic) + return + + if re.match(r'!topic\s+d(?:el(?:ete)?)?\s', text): + try: + topicid = int(re.sub(r'!topic\s+d(?:el(?:ete)?)?\s+', '', text)) + except: + return + + topics = [s.strip() for s in oldtopic.split('|')] + if topicid < 0 or topicid >= len(topics): + return + + del topics[topicid] + + handler.set_topic(' | '.join(topics)) -- cgit v1.2.3