sbsheriff/sbclasses.py

97 lines
3.8 KiB
Python

from os import times
from telnetlib import NOP
import time
import disnake
import datetime
import botOptions
class TimedAttack:
def __init__(self,owner,cID,tID,duration,name):
self.attackers = {}
self.mID = 0
self.cID = cID
self.tID = tID
self.duration = duration
self.name = name
self.owner = owner
self.mark = 0
self.longestAttack = 0
self.leadIn = 10
self.attacks = 0
self.sendt = 0
self.color = 0xffff00
def setMessageID(self,id):
self.mID = id
def setMark(self,time):
self.color = 0x00ff00
self.mark = time
def addAttack(self,owner,time,name):
self.attacks += 1
if time > self.longestAttack: self.longestAttack = time
if owner in self.attackers.keys():
#Attacker adding more attacks
self.attackers[owner].append((time,name))
self.attackers[owner].sort(key=lambda y: y[0],reverse=True)
else:
attacklist = []
attacklist.append((time,name))
self.attackers[owner] = attacklist
return
def isOver(self):
if self.mark == 0: return False
if time.time() > self.longestAttack+self.mark+self.leadIn:
return True
return False
def needsUpdate(self):
check = 0
for attacks in self.attackers.values():
for attack in attacks:
ttl = int(self.longestAttack - attack[0] + self.leadIn + self.mark)
if int(time.time()) > ttl:
check += 1
if check > self.sendt:
return True
return False
def generateEmbed(self):
if self.isOver():
self.color = 0xff0000
self.sendt = 0
#timeString = str(datetime.timedelta(seconds=self.duration))
attackString = ""
if self.mark > 0:
attackString = "\nLanding in: <t:{t}:R>".format(t=int(self.longestAttack + self.leadIn + self.mark))
embed = disnake.Embed(title="Timed attack on ID: {targetID} - Longest attack: {t} {cd}".format(cd = attackString, targetID = self.tID,owner = self.owner,t=str(datetime.timedelta(seconds=self.longestAttack)))\
,description="To participate add your times using: \n {prefix}timed {tID} <Time to Land> <Name of Attack> \n\
Once everything is added, click the green timer reaction to start the countdowns.\n {leadin} seconds is added to the timers as a lead in.\n**Confused? use {prefix}timed help**"\
.format(prefix=botOptions.prefix,owner=self.owner,tID=self.tID,leadin=self.leadIn),color = self.color)
#If theres attackers, add them.
for name, attacks in self.attackers.items():
valString = ""
for attack in attacks:
if self.mark > 0:
#long Time - time + leadin + mark
ttl = int(self.longestAttack - attack[0] + self.leadIn + self.mark)
if int(time.time()) > ttl:
self.sendt += 1
valString += '**{name}**: Sendt\n'.format(name=attack[1])
continue
valString += '**{name}**: <t:{t}:R>\n'.format(t=ttl,name=attack[1])
else:
valString += '**{name}**: {t}\n'.format(t=str(datetime.timedelta(seconds=attack[0])),name=attack[1])
embed.add_field(name = "__{name}__".format(name = name),value = valString,inline=True)
#embed.add_field(name = 'Strix',value='VilA:<t:{t1}:R>\nVilA:<t:{t2}:R>'.format(t1=int(time.time()+random.random()*360),t2=int(time.time()+random.random()*360)),inline=True)
embed.set_author(name='Storm Brigade',icon_url='https://media.disnakeapp.net/attachments/947633992688103424/947805799231660032/StormBrigade_White.png')
return embed