Initial commit
commit
e27cdb6b4e
|
@ -0,0 +1 @@
|
|||
/__pycache__
|
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from .bot_sopel import *
|
|
@ -0,0 +1,17 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import pprint
|
||||
|
||||
from sopel import module
|
||||
|
||||
from . import tlib, templates
|
||||
|
||||
|
||||
@module.commands('rcb', 'alertrcb')
|
||||
def rcb(bot, trigger):
|
||||
bot.notice(tlib.render(templates.TEMPLATE))
|
||||
|
||||
@module.commands('debug')
|
||||
@module.require_admin()
|
||||
def debug(bot, trigger):
|
||||
bot.say(pprint.pformat(bot.config.core.channels))
|
|
@ -0,0 +1,180 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
from .tlib import c, b, f, w, int_to_roman, next_isoweekday
|
||||
|
||||
TEMPLATE_STANDARD = [
|
||||
'Uwaga! Dziś ',
|
||||
c('wieczorem', 'w nocy', 'wieczorem i w nocy', 'po południu i w nocy'),
|
||||
' (', (lambda: datetime.date.today().strftime('%e.%m').strip()), ') ',
|
||||
c(
|
||||
'bardzo silny wiatr',
|
||||
'silny wiatr, burze i grad',
|
||||
'ulewny deszcz i burze z gradem',
|
||||
'ulewny deszcz i burze z silnym wiatrem',
|
||||
'silny wiatr i burze z gradem',
|
||||
'bardzo silny wiatr i burze z gradem',
|
||||
), '.',
|
||||
|
||||
b(0.95,
|
||||
[
|
||||
c(
|
||||
' Unikaj otwartych przestrzeni.',
|
||||
' Zabezpiecz rzeczy, które może porwać wiatr.',
|
||||
c(
|
||||
' Zostań w domu, jeśli możesz.',
|
||||
' Jeśli możesz, zostań w domu.',
|
||||
' Jeśli możesz - zostań w domu.',
|
||||
),
|
||||
' Nie zbliżaj się do rzek.',
|
||||
' Nie chowaj się pod drzewami.',
|
||||
' Przygotuj się na podtopienia.',
|
||||
' Stosuj się do poleceń służb.',
|
||||
' W trakcie burzy znajdź bezpieczne schronienie.',
|
||||
' Możliwe przerwy w dostawie prądu.',
|
||||
' Nie biegaj z siekerą po podwórku, bo możesz się skaleczyć.',
|
||||
min=0, max=4),
|
||||
],
|
||||
c(' Nie zesraj się.', ' Kryj ryj!'),
|
||||
),
|
||||
]
|
||||
|
||||
TEMPLATE_FLOOD = [
|
||||
'Uwaga! Fala wezbraniowa na ',
|
||||
b(0.8,
|
||||
['Wiśle w woj. ', c('śląskim', 'małopolskim', 'świętokrzyskim',
|
||||
'podkarpackim', 'lubelskim', 'mazowieckim', 'kujawsko-pomorskim',
|
||||
'pomorskim'),
|
||||
],
|
||||
'Odrze w Wodzisławiu',
|
||||
),
|
||||
' - kulminacja ', c(
|
||||
'w niedzielę i poniedziałek',
|
||||
'w poniedziałek i wtorek',
|
||||
'we wtorek i środę',
|
||||
'w środę i czwartek',
|
||||
'w czwartek i piątek',
|
||||
'w piątek i sobotę',
|
||||
'w sobotę i niedzielę',
|
||||
), '.'
|
||||
]
|
||||
|
||||
TEMPLATE_SHIT = [
|
||||
'Uwaga! Główny Inspektor Sanitarny apeluje: w Wiśle, od Warszawy w stronę ',
|
||||
'Gdańska, unikaj kąpieli i sportów wodnych. Nie używaj do mycia wody ',
|
||||
'z rzeki.'
|
||||
]
|
||||
|
||||
# II tura wyborów prezydenckich w niedzielę {{ data }}. Osoby 60+, kobiety
|
||||
# w ciąży oraz osoby niepełnosprawne będą mogły głosować w komisjach wyborczych
|
||||
# bez kolejki.
|
||||
TEMPLATE_PRESIDENTIAL_ELECTION = [
|
||||
(lambda: int_to_roman(random.randrange(100))),
|
||||
' tura wyborów prezydenckich w niedzielę ',
|
||||
(lambda: next_isoweekday(0).strftime('%e.%m').strip()),
|
||||
'. Osoby 60+, ',
|
||||
c(
|
||||
'kobiety w ciąży, ',
|
||||
'emeryci, ',
|
||||
'renciści, ',
|
||||
'honorowi dawcy krwi, ',
|
||||
'Stierlitz i Kloss, ',
|
||||
'Bohaterowie Związku Radzieckiego, ',
|
||||
'obywatele San Escobar, ',
|
||||
'wyborcy PiS, ',
|
||||
'słuchacze Radia Maryja, ',
|
||||
'fani polskiego rapu, ',
|
||||
'fani Zenka Martyniuka, ',
|
||||
min=2, max=5),
|
||||
'oraz osoby niepełnosprawne będą mogły głosować w komisjach wyborczych ',
|
||||
'bez kolejki.'
|
||||
]
|
||||
|
||||
TEMPLATE_CORONAVIRUS = [
|
||||
]
|
||||
|
||||
|
||||
TEMPLATE_ITHLINNESPEATH = [
|
||||
# Zaprawdę powiadam wam, oto nadchodzi wiek miecza i topora, wiek wilczej
|
||||
# zamieci. Nadchodzi Czas Białego Zimna i Białego Światła, Czas Szaleństwa
|
||||
# i Czas Pogardy, Tedd Deireádh, Czas Końca. Świat umrze wśród mrozu,
|
||||
# a odrodzi się wraz z nowym słońcem. Odrodzi się ze Starszej Krwi, z Hen
|
||||
# Ichaer, z zasianego ziarna. Ziarna, które nie wykiełkuje, lecz wybuchnie
|
||||
# płomieniem.
|
||||
#
|
||||
# Ess'tuath esse! Tak będzie! Wypatrujcie znaków! Jakie to będą znaki,
|
||||
# rzeknę wam - wprzód spłynie ziemia Aen Seidhe, Krwią Elfów...
|
||||
#
|
||||
# -- Andrzej Sapkowski, „Krew elfów” (1994)
|
||||
|
||||
'Zaprawdę powiadam wam, oto nadchodzi wiek miecza i topora, wiek wilczej ',
|
||||
'zamieci. Nadchodzi Czas Białego Zimna i Białego Światła, Czas Szaleństwa ',
|
||||
'i Czas Pogardy, Tedd Deireádh, Czas Końca.',
|
||||
|
||||
c(
|
||||
' Kiedy nadejdzie Białe Zimno, nie jedz Żółtego Śniegu.', # Wiedźmin 3
|
||||
' W trakcie burzy znajdź bezpieczne schronienie.',
|
||||
' Możliwe przerwy w dostawie prądu.',
|
||||
' Stosuj się do poleceń służb.',
|
||||
min=1, max=2),
|
||||
]
|
||||
|
||||
|
||||
TEMPLATE_KONOPIELKA = [
|
||||
# O, do czego idzie! Krowy bedo sie źrebili, kobyły cielili, owieczki
|
||||
# prosili! Chłop z chłopem spać bedzie, baba z babo, wilki latać, bociany
|
||||
# pływać, słońce wzejdzie na zachodzie, zajdzie na wschodzie! [...]
|
||||
# A w miastach, co w miastach sie wyprawia! W dzień śpio, w nocy pracujo,
|
||||
# w piątki nie poszczo, niedzielow nie świętujo! Sodomagomora!
|
||||
#
|
||||
# Żony mężow rzucajo! W Boga nie wierzo. Z ludziow mydło sie robi! Gospody,
|
||||
# kurestwo, sodomagomora!
|
||||
#
|
||||
# -- Edward Redliński, „Konopielka” (1973)
|
||||
|
||||
'O, do czego idzie! Krowy bedo sie źrebili, kobyły cielili, owieczki ',
|
||||
'prosili! Chłop z chłopem spać bedzie, baba z babo, wilki latać, bociany ',
|
||||
'pływać, słońce wzejdzie na zachodzie, zajdzie na wschodzie! ',
|
||||
|
||||
c([
|
||||
'A w miastach, co w miastach sie wyprawia! W dzień śpio, w nocy ',
|
||||
'pracujo, w piątki nie poszczo, niedzielow nie świętujo! ',
|
||||
'Sodomagomora! ',
|
||||
], [
|
||||
'Żony mężow rzucajo! W Boga nie wierzo. Z ludziow mydło sie robi! ',
|
||||
'Gospody, kurestwo, sodomagomora! ',
|
||||
], min=0, max=1)
|
||||
]
|
||||
|
||||
TEMPLATE = w(
|
||||
(20, TEMPLATE_STANDARD),
|
||||
( 2, TEMPLATE_PRESIDENTIAL_ELECTION),
|
||||
( 2, c(TEMPLATE_FLOOD, TEMPLATE_SHIT)),
|
||||
( 1, c(TEMPLATE_ITHLINNESPEATH, TEMPLATE_KONOPIELKA)),
|
||||
)
|
||||
|
||||
|
||||
'''
|
||||
Od {{ data }} rząd wprowadził nowe zasady bezpieczeństwa w związku z koronawirusem.
|
||||
Więcej informacji https://...
|
||||
#ZostanWDomu
|
||||
|
||||
Uwaga! Od {{ data }} nowe, kolejne zasady bezpieczeństwa w związku z koronawirusem.
|
||||
|
||||
Od dziś obowiązuje nakaz zasłaniania ust i nosa. Przy wychodzeniu z domu zakryj te części twarzy.
|
||||
Więcej: https://... nowa-normalnosc-etapy
|
||||
|
||||
Uwaga! W przestrzeni publicznej zasłoń usta i nos. Zachowaj dystans. Od 10.10.
|
||||
obowiązuje żółta strefa epidemiczna. Więcej: https://...
|
||||
|
||||
Uwaga! W przestrzeni publicznej zasłoń usta i nos. Od 17.10 obowiązują nowe
|
||||
zasady w strefie żółtej. Więcej: https://...
|
||||
|
||||
Uwaga! Zasłoń usta i nos. Powiat legionowski w czerwonej strefie epidemicznej.
|
||||
Od 17.10 nowe zasady: https://
|
||||
|
||||
Uwaga! Zasłoń usta i nos. Miasto Warszawa w czerwonej strefie epidemicznej.
|
||||
Od 17.10 nowe zasady: https://
|
||||
'''
|
||||
|
||||
# rcb.gov.pl, twitter.com/RCB_PL
|
|
@ -0,0 +1,79 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import random
|
||||
|
||||
import sopel.module
|
||||
|
||||
_roman_numerals = (
|
||||
(1000, 'M'),
|
||||
( 900, 'CM'),
|
||||
( 500, 'D'),
|
||||
( 400, 'CD'),
|
||||
( 100, 'C'),
|
||||
( 90, 'XC'),
|
||||
( 50, 'L'),
|
||||
( 40, 'XL'),
|
||||
( 10, 'X'),
|
||||
( 9, 'IX'),
|
||||
( 5, 'V'),
|
||||
( 4, 'IV'),
|
||||
( 1, 'I'),
|
||||
)
|
||||
|
||||
def _int_to_roman(n):
|
||||
for value, numeral in _roman_numerals:
|
||||
for _ in range(n // value):
|
||||
yield numeral
|
||||
n -= value
|
||||
assert n >= 0
|
||||
if n == 0:
|
||||
return
|
||||
|
||||
def int_to_roman(n):
|
||||
return ''.join(_int_to_roman(n))
|
||||
|
||||
|
||||
def next_isoweekday(isoweekday, after=None):
|
||||
if after is None:
|
||||
after = datetime.date.today()
|
||||
offset = (isoweekday - after.isoweekday() - 1) % 7 + 1
|
||||
return after + datetime.timedelta(days=offset)
|
||||
|
||||
def _render(template):
|
||||
if isinstance(template, str):
|
||||
yield template
|
||||
return
|
||||
|
||||
if callable(template):
|
||||
yield from _render(template())
|
||||
return
|
||||
|
||||
for t in template:
|
||||
yield from _render(t)
|
||||
|
||||
def render(template):
|
||||
return ''.join(_render(template))
|
||||
|
||||
def c(*args, min=1, max=1):
|
||||
'''choose an amount of template from the args, (min, max) inclusive'''
|
||||
return lambda: random.sample(args, random.randint(min, max))
|
||||
|
||||
def b(weight, first, second):
|
||||
'''branch with probability (weight -> first, 1-weight -> second)'''
|
||||
return lambda: first if random.random() <= weight else second
|
||||
|
||||
def f(freq, template):
|
||||
'''b(freq, template, '')'''
|
||||
return b(freq, template, '')
|
||||
|
||||
def w(*args):
|
||||
'''weighted options'''
|
||||
def wrapped():
|
||||
q = random.random() * sum(weight for weight, template in args)
|
||||
for weight, template in args:
|
||||
q -= weight
|
||||
if q <= 0:
|
||||
return template
|
||||
assert False
|
||||
return wrapped
|
Loading…
Reference in New Issue