This plugin allows to admin to add multiple deadlines (date + message) and displays to all now many days remain till deadlines. Currently displays in Russian.
#$ neutron_plugin 01
# -*- coding: UTF-8 -*-
# Author: gelin
import datetime, time
DEADLINES_FILE = 'dynamic/DEADLINES.txt'
DEADLINES = []
def handler_deadline(type, source, parameters):
global DEADLINES
message = ''
for deadline in DEADLINES:
message += "\n"
message += _format_deadline(
deadline['date'] - datetime.date.today(),
deadline['message'])
if message == '':
smsg(type, source, 'No deadlines.')
else:
smsg(type, source, message)
def handler_deadline_list(type, source, parameters):
global DEADLINES
message = ''
i = 0
for deadline in DEADLINES:
message += "\n"
message += '% 4i %s %s' % (i, deadline['date'], deadline['message'])
i += 1
smsg(type, source, message)
def handler_deadline_delete(type, source, parameters):
global DEADLINES
try:
i = int(parameters)
del DEADLINES[i]
_save_deadlines()
smsg(type, source, 'Removed deadline ' + str(i))
except Exception, e:
smsg(type, source, 'Error: ' + str(e))
def handler_deadline_add(type, source, parameters):
global DEADLINES
if len(string.split(parameters)) < 2:
smsg(type, source, 'Invalid Syntax')
return
try:
(sdate, message) = string.split(parameters, maxsplit=1)
date = _parse_date(sdate)
add_deadline(date, message)
smsg(type, source, 'Added new deadline: %s %s' % (date, message))
except Exception, e:
smsg(type, source, 'Error: ' + str(e))
def add_deadline(date, message):
global DEADLINES
deadline = {}
deadline['date'] = date
deadline['message'] = message
DEADLINES.append(deadline)
_sort_deadlines()
_save_deadlines()
def _format_deadline(timedelta, message):
days = timedelta.days
if days > 2:
return message + u' - через ' + str(days - 1) + u' ' + _plural(days - 1, u'день', u'дня', u'дней') + '.'
if days == 2:
return message + u' - послезавтра.'
if days == 1:
return message + u' - завтра.'
if days == 0:
return message + u' - сегодня!'
if days == -1:
return message + u' - вчера!!'
if days == -2:
return message + u'- позавчера!!!'
if days < -2:
return message + u' - давно.'
def _plural(number, form1, form2, form3):
if number in (11, 12, 13, 14):
return form3
else:
tens = number % 10
if tens == 1:
return form1
elif tens in (2, 3, 4):
return form2
else:
return form3
def _load_deadlines():
global DEADLINES
DEADLINES = eval(read_file(DEADLINES_FILE))
_sort_deadlines()
def _save_deadlines():
global DEADLINES
write_file(DEADLINES_FILE, str(DEADLINES))
def _sort_deadlines():
global DEADLINES
DEADLINES.sort(_cmp_deadlines)
def _cmp_deadlines(a, b):
d = cmp(a['date'], b['date'])
if d == 0:
return cmp(a['message'], b['message'])
else:
return d
def _parse_date(sdate):
date = time.strptime(sdate, '%Y-%m-%d')
return datetime.date(date.tm_year, date.tm_mon, date.tm_mday)
initialize_file(DEADLINES_FILE, "[]")
_load_deadlines()
register_command_handler(handler_deadline,
'!deadline', 0,
'Displays the number of days till deadline.',
'!deadline', ['!deadline', '!dl'])
register_command_handler(handler_deadline,
'!dl', 0,
'Displays the number of days till deadline.',
'!dl', ['!deadline', '!dl'])
register_command_handler(handler_deadline_list,
'!deadline_list', 100,
'Displays all registered deadlines.',
'!deadline_list', ['!deadline_list', '!dl_list'])
register_command_handler(handler_deadline_list,
'!dl_list', 100,
'Displays all registered deadlines.',
'!dl_list', ['!deadline_list', '!dl_list'])
register_command_handler(handler_deadline_delete,
'!deadline_del', 100,
'Removes deadline with specified ID.',
'!deadline_del id', ['!deadline_del 0', '!dl_del 5'])
register_command_handler(handler_deadline_delete,
'!dl_del', 100,
'Removes deadline with specified ID.',
'!dl_del id', ['!deadline_del 0', '!dl_del 5'])
register_command_handler(handler_deadline_add,
'!deadline_add', 100,
'Adds new deadline.',
'!deadline_add yyyy-mm-dd message',
['!deadline_add 2009-01-01 New Year', '!dl_add 2008-05-09 Victory'])
register_command_handler(handler_deadline_add,
'!dl_add', 100,
'Adds new deadline.',
'!dl_add yyyy-mm-dd message',
['!deadline_add 2009-01-01 New Year', '!dl_add 2008-05-09 Victory'])
Thanks, plugin committed to
Thanks, plugin committed to Neutron trunk SVN.