diff --git a/Dockerfile b/Dockerfile index e647a12f8..724cbdfbe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,6 +26,7 @@ RUN mkdir /dm_media RUN mkdir /songs RUN mkdir /temp_songs RUN mkdir /videos +RUN mkdir /orgies RUN mkdir /audio RUN mkdir /asset_submissions RUN mkdir /asset_submissions/emojis diff --git a/files/classes/__init__.py b/files/classes/__init__.py index 25ccf8afd..4ba1425cf 100644 --- a/files/classes/__init__.py +++ b/files/classes/__init__.py @@ -33,3 +33,4 @@ from .media import * from .push_subscriptions import * from .group import * from .group_membership import * +from .orgy import * diff --git a/files/helpers/cron.py b/files/helpers/cron.py index 2c5518280..133bda459 100644 --- a/files/helpers/cron.py +++ b/files/helpers/cron.py @@ -1,5 +1,6 @@ import time import os +import glob from sys import stdout from shutil import make_archive from hashlib import md5 @@ -22,12 +23,13 @@ from files.helpers.config.const import * from files.helpers.get import * from files.helpers.lottery import check_if_end_lottery_task from files.helpers.roulette import spin_roulette_wheel +from files.helpers.sanitize import filter_emojis_only, sanitize from files.helpers.useractions import * from files.cli import app, db_session, g CRON_CACHE_TIMEOUT = 172800 -def cron_fn(every_5m, every_1d, every_fri): +def cron_fn(every_5m, every_1d, every_fri_12, every_fri_23, every_sat_00, every_sat_03): with app.app_context(): g.db = db_session() g.v = None @@ -76,8 +78,22 @@ def cron_fn(every_5m, every_1d, every_fri): cache.set('stats', stats.stats(), timeout=CRON_CACHE_TIMEOUT) g.db.commit() - if every_fri: - print('test!!!', flush=True) + if every_fri_12: + _create_1st_post() + g.db.commit() + + if every_fri_23: + _create_2nd_post() + g.db.commit() + + if every_sat_00: + _create_orgy() + g.db.commit() + + if every_sat_03: + _delete_all() + g.db.commit() + except: print(traceback.format_exc(), flush=True) g.db.rollback() @@ -89,9 +105,89 @@ def cron_fn(every_5m, every_1d, every_fri): @app.cli.command('cron', help='Run scheduled tasks.') @click.option('--every-5m', is_flag=True, help='Call every 5 minutes.') @click.option('--every-1d', is_flag=True, help='Call every 1 day.') -@click.option('--every-fri', is_flag=True, help='Call every Friday.') -def cron(every_5m, every_1d, every_fri): - cron_fn(every_5m, every_1d, every_fri) +@click.option('--every-fri-12', is_flag=True, help='Call every Friday.') +@click.option('--every-fri-23', is_flag=True, help='Call every Friday.') +@click.option('--every-sat-00', is_flag=True, help='Call every Saturday.') +@click.option('--every-sat-03', is_flag=True, help='Call every Saturday.') +def cron(every_5m, every_1d, every_fri_12, every_fri_23, every_sat_00, every_sat_03): + cron_fn(every_5m, every_1d, every_fri_12, every_fri_23, every_sat_00, every_sat_03) + +def get_file(): + return max(glob.glob('/orgies/*'), key=os.path.getctime).split('/orgies/')[1] + +def get_name(): + return get_file().split('.')[0] + +def _create_post(title, body): + title += f': {get_name()}' + body += f'''It will be shown [here](/orgy).\nRerun will be Sunday 4 PM EST.\nThere will be a 5-minute bathroom break at the 50:00 mark.''' + + title_html = filter_emojis_only(title) + body_html = sanitize(body) + + p = Post( + private=False, + notify=True, + author_id=AUTOJANNY_ID, + over_18=False, + new=False, + app_id=None, + is_bot=False, + url='/orgy', + body=body, + body_html=body_html, + embed=None, + title=title, + title_html=title_html, + sub='countryclub', + ghost=False, + chudded=False, + rainbowed=False, + queened=False, + sharpened=False, + stickied_utc=int(time.time())+3600, + stickied="AutoJanny", + distinguish_level=6, + ) + g.db.add(p) + + cache.delete_memoized(frontlist) + + +def _create_1st_post(): + title = f'Movie Night' + body = f'''Our Movie Night this week will show {get_name()}.\nThe movie will start at 8 PM EST. [Here is a timezone converter for whoever needs it.](https://dateful.com/time-zone-converter?t=8pm&tz1=EST-EDT-Eastern-Time). You can also check this [countdown timer](https://www.tickcounter.com/countdown/4435809/movie-night) instead.\n''' + _create_post(title, body) + +def _create_2nd_post(): + title = f'Movie Night in 60 minutes' + body = '' + _create_post(title, body) + +def _create_orgy(): + orgy = Orgy( + title=get_name(), + type='file', + data=f'https://videos.watchpeopledie.tv/orgies/{get_file()}' + ) + g.db.add(orgy) + +def _delete_all(): + orgy = g.db.query(Orgy).one_or_none() + if orgy: + g.db.delete(orgy) + + posts = g.db.query(Post).filter_by(author_id=AUTOJANNY_ID, deleted_utc=0).all() + for p in posts: + p.deleted_utc = int(time.time()) + p.is_pinned = False + p.stickied = None + g.db.add(p) + + cache.delete_memoized(frontlist) + + for sort in COMMENT_SORTS.keys(): + cache.delete(f'post_{p.id}_{sort}') def _grant_one_year_badges(): one_year_ago = int(time.time()) - 364 * 86400 diff --git a/files/routes/__init__.py b/files/routes/__init__.py index dc584371a..61e86dae4 100644 --- a/files/routes/__init__.py +++ b/files/routes/__init__.py @@ -56,5 +56,5 @@ if IS_LOCALHOST: if "cron" not in argv and "load_chat" not in argv: from files.helpers.cron import cron_fn print('Starting cron tasks!', flush=True) - gevent.spawn(cron_fn, True, False, False) + gevent.spawn(cron_fn, True, False, False, False, False, False) print('Cron tasks Finished!', flush=True)