Giter Site home page Giter Site logo

eknoes / covidbot Goto Github PK

View Code? Open in Web Editor NEW
49.0 5.0 8.0 21.39 MB

Multi-platform messenger bot which provides updates on current COVID19 situation for Germany

Home Page: https://covidbot.d-64.org

License: GNU General Public License v3.0

Python 88.42% Dockerfile 0.03% HTML 5.99% CSS 2.63% Shell 0.67% Jinja 2.26%
covid-19 covidbot telegram twitter threema signal

covidbot's People

Contributors

dependabot[bot] avatar eknoes avatar errotu avatar hanneshil avatar haupas avatar magiccc avatar trutzig89182 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

covidbot's Issues

Mehrsprachen-Support

Wäre es möglich, Unterstützung in mehreren Sprachen anzubieten? Die gewünschte Sprache könnte man über einen Befehl setzen. Hilfreich wäre es dafür vermutlich, wenn wir alle Nachrichten, die dem/der Nutzer/in angezeigt werden, in eine Datei auslagern, die dann von weiteren Unterstützer:innen übersetzt werden könnte.

Feedback Funktion

Über bspw. /feedback NACHRICHT sollte man Feedback-Nachrichten hinterlassen können

Sortierung der Orte im täglichen Bericht

Derzeit scheinen die Orte nach dem Zeitpunkt des Abonnements sortiert zu werden (Neueste zuerst). Sinnvoller ist eine alphabetische Sortierung, würde ich sagen. Was meinst du?

Ortsauswahl benutzerfreundlicher gestalten I - Button-System

Mein Eindruck ist, dass die aktuelle Ortsauswahl noch nicht optimal von der Benutzerfreundlichkeit ist. Für viele dürfte das Eintippen von Befehlen (so simpel sie auch sind) eine Hürde darstellen.

Vielleicht könnte man ein Alternativ-System mit Buttons erstellen, welches durch /ort ohne spezifische Angabe getriggert wird? Dann könnten erst die 16 Bundesländer angezeigt werden und danach, nach Auswahl eines Bundeslandes, die Land- und Stadtkreise die es in diesem Bundesland gibt.

Trennung zwischen Bundesländern und Stadt-/Landkreisen im täglichen Bericht

Ich glaube, es macht Sinn, Städte und Bundesländer im Bericht optisch voneinander zu trennen.

Vielleicht so:

Insgesamt wurden bundesweit [...] gemeldet.

Bundesländer: [nur anzeigen, sofern welche abonniert sind]
• Hamburg:
• Niedersachsen:

Stadt- und Landkreise: [nur anzeigen, sofern welche abonniert sind]
• Kassel:
• Darmstadt:

Formatierung

Bei Signal gibt es ein paar kleinere Formatierungsfehler:

  • Umlaute werden ersetzt (bspw. ä -> a)
  • der Quellenhinweis wird größer als der Rest des Textes angezeigt
  • das Icon mit dem Pfeil für den Trend ist bei mir nur ein "nackter" Pfeil, ohne Hintergrund und klassische "Emoji"/"Icon"-Optik

Infos in der Benachrichtigung

Der Messenger Newsletter aus Baden-Württemberg beinhaltet neben der Inzidenz noch die folgenden Daten. Können wir die auch (auf Stadt- und/oder Landes- und/oder Bundesebene) darstellen?

Corona-Bericht für Baden-Württemberg vom 23. Dezember 2020

Neuinfektionen: 4.391 (gesamt: 221.845)
Verstorbene: 4.330 (+64)
Genesene: 157.624 (+3.002)
Aktuell Infizierte: 59.891 (+1.325)
7-Tage-R-Wert: 1,02
7-Tage-Inzidenz: 204,5
Gesamtbelegung der Intensivkapazitäten: 86,0 % (da sind wir ja schon dran)

R-Wert anzeigen

Können wir den jeweiligen R-Wert für die Städte auch angeben?

Ortsauswahl benutzerfreundlicher gestalten III - PLZ und Orte, die keine Stadt-/Landkreise sind

