diff --git a/orders.py b/orders.py index 4bf0afc..72bfc70 100644 --- a/orders.py +++ b/orders.py @@ -10,57 +10,55 @@ from mastodon import Mastodon from telegram.telegram import Telegram from settings import ENV from util import timezone +from jinja2 import Environment, PackageLoader, select_autoescape logger = logging.getLogger(__name__) +template_env = Environment( + loader=PackageLoader("orders"), + autoescape=select_autoescape() +) +template_env.globals['ENV'] = ENV + +def filter_short_time(value): + return value.strftime("%I:%M %p") +template_env.filters["short_time"] = filter_short_time + async def order_mastodon_post(session, orders_pool, orders_str, repeats, due_at, verify_at=None): user = orders_pool.user - post = "Here are today's orders for @%s -\n\n" % user.mastodon_account() - post += orders_str + "\n\n" - if repeats > 1: - post += f"These are the same orders from the last {repeats} days\n\n" - post += "Proof of compliance is due by " + due_at.strftime("%I:%M %p") + "\n" - if verify_at is not None: - post += "Verification due by " + verify_at.strftime("%I:%M %p") + "\n" - post += "\n" - - if ENV == 'dev': - post += "⚠️ DEV" - elif user.mastodon_attn_list: - post += f"ATTN - {user.mastodon_attn_list}\n" + template = template_env.get_template('mastodon_order') + post = template.render( + user=user, + orders_str=orders_str, + repeats=repeats, + due_at=due_at, + verify_at=verify_at + ) m = Mastodon(session) return await m.statusPost(post, user) async def order_telegram_post(session, orders_pool, orders_str, repeats, due_at, m_url, verify_at=None): - post = "Here are your orders -\n\n" - post += orders_str + "\n\n" - if repeats > 1: - post += f"These are the same orders from the last {repeats} days\n\n" - post += "Proof of compliance is due by " + due_at.strftime("%I:%M %p") + "\n" - if verify_at is not None: - post += "Verification due by " + verify_at.strftime("%I:%M %p") + "\n" - post += "\n" - post += m_url - if ENV == 'dev': - post += "\n⚠️ DEV" + template = template_env.get_template("telegram_order") + + post = template.render( + orders_str = orders_str, + repeats=repeats, + due_at=due_at, + verify_at=verify_at, + m_url=m_url + ) t = Telegram(session) await t.message_send(orders_pool.user.telegram_chat_id, post) -async def order_telegram_post_need_mastodon(session, orders_pool): - post = "Cannot issue an order without a mastodon username" - if ENV == 'dev': - post += "\n⚠️ DEV" +async def order_telegram_message(session, orders_pool, message): + template = template_env.get_template("telegram_message") - t = Telegram(session) - await t.message_send(orders_pool.user.telegram_chat_id, post) - -async def order_telegram_post_none(session, orders_pool): - post = "No orders for today" - if ENV == 'dev': - post += "\n⚠️ DEV" + post = template.render( + message=message + ) t = Telegram(session) await t.message_send(orders_pool.user.telegram_chat_id, post) @@ -71,7 +69,10 @@ async def order_issue(orders_pool): if user.mastodon_username is None: logger.info(f"{orders_pool} - Cannot issue order without mastodon username") - await order_telegram_post_need_mastodon(session, orders_pool) + await order_telegram_message( + session, orders_pool, + "Cannot issue order without mastodon username" + ) timeline_event_put( TIMELINE_ORDER_NOT_ISSUED, "Cannot issue order without mastodon username", @@ -84,7 +85,10 @@ async def order_issue(orders_pool): if 'orders' not in orders_info: logger.info(f"{orders_pool} - {orders_info['reason']}") - await order_telegram_post_none(session, orders_pool) + await order_telegram_message( + session, orders_pool, + "No orders this time" + ) timeline_event_put( TIMELINE_ORDER_NOT_ISSUED, orders_info['reason'], @@ -156,13 +160,11 @@ async def order_issue(orders_pool): async def punishment_mastodon_post(session, orders_pool, punishment_str, reply_id=None): user = orders_pool.user - post = "@%s has failed to post proof of compliance. Here is the punishment -\n\n" % user.mastodon_account() - post += punishment_str + "\n\n" - - if ENV == 'dev': - post += "⚠️ DEV" - elif user.mastodon_attn_list: - post += f"ATTN - {user.mastodon_attn_list}\n" + template = template_env.get_template('mastodon_punishment') + post = template.render( + user=user, + punishment_str=punishment_str + ) m = Mastodon(session) return await m.statusPost( @@ -172,11 +174,12 @@ async def punishment_mastodon_post(session, orders_pool, punishment_str, reply_i ) async def punishment_telegram_post(session, orders_pool, punishment_str, m_url): - post = "You failed to show proof of compliance. Here is your punishment -\n\n" - post += punishment_str + "\n\n" - post += m_url - if ENV == 'dev': - post += "\n\n⚠️ DEV" + template = template_env.get_template('telegram_punishment') + + post = template.render( + punishment_str=punishment_str, + m_url=m_url + ) t = Telegram(session) await t.message_send(orders_pool.user.telegram_chat_id, post) diff --git a/templates/mastodon_base b/templates/mastodon_base new file mode 100644 index 0000000..b17ac63 --- /dev/null +++ b/templates/mastodon_base @@ -0,0 +1,9 @@ +{% block main %}{% endblock %} +{% block attn %} +{% if user.mastodon_attn_list %} +ATTN - {{user.mastodon_attn_list}} +{% endif %} +{% endblock %} +{% block env %} +{% if ENV == 'dev' %}⚠️ DEV{% endif %} +{% endblock %} diff --git a/templates/mastodon_order b/templates/mastodon_order new file mode 100644 index 0000000..a233088 --- /dev/null +++ b/templates/mastodon_order @@ -0,0 +1,16 @@ +{% extends "mastodon_base" %} + +{% block main %} +Here are today's orders for @{{user.mastodon_account()}} + +{{orders_str}} + +{% if repeats > 1 %} +These are the same orders from the last {{repeats}} days. +{% endif %} + +Proof of compliance is due by {{due_at|short_time}} +{% if verify_at %} +Verification due by {{verify_at|short_time}} +{% endif %} +{% endblock %} diff --git a/templates/mastodon_punishment b/templates/mastodon_punishment new file mode 100644 index 0000000..261be47 --- /dev/null +++ b/templates/mastodon_punishment @@ -0,0 +1,7 @@ +{% extends "mastodon_base" %} + +{% block main %} +@{{user.mastodon_account()}} failed to show proof of compliance. Here is the punishment - + +{{punishment_str}} +{% endblock %} diff --git a/templates/telegram_base b/templates/telegram_base new file mode 100644 index 0000000..3caa689 --- /dev/null +++ b/templates/telegram_base @@ -0,0 +1,2 @@ +{% block main %}{% endblock %} +{% if ENV == 'dev' %}⚠️ DEV{% endif %} diff --git a/templates/telegram_message b/templates/telegram_message new file mode 100644 index 0000000..6cfaec1 --- /dev/null +++ b/templates/telegram_message @@ -0,0 +1,4 @@ +{% extends "telegram_base" %} +{% block main %} +{{message}} +{% endblock %} \ No newline at end of file diff --git a/templates/telegram_order b/templates/telegram_order new file mode 100644 index 0000000..d00e396 --- /dev/null +++ b/templates/telegram_order @@ -0,0 +1,15 @@ +{% extends "telegram_base" %} + +{% block main %} +Here are your orders - + +{{orders_str}} +{% if repeats > 1 %} +These are the same orders from the last {{repeats}} days. +{% endif %} +Proof of compliance is due by {{due_at|short_time}} +{% if verify_at %} +Proof of verification is due by {{verify_at|short_time}} +{% endif %} +{{m_url}} +{% endblock %} diff --git a/templates/telegram_punishment b/templates/telegram_punishment new file mode 100644 index 0000000..447959d --- /dev/null +++ b/templates/telegram_punishment @@ -0,0 +1,9 @@ +{% extends "telegram_base" %} + +{% block main %} +You failed to show proof of compliance. Here is your punishment - + +{{punishment_str}} + +{{m_url}} +{% endblock %}