diff options
-rw-r--r-- | connection/xmpp.py | 1 | ||||
-rw-r--r-- | modules/topic.py | 60 |
2 files changed, 45 insertions, 16 deletions
diff --git a/connection/xmpp.py b/connection/xmpp.py index dd1c061..d6e3a3f 100644 --- a/connection/xmpp.py +++ b/connection/xmpp.py @@ -33,6 +33,7 @@ class MucHandler(MucRoomHandler): def set_topic(self, topic): self.room_state.set_subject(topic) + self.room_state.subject = topic def message_received(self, user, stanza): if(user == None or user.same_as(self.room_state.me) or stanza.get_body() == None): 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 [<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] <Topic>', 'Fügt einen Text zum Thema des Chatraums hinzu'), + ('!topic d[el[ete]] <ID>', '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)) |