stormbrigade_sheriff/embed_factory/vm_advert.py

87 lines
5.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import disnake
from embed_factory import embeds
import sb_emojis
from datetime import datetime, timedelta
from main import StronkBot
def generate_embed(bot:StronkBot, guild_id:int, vm_entries:dict,house_data:dict,relations:dict):
embed = embeds.base_embed()
embed.title = f"VM tracker"
embed.description = f"Players currently on VM\n Use </report_vm:{bot.get_global_command_named('report_vm').id}> to add more"
vm_names = [entry["in_game_name"] for entry in vm_entries]
if len(vm_entries) == 0: return embed
entry_list = []
for entry in vm_entries:
if entry.get("finished"): continue
vm_num = '<:SecondVm:1020804212399018157>' if vm_names.count(entry["in_game_name"]) > 1 else '<:no_data:1020809240648101978>'
house_emoji = '<:no_data:1020809240648101978>' if house_data.get(entry["in_game_name"]) is None else sb_emojis.houseEmojis.get(house_data.get(entry["in_game_name"]).get("house"))
#Check relationships
relation_state = None
if house_data.get(entry["in_game_name"]) is not None:
relation_state = relations.get(f"House {house_data.get(entry['in_game_name']).get('house')}")
if relation_state is None: relation_state = relations.get(entry["in_game_name"])
relationship_emoji = '<:no_data:1020809240648101978>' if relation_state is None else sb_emojis.relationshipEmojis.get(relation_state) or '<:no_data:1020809240648101978>'
entry_list.append( f"{relationship_emoji}{house_emoji}{vm_num}{entry['in_game_name']}:{disnake.utils.format_dt(entry.get('added')+ timedelta(days=15), style='R')}\n")
temp_value = ''
for vm_entry in entry_list:
if len(temp_value)+len(vm_entry) > 1024:
if len(embed)+len(temp_value) > 6000:
print("embed is going to be too large lol")
break
embed.add_field(name='\u200b',value=temp_value,inline=False)
temp_value = ''
temp_value += vm_entry
embed.add_field(name='\u200b',value=temp_value,inline=False)
return embed
def generate_components():
return [disnake.ui.Button(label="Remove VM", emoji="", custom_id="vm_tracker.spawn_remove")]
def vm_advert(gID = None):
embed = disnake.Embed(title="VM tracker",description = "Players currently on VM")
embed.set_author(name='Storm Brigade',icon_url='https://i.imgur.com/Opk3fCq.png')
if gID == None:
return embed
#Cleanup expired vm's
exired_vms = helpers.sql_get('SELECT name,added FROM vm_entries WHERE gID = {gID} AND added < unixepoch("now","-15 days") AND finished IS NULL'.format(gID=gID))
vm_length = 1296000
if len(exired_vms) > 0:
for vm in exired_vms:
helpers.sql_set("UPDATE vm_entries SET finished = ? WHERE gID = ? AND name = ? AND added = ?",(vm[1]+vm_length,gID,vm[0],vm[1]))
#print(exired_vms)
from_date = int(datetime.datetime.fromisoformat("{YYYY}-12-15".format(YYYY=datetime.date.today().year-1)).timestamp())
to_date = int(datetime.datetime.fromisoformat("{YYYY}-01-15".format(YYYY=datetime.date.today().year+1)).timestamp())
#print("SELECT vm_entries.name,vm_entries.added,house.house FROM vm_entries INNER JOIN house ON LOWER(vm_entries.name) = LOWER(house.username) WHERE vm_entries.added BETWEEN {start} AND {end} AND vm_entries.finished IS NULL".format(start=from_date,end=to_date))
query_result = helpers.sql_get("SELECT vm_entries.name,vm_entries.added,house.house FROM vm_entries LEFT JOIN house ON LOWER(vm_entries.name) = LOWER(house.username) AND house.date > unixepoch('now','-6 hours') WHERE vm_entries.added BETWEEN {start} AND {end} AND vm_entries.finished IS NULL ORDER BY added ASC".format(start=from_date,end=to_date),True)
house_json = json.loads(helpers.sql_get("SELECT relationships FROM guild WHERE gID = {gID}".format(gID = gID))[0][0])
if len(query_result) > 0:
vm_entries = []
for entry in query_result:
vm_num = '<:no_data:1020809240648101978>'
vm_info = helpers.sql_get(f"SELECT added FROM vm_entries WHERE LOWER(name) = LOWER('{entry['name']}') AND added BETWEEN {from_date} AND {to_date}")
if len(vm_info) > 1:
vm_num = '<:SecondVm:1020804212399018157>'
house_emoji = '<:no_data:1020809240648101978>'
relationship_emoji = '<:no_data:1020809240648101978>'
if str(entry['house']) in house_json.keys():
relationship_emoji = botOptions.relationshipEmojis[house_json[str(entry['house'])]]
if entry['house'] != None:
house_emoji = botOptions.houseEmojis[entry['house']]
vm_entries.append( "{relationship}{house}{num}{name}:<t:{time_remaining}:R>\n".format(relationship= relationship_emoji,num=vm_num,house=house_emoji,name=entry['name'],time_remaining=entry['added']+vm_length))
temp_value = ''
for vm_entry in vm_entries:
if len(temp_value)+len(vm_entry) > 1024:
if len(embed)+len(temp_value) > 6000:
print("embed is going to be too large lol")
break
embed.add_field(name='\u200b',value=temp_value,inline=False)
temp_value = ''
temp_value += vm_entry
embed.add_field(name='\u200b',value=temp_value,inline=False)
#print(len(embed))
return embed