dragon-bot/app/cogs/star_citizen.py

73 lines
2.3 KiB
Python

from bs4 import BeautifulSoup
from discord import option
from discord.ext import commands, tasks
import discord
import requests
import star_citizen
class StarCitizen(commands.Cog):
def __init__(self, bot):
self.bot: commands.Bot = bot
self.poll_status_page.start()
@commands.slash_command(
guild_ids=None,
name="ship",
description="Query the star citizen database about a ship",
)
@option(
name="ship",
description="Ship you want info on, must be the exact name of the ship, eg Aegs Avenger",
required=True,
)
async def star_citizen(self, ctx: commands.Context, ship):
await ctx.defer()
embed = await star_citizen.get_ship(ship_name=ship)
await ctx.send_followup(embed=embed)
@tasks.loop(seconds=5)
async def poll_status_page(self):
# Wait until the bot is ready before we actually start executing code
await self.bot.wait_until_ready()
status_url = "https://status.robertsspaceindustries.com/"
response = requests.get(status_url).text
soup = BeautifulSoup(response, "html.parser")
current_status = soup.find("div", {"class": "global-status"}).findNext("span")
self.notified = 0
if current_status.text != "Operational" and self.notified == 0:
# Find the lastest incident
latest_incident = current_status.findNext("h2")
details = latest_incident.findNext("div", {"class": "markdown"})
embed = discord.Embed(
description="-------", color=discord.Color.red(), type="rich"
)
embed.set_thumbnail(
url="https://media.robertsspaceindustries.com/t0q21kbb3zrpt/source.png"
)
embed.set_author(name="OH NO THERE IS AN INCIDENT")
embed.add_field(name="Details", value=details.text, inline=True)
embed.add_field(
name="LINK",
value=status_url + latest_incident.findNext("a")["href"],
inline=False,
)
channel = await self.bot.get_channel(1097567909640929340).send(embed=embed)
self.notified = 1
else:
self.notified = 0
def setup(bot):
bot.add_cog(StarCitizen(bot))