summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--connection/xmpp.py1
-rw-r--r--modules/topic.py60
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))