summaryrefslogtreecommitdiff
path: root/cogs/Covid.py
blob: dff8961d6818447eaa0a032cdc892fb1b38767df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
from discord.ext import commands
import discord
import importlib
import requests
import json
import datetime
import pandas as pd
import io
from datetime import timedelta
import utils
importlib.reload(utils)


class Covid(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.command(aliases=[], application_command_meta=commands.ApplicationCommandMeta(options=[]))
    async def covid(self, ctx, *, arg):
        """Get Covid stats from your area."""
        if arg.lower() == "jersey":
            emb = await self.get_data_jersey(ctx)
        else:
            json_return = await self.get_latest_csv()
            emb = await self.find_area(ctx, json_return, arg)
        await ctx.send(embed=emb)

    @staticmethod
    async def get_latest_csv():
        days = 0
        while True:
            cur_date = (datetime.datetime.today() - timedelta(days=days)).strftime("%m-%d-%Y")
            url = f"https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/{cur_date}.csv"
            return_data = requests.get(url)
            if return_data.status_code == 200:
                # df = pd.read_csv(io.StringIO(return_data.content.decode('utf-8')))
                df = pd.read_csv(io.StringIO(return_data.content.decode('utf-8')))
                df.apply(lambda x: [x.dropna()], axis=1)
                data = json.loads(df.to_json(orient="records"))

                return data
            else:
                days = days + 1

    @staticmethod
    async def find_area(ctx, json_data, user_input):
        cur_record = None
        for record in json_data:
            prov = record["Province_State"].lower() if record["Province_State"] is not None else ""
            coun = record["Country_Region"].lower() if record["Country_Region"] is not None else ""
            ckey = record["Combined_Key"].lower() if record["Combined_Key"] is not None else ""

            if prov is "" and coun is "" and ckey == user_input.lower():
                cur_record_text = (f"Confirmed: {record['Confirmed']}" +
                                   f"Deaths: {record['Deaths']} | {round(int(record['Deaths'])*100/int(record['Confirmed']), 2)}%\n" +
                                   f"Recovered: {record['Recovered']} | {round(int(record['Recovered'])*100/int(record['Confirmed']), 2)}%\n" +
                                   f"Active: {record['Active']} | {round(int(record['Active'])*100/int(record['Confirmed']), 2)}%\n" +
                                   f"Last Update: {record['Last_Update']}")
                cur_record = await utils.embed(ctx, f"Covid-19 cases in {record['Combined_Key']}", cur_record_text)

            elif prov is "" and coun == user_input.lower():
                cur_record_text = (f"Confirmed: {record['Confirmed']}\n" +
                                   f"Deaths: {record['Deaths']} | {round(int(record['Deaths'])*100/int(record['Confirmed']), 2)}%\n" +
                                   f"Recovered: {record['Recovered']} | {round(int(record['Recovered'])*100/int(record['Confirmed']), 2)}%\n" +
                                   f"Active: {record['Active']} | {round(int(record['Active'])*100/int(record['Confirmed']), 2)}%\n" +
                                   f"Last Update: {record['Last_Update']}")
                cur_record = await utils.embed(ctx, f"Covid-19 cases in {record['Country_Region']}", cur_record_text)

            elif prov == user_input.lower():
                cur_record_text = (f"Confirmed: {record['Confirmed']}\n" +
                                   f"Deaths: {record['Deaths']} | {round(int(record['Deaths'])*100/int(record['Confirmed']), 2)}%\n" +
                                   f"Recovered: {record['Recovered']} | {round(int(record['Recovered'])*100/int(record['Confirmed']), 2)}%\n" +
                                   f"Active: {record['Active']} | {round(int(record['Active'])*100/int(record['Confirmed']), 2)}%\n" +
                                   f"Last Update: {record['Last_Update']}")
                cur_record = await utils.embed(ctx, f"Covid-19 cases in {record['Province_State']}", cur_record_text)
                break

        if cur_record is None:
            cur_record = await utils.embed(ctx, f"Nothing found", "Please check https://github.com/CSSEGISandData/COVID-19/blob/master/csse_covid_19_data/csse_covid_19_daily_reports/")

        return cur_record

    @staticmethod
    async def get_data_jersey(ctx):
        return_data = requests.get("https://www.gov.je/Datasets/ListOpenData?ListName=COVID19&type=json")
        if return_data.status_code == 200:
            return_data = json.loads(return_data.text)
            # for covid_item in return_data['COVID19'][0]:
            #     return_data['COVID19'][0][covid_item] = 0 if return_data['COVID19'][0][covid_item] == "" else return_data['COVID19'][0][covid_item]

            txt_desc = (f"Negative tests prior Jul 01 2020: `{return_data['COVID19'][0]['TestsNegativeTestsPriorto1July2020']}`\n" +
                        f"Negative tests since Jul 01 2020: `{return_data['COVID19'][0]['TestsNegativeTestssince1July2020']}`\n" +
                        f"Pending results: `{return_data['COVID19'][0]['TestsPendingResults']}`\n" +
                        f"Known Active In: (Hospital: `{return_data['COVID19'][0]['CasesKnownCasesInHospital']}` - Care Homes: `{return_data['COVID19'][0]['CasesKnownCasesInCareHomes']}` - Community: `{return_data['COVID19'][0]['CasesKnownCasesInCommunity']}`)\n" +
                        f"Known Active Cases: `{return_data['COVID19'][0]['CasesCurrentKnownActiveCases']}` (Symptomatic: `{return_data['COVID19'][0]['CasesSymptomatic']}` - Asymptomatic: `{return_data['COVID19'][0]['CasesAsymptomatic']}`)\n" +
                        f"Known Direct Contacts: `{return_data['COVID19'][0]['CasesNumberOfKnownDirectContactsOfCurrentActiveCases']}`\n" +
                        f"Deaths: `{return_data['COVID19'][0]['MortalityTotalDeaths']}`\n" +
                        f"Date: `{return_data['COVID19'][0]['DateTime'].replace('string;#', '')}`")

            emb = await utils.embed(ctx, "Covid-19 cases in Jersey", txt_desc)
            return emb

        else:
            return None


def setup(bot):
    print("INFO: Loading [Covid]... ", end="")
    bot.add_cog(Covid(bot))
    print("Done!")


def teardown(bot):
    print("INFO: Unloading [Covid]")