Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file.
174 changes: 174 additions & 0 deletions reddit2telegram/channels/r_arrasio/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
#encoding:utf-8

import random
from datetime import datetime
import hashlib

import pymongo

import utils
from utils import SupplyResult
from utils.tech import get_all_public_submodules
from utils.setup import get_config


SETTING_NAME = 'r2t_promotion_queue'


def update_promotion_order():
config = get_config()
db = pymongo.MongoClient(host=config['db']['host'])[config['db']['name']]
settings = db['settings']
first_date_view = db['view_with_first_dates']
all_submodules = get_all_public_submodules()
all_submodules.remove('reddit2telegram')
submodules_and_dates = dict()
for submodule in all_submodules:
imported = utils.channels_stuff.import_submodule(submodule)
channel = imported.t_channel
first_date_result = first_date_view.find_one({'_id': channel.lower()})
if first_date_result is None:
continue
submodules_and_dates[submodule] = first_date_result['first_date']
if settings.find_one({'setting': SETTING_NAME}) is None:
settings.insert_one({
'setting': SETTING_NAME,
'promotion_order': submodules_and_dates,
'already_promoted': list(),
'counter': 0
})
settings.find_one_and_update(
{
'setting': SETTING_NAME
},
{
'$set':
{
'promotion_order': submodules_and_dates
}
}
)


def what_submodule():
now = datetime.now()
all_submodules = get_all_public_submodules()
all_submodules.remove('reddit2telegram')
if now.weekday() == 6: # if Sunday then random
return random.choice(all_submodules)

config = get_config()
db = pymongo.MongoClient(host=config['db']['host'])[config['db']['name']]
settings = db['settings']
if settings.find_one({'setting': SETTING_NAME}) is None:
update_promotion_order()
setting_result = settings.find_one({'setting': SETTING_NAME})

already_promoted = setting_result['already_promoted']
promotion_order = setting_result['promotion_order']

for submodule in sorted(promotion_order.keys(), key=promotion_order.get, reverse=1):
if (submodule not in already_promoted) and (submodule in all_submodules):
return submodule

# If every is promoted.
settings.find_one_and_update(
{
'setting': SETTING_NAME
},
{
'$inc': {
'counter': 1
},
'$set': {
'already_promoted': list()
}
}
)


def what_subreddit(submodule_name_to_promte):
submodule_to_promote = utils.channels_stuff.import_submodule(submodule_name_to_promte)
return submodule_to_promote.subreddit


def what_channel(submodule_name_to_promte):
submodule_to_promote = utils.channels_stuff.import_submodule(submodule_name_to_promte)
return submodule_to_promote.t_channel


def get_tags(submodule_name_to_promte):
tags_string = utils.channels_stuff.get_tags_for_submodule(submodule_name_to_promte)
if not tags_string:
return None
return tags_string.split()


def make_nice_submission(submission, r2t, submodule_name_to_promte, extra_ending=None, **kwargs):
tags = get_tags(submodule_name_to_promte)
tags_string = ''
if tags is not None:
if len(tags) > 0:
tags_string = ' '.join(tags)
if extra_ending is None:
extra_ending = ''
submission.title # to make it non-lazy
result = r2t.send_simple(submission,
channel_to_promote=what_channel(submodule_name_to_promte),
date=datetime.utcfromtimestamp(submission.created_utc).strftime('%Y %b %d'),
tags=tags_string,
extra_ending=extra_ending,
text='{title}\n\n{self_text}\n\n{upvotes} upvotes\n/r/{subreddit_name}\n{date}\n{short_link}\nby {channel_to_promote}\n{tags}\n\n{extra_ending}',
other='{title}\n{link}\n\n{upvotes} upvotes\n/r/{subreddit_name}\n{date}\n{short_link}\nby {channel_to_promote}\n{tags}\n\n{extra_ending}',
album='{title}\n{link}\n\n{upvotes} upvotes\n/r/{subreddit_name}\n{date}\n{short_link}\nby {channel_to_promote}\n{tags}\n\n{extra_ending}',
gif='{title}\n\n{upvotes} upvotes\n/r/{subreddit_name}\n{date}\n{short_link}\nby {channel_to_promote}\n{tags}\n\n{extra_ending}',
img='{title}\n\n{upvotes} upvotes\n/r/{subreddit_name}\n{date}\n{short_link}\nby {channel_to_promote}\n{tags}\n\n{extra_ending}',
video='{title}\n\n{upvotes} upvotes\n/r/{subreddit_name}\n{date}\n{short_link}\nby {channel_to_promote}\n{tags}\n\n{extra_ending}',
gallery='{title}\n\n{upvotes} upvotes\n/r/{subreddit_name}\n{date}\n{short_link}\nby {channel_to_promote}\n{tags}\n\n{extra_ending}'
)
return result


submodule_name_to_promte = what_submodule()


subreddit = what_subreddit(submodule_name_to_promte)
t_channel = '@reddit2telegram'
submissions_ranking = 'top'
submissions_limit = 1000


def send_post(submission, r2t):
now = datetime.now()
today = datetime(now.year, now.month, now.day)
taday_date_string = today.strftime('%Y %b %d')
random_number = abs(int(hashlib.sha1(taday_date_string.encode('utf-8')).hexdigest(), 16))
# Twice a week update promotion order
if (now.weekday() == 5) and (now.hour in [0, 23]) and (now.minute == 1):
update_promotion_order()
return SupplyResult.STOP_THIS_SUPPLY
# If Saturday then no promotion
if now.weekday() == 5:
return SupplyResult.STOP_THIS_SUPPLY
# If weekday or Sunday then regular promotion once a day
if (now.weekday() != 5) and ((now.hour == random_number % 24)):
result = make_nice_submission(submission, r2t, submodule_name_to_promte)
if result == SupplyResult.SUCCESSFULLY:
if now.weekday() < 5:
config = get_config()
db = pymongo.MongoClient(host=config['db']['host'])[config['db']['name']]
settings = db['settings']
settings.find_one_and_update(
{
'setting': SETTING_NAME
},
{
'$push':
{
'already_promoted': submodule_name_to_promte
}
}
)
return SupplyResult.SUCCESSFULLY
return result
return SupplyResult.STOP_THIS_SUPPLY
1 change: 1 addition & 0 deletions reddit2telegram/channels/r_arrasio/tags.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#arrasio #arras_io #arrasiogame #arrasgame