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
parent
cc056b0525
commit
e42828b9b3
|
@ -0,0 +1,3 @@
|
|||
[submodule "thirdparty/koronawirus.lol"]
|
||||
path = thirdparty/koronawirus.lol
|
||||
url = https://github.com/808-Squad/koronawirus.lol
|
|
@ -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)
|
||||
|
|
|
@ -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]),
|
||||
' są ',
|
||||
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,
|
||||
),
|
||||
]
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 12a8830e6f526ac2f49aa7707f76be617977f666
|
8
tlib.py
8
tlib.py
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue