Exemplo n.º 1
0
    async def state_historical(self, ctx, state):
        """
        Historical data from US states.

        Params:
            ctx:
                Context.
            state:
                The state to get info for.
        """

        data = await self.bot.covid.nyt_state(state)
        data = data[-15:]

        embed = discord.Embed(
            title="Coronavirus history",
            description="**Country: USA**\n**State: {}**".format(
                state.title()),
            color=65280)

        for time in data:
            embed.add_field(name="__**{}**__".format(
                time.date.strftime("%d %b %Y")),
                            value="**Cases:** {}\n**Deaths:** {}".format(
                                diseaseapi.format_number(time.cases),
                                diseaseapi.format_number(time.deaths)))

        embed.set_footer(
            text=
            'These stats are what has been officially confirmed. It is possible that real figures are different.'
        )
        await ctx.send(embed=embed)
Exemplo n.º 2
0
    async def coronavirushistory(self, ctx, country="all", *, province=None):
        """
        Get the history for Coronavirus (COVID-19) for a specified country.
        This will display the past 14 days of data for cases, deaths and recoveries.

        Params:
            ctx:
                The context for the command.
            country:
                The country to get the history for. Defaults to all to get global history.
            province:
                The province to get history for.
        """

        if 'korea' in country.lower():
            country = 'korea, south'  #no stats for north korea

        if province:
            if country.lower() == "usa" or country.lower() == "us":
                return await self.state_historical(ctx, province)
            data = await self.bot.covid.province_history(
                country, province,
                15)  #get the history for the given country with province

        else:
            data = await self.bot.covid.country_history(
                country,
                15)  #if no province given, get the data for whole country

        name = data.name

        if isinstance(data.province, list):
            prov = "None"
        else:
            prov = str(data.province).title()

        embed = discord.Embed(
            title="Coronavirus history",
            description="**Country: {}**\n**Province: {}**".format(name, prov),
            color=65280)
        embed.set_footer(
            text=
            'These stats are what has been officially confirmed. It is possible that real figures are different.'
        )

        history = data.history

        for i in range(15):
            embed.add_field(
                name="__**{}**__".format(
                    history.cases[i].date.strftime("%d %b %Y")),
                value="**Cases:** {}\n**Deaths:** {}\n**Recoveries:** {}".
                format(diseaseapi.format_number(history.cases[i].value),
                       diseaseapi.format_number(history.cases[i].value),
                       diseaseapi.format_number(history.cases[i].value)))

        await ctx.send(embed=embed)
Exemplo n.º 3
0
def generate_country_embed(embed, data, yesterdays_data):
    """
    Generate the embed which is sent when getting data for a specific country.

    Params:
        embed:
            The discord.Embed we will be editing.
        data:
            The data containing the figures and stats.
        yesterdays_data:
            The data containing yesterday's figures and stats.
    """

    embed.add_field(name="New cases yesterday",
                    value=diseaseapi.format_number(
                        yesterdays_data.today.cases))
    embed.add_field(name="New deaths yesterday",
                    value=diseaseapi.format_number(
                        yesterdays_data.today.deaths))
    embed.add_field(name="Total recoveries",
                    value=diseaseapi.format_number(data.recoveries))
    embed.add_field(name="Total critical cases",
                    value=diseaseapi.format_number(data.critical))
    embed.add_field(name="Active cases",
                    value=diseaseapi.format_number(data.active))
    embed.add_field(name="Cases per million people",
                    value=diseaseapi.format_number(data.per_million.cases))
    embed.add_field(name="Deaths per million people",
                    value=diseaseapi.format_number(data.per_million.deaths))
    embed.add_field(name="Last updated",
                    value=diseaseapi.format_date(data.updated))
    embed.description = "**Country: {}**".format(data.name)
    embed.set_thumbnail(url=data.info.flag)
