woju
/
rcb
1
0
Fork 0

Initial commit

master
Wojtek Porczyk 2020-10-17 22:55:02 +00:00
commit e27cdb6b4e
5 changed files with 280 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/__pycache__

3
__init__.py Normal file
View File

@ -0,0 +1,3 @@
#!/usr/bin/env python3
from .bot_sopel import *

17
bot_sopel.py Normal file
View File

@ -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))

180
templates.py Normal file
View File

@ -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

79
tlib.py Normal file
View File

@ -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