如何使用 discord.py v1.4.1 制作天气命令
How to make a weather command using discord.py v1.4.1
如果您想使用 discord.py 创建一个 weather
命令并为您的机器人增加一个很酷的功能,我已经为您介绍了,我在下面回答了如何创建 [= discord.py.
中的 11=] 命令
我们将制作一个像这样工作的命令 -
开始,我们将使用 openweahtermap API, which requires an API key, you can get one for free by simple logging in to their website。
获得 API 密钥后,就可以开始了。
第二步将开始编码,我们将导入除 discord.py 之外的 1 个模块,即 requests
。我们可以简单地导入它 -
import requests
导入后我们可以定义下面的东西,这样使用起来更方便。
api_key = "your_api_key"
base_url = "http://api.openweathermap.org/data/2.5/weather?"
下一步将创建一个以 city
作为参数的命令。
@client.command()
async def weather(ctx, *, city: str):
之后,我们可以使用requests
获取网站的响应,然后使用json
读取响应。我们还定义了使用命令的通道。
city_name = city
complete_url = base_url + "appid=" + api_key + "&q=" + city_name
response = requests.get(complete_url)
x = response.json()
channel = ctx.message.channel
现在,我们使用一个简单的 if
语句来检查 city_name
是否是一个有效的城市。我们还使用 async with channel.typing()
,这表明机器人在从网站获取内容之前一直在打字。
if x["cod"] != "404":
async with channel.typing():
现在我们得到了有关天气的信息。
y = x["main"]
current_temperature = y["temp"]
current_temperature_celsiuis = str(round(current_temperature - 273.15))
current_pressure = y["pressure"]
current_humidity = y["humidity"]
z = x["weather"]
weather_description = z[0]["description"]
现在,一旦我们有了信息,我们就把信息放在一个 discord.Embed
中,就像这样 -
weather_description = z[0]["description"]
embed = discord.Embed(title=f"Weather in {city_name}",
color=ctx.guild.me.top_role.color,
timestamp=ctx.message.created_at,)
embed.add_field(name="Descripition", value=f"**{weather_description}**", inline=False)
embed.add_field(name="Temperature(C)", value=f"**{current_temperature_celsiuis}°C**", inline=False)
embed.add_field(name="Humidity(%)", value=f"**{current_humidity}%**", inline=False)
embed.add_field(name="Atmospheric Pressure(hPa)", value=f"**{current_pressure}hPa**", inline=False)
embed.set_thumbnail(url="https://i.ibb.co/CMrsxdX/weather.png")
embed.set_footer(text=f"Requested by {ctx.author.name}")
构建嵌入后,我们将其发送。
await channel.send(embed=embed)
else:
await channel.send("City not found.")
我们还使用 else
语句,如果 API 无法获取所提及城市的天气,则发送未找到该城市的语句。
至此,您已成功执行 weather
命令!
如果您 运行 遇到任何错误或有任何疑问,请务必在下方发表评论。我会尽力提供帮助。
谢谢!
如果您想使用 discord.py 创建一个 weather
命令并为您的机器人增加一个很酷的功能,我已经为您介绍了,我在下面回答了如何创建 [= discord.py.
我们将制作一个像这样工作的命令 -
开始,我们将使用 openweahtermap API, which requires an API key, you can get one for free by simple logging in to their website。
获得 API 密钥后,就可以开始了。
第二步将开始编码,我们将导入除 discord.py 之外的 1 个模块,即 requests
。我们可以简单地导入它 -
import requests
导入后我们可以定义下面的东西,这样使用起来更方便。
api_key = "your_api_key"
base_url = "http://api.openweathermap.org/data/2.5/weather?"
下一步将创建一个以 city
作为参数的命令。
@client.command()
async def weather(ctx, *, city: str):
之后,我们可以使用requests
获取网站的响应,然后使用json
读取响应。我们还定义了使用命令的通道。
city_name = city
complete_url = base_url + "appid=" + api_key + "&q=" + city_name
response = requests.get(complete_url)
x = response.json()
channel = ctx.message.channel
现在,我们使用一个简单的 if
语句来检查 city_name
是否是一个有效的城市。我们还使用 async with channel.typing()
,这表明机器人在从网站获取内容之前一直在打字。
if x["cod"] != "404":
async with channel.typing():
现在我们得到了有关天气的信息。
y = x["main"]
current_temperature = y["temp"]
current_temperature_celsiuis = str(round(current_temperature - 273.15))
current_pressure = y["pressure"]
current_humidity = y["humidity"]
z = x["weather"]
weather_description = z[0]["description"]
现在,一旦我们有了信息,我们就把信息放在一个 discord.Embed
中,就像这样 -
weather_description = z[0]["description"]
embed = discord.Embed(title=f"Weather in {city_name}",
color=ctx.guild.me.top_role.color,
timestamp=ctx.message.created_at,)
embed.add_field(name="Descripition", value=f"**{weather_description}**", inline=False)
embed.add_field(name="Temperature(C)", value=f"**{current_temperature_celsiuis}°C**", inline=False)
embed.add_field(name="Humidity(%)", value=f"**{current_humidity}%**", inline=False)
embed.add_field(name="Atmospheric Pressure(hPa)", value=f"**{current_pressure}hPa**", inline=False)
embed.set_thumbnail(url="https://i.ibb.co/CMrsxdX/weather.png")
embed.set_footer(text=f"Requested by {ctx.author.name}")
构建嵌入后,我们将其发送。
await channel.send(embed=embed)
else:
await channel.send("City not found.")
我们还使用 else
语句,如果 API 无法获取所提及城市的天气,则发送未找到该城市的语句。
至此,您已成功执行 weather
命令!
如果您 运行 遇到任何错误或有任何疑问,请务必在下方发表评论。我会尽力提供帮助。
谢谢!