woju
/
rcb
1
0
Fork 0

add !koronawirus

Shamelessly stolen from https://koronawirus.lol
(https://github.com/808-Squad/koronawirus.lol/blob/master/src/generation-logic/generate.js,
(https://github.com/808-Squad/koronawirus.lol/blob/master/src/generation-logic/data.tsv)
and modified so it fits in a single IRC message. I have no intention to
spam multiple messages.
master
woju 2021-02-01 20:58:50 +00:00
parent cc056b0525
commit e42828b9b3
5 changed files with 137 additions and 1 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "thirdparty/koronawirus.lol"]
path = thirdparty/koronawirus.lol
url = https://github.com/808-Squad/koronawirus.lol

View File

@ -6,8 +6,9 @@ from sopel import module
from . import tlib
from . import (
templates_rcb,
templates_koronawirus,
templates_pis,
templates_rcb,
)
def _templatecmd(bot, trigger, templates):
@ -31,3 +32,7 @@ def rcb(bot, trigger):
@module.commands('pis')
def pis(bot, trigger):
return _templatecmd(bot, trigger, templates_pis)
@module.commands('koronawirus')
def koronawirus(bot, trigger):
return _templatecmd(bot, trigger, templates_koronawirus)

119
templates_koronawirus.py Normal file
View File

@ -0,0 +1,119 @@
#!/usr/bin/env python3
# this is stolen from https://koronawirus.lol
import csv
import pathlib
import random
from .tlib import b, c, d, sh
DATAPATH = (pathlib.Path(__file__).parent
/ 'thirdparty/koronawirus.lol/src/generation-logic/data.tsv')
def load_data():
with open(DATAPATH) as file:
return [[cell for cell in line if cell]
for line in csv.reader(file, delimiter='\t')]
_data = load_data()
TEMPLATE_QUARANTINE = [
'wszystkie osoby przybywające do Polski z ', c(*_data[4]), ' ',
c(*_data[5]),
'',
b(0.25,
'zwolnione z kwarantanny',
[
'zobowiązane do odbycia kwarantanny przez ',
(lambda: str(random.randrange(7, 15))),
' dni',
]),
'.',
]
TEMPLATE_KINDERGARTENS = [
'żłobki i przedszkola są ', c(*_data[25]), '.'
]
TEMPLATE_HOURS = [
'w godzinach ', c(*_data[29]),
' zakupy mogą robić tylko osoby ', c(*_data[30]), '.'
]
TEMPLATE_HOTELS = [
'hotele dostępne są tylko dla ',
c(*_data[0]), ', ',
c(*_data[1]), ', ',
c(*_data[2]), ' oraz ',
c(*_data[3]), '.',
]
TEMPLATE_ORG = [
'obowiązuje zakaz organizacji ',
c(*_data[10]),
' oraz ',
c(*_data[11]),
'.'
]
TEMPLATE_AREA = [
'w ',
c(*_data[26]),
' i ',
c(*_data[27]),
' może przebywać maksymalnie jedna osoba na ',
c(*_data[28]),
' m² pomieszczenia.'
]
TEMPLATE_SCHOOLS = [
'nauka zdalna w klasach ', c(*_data[20]), ' szkół podstawowych, ',
c(*_data[21]), ', oraz ', c(*_data[22]),
', za wyjątkiem ', c(*_data[23]), ' (chyba, że ', c(*_data[24]), ').'
]
TEMPLATE_CLOSED = [
'zamknięte są ', c(*_data[12]), ', ', c(*_data[13]), ' i ', c(*_data[14]),
'. Otwarte zostaną ', c(*_data[15]), ' oraz ', c(*_data[16]),
', ale wyłącznie w ', c(*_data[17]), '.'
]
def TEMPLATE_RESTAURANTS():
yield 'restauracje i bary są '
opened = random.choice(_data[18])
yield opened
if 'zamknięte' in opened:
yield ', pod warunkiem '
yield c(*_data[19])
yield '.'
def TEMPLATE_MEETINGS():
n = int(random.choice(_data[7]))
v1, v2 = ('mogą', 'osoby') if 2 <= n % 10 <= 4 else ('może', 'osób')
yield from [
'w zgromadzeniach ', v1, ' uczestniczyć maksymalnie ', str(n), ' ', v2,
' (nie dotyczy ', c(*_data[8]), ' oraz ', c(*_data[9]), ').']
def TEMPLATE_BUS_SEATS():
p = int(random.choice(_data[31]))
n = int(60 * p / 100)
yield from [
'w autobusach może być zajęte max. ', str(n),
' miejsc siedzących (lub ', str(p), '% wszystkich miejsc).']
TEMPLATE = [
'Kancelaria Prezesa Rady Ministrów informuje, że od ', d('%e.%m.%Y'), ' r. ',
c(
TEMPLATE_HOTELS,
TEMPLATE_MEETINGS,
TEMPLATE_ORG,
TEMPLATE_AREA,
TEMPLATE_SCHOOLS,
TEMPLATE_CLOSED,
TEMPLATE_QUARANTINE,
TEMPLATE_RESTAURANTS,
TEMPLATE_KINDERGARTENS,
TEMPLATE_HOURS,
TEMPLATE_BUS_SEATS,
),
]

1
thirdparty/koronawirus.lol vendored Submodule

@ -0,0 +1 @@
Subproject commit 12a8830e6f526ac2f49aa7707f76be617977f666

View File

@ -51,6 +51,14 @@ 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 sh(*args):
'''shuffle args'''
def wrapped():
l = list(args)
random.shuffle(l)
return l
return wrapped()
def b(weight, first, second):
'''branch with probability (weight -> first, 1-weight -> second)'''
return lambda: first if random.random() <= weight else second