stormbrigade_sheriff/cogs_old/check_house.py

68 lines
3.9 KiB
Python

from disnake.ext import commands
import disnake
import db
import httpx
from datetime import datetime
from loguru import logger
import sb_utils
import sb_emojis
class Check_House(commands.Cog):
def __init__(self,bot):
self.bot = bot
@commands.slash_command(description="Look up Activity about a house")
async def check_house(self, inter:disnake.ApplicationCommandInteraction,house=commands.Param(description="Which house?",choices=[str(x) for x in range(1,21)]),ban_check=commands.Param(description="Also check for bans? This will take a while, slowed down to avoid FF banning the bot",choices=["Yes","No"],default="No"),world:str = ""):
logger.info(f"{inter.application_command.name} used by {inter.author} using {inter.filled_options}")
await inter.response.defer(with_message=True,ephemeral=True)
async with httpx.AsyncClient() as client:
result = await client.get(f"https://shk.azure-api.net/shkinfo/v1/HouseActivity?world=World%202&house={house}&Key=5E78CFC8-1FFA-4036-8427-D94ED6E1A45B&subscription-key=ff2e578e119348ea8b48a2acd2f5a48d")
house_players_activity = {}
for player in result.json():
banned = None
vm = None
if ban_check == "Yes":
banned_result = await sb_utils.check_banned_player(session,client,player["Username"])
banned = banned_result["banned"]
house_players_activity[player["Username"]] = (max(datetime.strptime(player["MaxPersonTime"],"%Y-%m-%dT%H:%M:%S"),datetime.strptime(player["MaxTraderTime"],"%Y-%m-%dT%H:%M:%S")),(banned,vm))
#Done with Httpx session
house_result = session.query(db.House).filter(db.House.id == house).one_or_none()
#Done with db session
sorted_players = sorted(house_players_activity.items(), key=lambda x: x[1][0]) # Sort by least active
embed = disnake.Embed(title=f"{house_result.emoji} House {house} Activity Report {house_result.emoji}")
embed.description = f"Generated at: {disnake.utils.format_dt(disnake.utils.utcnow(),'D')}\nOnly tracks map activity, so if they're online and not scouting/trading etc this won't reflect that"
embed.set_thumbnail(file=disnake.File(f"resources\house_sprites\{house}.png"))
player_entries = [(f"**{player}** - {data[0].strftime('%d/%b/%Y %H:%M:%S')}\n",data[1]) for player,data in sorted_players]
temp_value = ""
for player_tuple in player_entries:
if player_tuple[1][0] != None: #Banned has been set
if player_tuple[1][0]:
banned_emoji = sb_emojis.embed_fillers["banned"]
else:
banned_emoji = sb_emojis.embed_fillers["banned_before"]
else:
banned_emoji = sb_emojis.embed_fillers["no_data"]
if player_tuple[1][1] != None: #VM has been set
if player_tuple[1][1]:
vm_emoji = sb_emojis.embed_fillers["vm_active"]
else:
vm_emoji = sb_emojis.embed_fillers["vm_logged"]
else:
vm_emoji = sb_emojis.embed_fillers["no_data"]
temp = f"{vm_emoji}{banned_emoji} {player_tuple[0]}"
if "01/Jan/0001 00:00:00" in player_tuple[0]:
temp = temp.replace("01/Jan/0001 00:00:00","**INACTIVE/RESET**")
if len(temp_value)+len(temp) > 1024:
if len(embed)+len(temp_value) > 6000:
break
embed.add_field(name='\u200b',value=temp_value,inline=False)
temp_value = ''
temp_value += temp
embed.add_field(name='\u200b',value=temp_value,inline=False)
embed.colour = disnake.Color(int(house_result.color,0))
await inter.send("Here you go, blame discord for this dumb message...",delete_after=1)
await inter.channel.send(embed=embed)
def setup(bot):
bot.add_cog(Check_House(bot))