Osterberechnung als SupyBot-Plugin Holidays
This commit is contained in:
commit
0a02736837
|
@ -0,0 +1,24 @@
|
|||
import supybot
|
||||
import supybot.world as world
|
||||
|
||||
# Use this for the version of this plugin. You may wish to put a CVS keyword
|
||||
# in here if you\'re keeping the plugin in CVS or some similar system.
|
||||
__version__ = "%%VERSION%%"
|
||||
|
||||
__author__ = "qwertfisch"
|
||||
__maintainer__ = ""
|
||||
|
||||
# This is a dictionary mapping supybot.Author instances to lists of
|
||||
# contributions.
|
||||
__contributors__ = {}
|
||||
|
||||
from . import config
|
||||
from . import plugin
|
||||
from importlib import reload
|
||||
reload(plugin) # In case we're being reloaded.
|
||||
|
||||
if world.testing:
|
||||
from . import test
|
||||
|
||||
Class = plugin.Class
|
||||
configure = config.configure
|
|
@ -0,0 +1,18 @@
|
|||
import supybot.conf as conf
|
||||
import supybot.registry as registry
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Holidays')
|
||||
|
||||
def configure(advanced):
|
||||
# This will be called by supybot to configure this module. advanced is
|
||||
# a bool that specifies whether the user identified themself as an advanced
|
||||
# user or not. You should effect your configuration by manipulating the
|
||||
# registry as appropriate.
|
||||
from supybot.questions import expect, anything, something, yn
|
||||
conf.registerPlugin('Holidays', True)
|
||||
|
||||
|
||||
Holidays = conf.registerPlugin('Holidays')
|
||||
# This is where your configuration variables (if any) should go. For example:
|
||||
# conf.registerGlobalValue(Holidays, 'someConfigVariableName',
|
||||
# registry.Boolean(False, _("""Help for someConfigVariableName.""")))
|
|
@ -0,0 +1,60 @@
|
|||
from datetime import date
|
||||
|
||||
import supybot.utils as utils
|
||||
from supybot.commands import *
|
||||
import supybot.ircutils as ircutils
|
||||
import supybot.callbacks as callbacks
|
||||
from supybot import commands
|
||||
from supybot.i18n import PluginInternationalization, internationalizeDocstring
|
||||
_ = PluginInternationalization('Holidays')
|
||||
|
||||
|
||||
class Holidays(callbacks.Plugin):
|
||||
"""This plugin calculates and returns the number of days until the next given holiday,
|
||||
like Eastern, Christmas etc."""
|
||||
def __init__(self, irc):
|
||||
self.__parent = super(Holidays, self)
|
||||
self.__parent.__init__(irc)
|
||||
|
||||
def easter(year):
|
||||
a = year % 19
|
||||
b = year % 4
|
||||
c = year % 7
|
||||
k = year // 100
|
||||
p = k // 3
|
||||
q = k // 4
|
||||
M = (15 + k - p - q) % 30
|
||||
d = (19*a + M) % 30
|
||||
N = (4 + k - q) % 7
|
||||
e = (2*b + 4*c + 6*d + N) % 7
|
||||
|
||||
easter_date = 22 + d + e
|
||||
if easter_date > 31:
|
||||
return date(year, 4, easter_date - 31)
|
||||
else:
|
||||
return date(year, 3, easter_date)
|
||||
|
||||
@internationalizeDocstring
|
||||
def holiday(self, irc, msg, args, holiday_name):
|
||||
"""[<holiday name>]
|
||||
|
||||
Returns the number of days until the next given holiday.
|
||||
"""
|
||||
|
||||
if holiday_name.lower() != 'ostern':
|
||||
irc.reply('Tut mir leid, ich beherrsche nur Ostern.')
|
||||
return
|
||||
|
||||
# Determine Easter date for current year
|
||||
easter_current_year = easter(date.today().year)
|
||||
days_remaining = (easter_current_year - date.today()).days
|
||||
# If it has already passed, determine date for next year
|
||||
if days_remaining < 0:
|
||||
easter_next_year = easter(date.today().year + 1)
|
||||
days_remaining = (easter_next_year - date.today()).days
|
||||
|
||||
if days_remaining == 0:
|
||||
irc.reply('Heute ist Ostersonntag.')
|
||||
else:
|
||||
irc.reply(f'Es sind noch {days_remaining} Tage bis Ostersonntag.')
|
||||
holiday = wrap(holiday, ['text'])
|
|
@ -0,0 +1,35 @@
|
|||
# Calculation how many days to next Easter sunday
|
||||
|
||||
import sys
|
||||
from datetime import date
|
||||
|
||||
def easter(year):
|
||||
a = year % 19
|
||||
b = year % 4
|
||||
c = year % 7
|
||||
k = year // 100
|
||||
p = k // 3
|
||||
q = k // 4
|
||||
M = (15 + k - p - q) % 30
|
||||
d = (19*a + M) % 30
|
||||
N = (4 + k - q) % 7
|
||||
e = (2*b + 4*c + 6*d + N) % 7
|
||||
|
||||
easter_date = 22 + d + e
|
||||
if easter_date > 31:
|
||||
return date(year, 4, easter_date - 31)
|
||||
else:
|
||||
return date(year, 3, easter_date)
|
||||
|
||||
# Determine Easter date for current year
|
||||
easter_current_year = easter(date.today().year)
|
||||
days_remaining = (easter_current_year - date.today()).days
|
||||
# If it has already passed, determine date for next year
|
||||
if days_remaining < 0:
|
||||
easter_next_year = easter(date.today().year + 1)
|
||||
days_remaining = (easter_next_year - date.today()).days
|
||||
|
||||
if days_remaining == 0:
|
||||
print("juhu, ostersonntag!")
|
||||
else:
|
||||
print(f"Noch {days_remaining} Tage bis Ostersonntag!")
|
Loading…
Reference in New Issue