diff options
-rw-r--r-- | plugins/quote.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/plugins/quote.py b/plugins/quote.py new file mode 100644 index 00000000..a0a4a19a --- /dev/null +++ b/plugins/quote.py @@ -0,0 +1,66 @@ +from plugin import BasePlugin, PluginConfig +from xhtml import clean_text +import common + +import re + +timestamp_re = re.compile(r'^(\d\d\d\d-\d\d-\d\d )?\d\d:\d\d:\d\d$') + +import logging +log = logging.getLogger(__name__) + +class Plugin(BasePlugin): + def init(self): + self.add_command('quote', self.command_quote, "Usage: /quote <timestamp>\nQuote: takes the message received at <timestamp> and insert it in the input, to quote it.", self.completion_quote) + + def command_quote(self, args): + args = common.shell_split(args) + if len(args) in (1, 2): + timestamp = args[-1] + else: + return self.core.command_help('quote') + if re.match(timestamp_re, timestamp) is None: + return self.core.information('Timestamp has a wrong format.', 'Warning') + message = self.find_message_with_timestamp(timestamp) + if message: + before = self.config.get('before_quote', '') % {'nick': message.nickname or '', + 'time': message.str_time} + after = self.config.get('after_quote', '') % {'nick': message.nickname or '', + 'time': message.str_time} + self.core.insert_input_text('%(before)s%(quote)s%(after)s' % {'before': before.replace('\\n', '\n').replace('[SP]', ' '), + 'quote': clean_text(message.txt), + 'after': after.replace('\\n', '\n').replace('[SP]', ' ')}) + else: + self.core.information('No message found for timestamp %s.' % timestamp, 'Warning') + + def find_message_with_timestamp(self, timestamp): + # TODO: handle messages with the same + # timestamp but not the same day + # TODO: complete nicknames we are on the first argument and + # it doesn’t start with a digit + messages = self.core.get_conversation_messages() + if not messages: + return None + for message in messages[::-1]: + if message.str_time == timestamp: + return message + return None + + def completion_quote(self, the_input): + def nick_match(msg): + if not msg.nickname: + return nick == '' + return msg.nickname.lower().startswith(nick.lower()) + messages = self.core.get_conversation_messages() + if not messages: + return + text = the_input.get_text() + args = common.shell_split(text) + n = len(args) + if text.endswith(' '): + n += 1 + nick = '' + if n == 3: + nick = args[1] + messages = list(filter(nick_match, messages)) + return the_input.auto_completion([msg.str_time for msg in messages[::-1]], '') |