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