From a6bfc1b5f21a8a3b8474fc16f864610e1b3c87b9 Mon Sep 17 00:00:00 2001 From: Jakub Hampl Date: Thu, 4 Feb 2021 16:53:01 +0100 Subject: [PATCH] Added daily reminder --- thorn/Config/daily.json | 368 ++++++++++++++++++++++++++ thorn/Config/pairs.json | 1 + thorn/Program.cs | 13 + thorn/Reminder/JobSchedule.cs | 16 ++ thorn/Reminder/QuartzHostedService.cs | 68 +++++ thorn/Reminder/ReminderJob.cs | 49 ++++ thorn/Reminder/SingletonJobFactory.cs | 23 ++ thorn/Services/DataStorageService.cs | 3 + thorn/thorn.csproj | 3 + 9 files changed, 544 insertions(+) create mode 100644 thorn/Config/daily.json create mode 100644 thorn/Reminder/JobSchedule.cs create mode 100644 thorn/Reminder/QuartzHostedService.cs create mode 100644 thorn/Reminder/ReminderJob.cs create mode 100644 thorn/Reminder/SingletonJobFactory.cs diff --git a/thorn/Config/daily.json b/thorn/Config/daily.json new file mode 100644 index 0000000..b1c5ed1 --- /dev/null +++ b/thorn/Config/daily.json @@ -0,0 +1,368 @@ +{ + "01 01": "**ŠŤASTNÝ NOVÝ ROK \\o/**\n\n**Události:**\n", + "02 01": "Svátek má **Karina**\n\n**Události:**\n", + "03 01": "Svátek má **Radmila**\n\n**Události:**\n", + "04 01": "Svátek má **Diana**\n\n**Události:**\n", + "05 01": "Svátek má **Dalimil**\n\n**Události:**\n", + "06 01": "Svátek má **Tři králové**\n\n**Události:**\n", + "07 01": "Svátek má **Vilma**\n\n**Události:**\n", + "08 01": "Svátek má **Čestmir**\n\n**Události:**\n", + "09 01": "Svátek má **Vladan**\n\n**Události:**\n", + "10 01": "Svátek má **Břetislav**\n\n**Události:**\n", + "11 01": "Svátek má **Bohdana**\n\n**Události:**\n", + "12 01": "Svátek má **Pravoslav**\n\n**Události:**\n", + "13 01": "Svátek má **Edita**\n\n**Události:**\n", + "14 01": "Svátek má **Radovan**\n\n**Události:**\n", + "15 01": "Svátek má **Alice**\n\n**Události:**\n", + "16 01": "Svátek má **Ctirad**\n\n**Události:**\n", + "17 01": "Svátek má **Drahoslav**\n\n**Události:**\n", + "18 01": "Svátek má **Vladislav**\n\n**Události:**\n", + "19 01": "Svátek má **Doubravka**\n\n**Události:**\n", + "20 01": "Svátek má **Ilona**\n\n**Události:**\n", + "21 01": "Svátek má **Běla**\n\n**Události:**\n", + "22 01": "Svátek má **Slavomir**\n\n**Události:**\n", + "23 01": "Svátek má **Zdeněk**\n\n**Události:**\n", + "24 01": "Svátek má **Milena**\n\n**Události:**\n", + "25 01": "Svátek má **Miloš**\n\n**Události:**\n", + "26 01": "Svátek má **Zora**\n\n**Události:**\n", + "27 01": "Svátek má **Ingrid**\n\n**Události:**\n", + "28 01": "Svátek má **Otýlie**\n\n**Události:**\n", + "29 01": "Svátek má **Zdislava**\n\n**Události:**\n", + "30 01": "Svátek má **Robin**\n\n**Události:**\n", + "31 01": "Svátek má **Marika**\n\n**Události:**\n", + "01 02": "Svátek má **Hynek**\n\n**Události:**\n", + "02 02": "Svátek má **Nela**\n\n**Události:**\n", + "03 02": "Svátek má **Blažej**\n\n**Události:**\n", + "04 02": "Svátek má **Jarmila**\n\n**Události:**\n", + "05 02": "Svátek má **Dobromila**\n\n**Události:**\n**62** – Zemětřesení a sopečná činnost zničila asi 60 % Pompejí.\n**1488** – Římsko-německý císař Maxmilián I. Habsburský je zajat v Belgii\n**1974** – Sonda Mariner 10 provedla jako první při průletu okolo Venuše gravitační manévr", + "06 02": "Svátek má **Vanda**\n\n**Události:**\n**60** – První zmínka o názvu dne: Nápis na pompejské zdi označil tento den jako Solis (neděle). Podle moderního kalendáře bychom jej nazvali středou\n**337** – 35. papežem byl zvolen Julius I\n**1620** – Habsburská vojska vstoupila na české území, aby porazila České stavovské povstání.\n**1901** – V Paříži byly instalovány první veřejné telefony na nádražích\n**1922** – Papežem byl zvolen Pius XI\n**1941** – Britové obsadili Benghází\n**1952** – Alžběta II. se stala britskou královnou po smrti svého otce krále Jiřího VI., ale oficiálně byla korunována až o rok později\n**2004** – Sebevražedný útočník zabil 41 cestujících v moskevském metru\n**2016** – Nejméně 116 lidí bylo zabito, poté co zemětřesení o síle 6,7 stupně Richterovy škály zasáhlo město Pching-tung na ostrově Tchaj-wan.", + "07 02": "Svátek má **Veronika**\n\n**Události:**\n**999** – Po smrti Boleslava II. se stal jeho nástupcem jeho syn Boleslav III., zvaný Ryšavý\n**1522** – Bruselská dohoda rozdělila Habsburky na španělskou a rakouskou větev\n**1550** – Giovanni Maria del Monte zvolen 221. papežem, vybral si jméno Julius III\n**1945** – Na žádost Švýcarska bylo z koncentračního tábora Terezín propuštěno 1200 vězňů\n**1968** – Při startu byla zničena Luna 1968A, která se měla stát umělou družicí Měsíce\n**1990** – Činnost Národní fronty ukončena\n**2005** - Tři neznámí útočníci vnikli na španělský konzulát ve švýcarském hlavním městě Bernu a zajali několik zaměstnanců jako rukojmí", + "08 02": "Svátek má **Milada**\n\n**Události:**\n**1238** – Mongolové vypálili ruské město Vladimir\n**1348** – Král Karel IV. založil Nové Město Pražské, kterému udělil stejná práva, jakým se těšilo Staré Město\n**1672** – Isaac Newton předčítal svou první studii o optice před Královskou společností v Londýně a představil svůj dalekohled\n**1902** – Na malém francouzském antilském ostrově Martinik došlo k silnému výbuchu sopky Montagne Pelée. Katastrofa si vyžádala 26 000 životů\n**1924** – Skotský průkopník televize John Logie Baird uskutečnil první televizní přenos na světě, z Londýna do New Yorku\n**1945** – Paraguay vyhlásila válku Německu a Japonsku\n**1952** – Vyšlo poslední číslo Lidových novin, vydávání obnoveno v roce 1990\n**1993** – Proběhla měnová odluka, při které vznikla koruna česká\n**2006** – Čad a Súdán podepsaly Tripolskou dohodu a ukončily tak vzájemný válečný konflikt", + "09 02": "Svátek má **Apolena**\n\n\n**Události:**\n**1267** – Wroclawský výnos přikazuje všem židům ve Slezsku nosit speciální čapku (jarmulku)\n**1354** – Anna Svídnická, třetí manželka Karla IV., byla korunována na německou královnu\n**1540** – První zaznamenaný závod v Anglii se odehrál na Roodee Fields v Chesteru\n**1674** – Angličané vybojovali zpět New York od Holanďanů\n**1742** – Pruská armáda krále Fridricha II. začala obléhat Brno\n**1825** – John Quincy Adams se stává 6. prezidentem USA\n**1961** – Základ skupiny The Beatles, zatím ještě bez Ringo Starra a George Harrisona vystoupila v Cavern Clubu poprvé jako Beatles\n**1969** – Proběhl první zkušební let Boeingu 747\n**1971** – Program Apollo: Apollo 14 po třetím pilotovaném přistání na Měsíci úspěšně přistálo na Zemi\n**1975** – Sovětská kosmická loď Sojuz 17 úspěšně přistála na Zemi\n**2017** – Začal platit zákon o střetu zájmů politiků, známý jako lex Babiš", + "10 02": "Svátek má **Mojmir**\n\n**Události:**\n**1306** – Před oltářem kostela Greyfriars v Dumfries, Robert de Bruce zavraždil Johna Comyna a rozpoutal tak revoluci o skotskou nezávislost\n**1364** – V Brně uzavřena dynastická smlouva mezi Lucemburky a Habsburky. Obě strany se zavázaly, že v případě vymření jednoho z rodů připadnou všechny jejich země rodu druhému\n**1774** – Andrew Becker předvádí svůj vynález - potápěčský úbor\n**1799** – Počátek Napoleonova tažení do Sýrie\n**1879** – Na Dole Döllinger u Duchcova na Teplicku se utopilo 23 horníků\n**1940** – Byla zahájena deportace Poláků do SSSR\n**1981** – Mluvčími Charty 77 se stali Václav Malý, Bedřich Placák a Jaroslav Šabata\n**1996** – Superpočítač Deep Blue firmy IBM poprvé poráží šachového velmistra Garriho Kasparova\n**2000** – Byl oznámen objev kvark–gluonového plazmatu\n**2005** – Severní Korea přiznala vlastnictví atomových zbraní\n**2006** – Začaly Zimní olympijské hry 2006 v italském Turíně\n**2006** – Česká televize zahájila vysílání sportovního kanálu ČT4 Sport\n**2018** – V jihokorejském Pchjongčchangu začaly XXIII. Zimní olympijské hry 2018", + "11 02": "Svátek má **Božena**\n\n**Události:**\n**660 př. n. l**. – Dle tradice bylo císařem Jimmu Tenno založeno Japonsko\n**1752** – Pennsylvania Hospital byla otevřena jako první nemocnice ve USA\n**1808** – Antracitové uhlí bylo poprvé experimentálně spáleno jako palivo\n**1814** – Byla vyhlášena nezávislost Norska\n**1826** – V Londýně byla založena *University of London*\n**1938** – Britská rozhlasová a televizní společnost BBC uvedla první vědeckofantastický televizní pořad – adaptaci části hry Karla Čapka R. U. R.\n**1971** – 87 zemí, např. Spojené státy americké, Spojené království, a SSSR, podepsalo Smlouvu o mořích zakazující jaderné zbraně v mezinárodních vodách\n**1978** – Čínská lidová republika zavedla zákaz publikace prací Aristotela, Williama Shakespeara a Charlese Dickense\n**2005** – Nejméně 60 lidí zahynulo po protržení přehrady v pákistánské provincii Balučistán", + "12 02": "Svátek má **Slavěna**\n\n**Události:**\n**1130** – 164. Papežem byl zvolen Inocent II.\n**1348** – Král Karel IV. potvrdil Brnu všechna předchozí privilegia, která jim udělili králové čeští i markrabata moravská\n**1404** – V koupelně špitálu Ducha svatého před městskými hradbami a provedl italský děkan vídeňské lékařské fakulty první pitvu mužského těla\n**1784** – Spojením čtyř samostatných královských měst (Staré Město, Nové Město, Malá Strana, Hradčany) vzniklo Královské hlavní město Praha\n**1809** – Narodil se Abraham Lincoln\n**1898** – anglický obchodník Henry Lindfield se stal prvním řidičem, který zahynul při dopravní nehodě\n**1911** – V Těšíně (dnes Český Těšín a Cieszyn) byl zahájen provoz elektrické tramvaje\n**1949** – Při výbuchu metanu na Dole Doubrava v Orlové zahynulo 19 horníků\n**1950** – Albert Einstein varoval v televizním vystoupení před výrobou vodíkové bomby, kterou požadoval americký prezident Harry S. Truman\n**1961** – Odstartovala Veněra 1 – první sonda k cizí planetě", + "13 02": "Svátek má **Věnceslav**\nSvětový den rádia\n\n**Události:**\n**1633** – Galileo Galilei přijel do Říma před katolický soud – inkvizici, aby obhajoval svou teorii o kulatosti a otáčení Země\n**1866** – Jesse James a jeho gang se dopustil první ozbrojené bankovní loupeže ve Spojených státech v historii během míru v Liberty (Missouri)\n**1880** – Thomas Edison objevil tepelnou emisi\n**1881** – V Paříži začala vydávat aktivistka Hubertine Auclertová 1. feministické noviny La Citoyenne\n**1992** – Oficiální připojení ČSFR k Internetu. Jako první bylo připojeno ČVUT v Praze\n**1932** – Skončily III. Zimní olympijské hry\n**1942** – V SSSR byla vyhlášena všeobecná mobilizace mužů (do 55 let) a žen (do 45 let)\n**1988** – Byly zahájeny zimní olympijské hry v Calgary, Kanadě\n**1997** – Byla zahájena mise STS-82 raketoplánu Discovery, při níž proběhly opravné práce na Hubbleově vesmírném dalekohledu\n**2001** – Zemětřesení o síle 6,6 Richterovy stupnici postihlo El Salvador, zabilo přinejmenším 400 lidí\n**2004** – Harvard-Smithsonian Center for Astrophysics objevilo ve vesmíru dosud největšího bílého trpaslíka, hvězdu 'BPM 37093'", + "14 02": "Dnes je **Valentýn** <3\n\n**Události:**\n**1140** – Kníže Soběslav I. zemřel, novým knížetem se stal jeho synovec Vladislav II.\n**1859** – Oregon se připojil jako 33. stát k USA\n**1876** – Alexander Graham Bell si nechal patentovat telefon\n**1924** – Byla založena společnost IBM\n**1939** – Na vodu byla spuštěna bitevní loď Bismarck\n**1940** – Rudá armáda v zimní válce prolomila Mannerheimovu linii\n**1945** – Poprvé v průběhu 2. světové války byla bombardována Praha\n**1961** – V laboratořích kalifornské univerzity v Berkeley byl připraven umělý prvek lawrencium\n**1970** – Prvním pokusným vysíláním barevné televize v Československu byl přímý přenos z Mistrovství světa v lyžování ve Vysokých Tatrách\n**1989** – Na oběžnou dráhu bylo umístěno prvních 24 satelitů pro GPS\n**2000** – Kosmická sonda NEAR Shoemaker vstoupila na oběžnou dráhu okolo planetky 433 Eros\n**2005** – Byl spuštěn YouTube", + "15 02": "Svátek má **Jiřina**\n\n**Události:**\n", + "16 02": "Svátek má **Ljuba**\n\n**Události:**\n", + "17 02": "Svátek má **Miloslava**\n\n**Události:**\n", + "18 02": "Svátek má **Gizela**\n\n**Události:**\n", + "19 02": "Svátek má **Patrik**\n\n**Události:**\n", + "20 02": "Svátek má **Oldřich**\n\n**Události:**\n", + "21 02": "Svátek má **Lenka**\n\n**Události:**\n", + "22 02": "Svátek má **Petr**\n\n**Události:**\n", + "23 02": "Svátek má **Svatopluk**\n\n**Události:**\n", + "24 02": "Svátek má **Matěj**\n\n**Události:**\n", + "25 02": "Svátek má **Liliana**\n\n**Události:**\n", + "26 02": "Svátek má **Dorota**\n\n**Události:**\n", + "27 02": "Svátek má **Alexandr**\n\n**Události:**\n", + "28 02": "Svátek má **Lumir**\n\n**Události:**\n", + "29 02": "Svátek má **Horymír**\n\n**Události:**\n", + "01 03": "Svátek má **Bedřich**\n\n**Události:**\n", + "02 03": "Svátek má **Anežka**\n\n**Události:**\n", + "03 03": "Svátek má **Kamil**\n\n**Události:**\n", + "04 03": "Svátek má **Stela**\n\n**Události:**\n", + "05 03": "Svátek má **Kazimír**\n\n**Události:**\n", + "06 03": "Svátek má **Miroslav**\n\n**Události:**\n", + "07 03": "Svátek má **Tomáš**\n\n**Události:**\n", + "08 03": "Svátek má **Gabriela**\n\n**Události:**\n", + "09 03": "Svátek má **Františka**\n\n**Události:**\n", + "10 03": "Svátek má **Viktorie**\n\n**Události:**\n", + "11 03": "Svátek má **Anděla**\n\n**Události:**\n", + "12 03": "Svátek má **Řehoř**\n\n**Události:**\n", + "13 03": "Svátek má **Růžena**\n\n**Události:**\n", + "14 03": "Svátek má **Matylda a Růt**\n\n**Události:**\n", + "15 03": "Svátek má **Ida**\n\n**Události:**\n", + "16 03": "Svátek má **Elena a Herbert**\n\n**Události:**\n", + "17 03": "Svátek má **Vlastimil**\n\n**Události:**\n", + "18 03": "Svátek má **Eduard**\n\n**Události:**\n", + "19 03": "Svátek má **Josef**\n\n**Události:**\n", + "20 03": "Svátek má **Světlana**\n\n**Události:**\n", + "21 03": "Svátek má **Radek**\n\n**Události:**\n", + "22 03": "Svátek má **Leona**\n\n**Události:**\n", + "23 03": "Svátek má **Ivona**\n\n**Události:**\n", + "24 03": "Svátek má **Gabriel**\n\n**Události:**\n", + "25 03": "Svátek má **Marián**\n\n**Události:**\n", + "26 03": "Svátek má **Emanuel**\n\n**Události:**\n", + "27 03": "Svátek má **Dita**\n\n**Události:**\n", + "28 03": "Svátek má **Soňa**\n\n**Události:**\n", + "29 03": "Svátek má **Taťána**\n\n**Události:**\n", + "30 03": "Svátek má **Arnošt**\n\n**Události:**\n", + "31 03": "Svátek má **Kvido**\n\n**Události:**\n", + "01 04": "Svátek má **Hugo**\n\n**Události:**\n", + "02 04": "Svátek má **Erika**\n\n**Události:**\n", + "03 04": "Svátek má **Richard**\n\n**Události:**\n", + "04 04": "Svátek má **Ivana**\n\n**Události:**\n", + "05 04": "Svátek má **Miroslava**\n\n**Události:**\n", + "06 04": "Svátek má **Vendula**\n\n**Události:**\n", + "07 04": "Svátek má **Heřman a Hermína**\n\n**Události:**\n", + "08 04": "Svátek má **Ema**\n\n**Události:**\n", + "09 04": "Svátek má **Dušan**\n\n**Události:**\n", + "10 04": "Svátek má **Darja**\n\n**Události:**\n", + "11 04": "Svátek má **Izabela**\n\n**Události:**\n", + "12 04": "Svátek má **Julius**\n\n**Události:**\n", + "13 04": "Svátek má **Aleš**\n\n**Události:**\n", + "14 04": "Svátek má **Vincenc**\n\n**Události:**\n", + "15 04": "Svátek má **Anastázie**\n\n**Události:**\n", + "16 04": "Svátek má **Irena**\n\n**Události:**\n", + "17 04": "Svátek má **Rudolf**\n\n**Události:**\n", + "18 04": "Svátek má **Valérie**\n\n**Události:**\n", + "19 04": "Svátek má **Rostislav**\n\n**Události:**\n", + "20 04": "Svátek má **Marcela**\n\n**Události:**\n", + "21 04": "Svátek má **Alexandra**\n\n**Události:**\n", + "22 04": "Svátek má **Evžénie**\n\n**Události:**\n", + "23 04": "Svátek má **Vojtěch**\n\n**Události:**\n", + "24 04": "Svátek má **Jiří**\n\n**Události:**\n", + "25 04": "Svátek má **Marek**\n\n**Události:**\n", + "26 04": "Svátek má **Oto**\n\n**Události:**\n", + "27 04": "Svátek má **Jaroslav**\n\n**Události:**\n", + "28 04": "Svátek má **Vlastislav**\n\n**Události:**\n", + "29 04": "Svátek má **Robert**\n\n**Události:**\n", + "30 04": "Svátek má **Blahoslav**\n\n**Události:**\n", + "01 05": "Svátek má **Svátek prace**\n\n**Události:**\n", + "02 05": "Svátek má **Zigmund**\n\n**Události:**\n", + "03 05": "Svátek má **Alexej**\n\n**Události:**\n", + "04 05": "Svátek má **Květoslav**\n\n**Události:**\n", + "05 05": "Svátek má **Klaudie**\n\n**Události:**\n", + "06 05": "Svátek má **Radoslav**\n\n**Události:**\n", + "07 05": "Svátek má **Stanislav**\n\n**Události:**\n", + "08 05": "Svátek má **Státní svátek**\n\n**Události:**\n", + "09 05": "Svátek má **Ctibor**\n\n**Události:**\n", + "10 05": "Svátek má **Blažena**\n\n**Události:**\n", + "11 05": "Svátek má **Svatava**\n\n**Události:**\n", + "12 05": "Svátek má **Pankrác**\n\n**Události:**\n", + "13 05": "Svátek má **Servác**\n\n**Události:**\n", + "14 05": "Svátek má **Bonifác**\n\n**Události:**\n", + "15 05": "Svátek má **Žofie**\n\n**Události:**\n", + "16 05": "Svátek má **Přemysl**\n\n**Události:**\n", + "17 05": "Svátek má **Aneta**\n\n**Události:**\n", + "18 05": "Svátek má **Nataša**\n\n**Události:**\n", + "19 05": "Svátek má **Ivo**\n\n**Události:**\n", + "20 05": "Svátek má **Zbyšek**\n\n**Události:**\n", + "21 05": "Svátek má **Monika**\n\n**Události:**\n", + "22 05": "Svátek má **Emil**\n\n**Události:**\n", + "23 05": "Svátek má **Vladimír**\n\n**Události:**\n", + "24 05": "Svátek má **Jana a Vanesa**\n\n**Události:**\n", + "25 05": "Svátek má **Viola**\n\n**Události:**\n", + "26 05": "Svátek má **Filip**\n\n**Události:**\n", + "27 05": "Svátek má **Valdemar**\n\n**Události:**\n", + "28 05": "Svátek má **Vilém**\n\n**Události:**\n", + "29 05": "Svátek má **Maxmilián**\n\n**Události:**\n", + "30 05": "Svátek má **Ferdinand**\n\n**Události:**\n", + "31 05": "Svátek má **Kamila**\n\n**Události:**\n", + "01 06": "Svátek má **Laura**\n\n**Události:**\n", + "02 06": "Svátek má **Jarmil**\n\n**Události:**\n", + "03 06": "Svátek má **Tamara**\n\n**Události:**\n", + "04 06": "Svátek má **Dalibor**\n\n**Události:**\n", + "05 06": "Svátek má **Dobroslav**\n\n**Události:**\n", + "06 06": "Svátek má **Norbert**\n\n**Události:**\n", + "07 06": "Svátek má **Iveta a Slavoj**\n\n**Události:**\n", + "08 06": "Svátek má **Medard**\n\n**Události:**\n", + "09 06": "Svátek má **Stanislava**\n\n**Události:**\n", + "10 06": "Svátek má **Gita**\n\n**Události:**\n", + "11 06": "Svátek má **Bruno**\n\n**Události:**\n", + "12 06": "Svátek má **Antonie**\n\n**Události:**\n", + "13 06": "Svátek má **Antonin**\n\n**Události:**\n", + "14 06": "Svátek má **Roland**\n\n**Události:**\n", + "15 06": "Svátek má **Vít**\n\n**Události:**\n", + "16 06": "Svátek má **Zbyněk**\n\n**Události:**\n", + "17 06": "Svátek má **Adolf**\n\n**Události:**\n", + "18 06": "Svátek má **Milan**\n\n**Události:**\n", + "19 06": "Svátek má **Leoš**\n\n**Události:**\n", + "20 06": "Svátek má **Květa**\n\n**Události:**\n", + "21 06": "Svátek má **Alois**\n\n**Události:**\n", + "22 06": "Svátek má **Pavla**\n\n**Události:**\n", + "23 06": "Svátek má **Zdeňka**\n\n**Události:**\n", + "24 06": "Svátek má **Jan**\n\n**Události:**\n", + "25 06": "Svátek má **Ivan**\n\n**Události:**\n", + "26 06": "Svátek má **Adriana**\n\n**Události:**\n", + "27 06": "Svátek má **Ladislav**\n\n**Události:**\n", + "28 06": "Svátek má **Lubomir**\n\n**Události:**\n", + "29 06": "Svátek má **Petr a Pavel**\n\n**Události:**\n", + "30 06": "Svátek má **Šárka**\n\n**Události:**\n", + "01 07": "Svátek má **Jaroslava**\n\n**Události:**\n", + "02 07": "Svátek má **Patricie**\n\n**Události:**\n", + "03 07": "Svátek má **Radomir**\n\n**Události:**\n", + "04 07": "Svátek má **Prokop**\n\n**Události:**\n", + "05 07": "Svátek má **Cyril a Metoděj**\n\n**Události:**\n", + "06 07": "Svátek má **Mistr Jan Hus**\n\n**Události:**\n", + "07 07": "Svátek má **Bohuslava**\n\n**Události:**\n", + "08 07": "Svátek má **Nora**\n\n**Události:**\n", + "09 07": "Svátek má **Drahoslava**\n\n**Události:**\n", + "10 07": "Svátek má **Libuše a Amálie**\n\n**Události:**\n", + "11 07": "Svátek má **Olga**\n\n**Události:**\n", + "12 07": "Svátek má **Bořek**\n\n**Události:**\n", + "13 07": "Svátek má **Markéta**\n\n**Události:**\n", + "14 07": "Svátek má **Karolína**\n\n**Události:**\n", + "15 07": "Svátek má **Jindřich**\n\n**Události:**\n", + "16 07": "Svátek má **Luboš**\n\n**Události:**\n", + "17 07": "Svátek má **Martina**\n\n**Události:**\n", + "18 07": "Svátek má **Drahomira**\n\n**Události:**\n", + "19 07": "Svátek má **Čeněk**\n\n**Události:**\n", + "20 07": "Svátek má **Ilja**\n\n**Události:**\n", + "21 07": "Svátek má **Vítězslav**\n\n**Události:**\n", + "22 07": "Svátek má **Magdaléna**\n\n**Události:**\n", + "23 07": "Svátek má **Libor**\n\n**Události:**\n", + "24 07": "Svátek má **Kristýna**\n\n**Události:**\n", + "25 07": "Svátek má **Jakub**\n\n**Události:**\n", + "26 07": "Svátek má **Anna**\n\n**Události:**\n", + "27 07": "Svátek má **Věroslav**\n\n**Události:**\n", + "28 07": "Svátek má **Viktor**\n\n**Události:**\n", + "29 07": "Svátek má **Marta**\n\n**Události:**\n", + "30 07": "Svátek má **Bořivoj**\n\n**Události:**\n", + "31 07": "Svátek má **Ignác**\n\n**Události:**\n", + "01 08": "Svátek má **Oskar**\n\n**Události:**\n", + "02 08": "Svátek má **Gustav**\n\n**Události:**\n", + "03 08": "Svátek má **Miluše**\n\n**Události:**\n", + "04 08": "Svátek má **Dominik**\n\n**Události:**\n", + "05 08": "Svátek má **Kristián**\n\n**Události:**\n", + "06 08": "Svátek má **Oldriška**\n\n**Události:**\n", + "07 08": "Svátek má **Lada**\n\n**Události:**\n", + "08 08": "Svátek má **Soběslav**\n\n**Události:**\n", + "09 08": "Svátek má **Roman**\n\n**Události:**\n", + "10 08": "Svátek má **Vavřinec**\n\n**Události:**\n", + "11 08": "Svátek má **Zuzana**\n\n**Události:**\n", + "12 08": "Svátek má **Klára**\n\n**Události:**\n", + "13 08": "Svátek má **Alena**\n\n**Události:**\n", + "14 08": "Svátek má **Alan**\n\n**Události:**\n", + "15 08": "Svátek má **Hana**\n\n**Události:**\n", + "16 08": "Svátek má **Jáchym**\n\n**Události:**\n", + "17 08": "Svátek má **Petra**\n\n**Události:**\n", + "18 08": "Svátek má **Helena**\n\n**Události:**\n", + "19 08": "Svátek má **Ludvík**\n\n**Události:**\n", + "20 08": "Svátek má **Bernard**\n\n**Události:**\n", + "21 08": "Svátek má **Johana**\n\n**Události:**\n", + "22 08": "Svátek má **Bohuslav**\n\n**Události:**\n", + "23 08": "Svátek má **Sandra**\n\n**Události:**\n", + "24 08": "Svátek má **Bartoloměj**\n\n**Události:**\n", + "25 08": "Svátek má **Radim**\n\n**Události:**\n", + "26 08": "Svátek má **Luděk**\n\n**Události:**\n", + "27 08": "Svátek má **Otakar**\n\n**Události:**\n", + "28 08": "Svátek má **Augustýn**\n\n**Události:**\n", + "29 08": "Svátek má **Evelína**\n\n**Události:**\n", + "30 08": "Svátek má **Vladěna**\n\n**Události:**\n", + "31 08": "Svátek má **Pavlína**\n\n**Události:**\n", + "01 09": "Svátek má **Linda a Samuel**\n\n**Události:**\n", + "02 09": "Svátek má **Adéla**\n\n**Události:**\n", + "03 09": "Svátek má **Bronislav**\n\n**Události:**\n", + "04 09": "Svátek má **Jindřiška**\n\n**Události:**\n", + "05 09": "Svátek má **Boris**\n\n**Události:**\n", + "06 09": "Svátek má **Boleslav**\n\n**Události:**\n", + "07 09": "Svátek má **Regína**\n\n**Události:**\n", + "08 09": "Svátek má **Mariana**\n\n**Události:**\n", + "09 09": "Svátek má **Daniela**\n\n**Události:**\n", + "10 09": "Svátek má **Irma**\n\n**Události:**\n", + "11 09": "Svátek má **Denisa a Denis**\n\n**Události:**\n", + "12 09": "Svátek má **Marie**\n\n**Události:**\n", + "13 09": "Svátek má **Lubor**\n\n**Události:**\n", + "14 09": "Svátek má **Radka**\n\n**Události:**\n", + "15 09": "Svátek má **Jolana**\n\n**Události:**\n", + "16 09": "Svátek má **Ludmila**\n\n**Události:**\n", + "17 09": "Svátek má **Naděžda**\n\n**Události:**\n", + "18 09": "Svátek má **Kryštof**\n\n**Události:**\n", + "19 09": "Svátek má **Zita**\n\n**Události:**\n", + "20 09": "Svátek má **Oleg**\n\n**Události:**\n", + "21 09": "Svátek má **Matouš**\n\n**Události:**\n", + "22 09": "Svátek má **Darina**\n\n**Události:**\n", + "23 09": "Svátek má **Berta**\n\n**Události:**\n", + "24 09": "Svátek má **Jaromír**\n\n**Události:**\n", + "25 09": "Svátek má **Zlata**\n\n**Události:**\n", + "26 09": "Svátek má **Andrea**\n\n**Události:**\n", + "27 09": "Svátek má **Jonáš**\n\n**Události:**\n", + "28 09": "Svátek má **Václav**\n\n**Události:**\n", + "29 09": "Svátek má **Michal**\n\n**Události:**\n", + "30 09": "Svátek má **Jeroným**\n\n**Události:**\n", + "01 10": "Svátek má **Igor**\n\n**Události:**\n", + "02 10": "Svátek má **Olívie a Oliver**\n\n**Události:**\n", + "03 10": "Svátek má **Bohumil**\n\n**Události:**\n", + "04 10": "Svátek má **František**\n\n**Události:**\n", + "05 10": "Svátek má **Eliška**\n\n**Události:**\n", + "06 10": "Svátek má **Hanuš**\n\n**Události:**\n", + "07 10": "Svátek má **Justýna**\n\n**Události:**\n", + "08 10": "Svátek má **Věra**\n\n**Události:**\n", + "09 10": "Svátek má **Štefan a Sára**\n\n**Události:**\n", + "10 10": "Svátek má **Marina**\n\n**Události:**\n", + "11 10": "Svátek má **Andrej**\n\n**Události:**\n", + "12 10": "Svátek má **Marcel**\n\n**Události:**\n", + "13 10": "Svátek má **Renáta**\n\n**Události:**\n", + "14 10": "Svátek má **Agáta**\n\n**Události:**\n", + "15 10": "Svátek má **Tereza**\n\n**Události:**\n", + "16 10": "Svátek má **Havel**\n\n**Události:**\n", + "17 10": "Svátek má **Hedvika**\n\n**Události:**\n", + "18 10": "Svátek má **Lukáš**\n\n**Události:**\n", + "19 10": "Svátek má **Michaela**\n\n**Události:**\n", + "20 10": "Svátek má **Vendelin**\n\n**Události:**\n", + "21 10": "Svátek má **Brigita**\n\n**Události:**\n", + "22 10": "Svátek má **Sabina**\n\n**Události:**\n", + "23 10": "Svátek má **Teodora**\n\n**Události:**\n", + "24 10": "Svátek má **Nina**\n\n**Události:**\n", + "25 10": "Svátek má **Beáta**\n\n**Události:**\n", + "26 10": "Svátek má **Erik**\n\n**Události:**\n", + "27 10": "Svátek má **Šarlota**\n\n**Události:**\n", + "28 10": "Svátek má **Státní svátek**\n\n**Události:**\n", + "29 10": "Svátek má **Silvie**\n\n**Události:**\n", + "30 10": "Svátek má **Tadeáš**\n\n**Události:**\n", + "31 10": "Svátek má **Štěpánka**\n\n**Události:**\n", + "01 11": "Svátek má **Felix**\n\n**Události:**\n", + "02 11": "Svátek má **Památka zesnulých**\n\n**Události:**\n", + "03 11": "Svátek má **Hubert**\n\n**Události:**\n", + "04 11": "Svátek má **Karel**\n\n**Události:**\n", + "05 11": "Svátek má **Miriam**\n\n**Události:**\n", + "06 11": "Svátek má **Liběna**\n\n**Události:**\n", + "07 11": "Svátek má **Saskia**\n\n**Události:**\n", + "08 11": "Svátek má **Bohumir**\n\n**Události:**\n", + "09 11": "Svátek má **Bohdan**\n\n**Události:**\n", + "10 11": "Svátek má **Evžen**\n\n**Události:**\n", + "11 11": "Svátek má **Martin**\n\n**Události:**\n", + "12 11": "Svátek má **Benedikt**\n\n**Události:**\n", + "13 11": "Svátek má **Tibor**\n\n**Události:**\n", + "14 11": "Svátek má **Sáva**\n\n**Události:**\n", + "15 11": "Svátek má **Leopold**\n\n**Události:**\n", + "16 11": "Svátek má **Otmar a Maulena**\n\n**Události:**\n", + "17 11": "Svátek má **Mahulena**\n\n**Události:**\n", + "18 11": "Svátek má **Romana**\n\n**Události:**\n", + "19 11": "Svátek má **Alžběta**\n\n**Události:**\n", + "20 11": "Svátek má **Nikol a Nikola**\n\n**Události:**\n", + "21 11": "Svátek má **Albert**\n\n**Události:**\n", + "22 11": "Svátek má **Cecílie**\n\n**Události:**\n", + "23 11": "Svátek má **Klement**\n\n**Události:**\n", + "24 11": "Svátek má **Emílie**\n\n**Události:**\n", + "25 11": "Svátek má **Kateřina**\n\n**Události:**\n", + "26 11": "Svátek má **Artur**\n\n**Události:**\n", + "27 11": "Svátek má **Xenie**\n\n**Události:**\n", + "28 11": "Svátek má **René**\n\n**Události:**\n", + "29 11": "Svátek má **Zina**\n\n**Události:**\n", + "30 11": "Svátek má **Ondřej**\n\n**Události:**\n", + "01 12": "Svátek má **Iva**\n\n**Události:**\n", + "02 12": "Svátek má **Blanka**\n\n**Události:**\n", + "03 12": "Svátek má **Svatoslav**\n\n**Události:**\n", + "04 12": "Svátek má **Barbora**\n\n**Události:**\n", + "05 12": "Svátek má **Jitka**\n\n**Události:**\n", + "06 12": "Svátek má **Mikuláš**\n\n**Události:**\n", + "07 12": "Svátek má **Benjamín**\n\n**Události:**\n", + "08 12": "Svátek má **Květoslava**\n\n**Události:**\n", + "09 12": "Svátek má **Vratislav**\n\n**Události:**\n", + "10 12": "Svátek má **Julie**\n\n**Události:**\n", + "11 12": "Svátek má **Dana**\n\n**Události:**\n", + "12 12": "Svátek má **Simona**\n\n**Události:**\n", + "13 12": "Svátek má **Lucie**\n\n**Události:**\n", + "14 12": "Svátek má **Lýdie**\n\n**Události:**\n", + "15 12": "Svátek má **Radana**\n\n**Události:**\n", + "16 12": "Svátek má **Albína**\n\n**Události:**\n", + "17 12": "Svátek má **Daniel**\n\n**Události:**\n", + "18 12": "Svátek má **Miloslav**\n\n**Události:**\n", + "19 12": "Svátek má **Ester**\n\n**Události:**\n", + "20 12": "Svátek má **Dagmar**\n\n**Události:**\n", + "21 12": "Svátek má **Natálie**\n\n**Události:**\n", + "22 12": "Svátek má **Šimon**\n\n**Události:**\n", + "23 12": "Svátek má **Vlasta**\n\n**Události:**\n", + "24 12": "Svátek má **Adam a Eva**\n\n**Události:**\n", + "25 12": "Svátek má **1. svátek vánoční**\n\n**Události:**\n", + "26 12": "Svátek má **Štěpán**\n\n**Události:**\n", + "27 12": "Svátek má **Žaneta**\n\n**Události:**\n", + "28 12": "Svátek má **Bohumila**\n\n**Události:**\n", + "29 12": "Svátek má **Judita**\n\n**Události:**\n", + "30 12": "Svátek má **David**\n\n**Události:**\n", + "31 12": "Svátek má **Silvestr**\n\n**Události:**\n" +} \ No newline at end of file diff --git a/thorn/Config/pairs.json b/thorn/Config/pairs.json index 578543d..3848bd8 100644 --- a/thorn/Config/pairs.json +++ b/thorn/Config/pairs.json @@ -4,6 +4,7 @@ "WELCOME_CHANNEL_ID": "666672988883779585", "NEWS_CHANNEL_ID": "537063810121334784", "LOGGING_CHANNEL_ID": "661982623085625364", + "GENERAL_CHANNEL_ID": "640917453169229856", "CLASS_C_ROLE_ID": "537322727225163776", "INT_ROLE_ID": "537023765163409439", diff --git a/thorn/Program.cs b/thorn/Program.cs index 960ffc0..5e18674 100644 --- a/thorn/Program.cs +++ b/thorn/Program.cs @@ -5,8 +5,12 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using Quartz; +using Quartz.Impl; +using Quartz.Spi; using Serilog; using Serilog.Events; +using thorn.Reminder; using thorn.Services; namespace thorn @@ -50,10 +54,19 @@ private static async Task Main() { collection.AddHostedService(); collection.AddHostedService(); + collection.AddHostedService(); collection.AddSingleton(); collection.AddSingleton(); collection.AddSingleton(); + + // Quartz + collection.AddSingleton(); + collection.AddSingleton(); + collection.AddSingleton(); + collection.AddSingleton(new JobSchedule( + typeof(ReminderJob), + "0 0 0 * * ?")); // Every day at midnight }); await hostBuilder.RunConsoleAsync(); diff --git a/thorn/Reminder/JobSchedule.cs b/thorn/Reminder/JobSchedule.cs new file mode 100644 index 0000000..6072cb6 --- /dev/null +++ b/thorn/Reminder/JobSchedule.cs @@ -0,0 +1,16 @@ +using System; + +namespace thorn.Reminder +{ + public class JobSchedule + { + public JobSchedule(Type jobType, string cronExpression) + { + JobType = jobType; + CronExpression = cronExpression; + } + + public Type JobType { get; } + public string CronExpression { get; } + } +} \ No newline at end of file diff --git a/thorn/Reminder/QuartzHostedService.cs b/thorn/Reminder/QuartzHostedService.cs new file mode 100644 index 0000000..3589340 --- /dev/null +++ b/thorn/Reminder/QuartzHostedService.cs @@ -0,0 +1,68 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Hosting; +using Quartz; +using Quartz.Spi; + +namespace thorn.Reminder +{ + public class QuartzHostedService : IHostedService + { + private readonly ISchedulerFactory _schedulerFactory; + private readonly IJobFactory _jobFactory; + private readonly IEnumerable _jobSchedules; + + public QuartzHostedService( + ISchedulerFactory schedulerFactory, + IJobFactory jobFactory, + IEnumerable jobSchedules) + { + _schedulerFactory = schedulerFactory; + _jobSchedules = jobSchedules; + _jobFactory = jobFactory; + } + public IScheduler Scheduler { get; set; } + + public async Task StartAsync(CancellationToken cancellationToken) + { + Scheduler = await _schedulerFactory.GetScheduler(cancellationToken); + Scheduler.JobFactory = _jobFactory; + + foreach (var jobSchedule in _jobSchedules) + { + var job = CreateJob(jobSchedule); + var trigger = CreateTrigger(jobSchedule); + + await Scheduler.ScheduleJob(job, trigger, cancellationToken); + } + + await Scheduler.Start(cancellationToken); + } + + public async Task StopAsync(CancellationToken cancellationToken) + { + await Scheduler?.Shutdown(cancellationToken); + } + + private static IJobDetail CreateJob(JobSchedule schedule) + { + var jobType = schedule.JobType; + return JobBuilder + .Create(jobType) + .WithIdentity(jobType.FullName ?? string.Empty) + .WithDescription(jobType.Name) + .Build(); + } + + private static ITrigger CreateTrigger(JobSchedule schedule) + { + return TriggerBuilder + .Create() + .WithIdentity($"{schedule.JobType.FullName}.trigger") + .WithCronSchedule(schedule.CronExpression) + .WithDescription(schedule.CronExpression) + .Build(); + } + } +} \ No newline at end of file diff --git a/thorn/Reminder/ReminderJob.cs b/thorn/Reminder/ReminderJob.cs new file mode 100644 index 0000000..9a28f44 --- /dev/null +++ b/thorn/Reminder/ReminderJob.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using Discord; +using Discord.WebSocket; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Quartz; +using thorn.Services; + +namespace thorn.Reminder +{ + public class ReminderJob : IJob + { + private readonly ILogger _logger; + private readonly SocketTextChannel _channel; + private readonly PairsService _pairs; + + private readonly Dictionary _daily; + + public ReminderJob(ILogger logger, DiscordSocketClient client, PairsService pairs, DataStorageService data) + { + _logger = logger; + _pairs = pairs; + + _channel = client.GetChannel(ulong.Parse(pairs.GetString("GENERAL_CHANNEL_ID"))) as SocketTextChannel; + _daily = DataStorageService.GetDictionary("Config/daily.json"); + } + + public async Task Execute(IJobExecutionContext context) + { + var day = DateTime.Now; + var description = _daily[day.ToString("dd MM")] + + $"\n\nPřeji krásný den {_pairs.GetString("AGRLOVE_EMOTE")}"; + + var embed = new EmbedBuilder + { + Title = "Krásné dobré ráno!", + Description = description, + ThumbnailUrl = "https://cdn.discordapp.com/attachments/537064369725636611/733080455217283131/calendar-flat.png", + Color = Color.Green + }.Build(); + + await _channel.SendMessageAsync(embed: embed); + _logger.LogInformation("Sent daily reminder for {Day}", day.Date); + } + } +} \ No newline at end of file diff --git a/thorn/Reminder/SingletonJobFactory.cs b/thorn/Reminder/SingletonJobFactory.cs new file mode 100644 index 0000000..30c5582 --- /dev/null +++ b/thorn/Reminder/SingletonJobFactory.cs @@ -0,0 +1,23 @@ +using System; +using Microsoft.Extensions.DependencyInjection; +using Quartz; +using Quartz.Spi; + +namespace thorn.Reminder +{ + public class SingletonJobFactory : IJobFactory + { + private readonly IServiceProvider _serviceProvider; + public SingletonJobFactory(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler) + { + return _serviceProvider.GetRequiredService(bundle.JobDetail.JobType) as IJob; + } + + public void ReturnJob(IJob job) { } + } +} \ No newline at end of file diff --git a/thorn/Services/DataStorageService.cs b/thorn/Services/DataStorageService.cs index 7055901..c798e1e 100644 --- a/thorn/Services/DataStorageService.cs +++ b/thorn/Services/DataStorageService.cs @@ -28,6 +28,9 @@ public Task SaveAllUserAccounts(IEnumerable accounts, string filePa return Task.CompletedTask; } + public static Dictionary GetDictionary(string path) => + JsonConvert.DeserializeObject>(File.ReadAllText(path)); + public static List LoadUserAccounts(string filePath) { if (!File.Exists(filePath)) diff --git a/thorn/thorn.csproj b/thorn/thorn.csproj index 69fd7d8..6b1b0fe 100644 --- a/thorn/thorn.csproj +++ b/thorn/thorn.csproj @@ -30,6 +30,9 @@ Always + + Always +