poezio/plugins/quote.py
2011-11-23 09:09:48 +01:00

66 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 doesnt 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]], '')