from bs4 import BeautifulSoup from discord import option from discord.ext import commands import discord import requests class Games(commands.Cog): def __init__(self, bot): self.bot: commands.Bot = bot @commands.slash_command( guild_ids=None, name="apex", description="Query the game's API for data about a player", ) async def apex(self, ctx: commands.Context, player): import apex_legends try: await ctx.defer() embed = apex_legends.get_player(player) await ctx.send_followup(embed=embed) except Exception as e: await ctx.send(e) async def get_ffxiv_worlds(ctx: discord.AutocompleteContext): url = "https://na.finalfantasyxiv.com/lodestone/worldstatus/" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # Find all elements with class "world-list__world_name" world_name_elements = soup.find_all(class_="world-list__world_name") # Loop through each element and extract its contents worlds = [ element.get_text(strip=True) for element in soup.find_all(class_="world-list__world_name") ] return worlds @commands.slash_command( guild_ids=None, name="ffxiv", description="Query the game's API for data about a player", ) @option( "player_name", description="Your player's first and last name", required=True ) async def ffxiv( self, ctx: commands.Context, player_name: str, server: discord.Option( str, autocomplete=discord.utils.basic_autocomplete(get_ffxiv_worlds) ), ): import ffxiv try: embed = ffxiv.make_request(name=player_name.lower(), server=server.lower()) await ctx.defer() await ctx.send_followup(embed=embed) except Exception: await ctx.send( "I encountered an error while searching for that player.\nPlease check that your player name and server are spelled correctly" ) @commands.slash_command( guild_ids=None, name="2042", description="Query Battlefield 2042's API for data about a player", ) @option("player_name", description="Your Origin/EA account name", required=True) async def battlefield(self, ctx: commands.Context, player_name: str): import battlefield await ctx.defer() embed = battlefield.get_player(player=player_name.lower()) await ctx.send_followup(embed=embed) def setup(bot): bot.add_cog(Games(bot))