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]")
|