stormbrigade_sheriff/cogs_dev/check_player.py

89 lines
3.9 KiB
Python

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