refactored pluginsystem

This commit is contained in:
braph
2016-04-05 14:18:22 +02:00
committed by Thorsten S
parent d59645bacf
commit 5c1aa9b516
18 changed files with 1710 additions and 1712 deletions

88
plugins/record.py Normal file
View File

@@ -0,0 +1,88 @@
# -*- coding: utf-8 -*-
import logging
log = logging.getLogger(__name__)
import time
import config
from plugin_system import pluginfunction, ptypes
@pluginfunction('send_record', 'delivers previously saved message to user', ptypes.MUC_ONLINE)
@config.config_locked
def send_record(**args):
arg_user = args['reply_user']
arg_user_key = arg_user.lower()
user_records = config.runtimeconf_get('user_records')
if arg_user_key in user_records:
records = user_records[arg_user_key]
if not records:
return None
response = {
'msg': '%s, there %s %d message%s for you:\n%s' % (
arg_user,
'is' if len(records) == 1 else 'are',
len(records),
'' if len(records) == 1 else 's',
'\n'.join(records)
)
}
user_records.pop(arg_user_key)
config.runtimeconf_persist()
return response
@pluginfunction(
'record', 'record a message for a now offline user (usage: record {user} {some message};'
' {some message} == "previous" to use the last channel message)', ptypes.COMMAND)
@config.config_locked
def command_record(argv, **args):
if len(argv) < 2:
return {
'msg': '%s: usage: record {user} {some message}' % args['reply_user']
}
target_user = argv[0].lower().strip(':')
message = '{} ({}): '.format(args['reply_user'], time.strftime('%Y-%m-%d %H:%M'))
if argv[1] == "previous":
prev_message_obj = args['stack'][-1]
message += '[{}]: '.format(get_nick_from_object(prev_message_obj))
message += prev_message_obj['body']
else:
message += ' '.join(argv[1:])
if target_user not in config.runtime_config_store['user_records']:
config.runtime_config_store['user_records'][target_user] = []
config.runtime_config_store['user_records'][target_user].append(message)
config.runtimeconf_persist()
return {
'msg': '%s: message saved for %s' % (args['reply_user'], target_user)
}
@pluginfunction('show-records', 'show current offline records', ptypes.COMMAND)
def command_show_recordlist(argv, **args):
log.info('sent offline records list')
user = None if not argv else argv[0]
return {
'msg':
'%s: offline records%s: %s' % (
args['reply_user'],
'' if not user else ' (limited to %s)' % user,
', '.join(
[
'%s (%d)' % (key, len(val)) for key, val in config.runtime_config_store['user_records'].items()
if not user or user.lower() in key.lower()
]
)
)
}