2012-07-07 02:51:52 +00:00
|
|
|
|
"""
|
2013-04-13 20:33:06 +00:00
|
|
|
|
Replace some patterns in a message before sending it.
|
|
|
|
|
|
|
|
|
|
Usage
|
|
|
|
|
-----
|
|
|
|
|
Insert a pattern in the form
|
|
|
|
|
|
|
|
|
|
.. code-block:: none
|
|
|
|
|
|
|
|
|
|
%pattern%
|
|
|
|
|
|
|
|
|
|
in your message, and it will be replaced by the corresponding text.
|
|
|
|
|
|
|
|
|
|
The list of provided patterns is:
|
|
|
|
|
|
|
|
|
|
- **time**: Insert the current time
|
|
|
|
|
- **date**: Insert the current date
|
|
|
|
|
- **datetime**: Insert the current date and time
|
|
|
|
|
- **random_nick**: Insert a random nick from the current MUC
|
|
|
|
|
- **dice**: Insert a random number between 1 and 6
|
|
|
|
|
|
|
|
|
|
Add your own pattern
|
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
|
|
You can easily edit this plugin to add your own patterns. For example if
|
|
|
|
|
don’t want to search for an insult everytime you’re angry, you can create a
|
|
|
|
|
curse pattern this way:
|
|
|
|
|
|
|
|
|
|
- In the init(self) method of the Plugin class, add something like
|
|
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
|
|
self.patterns['curse'] = replace_curse
|
|
|
|
|
|
|
|
|
|
- then define a function (not a method of the Plugin class) at the bottom
|
|
|
|
|
of the file. For example:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.. code-block:: python
|
|
|
|
|
|
|
|
|
|
def replace_curse(message, tab):
|
|
|
|
|
return random.choice(['dumb shit', 'idiot', 'moron'])
|
|
|
|
|
|
|
|
|
|
and you can now use something like
|
|
|
|
|
|
|
|
|
|
.. code-block:: none
|
|
|
|
|
|
|
|
|
|
Shut up, %curse%!
|
|
|
|
|
|
|
|
|
|
in your everyday-conversations.
|
|
|
|
|
|
|
|
|
|
For more convenience, you can read your nice words from a file, do whatever
|
|
|
|
|
you want in that function, as long as it returns a string.
|
2012-07-07 02:51:52 +00:00
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
from plugin import BasePlugin
|
|
|
|
|
import tabs
|
|
|
|
|
import datetime
|
|
|
|
|
import random
|
2013-08-02 21:59:49 +00:00
|
|
|
|
import re
|
2014-07-24 00:07:08 +00:00
|
|
|
|
from slixmpp.xmlstream.stanzabase import JID
|
2012-07-07 02:51:52 +00:00
|
|
|
|
|
|
|
|
|
class Plugin(BasePlugin):
|
|
|
|
|
def init(self):
|
|
|
|
|
self.patterns = {}
|
2013-03-08 21:53:35 +00:00
|
|
|
|
self.api.add_event_handler('conversation_say', self.replace_pattern)
|
|
|
|
|
self.api.add_event_handler('muc_say', self.replace_pattern)
|
|
|
|
|
self.api.add_event_handler('private_say', self.replace_pattern)
|
2012-07-07 02:51:52 +00:00
|
|
|
|
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
|
2013-08-02 21:59:49 +00:00
|
|
|
|
body = re.sub('%%%s%%' % pattern,
|
|
|
|
|
lambda x: self.patterns[pattern](message, tab),
|
|
|
|
|
body)
|
2012-07-07 02:51:52 +00:00
|
|
|
|
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])
|
2012-07-07 02:56:38 +00:00
|
|
|
|
else:
|
2012-07-07 02:51:52 +00:00
|
|
|
|
# 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))
|