dragon-bot/app/cogs/game_apis.py
2023-09-29 13:07:17 -07:00

87 lines
2.6 KiB
Python
Executable File

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))