Files
adventureland/crons.py
T

320 lines
12 KiB
Python

# This Python file uses the following encoding: utf-8
from config import *
from functions import *
def send_halloween_email(user):
domain=gdi()
send_email(domain,user.info.email,html=shtml("htmls/contents/announcement_email.html",purpose="halloween",domain=domain,user=user),title=u"🎃 Hey Adventurer! Check out our new Halloween Zone! 🎃",text="Adventure Land has a new Halloween Zone!")
def send_xmas_email(user):
try:
domain=gdi()
send_email(domain,user.info.email,html=shtml("htmls/contents/announcement_email.html",purpose="xmas",domain=domain,user=user),title=u"🎄 Hey Adventurer! Winterland is Here. Xmas Drops are Everywhere! +Steam Greenlight 🎄",text="Adventure Land's Xmas Event is Here'!")
except:
logging.info("Email failed: %s"%user.k())
log_trace()
def send_xmas2_email(user):
try:
domain=gdi()
send_email(domain,user.info.email,html=shtml("htmls/contents/announcement_email.html",purpose="xmas2",domain=domain,user=user),title=u"🎄 Hey Adventurers! Our Xmas Event is Live! 🎄",text="Adventure Land's Xmas Event is Here'!")
except:
logging.info("Email failed: %s"%user.k())
log_trace()
def send_xmas3_email(user):
try:
domain=gdi()
send_email(domain,user.info.email,html=shtml("htmls/contents/announcement_email.html",purpose="xmas3",domain=domain,user=user),title=u"🎄 Hey Adventurers! Our Holiday Season Event is Here and We have Snowballs Now! ☃️",text="Adventure Land's Holiday Season Event is Here'!")
except:
logging.info("Email failed: %s"%user.k())
log_trace()
def send_cvalentines_email(user):
try:
domain=gdi()
send_email(domain,user.info.email,html=shtml("htmls/contents/announcement_email.html",purpose="cvalentines",domain=domain,user=user),title=u"⛩️ Chinese New Year + Valentine's Day Events! Grand Prize: Dragon Armor 💘",text="Adventure Land's Chinese New Year Event is Here'!")
except:
logging.info("Email failed: %s"%user.k())
log_trace()
def send_easter_email(user):
try:
domain=gdi()
send_email(domain,user.info.email,html=shtml("htmls/contents/announcement_email.html",purpose="easter",domain=domain,user=user),title=u"🐰 🥚 Easter Event on Adventure Land! +Map Editor 🗺️ 🐰",text="Adventure Land's Easter Event is Here'!")
except:
logging.info("Email failed: %s"%user.k())
log_trace()
def send_easter_email2(user):
try:
domain=gdi()
send_email(domain,user.info.email,html=shtml("htmls/contents/announcement_email.html",purpose="easter2",domain=domain,user=user),title=u"🐰 Adventure Land's Easter Event is Here! 🥚",text="Adventure Land's Easter Event is Here!")
except:
logging.info("Email failed: %s"%user.k())
log_trace()
def send_anniversary_email(user):
try:
domain=gdi()
send_email(domain,user.info.email,html=shtml("htmls/contents/announcement_email.html",purpose="anniversary",domain=domain,user=user),title=u"🎂 🎁 Anniversary Event on Adventure Land! 🎉 🍰",text="Adventure Land's Anniversary Event is Here'!")
except:
logging.info("Email failed: %s"%user.k())
log_trace()
def send_halloween_email2(user):
try:
domain=gdi()
send_email(domain,user.info.email,html=shtml("htmls/contents/announcement_email.html",purpose="halloween2",domain=domain,user=user),title=u"New Map: Spooky Town on Adventure Land, Mummies, Franky, Ghosts, New Drops! Test 🎃 😱",text="Adventure Land has a new map!")
except:
logging.info("Email failed: %s"%user.k())
log_trace()
def send_halloween_email3(user):
try:
domain=gdi()
send_email(domain,user.info.email,html=shtml("htmls/contents/announcement_email.html",purpose="halloween3",domain=domain,user=user),title=u"Halloween Event on Adventure Land! New Cooperative Boss: Franky 🎃",text="Adventure Land has a new boss!")
except:
logging.info("Email failed: %s"%user.k())
log_trace()
def all_user_cron(num):
rpcs=[]
for user in User.query(User.random_number==num):
#logging.info(user)
if len(user.info.characters):
user.name=user.info.characters[0]["name"]
else:
user.name="#%s"%user.info.signupth
rpcs.append(user.put_async())
if len(rpcs)>=50: #SDK-old
for rpc in rpcs: rpc.wait()
rpcs=[]
for rpc in rpcs: rpc.wait() #SDK-old
def all_user_cron(num): #<<NEW
for user in User.query(User.random_number==num):
if not gf(user,"salt"):
user.info.salt=randomStr(20)
user.password=hash_password(user.password,user.info.salt)
user.put()
logging.info("Converted %s"%user.name)
else:
logging.info("Skipped %s"%user.name)
def all_user_cron(num): #<<NEW
for user in User.query(User.random_number==num):
#deferred.defer(send_xmas_email,user,_countdown=random.randrange(0,4200))
if not gf(user,"dont_send_emails") and gf(user,"verified",0):
deferred.defer(send_easter_email2,user,_countdown=random.randrange(0,6*60*60)) #6 hours
def all_user_cron(num): #<<NEW
for user in User.query(User.random_number==num):
element=user; data=get_user_data(user)
if gf(data,"code_list"): user.info.code_list=data.info.code_list #can be re-run to convert filenames
user.info.code_list=gf(user,"code_list",{})
for slot in gf(user,"code_list",{}):
if type(user.info.code_list[slot])!=type([]):
user.info.code_list[slot]=[user.info.code_list[slot],0]
user.info.code_list[slot][0]=to_filename(user.info.code_list[slot][0])
data.info.code_list=user.info.code_list
delattr(user.info,"code_list")
r=data.put_async()
element.put()
r.wait()
def all_user_cron(num): #<<NEW
for user in User.query(User.random_number==num):
#deferred.defer(send_xmas_email,user,_countdown=random.randrange(0,4200))
if not gf(user,"dont_send_emails") and gf(user,"verified",0):
deferred.defer(send_xmas3_email,user,_countdown=random.randrange(0,24*60*60)) #24 hours
def all_user_cron(num): #<<NEW
for user in User.query(User.random_number==num):
element=user; change=False
i_list=["items"]
for i in xrange(64): i_list.append("items%d"%i)
for c in i_list:
if not gf(element,c,[]): continue
for i in xrange(len(gf(element,c,[]))):
item=gf(element,c,[])[i]
if item and item["name"].endswith("booster") and not item.get("expires"):
gf(element,c,[])[i]=None
change=True
if change: element.put()
def all_user_cron(num): #<<NEW
for user in User.query(User.random_number==num):
element=user; change=False
i_list=["items"]
for i in xrange(64): i_list.append("items%d"%i)
for c in i_list:
if not gf(element,c,[]): continue
for i in xrange(len(gf(element,c,[]))):
item=gf(element,c,[])[i]
if item and not item.get("oo"):
item["oo"]=element.name
change=True
if change: element.put()
def all_user_cron(num): #<<NEW
for user in User.query(User.random_number==num):
if gf(user,"blocked_until",really_old)>datetime.now():
user.banned=True
user.put()
def all_user_cron(num): #<<NEW
for user in User.query(User.random_number==num):
logging.info(user.info.email)
def all_character_cron(num):
for character in Character.query(Character.random_number==num):
if gf(character,"map") in ["main","batcave"]:
character.info.map="main"
character.info.x=0
character.info.y=0
character.put()
def all_character_cron(num):
for character in Character.query(Character.random_number==num):
element=character; change=False
if gf(element,"p") and element.info.p.get("acx") and element.info.p["acx"].get("wing102"):
del element.info.p["acx"]["wing102"]
change=True
for slot in gf(element,"slots",{}):
item=element.info.slots[slot]
if item and item["name"].endswith("booster") and not item.get("expires"):
element.info.slots[slot]=None
#item["level"]=max(0,int(item["level"]/2)-1)
change=True
for i in xrange(len(gf(element,"items",[]))):
item=gf(element,"items",[])[i]
if item and item["name"].endswith("booster") and not item.get("expires"):
gf(element,"items",[])[i]=None
#item["level"]=max(0,int(item["level"]/2)-1)
change=True
if change: element.put()
def all_character_cron(num):
for character in Character.query(Character.random_number==num):
element=character; change=False
for slot in gf(element,"slots",{}):
item=element.info.slots[slot]
if item and not item.get("oo"):
item["oo"]=element.info.name
change=True
for i in xrange(len(gf(element,"items",[]))):
item=gf(element,"items",[])[i]
if item and not item.get("oo"):
item["oo"]=element.info.name
change=True
if change: element.put()
def all_cbackup_cron(num):
rpcs=[]
for character in Character.query(Character.random_number==num,Character.to_backup==True):
def backup_transaction():
element=get_by_iid(character.k('i'))
element.to_backup=False
element.put()
rpcs.append(backup_item(character,_async=True))
rpcs.append(ndb.transaction_async(backup_transaction,retries=0))
for rpc in rpcs: rpc.wait()
def all_process_cron(num):
rpcs=[]
for character in Character.query(Character.random_number==num,Character.to_backup==True):
def backup_transaction():
element=get_by_iid(character.k('i'))
element.to_backup=False
element.put()
rpcs.append(backup_item(character,_async=True))
rpcs.append(ndb.transaction_async(backup_transaction,retries=0))
for rpc in rpcs: rpc.wait()
def all_ubackup_cron(num):
rpcs=[]
for user in User.query(User.random_number==num,User.to_backup==True):
def backup_transaction():
element=get_by_iid(user.k('i'))
element.to_backup=False
element.put()
rpcs.append(backup_item(user,_async=True))
rpcs.append(ndb.transaction_async(backup_transaction,retries=0))
for rpc in rpcs: rpc.wait()
@app.route('/cr/all/<mname>',methods=['GET','POST'])
@ndb.toplevel
def serve_all_cron(mname=""):
domain=gdi(request); user=get_user(request,domain)
if not (user and getattr(user,"admin",False) or request.headers.get('X-AppEngine-Cron')): return "no permission"
if mname=="user":
for n in range(1,101):
deferred.defer(all_user_cron,n,_queue="important")
if mname=="mail":
for n in range(1,101):
deferred.defer(all_mail_cron,n,_queue="important")
if mname=="character":
for n in range(1,101):
deferred.defer(all_character_cron,n,_queue="important")
if mname=="backups":
#originally, backups were on-access, but they need to be all at the same time, so a reversal restores the ~whole state of the game [19/11/18]
for n in range(1,101):
deferred.defer(all_ubackup_cron,n,_queue="important")
deferred.defer(all_cbackup_cron,n,_queue="important")
if mname=="process_backups":
for n in range(1,101):
deferred.defer(all_process_cron,n,_queue="important")
return ""
@app.route('/cr/check_servers',methods=['GET','POST'])
@ndb.toplevel
def serve_server_checker():
domain=gdi(request); user=get_user(request,domain)
if not (user and getattr(user,"admin",False) or request.headers.get('X-AppEngine-Cron')): return "no permission"
check_servers()
return ""
@app.route('/cr/unstuck',methods=['GET','POST'])
@ndb.toplevel
def serve_unstuck():
domain=gdi(request); user=get_user(request,domain)
if not (user and getattr(user,"admin",False) or request.headers.get('X-AppEngine-Cron')): return "no permission"
servers=get_servers()
for server in servers:
if msince(server.created)>10: #no widespread network issue
characters=Character.query(Character.online==True, Character.server == server.k(), Character.last_sync < datetime.now()-timedelta(minutes=30)).fetch()
for character in characters:
m=msince(character.last_sync)
character.online=False
character.server=""
character.put()
send_email(gdi(),"kaansoral@gmail.com",html="Stuck for %s minutes"%m,title="UNSTUCK %s from %s"%(character.name,server.k()))
return ""
@app.route('/cr/hourly',methods=['GET','POST'])
@ndb.toplevel
def serve_hourly():
domain=gdi(request); user=get_user(request,domain)
if not (user and getattr(user,"admin",False) or request.headers.get('X-AppEngine-Cron')): return "no permission"
deferred.defer(verify_steam_installs)
return ""
if random.randrange(0,20)==2:
user=get_by_iid("user|%s"%get_character("Wizard").owner)
if random.randrange(0,20)==2:
add_cash(user,100*random.randrange(1,50))
else:
add_cash(user,200)
if random.randrange(0,20)==2:
user=get_by_iid("user|%s"%get_character("Oragon").owner)
if random.randrange(0,20)==2:
add_cash(user,100*random.randrange(1,50))
else:
add_cash(user,200)
#user=get_by_iid("user|%s"%get_character("Trexnamedtod").owner)
#add_cash(user,25)
#user=get_by_iid("user|%s"%get_character("Emerald").owner)
#add_cash(user,5)
return ""