forked from rDrama/rDrama
move award timers to cron
parent
a971858e05
commit
50b23a064a
|
@ -78,10 +78,10 @@ class User(Base):
|
||||||
patron_utc = Column(Integer, default=0)
|
patron_utc = Column(Integer, default=0)
|
||||||
verified = Column(String)
|
verified = Column(String)
|
||||||
verifiedcolor = Column(String)
|
verifiedcolor = Column(String)
|
||||||
marseyawarded = Column(Integer)
|
marseyawarded = Column(Integer, default=0)
|
||||||
rehab = Column(Integer)
|
rehab = Column(Integer, default=0)
|
||||||
longpost = Column(Integer)
|
longpost = Column(Integer, default=0)
|
||||||
bird = Column(Integer)
|
bird = Column(Integer, default=0)
|
||||||
email = deferred(Column(String))
|
email = deferred(Column(String))
|
||||||
css = Column(String)
|
css = Column(String)
|
||||||
profilecss = deferred(Column(String))
|
profilecss = deferred(Column(String))
|
||||||
|
@ -104,7 +104,7 @@ class User(Base):
|
||||||
hidevotedon = Column(Boolean, default=False)
|
hidevotedon = Column(Boolean, default=False)
|
||||||
slurreplacer = Column(Integer, default=1)
|
slurreplacer = Column(Integer, default=1)
|
||||||
profanityreplacer = Column(Integer, default=1)
|
profanityreplacer = Column(Integer, default=1)
|
||||||
flairchanged = Column(Integer)
|
flairchanged = Column(Integer, default=0)
|
||||||
newtab = Column(Boolean, default=False)
|
newtab = Column(Boolean, default=False)
|
||||||
newtabexternal = Column(Boolean, default=True)
|
newtabexternal = Column(Boolean, default=True)
|
||||||
reddit = Column(String, default='old.reddit.com')
|
reddit = Column(String, default='old.reddit.com')
|
||||||
|
@ -118,8 +118,8 @@ class User(Base):
|
||||||
sig_html = Column(String)
|
sig_html = Column(String)
|
||||||
fp = Column(String)
|
fp = Column(String)
|
||||||
sigs_disabled = Column(Boolean)
|
sigs_disabled = Column(Boolean)
|
||||||
progressivestack = Column(Integer)
|
progressivestack = Column(Integer, default=0)
|
||||||
deflector = Column(Integer)
|
deflector = Column(Integer, default=0)
|
||||||
friends = deferred(Column(String))
|
friends = deferred(Column(String))
|
||||||
friends_html = deferred(Column(String))
|
friends_html = deferred(Column(String))
|
||||||
enemies = deferred(Column(String))
|
enemies = deferred(Column(String))
|
||||||
|
@ -148,11 +148,11 @@ class User(Base):
|
||||||
last_viewed_log_notifs = Column(Integer, default=0)
|
last_viewed_log_notifs = Column(Integer, default=0)
|
||||||
last_viewed_reddit_notifs = Column(Integer, default=0)
|
last_viewed_reddit_notifs = Column(Integer, default=0)
|
||||||
pronouns = Column(String, default='they/them')
|
pronouns = Column(String, default='they/them')
|
||||||
bite = Column(Integer)
|
bite = Column(Integer, default=0)
|
||||||
earlylife = Column(Integer)
|
earlylife = Column(Integer, default=0)
|
||||||
owoify = Column(Integer)
|
owoify = Column(Integer, default=0)
|
||||||
marsify = Column(Integer, default=0)
|
marsify = Column(Integer, default=0)
|
||||||
rainbow = Column(Integer)
|
rainbow = Column(Integer, default=0)
|
||||||
spider = Column(Integer, default=0)
|
spider = Column(Integer, default=0)
|
||||||
blacklisted_by = Column(Integer, ForeignKey("users.id"))
|
blacklisted_by = Column(Integer, ForeignKey("users.id"))
|
||||||
|
|
||||||
|
|
|
@ -1,116 +0,0 @@
|
||||||
import time
|
|
||||||
|
|
||||||
from flask import g
|
|
||||||
|
|
||||||
from files.classes.user import User
|
|
||||||
from files.helpers.alerts import send_repeatable_notification
|
|
||||||
from files.helpers.config.const import *
|
|
||||||
from files.helpers.useractions import *
|
|
||||||
|
|
||||||
def award_timers(v, bot=False):
|
|
||||||
now = time.time()
|
|
||||||
|
|
||||||
def notify_if_not_bot(msg):
|
|
||||||
if not bot:
|
|
||||||
send_repeatable_notification(v.id, msg)
|
|
||||||
|
|
||||||
if v.patron_utc and v.patron_utc < now:
|
|
||||||
v.patron = 0
|
|
||||||
v.patron_utc = 0
|
|
||||||
notify_if_not_bot(f"Your {patron} status has expired!")
|
|
||||||
for i in (22,23,24,25,26,27,28):
|
|
||||||
badge = v.has_badge(i)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.unban_utc and v.unban_utc < now:
|
|
||||||
v.is_banned = None
|
|
||||||
v.unban_utc = 0
|
|
||||||
v.ban_reason = None
|
|
||||||
notify_if_not_bot("You have been unbanned!")
|
|
||||||
if v.agendaposter and v.agendaposter != 1 and v.agendaposter < now:
|
|
||||||
v.agendaposter = 0
|
|
||||||
v.agendaposter_phrase = None
|
|
||||||
v.chudded_by = None
|
|
||||||
notify_if_not_bot("Your chud status has expired!")
|
|
||||||
badge = v.has_badge(58)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.flairchanged and v.flairchanged < now:
|
|
||||||
v.flairchanged = None
|
|
||||||
notify_if_not_bot("Your flair lock has expired. You can now change your flair!")
|
|
||||||
badge = v.has_badge(96)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.marseyawarded and v.marseyawarded < now:
|
|
||||||
v.marseyawarded = None
|
|
||||||
notify_if_not_bot("Your marsey award has expired!")
|
|
||||||
badge = v.has_badge(98)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.longpost and v.longpost < now:
|
|
||||||
v.longpost = None
|
|
||||||
notify_if_not_bot("Your pizzashill award has expired!")
|
|
||||||
badge = v.has_badge(97)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.bird and v.bird < now:
|
|
||||||
v.bird = None
|
|
||||||
notify_if_not_bot("Your bird site award has expired!")
|
|
||||||
badge = v.has_badge(95)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.progressivestack and v.progressivestack != 1 and v.progressivestack < now:
|
|
||||||
v.progressivestack = None
|
|
||||||
notify_if_not_bot("Your progressive stack has expired!")
|
|
||||||
badge = v.has_badge(94)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.rehab and v.rehab < now:
|
|
||||||
v.rehab = None
|
|
||||||
notify_if_not_bot("Your rehab has finished!")
|
|
||||||
badge = v.has_badge(109)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.deflector and v.deflector < now:
|
|
||||||
v.deflector = None
|
|
||||||
notify_if_not_bot("Your deflector has expired!")
|
|
||||||
if v.owoify and v.owoify < now:
|
|
||||||
v.owoify = None
|
|
||||||
notify_if_not_bot("Your OwOify status has expired!")
|
|
||||||
badge = v.has_badge(167)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.bite and v.bite < now:
|
|
||||||
v.bite = None
|
|
||||||
badge = v.has_badge(168)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
|
|
||||||
v.house = v.old_house
|
|
||||||
notify_if_not_bot(f"Your vampire status has ended. You're now back in House {v.old_house.replace(' Founder', '')}!")
|
|
||||||
v.old_house = ''
|
|
||||||
|
|
||||||
if v.earlylife and v.earlylife < now:
|
|
||||||
v.earlylife = None
|
|
||||||
notify_if_not_bot("Your earlylife status has expired!")
|
|
||||||
badge = v.has_badge(169)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.marsify and v.marsify != 1 and v.marsify < now:
|
|
||||||
v.marsify = 0
|
|
||||||
if SITE_NAME != 'rDrama': notify_if_not_bot("Your marsify status has expired!")
|
|
||||||
badge = v.has_badge(170)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.rainbow and v.rainbow < now:
|
|
||||||
v.rainbow = None
|
|
||||||
notify_if_not_bot("Your rainbow has expired!")
|
|
||||||
badge = v.has_badge(171)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
if v.spider and v.spider != 1 and v.spider < now:
|
|
||||||
v.spider = 0
|
|
||||||
notify_if_not_bot("Your spider friend has left you!")
|
|
||||||
badge = v.has_badge(179)
|
|
||||||
if badge: g.db.delete(badge)
|
|
||||||
|
|
||||||
if time.time() - v.created_utc > 365 * 86400:
|
|
||||||
badge_grant(user=v, badge_id=134)
|
|
||||||
|
|
||||||
if time.time() - v.created_utc > 365 * 86400 * 2:
|
|
||||||
badge_grant(user=v, badge_id=237)
|
|
||||||
|
|
||||||
g.db.add(v)
|
|
||||||
|
|
||||||
|
|
||||||
def award_timers_bots_task():
|
|
||||||
accs = g.db.query(User).filter(User.id.in_(bots))
|
|
||||||
for u in accs:
|
|
||||||
award_timers(u, bot=True)
|
|
|
@ -5,11 +5,11 @@ from sys import stdout
|
||||||
from shutil import make_archive
|
from shutil import make_archive
|
||||||
from hashlib import md5
|
from hashlib import md5
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
|
from sqlalchemy.orm import load_only
|
||||||
|
|
||||||
import click
|
import click
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
import files.helpers.awards as awards
|
|
||||||
import files.helpers.offsitementions as offsitementions
|
import files.helpers.offsitementions as offsitementions
|
||||||
import files.helpers.stats as stats
|
import files.helpers.stats as stats
|
||||||
import files.routes.static as route_static
|
import files.routes.static as route_static
|
||||||
|
@ -32,21 +32,51 @@ def cron(every_5m, every_1h, every_1d, every_1mo):
|
||||||
g.db = db_session()
|
g.db = db_session()
|
||||||
g.v = None
|
g.v = None
|
||||||
|
|
||||||
|
#I put commit under each task to release database locks and prevent main flask app crashing
|
||||||
if every_5m:
|
if every_5m:
|
||||||
|
t = time.time()
|
||||||
|
_award_timers_task()
|
||||||
|
g.db.commit()
|
||||||
|
print(f'_award_timers_task: {time.time() - t}', flush=True)
|
||||||
|
|
||||||
if FEATURES['GAMBLING']:
|
if FEATURES['GAMBLING']:
|
||||||
|
t = time.time()
|
||||||
check_if_end_lottery_task()
|
check_if_end_lottery_task()
|
||||||
|
g.db.commit()
|
||||||
|
print(f'check_if_end_lottery_task: {time.time() - t}', flush=True)
|
||||||
|
|
||||||
|
t = time.time()
|
||||||
spin_roulette_wheel()
|
spin_roulette_wheel()
|
||||||
offsitementions.offsite_mentions_task(cache)
|
g.db.commit()
|
||||||
|
print(f'spin_roulette_wheel: {time.time() - t}', flush=True)
|
||||||
|
#offsitementions.offsite_mentions_task(cache)
|
||||||
|
|
||||||
if every_1h:
|
if every_1h:
|
||||||
awards.award_timers_bots_task()
|
t = time.time()
|
||||||
_generate_emojis_zip()
|
_generate_emojis_zip()
|
||||||
|
g.db.commit()
|
||||||
|
print(f'_generate_emojis_zip: {time.time() - t}', flush=True)
|
||||||
|
|
||||||
|
t = time.time()
|
||||||
_leaderboard_task()
|
_leaderboard_task()
|
||||||
|
g.db.commit()
|
||||||
|
print(f'_leaderboard_task: {time.time() - t}', flush=True)
|
||||||
|
|
||||||
if every_1d:
|
if every_1d:
|
||||||
|
t = time.time()
|
||||||
stats.generate_charts_task(SITE)
|
stats.generate_charts_task(SITE)
|
||||||
|
g.db.commit()
|
||||||
|
print(f'generate_charts_task: {time.time() - t}', flush=True)
|
||||||
|
|
||||||
|
t = time.time()
|
||||||
_sub_inactive_purge_task()
|
_sub_inactive_purge_task()
|
||||||
|
g.db.commit()
|
||||||
|
print(f'_sub_inactive_purge_task: {time.time() - t}', flush=True)
|
||||||
|
|
||||||
|
t = time.time()
|
||||||
cache.set('stats', stats.stats())
|
cache.set('stats', stats.stats())
|
||||||
|
g.db.commit()
|
||||||
|
print(f'stats: {time.time() - t}', flush=True)
|
||||||
|
|
||||||
g.db.commit()
|
g.db.commit()
|
||||||
g.db.close()
|
g.db.close()
|
||||||
|
@ -160,3 +190,55 @@ def _leaderboard_task():
|
||||||
cache.set("users9", list(users9))
|
cache.set("users9", list(users9))
|
||||||
cache.set("users9_1", list(users9_1))
|
cache.set("users9_1", list(users9_1))
|
||||||
cache.set("users9_2", list(users9_2))
|
cache.set("users9_2", list(users9_2))
|
||||||
|
|
||||||
|
|
||||||
|
def _process_timer(attr, badge_ids, text, extra_attrs={}):
|
||||||
|
now = time.time()
|
||||||
|
users = g.db.query(User).options(load_only(User.id)).filter(1 < attr, attr < now)
|
||||||
|
uids = set([x.id for x in users])
|
||||||
|
|
||||||
|
#set user attributes
|
||||||
|
attr_dict = {attr: 0} | extra_attrs
|
||||||
|
users.update(attr_dict)
|
||||||
|
|
||||||
|
#remove corresponding badges
|
||||||
|
if badge_ids:
|
||||||
|
g.db.query(Badge).options(load_only(Badge.badge_id)).filter(Badge.badge_id.in_(badge_ids), Badge.user_id.in_(uids)).delete()
|
||||||
|
|
||||||
|
#notify users
|
||||||
|
for uid in uids:
|
||||||
|
send_repeatable_notification(uid, text)
|
||||||
|
g.db.commit()
|
||||||
|
|
||||||
|
|
||||||
|
def _award_timers_task():
|
||||||
|
#only awards
|
||||||
|
_process_timer(User.deflector, [], "The deflector award you received has expired!")
|
||||||
|
_process_timer(User.progressivestack, [94], "The progressive stack award you received has expired!")
|
||||||
|
_process_timer(User.bird, [95], "The bird site award you received has expired!")
|
||||||
|
_process_timer(User.longpost, [97], "The pizzashill award you received has expired!")
|
||||||
|
_process_timer(User.marseyawarded, [98], "The marsey award you received has expired!")
|
||||||
|
_process_timer(User.rehab, [109], "The rehab award you received has expired!")
|
||||||
|
_process_timer(User.owoify, [167], "The OwOify award you received has expired!")
|
||||||
|
_process_timer(User.bite, [168], "Your vampire status has ended. You're now back in your original house!", {
|
||||||
|
User.house: User.old_house,
|
||||||
|
User.old_house: '',
|
||||||
|
})
|
||||||
|
_process_timer(User.earlylife, [169], "The earlylife award you received has expired!")
|
||||||
|
_process_timer(User.marsify, [170], "The marsify award you received has expired!")
|
||||||
|
_process_timer(User.rainbow, [171], "The rainbow award you received has expired!")
|
||||||
|
_process_timer(User.spider, [179], "The spider award you received has expired!")
|
||||||
|
|
||||||
|
#both awards and janny powers
|
||||||
|
_process_timer(User.unban_utc, [], "Your temporary ban has expired!", {
|
||||||
|
User.is_banned: None,
|
||||||
|
User.ban_reason: None,
|
||||||
|
})
|
||||||
|
_process_timer(User.patron_utc, [22,23,24,25,26,27,28], f"Your {patron} status has expired!", {
|
||||||
|
User.patron: 0,
|
||||||
|
})
|
||||||
|
_process_timer(User.agendaposter, [58], "Your temporary chud status has expired!", {
|
||||||
|
User.agendaposter_phrase: None,
|
||||||
|
User.chudded_by: None,
|
||||||
|
})
|
||||||
|
_process_timer(User.flairchanged, [96], "Your temporary flair-lock has expired. You can now change your flair!")
|
||||||
|
|
|
@ -3,9 +3,10 @@ from flask import g
|
||||||
from files.classes.badges import Badge
|
from files.classes.badges import Badge
|
||||||
from files.helpers.alerts import send_repeatable_notification
|
from files.helpers.alerts import send_repeatable_notification
|
||||||
|
|
||||||
def badge_grant(user, badge_id, description=None, url=None, notify=True):
|
def badge_grant(user, badge_id, description=None, url=None, notify=True, check_if_exists=True):
|
||||||
assert user != None
|
assert user != None
|
||||||
if user.has_badge(badge_id):
|
|
||||||
|
if check_if_exists and user.has_badge(badge_id):
|
||||||
return
|
return
|
||||||
|
|
||||||
if description and len(description) > 256:
|
if description and len(description) > 256:
|
||||||
|
|
|
@ -905,7 +905,7 @@ def admin_title_change(user_id, v):
|
||||||
user.customtitle=new_name
|
user.customtitle=new_name
|
||||||
if request.values.get("locked"): user.flairchanged = int(time.time()) + 2629746
|
if request.values.get("locked"): user.flairchanged = int(time.time()) + 2629746
|
||||||
else:
|
else:
|
||||||
user.flairchanged = None
|
user.flairchanged = 0
|
||||||
badge = user.has_badge(96)
|
badge = user.has_badge(96)
|
||||||
if badge: g.db.delete(badge)
|
if badge: g.db.delete(badge)
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ from sqlalchemy.orm import load_only
|
||||||
|
|
||||||
from files.classes.submission import Submission
|
from files.classes.submission import Submission
|
||||||
from files.classes.votes import Vote
|
from files.classes.votes import Vote
|
||||||
from files.helpers.awards import award_timers
|
|
||||||
from files.helpers.config.const import *
|
from files.helpers.config.const import *
|
||||||
from files.helpers.get import *
|
from files.helpers.get import *
|
||||||
from files.helpers.sorting_and_time import *
|
from files.helpers.sorting_and_time import *
|
||||||
|
@ -61,9 +60,8 @@ def front_all(v, sub=None, subdomain=None):
|
||||||
|
|
||||||
posts = get_posts(ids, v=v, eager=True)
|
posts = get_posts(ids, v=v, eager=True)
|
||||||
|
|
||||||
if v:
|
if v and v.hidevotedon:
|
||||||
if v.hidevotedon: posts = [x for x in posts if not hasattr(x, 'voted') or not x.voted]
|
posts = [x for x in posts if not hasattr(x, 'voted') or not x.voted]
|
||||||
award_timers(v)
|
|
||||||
|
|
||||||
if v and v.client: return {"data": [x.json(g.db) for x in posts], "total": total}
|
if v and v.client: return {"data": [x.json(g.db) for x in posts], "total": total}
|
||||||
return render_template("home.html", v=v, listing=posts, total=total, sort=sort, t=t, page=page, sub=sub, home=True, pins=pins, size=size)
|
return render_template("home.html", v=v, listing=posts, total=total, sort=sort, t=t, page=page, sub=sub, home=True, pins=pins, size=size)
|
||||||
|
@ -148,6 +146,12 @@ def frontlist(v=None, sort="hot", page=1, t="all", ids_only=True, filter_words='
|
||||||
pins = pins.order_by(Submission.created_utc.desc()).all()
|
pins = pins.order_by(Submission.created_utc.desc()).all()
|
||||||
posts = pins + posts
|
posts = pins + posts
|
||||||
|
|
||||||
|
if time.time() - v.created_utc > 365 * 86400:
|
||||||
|
badge_grant(user=v, badge_id=134)
|
||||||
|
|
||||||
|
if time.time() - v.created_utc > 365 * 86400 * 2:
|
||||||
|
badge_grant(user=v, badge_id=237)
|
||||||
|
|
||||||
if ids_only: posts = [x.id for x in posts]
|
if ids_only: posts = [x.id for x in posts]
|
||||||
return posts, total, size
|
return posts, total, size
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
update users set deflector=0 where deflector is null;
|
||||||
|
update users set progressivestack=0 where progressivestack is null;
|
||||||
|
update users set bird=0 where bird is null;
|
||||||
|
update users set longpost=0 where longpost is null;
|
||||||
|
update users set marseyawarded=0 where marseyawarded is null;
|
||||||
|
update users set rehab=0 where rehab is null;
|
||||||
|
update users set owoify=0 where owoify is null;
|
||||||
|
update users set bite=0 where bite is null;
|
||||||
|
update users set earlylife=0 where earlylife is null;
|
||||||
|
update users set marsify=0 where marsify is null;
|
||||||
|
update users set rainbow=0 where rainbow is null;
|
||||||
|
update users set spider=0 where spider is null;
|
||||||
|
update users set unban_utc=0 where unban_utc is null;
|
||||||
|
update users set agendaposter=0 where agendaposter is null;
|
||||||
|
update users set flairchanged=0 where flairchanged is null;
|
||||||
|
update users set patron_utc=0 where patron_utc is null;
|
||||||
|
|
||||||
|
create index users_deflector_idx on users using btree(deflector);
|
||||||
|
create index users_progressivestack_idx on users using btree(progressivestack);
|
||||||
|
create index users_bird_idx on users using btree(bird);
|
||||||
|
create index users_longpost_idx on users using btree(longpost);
|
||||||
|
create index users_marseyawarded_idx on users using btree(marseyawarded);
|
||||||
|
create index users_rehab_idx on users using btree(rehab);
|
||||||
|
create index users_owoify_idx on users using btree(owoify);
|
||||||
|
create index users_bite_idx on users using btree(bite);
|
||||||
|
create index users_earlylife_idx on users using btree(earlylife);
|
||||||
|
create index users_marsify_idx on users using btree(marsify);
|
||||||
|
create index users_rainbow_idx on users using btree(rainbow);
|
||||||
|
create index users_spider_idx on users using btree(spider);
|
||||||
|
create index users_unban_utc_idx on users using btree(unban_utc);
|
||||||
|
create index users_agendaposter_idx on users using btree(agendaposter);
|
||||||
|
create index users_flairchanged_idx on users using btree(flairchanged);
|
||||||
|
create index users_patron_utc_idx on users using btree(patron_utc);
|
Loading…
Reference in New Issue