87 lines
5.3 KiB
Python
87 lines
5.3 KiB
Python
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 |