89 lines
3.9 KiB
Python
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)) |