diff --git a/utils/commands.py b/utils/commands.py index 969cf05..43f2770 100644 --- a/utils/commands.py +++ b/utils/commands.py @@ -5,7 +5,7 @@ import logging from random import choice from discord.ext import commands -from discord import Intents +from discord import Intents, Embed from settings.config import IMAGE_TYPES, PERMISSIONS from utils.database import get_by_id, get_quotes, remove_quote, set_quote, count_quotes @@ -186,6 +186,7 @@ async def info(bot: object) -> str: return await bot.send(msg) + @client.command(aliases=['w']) async def weather(bot: object, *location: str) -> str: """ @@ -224,8 +225,42 @@ async def weather(bot: object, *location: str) -> str: lat, lon = geocode(city, state, country) weatherdata = getweatherdata(lat, lon) msg = displayweather(weatherdata) - - return await bot.send(msg) + default_msg = 'No data!' + embed = Embed(collor=0x623CA6, type='rich') + embed.add_field( + name='City', + value=msg.name, + ) + embed.add_field( + name='Description', + value=msg.description if msg.description else default_msg, + ) + embed.add_field( + name='Temperature ºC', + value=msg.temp if msg.temp else default_msg, + ) + embed.add_field( + name='Feels like ºC', + value=msg.feels_like if msg.feels_like else default_msg, + ) + embed.add_field( + name='Humidity %', + value=msg.humidity if msg.humidity else default_msg, + ) + embed.add_field( + name='Cloud coverage %', + value=msg.cloud_coverage if msg.cloud_coverage else default_msg, + ) + embed.add_field( + name='Wind gusts m/s', + value=msg.wind_gusts if msg.wind_gusts else default_msg, + ) + embed.add_field( + name='Wind speed m/s', + value=msg.wind_speed if msg.wind_speed else default_msg, + ) + + return await bot.send('**`Weather`**', embed=embed) @client.command(aliases=['qcontains', 'qsearch']) diff --git a/utils/weather.py b/utils/weather.py index b3a3624..779c1ca 100644 --- a/utils/weather.py +++ b/utils/weather.py @@ -1,9 +1,10 @@ +import json import logging +import urllib.request +from collections import namedtuple from settings.config import OW_API_CONFIG -import urllib.request -import json def geocode(city = 'curitiba', state = 'parana', country = 'BR') -> str: """ @@ -40,58 +41,64 @@ def getweatherdata(lat, lon): return weatherdata -def displayweather(wdata): +def displayweather(wdata) -> object: """ "Prettifies" the output for discord """ try: - wdata['weather'][0]['description'] description = wdata['weather'][0]['description'] except: - description = "No data on description" + description = None + try: - wdata['main']['temp'] - temp = wdata['main']['temp'] - tempmsg = f"Temperature is {temp}ºC" + tempmsg = wdata['main']['temp'] except: - tempmsg = "No data on temperature" + tempmsg = None + try: - wdata['main']['feels_like'] - feels_like = wdata['main']['feels_like'] - feels_likemsg = f"Feels like {feels_like}ºC" + feels_likemsg = wdata['main']['feels_like'] except: - feels_likemsg = "No data on perceived temperature" + feels_likemsg = None + try: - wdata['main']['humidity'] - humidity = wdata['main']['humidity'] - humiditymsg = f"Humidity is {humidity}%" + humiditymsg = wdata['main']['humidity'] except: - humiditymsg = "No data on humidity" + humiditymsg = None + try: - wdata['wind']['speed'] - wind_speed = wdata['wind']['speed'] - wind_speedmsg = f"Wind speed is {wind_speed}m/s" + wind_speedmsg = wdata['wind']['speed'] except: - wind_speedmsg = "No data on wind speed" + wind_speedmsg = None + try: - wdata['wind']['gust'] - wind_gusts = wdata['wind']['gust'] - wind_gustsmsg = f"with gusts of {wind_gusts}m/s" + wind_gustsmsg = wdata['wind']['gust'] except: - wind_gustsmsg = "with no data on gusts" + wind_gustsmsg = None try: - wdata['clouds']['all'] - cloud_coverage = wdata['clouds']['all'] - cloud_coveragemsg = f"Cloud coverage is {cloud_coverage}%" + cloud_coveragemsg = wdata['clouds']['all'] except: - cloud_coveragemsg = "No data on cloud coverage" - name = wdata['name'] + cloud_coveragemsg = None - msg = f""" - ``` - Weather for {name}: - {description}, {tempmsg}. {feels_likemsg}. {humiditymsg}. - {wind_speedmsg}, {wind_gustsmsg}. {cloud_coveragemsg}. - ```""" + name = wdata['name'] + obj = namedtuple('Weather', [ + 'name', + 'description', + 'temp', + 'feels_like', + 'humidity', + 'wind_speed', + 'wind_gusts', + 'cloud_coverage', + ]) + weather = obj(*( + name, + description, + tempmsg, + feels_likemsg, + humiditymsg, + wind_speedmsg, + wind_gustsmsg, + cloud_coveragemsg + )) - return msg \ No newline at end of file + return weather