Über Nominatim (siehe #18) sollten auch sowohl eine Ortsangabe über die PLZ als auch ein Mapping von Orten, die selbst keine Stadt- oder Landkreise sind, zu dem dazugehörigen Stadt-/Landkreis recht problemlos funktionieren.

Leider zeigt die Suche nicht unmittelbar den Wert für "county" an, den müsste man dann noch über die Reverse Search mit der ausgegebenen Länge und Breite ermitteln.

Beispiel für PLZ-Suche (69181 ist Leimen im Rhein-Neckar-Kreis):
https://nominatim.openstreetmap.org/search?format=json&countrycodes=de&postalcode=69181

Beispiel für die Suche nach einem Ort, der in einem Landkreis liegt:
https://nominatim.openstreetmap.org/search?format=json&countrycodes=de&city=leimen

Nutzungsbefugnis und Formate RKI Daten und DIVI Daten

Unverbindliche Einschätzung, die ausdrücklich keine Rechtsberatung darstellt!
Problem: Das RKI stellt die Infektionszahlen in einer Excelliste bereit und versieht diese nicht mit einer Lizenz.
Das RKI ist eine selbstständige Bundesoberbehörde i.S.d. Art. 87 Abs. 3 S. 1 GG. Damit gehört es zur mittelbaren Bundesverwaltung, die derzeit nicht in den Anwendungsbereich von § 12a EGovG fällt. Das RKI unterliegt damit keiner originären „Open-Data-Pflicht.
Das RKI veröffentlicht aber freiwillig und proaktiv eine Excelliste. Diese Daten unterfallen dem IWG. Schließlich ist das RKI als selbstständige Bundesbehörde eine „öffentliche Stelle“ i.S.d. § 2 Abs. 1 Nr. 1 lit. b IWG. Da das RKI die Daten veröffentlicht, also jedermann freiwillig zur Verfügung stellt, kommt es nicht mehr darauf an, ob ein Zugangsrecht für die Daten bestünde (BVerwG, Urt. v. 14.4.2016 – 7 C 12/14 (VGH Mannheim).
Dementsprechend gilt § 2a S. 1 IWG „Informationen, die in den Anwendungsbereich dieses Gesetzes fallen, dürfen weiterverwendet werden“. Zwar dürfen öffentliche Stellen bereitgestellte Daten mit sog. Nutzungsbedingungen versehen (§ 4 IWG). Dies gebietet auch die „gute Praxis“. Solche Nutzungsbedingungen schaffen Rechtsklarheit. Soweit die öffentliche Stelle aber keine (einschränkenden) Nutzungsbedingungen erlässt, vermittelt § 2a IWG ipso iure einen ErlaubnisTB, die bereitgestellten Daten zu nutzen. Dass das RKI mutmaßlich ein Datenbankherstellerrecht an diesen Daten inne hat, ist m.E. unschädlich. Zwar sieht das IWG vor, dass Datensätze, die von Urheberrechten, verwandten Schutzrechten oder gewerblichen Schutzrechten Dritter erfasst werden, nicht dem IWG unterfallen (§ 1 Abs. 2 Nr. 4 IWG). Das RKI ist aber öffentliche Stelle i. S. d. § 2 Abs. 1 Nr. 1 lit. b IWG und damit gerade kein Dritter i. S. d. § 1 Abs. 2 Nr. 4 IWG.
Danach dürfen die vom RKI bereitgestellten Daten nach meiner kursorischen Einschätzung weiterverwendet werden.
Zu klären bleibt noch, ob ggf. ein Anspruch auf Bereitstellung der Daten in einem anderen Format besteht. Ein solcher kann sich ggf. originär aus dem IFG ergeben. Zudem könnte sich ein solcher Anspruch auch aus der Art. 5 Abs. 1 PSI-RL 2013 ergeben. Diese setzt das IWG m.E. nicht richtlinienkonform um. Dazu gibt es aber keine Rechtsprechung. Selbst wenn man Art. 5 Abs. 1 PSI-RL 2013 für unmittelbar anwendbar erklärt, könnte sich das RKI aber womöglich auf Art. 5 Abs. 2 PSI-RL 2013 berufen. Ein möglicher Anspruch aus dem IFG hätte die selbe Hürde des „verhältnismäßigen Aufwandes“ zu nehmen, vgl. § 1 Abs. 2 S. 2 IFG Bund.
Womöglich könnte das RKI sich auch auf § 1 Abs. 2 Nr. 6 IWG berufen, um zu begründen, warum es dem IWG nicht unterfällt. Richter, IWG, Kommentar § 1 Rn. 519 führt hierzu aus: „Es muss sich um wissenschaftliche Forschung handelt. Diese umfasst nach Ansicht des BVerfG eine ‚geistige Tätigkeit mit dem Ziel, in methodischer, systematischer und nachprüfbarer Weise neue Erkenntnisse zu gewinnen [BVerfGE 35, 113]. Die Einrichtung muss sich in ihrem niedergelten Zweck nach der Forschung verschrieben haben. Nicht ausreichend ist, wenn ein tatsächlicher Schwerpunkt auf der Forschung liegt.“ Richter § 1 Rn. 520 „Im Zweifelsfall ist die Ausnahme […] in Bezug auf die Forschung eng auszulegen.“ Vgl. auch KOM SEC (2011) 1152 final, 33 f.
[Subsumtion des RKI unter diese VSS überlasse ich euch. Ich gehe aber nicht davon aus, dass sich das RKI darauf berufen kann, da es neben seinem Zweck nach weniger der Forschung, als vielmehr der Gefahrenabwehr zu dienen scheint, vgl. Wikipedia.].
Aus demselben Grund ist das RKI wohl auch eine „Einrichtung für den Transfer von Forschungsergebnissen“ i. S. d. § 1 Abs. 2 Nr. 6 IWG.
Die DIVI stellt ihre Zahlen für die Intensivbettenbelegung nicht allgemein frei lizenziert bereit, sondern man immer explizit anfragen muss (und wir darauf seit drei Wochen keine Antwort erhalten).
Die DIVI ist ein e.V. Die Mitglieder bestehen aus Ärzten, also Privatleuten. Einige dieser Ärzte arbeiten bei Krankenhäusern in öffentlich-rechtlicher Trägerschaft. Das trifft aber sicher nicht auf alle Mitglieder zu. Eine Konstruktion eines Anspruchs aus einem IFG oder dem IWG gegenüber DIVI ist dann wohl nicht möglich.
Gegenüber den öffentlich-rechtlichen Trägern könnte man Informationszugangsansprüche nach dem jeweiligen Landes-IFG gelten machen. Ein Anspruch auf Weiterverwendung der Daten ergibt sich dann aus § 2a IWG. Gegenüber Krankenhäusern in privater Trägerschaft könnten auch Ansprüche aus dem jeweils geltenden Landes-IFG bestehen. Private Einrichtungen unterfallen dem IFG regelmäßig aber nur soweit eine Behörde sich dieser Person zur Erfüllung ihrer öffentlich-rechtlichen Aufgaben bedient (Vgl. § 1 Abs. 1 S. 3 IFG Bund; viele Landes-IFG sind an diese Regelung zumindest angelehnt). Ob dies der Fall ist, kann ich mangels Kenntnis des „Krankenhausrechts“ aber nicht beurteilen.
Sofern ein Krankenhaus dem Anwendungsbereich eines Landes-IFG unterfällt, besteht grds. ein Anspruch auf Zugang zu der Information. Dieser darf nur gestützt auf einen Ausnahmegrund verweigert werden. Ohne nähere Prüfung gehe ich aber nicht davon aus, dass es sich bei den Informationen um besonders schutzwürdige Informationen handelt, die etwaigen Ausnahmegründen nach den Landes-IFG unterfallen. Ich gebe aber zu bedenken, dass ein solcher Anspruch notfalls eingeklagt werden müsste.
Informationen müssen grds. in dem angefragten Format bereitgestellt werden, es sei denn, für die Behörde ist damit ein „unverhältnismäßiger Aufwand“ verbunden. Hier würde ich davon ausgehen, dass ein Gericht sich schwer damit tuen sollte, einen solchen Aufwand zu erkennen. Schließlich ist davon auszugehen, dass die Informationen von DIVI gleichsam nicht händisch zusammengetragen werden, sondern in entsprechenden Formaten bereitgestellt werden. Das ist natürlich aber nur eine Annahme.

/start von /hilfe entkoppeln

Aktuell bekommt man beim /start den langen Hilfetext angezeigt - das schreckt imho ab. Wir könnten einen interaktiven Start ermöglichen, also nach dem Motto:

  • Hi wir machen X, schick uns mal nen Ort oder Standort um den Ort zu abonnieren oder aktuelle Daten abzufragen
  • Nutzer sendet Ort
  • Befehl bearbeiten + "Super danke, alle Funktionen findest du über /hilfe"

Impfquotenmonitoring einarbeiten

Das RKI stellt die Zahlen für das Impfquotenmonitoring derzeit leider nur als Excel-Datei und ohne explizite Nennung einer Lizenz zur Verfügung.
Eine Anfrage bzgl. der Verwendung und das Bereitstellen über eine standardisierte Schnittstelle wurde am 10. Januar 2021 an das RKI gesendet.

Falls es keine Lizenzprobleme gibt, wie aufwendig wäre es, die Zahlen der Excel-Datei automatisiert zu verarbeiten, @eknoes? Die URL der Datei scheint derzeit stabil zu sein.

Trends anzeigen

Wir könnte für alle Werte den Trend (also Vergleich zu gestern oder - vermutlich besser - Vergleich zu vor exakt sieben Tagen (also dem gleichen Wochentag vor einer Woche)) durch Emojis vor oder nach dem Wert anzeigen (bspw. ↗️ und ↘️).

Cache graphs

Currently, graphs are cached in-memory, so every messengerbot uses its own Cache. We should use a shared file-based cache.

Grafiken mit History

Wir könnten zu den Berichten Grafiken generieren, damit man die Anzahl der Neuinfektionen besser einordnen kann. Bspw mit matplotlib

Datenupdate von Bots trennen

Aktuell checken wir alle 15 Minuten, ob das RKI neue Daten meldet. Dies ist ein Prozess, der vom Telegrambot angestoßen wird. Schöner wäre imho:

  • Seperater Aufruf checkt auf neue Daten & spielt diese ein, botunabhängig
  • Bei neuen Daten wird so auch gechekt, ob der morgendliche Report versendet werden soll

Nutzer müssen freigeschaltet werden

Für Threema und ggf. später auch Mail relevant: Nutzer:innen müssen erst freigeschaltet werden, entweder von uns (Threema) oder über einen Link zur Aktivierung (Mail).

Trends werden für den Bund nicht korrekt ermittelt

Die Trends sollten eigentlich immer mit Ihrem Pendant vor einer Woche verglichen werden, richtig?
Das scheint bei den Bundesangaben nicht ganz zu funktionieren:

Corona-Bericht vom 20.01.2021

Insgesamt wurden bundesweit 15.974 Neuinfektionen ↗️ und 1.148 Todesfälle ↗️ gemeldet.

Corona-Bericht vom 27.01.2021

Insgesamt wurden bundesweit 13.202 Neuinfektionen ↗️ [falsch, gesunken] und 982 Todesfälle ↗️ [falsch, gesunken] gemeldet. Die 7-Tage-Inzidenz liegt bei 100,95 ↘️ [kann ich gerade nicht verifizieren].

Aktuell geltende Verordnungen integrieren

Viele Kommunen veröffentlichen ihre Corona-Beschränkungen über das Katastrophenwarnsystem des Bundes (wird dann bspw. über NINA angezeigt). Vielleicht kann man das System anzapfen, so dass für die abonnierten Orte auch diese Meldungen angezeigt werden.

Eine offizielle API gibt es leider nicht, aber diese JSON-Datei (Hintergrund). Die Meldungen selbst sind auch nicht urheberrechtlich geschützt (§ 5 UrhG), die Datenbank als solche könnte aber Schutz genießen (dann dürften wir nicht ohne Erlaubnis drauf zugreifen). Wir könnten die Rechtsauffassung des Bundesamts für Bevölkerungsschutz und Katastrophenhilfe (BBK) anfragen, ggf. könnte man auch FragDenStaat bzw. die OpenKnowledgeFoundation um Unterstützung in der Angelegenheit bitten.

Zahlen falsch

Alle außer uns melden nur 9847 Neuinfektionen, wir über 19.000

Einstieg verbessern

Wir gewinnen aktuell viele neue Nutzer:innen. Die meisten schließen lediglich ein Abo ab, bedanken sich bei den Freund:innen die es ihnen empfohlen haben.

Ich glaube, es ist nach dem aktuellen /start nur wenigen klar, dass man:

  • mehr als ein Abo abschließen kann
  • Feedback an uns senden kann

Andererseits war unser /start vorher so überfrachtet, dass man ihn einfach kaum gelesen hat.

Ich denke wir sollten

  • Den Hilfe Text überarbeiten -> Ähnlich vllt. zu dem Newsletter, also strukturierter mit Emojis
  • Den /start verbessern

Leider können wir /start kaum interaktiver machen. Was mein Vorschlag da wäre:
Wenn die Person ihr erstes Abo abschließt, dann sollte die Nachricht slightly anders sein, vom Inhalt in etwa:

Danke für dein erstes Abo! Du kannst beliebig viele abschließen oder Daten nachsehen, sende einfach weitere Orte. Wie du uns Feedback senden kannst, die beliebtestesten Orte abcheckst, XXXX kannst du unter /hilfe nachsehen

Wenn wir das haben, könnten wir vielleicht Anfang nächster Woche den Newsletter vom letzten Mal passend modifizieren und an alle herausschicken, die seit dem letzten Newsletter dabei sind.

Bei Fehler Antwort senden

Bei manchen Fehlern, gerade in der Datenbank, sollten wir eine Antwort an den Nutzer senden á la "Es tut mir Leid, aber ein Fehler ist aufgetreten. Bitte versuche es später nochmal!". Aktuell gibt es da gar keine Benachrichtigung.

Datenschutz

Welche der Daten, die der Bot verarbeitet (Name, abonnierte Orte, Nachrichten im Chat an den Bot u.ä.), sind für uns einsehbar?

Implementierung von Message-Templates

Um Code + Text mehr zu entkoppeln, wäre das nutzen von Templates praktisch, bspw. über https://mustache.github.io/

Auch für #10 cool, weil man dann einfach verschiedene Dateien hätte in denen die Nachrichten übersetzt sind -> Andererseits müsste man dann auch in allen Dateien die Änderungen nachvollziehen, wenn die Struktur verändert werden soll.

Bei Fehler Message an die Entwickler

Bei Fehlern sollte es eine Nachricht an uns geben, damit wir sie früher bemerken - bisher hing es meist an der Datenbankverbindung, d.h. Nachrichten sollte der Bot trotzdem versenden können!

Reset-Funktion integrieren

Es sollte einen Befehl geben, um das bestehende Nutzerprofil zu löschen (also alle Orte zu entfernen). Danach sollte der Befehl /start ausgelöst werden.

Konfiguration in ini File

Aktuell ist die Konfiguration in zwei Dateien (apikey, db_secret) sowie innerhalb des Codes fix. Alles in einem ini-File ist sauberer.

Logo

Ich finde das Logo nicht ganz optimal, mir ist es etwas zu dunkel und zu detailreich für ein kleines Icon. Was hältst du von diesem?

Daten erläutern

Wir sollten die Daten mehr erläutern (Woher kommen sie, wie kann man sie vergleichen, welche Aussagekraft, etc.) Dafür sollten wir aber einen neuen Befehl einführen, und im Bericht auf diesen verweisen und dafür die Erläuterungen weglassen.

Matching verbessern

Das Matching der Stadtnamen ist aktuell billig. Sie sehen jetzt besser aus, also statt bspw. SK Kassel und LK Kassel gibt es Kassel (Kreisfreie Stadt) und Kassel (Landkreis), aber Kassel Stadt matched bspw. nicht.

Button-Abfrage funktioniert nicht richtig bei eindeutiger Angabe

Die Buttons scheinen gut zu funktionieren, wenn die Angabe des Stadt- oder Landkreises nicht eindeutig ist und man sie deshalb mit einem Button auswählt (bspw. bei "Kassel" -> "Kassel (Kreisfreie Stadt)").
Ist die Angabe eindeutig (bspw. bei "Heidelberg"), treten die folgenden Fehler auf:

  1. "Bitte wähle einen Ort:" wird angezeigt obwohl es "Möchtest du dein Abonnement von [county] beenden oder nur den aktuellen Bericht erhalten?" heißen müsste.
  2. Die Buttons "Bericht" und "Abonnieren" werden angezeigt, obwohl der Ort bereits abonniert ist. Richtig wäre "Bericht" und "Beende Abo".

Lizenzen der Libraries

Inwieweit müssen wir die Bibliotheken, die wir benutzen, referenzieren? Die stehen alle in der Datei requirements.txt! Ist das abhängig von deren Lizenz?

Newsletter Funktion

Aktuell entwickeln wir einige neue Features - diese könnten wir ab und zu als Newsletter an die Nutzer*innen versenden mit der Möglichkeit eines Opt-Out, bspw. als Button.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.