From 8739662e311a97839dececf7817d9ff12701dd5e Mon Sep 17 00:00:00 2001
From: Florent Le Coz <louiz@louiz.org>
Date: Sat, 7 Jul 2012 04:51:52 +0200
Subject: Add a replace plugin.

---
 plugins/replace.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 66 insertions(+)
 create mode 100644 plugins/replace.py

(limited to 'plugins')

diff --git a/plugins/replace.py b/plugins/replace.py
new file mode 100644
index 00000000..d1fbac57
--- /dev/null
+++ b/plugins/replace.py
@@ -0,0 +1,66 @@
+"""
+Replace a pattern from a message you're about to send, by the result of a
+function.  For example you can insert the current time in your sentence by
+writing %time% in it.
+"""
+
+from plugin import BasePlugin
+import tabs
+import datetime
+import random
+from sleekxmpp.xmlstream.stanzabase import JID
+
+class Plugin(BasePlugin):
+    def init(self):
+        self.patterns = {}
+        self.add_event_handler('conversation_say', self.replace_pattern)
+        self.add_event_handler('muc_say', self.replace_pattern)
+        self.add_event_handler('private_say', self.replace_pattern)
+        self.patterns['time'] = replace_time
+        self.patterns['date'] = replace_date
+        self.patterns['datetime'] = replace_datetime
+        self.patterns['random_nick'] = replace_random_user
+        self.patterns['dice'] = replace_dice
+
+    def replace_pattern(self, message, tab):
+        """
+        Look for a %*% pattern in the message and replace it by the result
+        of the corresponding function.
+        """
+        body = message['body']
+        for pattern in self.patterns:
+            new = body
+            while True:
+                # we don't use a replace on all occurence, otherwise the
+                # result would be the same for all occurence of the pattern
+                # and that's not desirable in some of them (for example the
+                # ones that provide random results)
+                new = body.replace('%%%s%%' % pattern,
+                                   self.patterns[pattern](message, tab), 1)
+                if new == body:
+                    break
+                body = new
+        message['body'] = body
+
+
+def replace_time(message, tab):
+    return datetime.datetime.now().strftime("%X")
+
+def replace_date(message, tab):
+    return datetime.datetime.now().strftime("%x")
+
+def replace_datetime(message, tab):
+    return datetime.datetime.now().strftime("%c")
+
+def replace_random_user(message, tab):
+    if isinstance(tab, tabs.MucTab):
+        return random.choice(tab.users).nick
+    elif isinstance(tab, tabs.PrivateTab):
+        return random.choice([JID(tab.name).resource, tab.own_nick])
+    else isinstance(tab, tabs.ConversationTab):
+        # that doesn’t make any sense. By why use this pattern in a
+        # ConversationTab anyway?
+        return str(tab.name)
+
+def replace_dice(message, tab):
+    return str(random.randrange(1, 7))
-- 
cgit v1.2.3