forked from hkc/mastoposter
I think formatting works properly now?
When boosting something, status contents are not stored in status itself, but rather in the `status.reblog`. Since it'd be really awkward to check for boosts too, I just decided to add separate `@property` that returns either reblog or status itself, depending on the value of `status.reblog`. That required a bit of tweaking. Also now we're using ExtendedInterpolation, so you can do the `${tokens.telegram}` and add separate section for your secrets. TODO: add support for environment variables (maybe) For those who's wondering how manual check for boost would look in the template, here ya go :) {% if status.reblog %}Boost from <a \ href="{{status.reblog.account.url}}">{{status.reblog.account.name}}</a> {% if status.reblog.spoiler_text %}{{status.reblog.spoiler_text}} <tg-spoiler>{% endif %}{{status.reblog.content_flathtml}}\ {% if status.reblog.spoiler_text %}</tg-spoiler>{% endif %} {% else %} {% if status.spoiler_text %}{{status.spoiler_text}} <tg-spoiler>{% endif %}{{status.content_flathtml}}\ {% if status.spoiler_text %}</tg-spoiler>{% endif %} {% endif %} <a href="{{status.link}}">Link to post</a> You asked for this :)
This commit is contained in:
parent
881b1e1532
commit
2006d489c3
15
config.ini
15
config.ini
|
@ -46,12 +46,6 @@ token = 12345:blahblah
|
||||||
# username, if it is public
|
# username, if it is public
|
||||||
chat = @username
|
chat = @username
|
||||||
|
|
||||||
# Should we show link to post as a link after post content?
|
|
||||||
show-post-link = yes
|
|
||||||
|
|
||||||
# Should we show link to original author before post content?
|
|
||||||
show-boost-from = yes
|
|
||||||
|
|
||||||
# Should we make posts silent?
|
# Should we make posts silent?
|
||||||
# https://core.telegram.org/bots/api#sendmessage `disable_notification`
|
# https://core.telegram.org/bots/api#sendmessage `disable_notification`
|
||||||
silent = true
|
silent = true
|
||||||
|
@ -63,6 +57,15 @@ type = discord
|
||||||
# Webhook URL with the `?wait=true`
|
# Webhook URL with the `?wait=true`
|
||||||
webhook = url
|
webhook = url
|
||||||
|
|
||||||
|
# Jinja2 template string for the post. Works only in Telegram.
|
||||||
|
# This is the default template, not specifying that property at all will result
|
||||||
|
# in this string (probably)
|
||||||
|
# Pay attention to 4 spaces in the empty line, I think it's required
|
||||||
|
template = {% if status.reblog %}Boost from <a href="{{status.reblog.account.url}}">{{status.reblog.account.name}}</a>
|
||||||
|
{% endif %}{% if status.reblog_or_status.spoiler_text %}{{status.reblog_or_status.spoiler_text}}
|
||||||
|
<tg-spoiler>{% endif %}{{ status.reblog_or_status.content_flathtml }}{% if status.reblog_or_status.spoiler_text %}</tg-spoiler>{% endif %}
|
||||||
|
|
||||||
|
<a href="{{status.link}}">Link to post</a>
|
||||||
|
|
||||||
;# Boost filter. Only boosts will be matched by that one
|
;# Boost filter. Only boosts will be matched by that one
|
||||||
;[filter/boost]
|
;[filter/boost]
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
from asyncio import run
|
from asyncio import run
|
||||||
from configparser import ConfigParser
|
from configparser import ConfigParser, ExtendedInterpolation
|
||||||
from mastoposter import execute_integrations, load_integrations_from
|
from mastoposter import execute_integrations, load_integrations_from
|
||||||
from mastoposter.integrations import FilteredIntegration
|
from mastoposter.integrations import FilteredIntegration
|
||||||
from mastoposter.sources import websocket_source
|
from mastoposter.sources import websocket_source
|
||||||
|
@ -34,7 +34,7 @@ async def listen(
|
||||||
|
|
||||||
|
|
||||||
def main(config_path: str):
|
def main(config_path: str):
|
||||||
conf = ConfigParser()
|
conf = ConfigParser(interpolation=ExtendedInterpolation())
|
||||||
conf.read(config_path)
|
conf.read(config_path)
|
||||||
|
|
||||||
for section in conf.sections():
|
for section in conf.sections():
|
||||||
|
|
|
@ -45,9 +45,10 @@ DEFAULT_TEMPLATE: str = """\
|
||||||
Boost from <a href="{{status.reblog.account.url}}">\
|
Boost from <a href="{{status.reblog.account.url}}">\
|
||||||
{{status.reblog.account.name}}</a>\
|
{{status.reblog.account.name}}</a>\
|
||||||
{% endif %}\
|
{% endif %}\
|
||||||
{% if status.spoiler_text %}{{status.spoiler_text}}
|
{% if status.reblog_or_status.spoiler_text %}\
|
||||||
<tg-spoiler>{% endif %}{{ status.content_flathtml }}\
|
{{status.reblog_or_status.spoiler_text}}
|
||||||
{% if status.spoiler_text %}</tg-spoiler>{% endif %}
|
<tg-spoiler>{% endif %}{{ status.reblog_or_status.content_flathtml }}\
|
||||||
|
{% if status.reblog_or_status.spoiler_text %}</tg-spoiler>{% endif %}
|
||||||
|
|
||||||
<a href="{{status.link}}">Link to post</a>"""
|
<a href="{{status.link}}">Link to post</a>"""
|
||||||
|
|
||||||
|
@ -56,10 +57,10 @@ class TelegramIntegration(BaseIntegration):
|
||||||
def __init__(self, sect: SectionProxy):
|
def __init__(self, sect: SectionProxy):
|
||||||
self.token = sect.get("token", "")
|
self.token = sect.get("token", "")
|
||||||
self.chat_id = sect.get("chat", "")
|
self.chat_id = sect.get("chat", "")
|
||||||
self.show_post_link = sect.getboolean("show_post_link", True)
|
|
||||||
self.show_boost_from = sect.getboolean("show_boost_from", True)
|
|
||||||
self.silent = sect.getboolean("silent", True)
|
self.silent = sect.getboolean("silent", True)
|
||||||
self.template = Template(sect.get("template", DEFAULT_TEMPLATE))
|
self.template: Template = Template(
|
||||||
|
sect.get("template", DEFAULT_TEMPLATE)
|
||||||
|
)
|
||||||
|
|
||||||
async def _tg_request(self, method: str, **kwargs) -> TGResponse:
|
async def _tg_request(self, method: str, **kwargs) -> TGResponse:
|
||||||
url = API_URL.format(self.token, method)
|
url = API_URL.format(self.token, method)
|
||||||
|
@ -181,12 +182,6 @@ class TelegramIntegration(BaseIntegration):
|
||||||
return (
|
return (
|
||||||
"<TelegramIntegration "
|
"<TelegramIntegration "
|
||||||
"chat_id={chat!r} "
|
"chat_id={chat!r} "
|
||||||
"show_post_link={show_post_link!r} "
|
"template={template!r} "
|
||||||
"show_boost_from={show_boost_from!r} "
|
|
||||||
"silent={silent!r}>"
|
"silent={silent!r}>"
|
||||||
).format(
|
).format(chat=self.chat_id, silent=self.silent, template=self.template)
|
||||||
chat=self.chat_id,
|
|
||||||
show_post_link=self.show_post_link,
|
|
||||||
show_boost_from=self.show_boost_from,
|
|
||||||
silent=self.silent,
|
|
||||||
)
|
|
||||||
|
|
|
@ -312,6 +312,10 @@ class Status:
|
||||||
tags=[Tag.from_dict(m) for m in data.get("tags", [])],
|
tags=[Tag.from_dict(m) for m in data.get("tags", [])],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def reblog_or_status(self) -> "Status":
|
||||||
|
return self.reblog or self
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def link(self) -> str:
|
def link(self) -> str:
|
||||||
return self.account.url + "/" + str(self.id)
|
return self.account.url + "/" + str(self.id)
|
||||||
|
|
Loading…
Reference in New Issue