Exemplo n.º 4
0
    async def _jhucsse(self, country, province):
        """
        This is not a command but is used to get data from the JHU CSSE. 
        Used when we want data for specific provinces.

        Params:
            country:
                The name of the country
            province:
                The name of the province we want data for.
        """

        data = await self.bot.covid.jhucsse()  #get all data from the JHU CSSE

        if country.lower() == 'uk':
            country = 'united kingdom'  #corrections

        relevant = next(cp for cp in data if cp.country_name.lower() == country.lower()\
            and str(cp.province_name).lower() == province.lower()) #filter data for the relevant province

        embed = discord.Embed(title="Coronavirus (COVID-19) stats",
                              color=65280)
        embed.set_footer(
            text=
            "These stats are what has been officially confirmed. It is possible that real figures are different."
        )
        embed.description = "**Country: {}**\n**Province: {}**".format(
            relevant.country_name, relevant.province_name)

        embed.add_field(name="Total cases",
                        value=diseaseapi.format_number(
                            relevant.confirmed_cases))
        embed.add_field(name="Total deaths",
                        value=diseaseapi.format_number(relevant.deaths))
        embed.add_field(name="Total recoveries",
                        value=diseaseapi.format_number(relevant.recoveries))
        embed.add_field(
            name="Active cases",
            value=diseaseapi.format_number(relevant.confirmed_cases -
                                           relevant.deaths -
                                           relevant.recoveries))
        embed.add_field(name="Last updated",
                        value=diseaseapi.format_date(relevant.updated))
        #this is different from everything else due to the data the API reports, so we cant use a generic embed builder.
        return embed
Exemplo n.º 5
0
def generate_all_embed(embed, data):
    """
    Generate the embed which is used when getting global data.
    Params:
        embed:
            The discord.Embed we will be editing
        data:
            The data containing the figures and stats.
    """

    embed.add_field(name="Total recoveries",
                    value=diseaseapi.format_number(data.recoveries))
    embed.add_field(name="Total critical cases",
                    value=diseaseapi.format_number(data.critical))
    embed.add_field(name="Active cases",
                    value=diseaseapi.format_number(data.active))
    embed.add_field(name="Last updated",
                    value=diseaseapi.format_date(data.updated))
Exemplo n.º 6
0
def generate_state_embed(embed, data, yesterday):
    """
    Generate the embed which is used when getting data about US states.
    Params:
        embed:
            The discord.Embed we will be editing.
        data:
            The data containing the figures and stats.
        yesterday:
            The data containing yesterday's figures and stats.
    """

    embed.add_field(name="New cases yesterday",
                    value=diseaseapi.format_number(yesterday.today.cases))
    embed.add_field(name="New deaths yesterday",
                    value=diseaseapi.format_number(yesterday.today.deaths))
    embed.add_field(name="Active cases",
                    value=diseaseapi.format_number(data.active))
    embed.description = "**State: {}**".format(data.name)
Exemplo n.º 7
0
def generate_base_embed(embed, data):
    """
    Generate a basic embed with generic data.
    Params:
        embed:
            The discord.Embed we will be editing
        data:
            The data containing the figures and stats.
    """

    embed.add_field(name="Total cases",
                    value=diseaseapi.format_number(data.cases))
    embed.add_field(name="New cases today",
                    value=diseaseapi.format_number(data.today.cases))
    embed.add_field(name="Total deaths",
                    value=diseaseapi.format_number(data.deaths))
    embed.add_field(name="New deaths today",
                    value=diseaseapi.format_number(data.today.deaths))
    embed.add_field(name="Number of tests",
                    value=diseaseapi.format_number(data.tests))
Exemplo n.º 8
0
    async def coronavirusleaderboard(self, ctx, sort="cases"):
        """
        Get the top 15 countries sorted by a certain parameter.

        Params:
            ctx:
                The context for the command.
            sort:
                The parameter by which to sort the data.
                diseaseapi.exceptions.BadSortParameter will be raised if an invalid one is used.
                Defaults to sort by the number of cases.
        """

        data = await self.bot.covid.all_countries(sort=sort)

        embed = discord.Embed(
            title="COVID-19 leaderboard sorted by {}".format(sort),
            description="",
            color=65280)
        embed.set_footer(
            text=
            'These stats are what has been officially confirmed. It is possible that real figures are different.'
        )

        for i in range(1, 16):  #top 15
            country = data[i - 1]
            name = country.name
            #sometimes the stats are null/None.
            if country.cases is None:
                cases = 'Unknown'
            else:
                cases = diseaseapi.format_number(country.cases)
            if country.deaths is None:
                deaths = 'Unknown'
            else:
                deaths = diseaseapi.format_number(country.deaths)

            embed.description = '{}**{}. {}:** {} cases, {} deaths.\n'.format(
                embed.description, i, name, cases, deaths)

        await ctx.send(embed=embed)