from disnake.ext import commands, tasks import disnake import db import httpx from datetime import datetime from sqlalchemy import func from loguru import logger import sb_utils import embed_factory.check_player from main import StronkBot class Check_Player(commands.Cog): def __init__(self,bot): self.bot:StronkBot = bot @commands.slash_command(description="Look up information about a player") async def check_player(self, inter:disnake.ApplicationCommandInteraction,player:str): logger.info(f"{inter.application_command.name} used by {inter.author} using {inter.filled_options}") #Get server specific shit server_document = await self.bot.database.servers.find_one({"_id" : inter.guild_id}) server_worlds = list(server_document.get("worlds", {}).keys()) await inter.response.defer() async with httpx.AsyncClient() as client: # #Check if player is banned ban_response = await client.get(f'http://login.strongholdkingdoms.com/ajaxphp/username_search.php?term={player}') # #Collect world activity data activity_response = await client.get(f'https://shk.azure-api.net/shkinfo/v1/UserActivity?world={server_worlds[0]}&username={player}&Key={server_document["worlds"][server_worlds[0]]}&subscription-key=ff2e578e119348ea8b48a2acd2f5a48d') if activity_response.text == '01/Jan/0001 00:00:00': activity_date = None else: activity_date = datetime.datetime.strptime(activity_response.text,'%d/%b/%Y %H:%M:%S') shk_banned_data = ban_response.json() if server_document is None: return await inter.send(ephemeral=True,content="Missing server setup, have you done the setup process?") #Collect info about the player if len(server_worlds) > 0: # #Collect house history house_data = await self.bot.database.house_history.find({"in_game_name": player, "world": server_worlds[0]}).to_list(length=None) # #Collect Relationships with the server target_list = [f"House {entry['house']}" for entry in house_data] target_list.append(player) relationships = await self.bot.database.relationships.find({ "$and" : [ { "$or" : [ { "world" : server_worlds[0] }, { "world" : { "$not" : { "$exists" : True } } }, { "world" : None } ] }, { "guild_id" : inter.guild_id }, { "target" : { "$in" : target_list } } ] }).to_list(length=None) # #Collect Intel data intel = await self.bot.database.intel_screenshots.find({"in_game_name": player, "added_by.discord_guild_id": inter.guild_id}).to_list(length=None) ## ##Collect VM data from_date = datetime(datetime.now().year - 1, 12, 15) to_date = datetime(datetime.now().year + 1, 1, 15) filter_query = { "added": { "$gte": from_date, "$lte": to_date }, "guild_id": inter.guild_id, "in_game_name" : player } vm_entries = await self.bot.database.vm_entries.find(filter_query).to_list(length=None) @check_player.autocomplete("player") async def autocomp_input(self, inter:disnake.ApplicationCommandInteraction,user_input:str): if len(user_input) == 0: return [] async with httpx.AsyncClient() as client: response = await client.get(f'http://login.strongholdkingdoms.com/ajaxphp/username_search.php?term={user_input}') return response.json() @commands.Cog.listener() async def on_message_interaction(self,inter:disnake.MessageInteraction): pass # States: # 0 - Overview # 1 - Castle Designs # 2 - House History # 3 - Bot Usage Stats def generate_overview_embed_and_components(id:int): pass def setup(bot): logger.info(f"{__name__} Loaded") bot.add_cog(Check_Player(bot))