PiechocinskiBot/main.py

68 lines
2.0 KiB
Python

import os
from pprint import pprint
from markdownify import MarkdownConverter
from telegram import Update
from telegram.constants import ParseMode
from telegram.ext import ApplicationBuilder, CallbackContext, CommandHandler
from telegram.helpers import escape_markdown
from state import State
from tweets import get_tweets
async def start(update: Update, context: CallbackContext.DEFAULT_TYPE):
await context.bot.send_message(chat_id=update.effective_chat.id, text="I'm a bot, hi.")
class TgMarkdownConverter(MarkdownConverter):
def convert_a(self, el, text, convert_as_inline):
el['href'] = escape_markdown(el['href'], version=2)
return super().convert_a(el, text, convert_as_inline)
def process_text(self, el):
text = super().process_text(el)
return escape_markdown(text, version=2)
def markdownify(html, **options):
return TgMarkdownConverter(**options).convert(html)
#print(markdownify("<a href=\"b.a\">c</a>"))
async def check(context: CallbackContext):
tweets = get_tweets(os.environ['TWITTER_USER'])
state = State(os.environ['DB_PATH'])
for tweet in tweets:
if state.has(tweet):
return
preamble = f"""\
<b>{tweet.author}</b><br>
<a href="{tweet.id}\">Permalink</a><br><br>
"""
md = markdownify(preamble+tweet.content)
try:
await context.bot.send_message(
chat_id=os.environ['TELEGRAM_CHANNEL'],
text=md,
parse_mode=ParseMode.MARKDOWN_V2,
disable_web_page_preview=True)
except Exception:
break
state.add(tweet)
if __name__ == '__main__':
application = ApplicationBuilder().token(
os.environ['TELEGRAM_TOKEN']).build()
start_handler = CommandHandler('start', start)
application.add_handler(start_handler)
application.job_queue.run_repeating(
check, int(os.environ['INTERVAL']), first=1, chat_id=os.environ['TELEGRAM_CHANNEL'])
application.run_polling()