diff --git a/config.py b/config.py index 0d97476..c6c1a8b 100644 --- a/config.py +++ b/config.py @@ -4,7 +4,7 @@ from typing import Optional import requests _c = configparser.ConfigParser() -_c.read("config.ini") +_c.read("config.ini", "utf-8") class _General: diff --git a/extensions.py b/extensions.py index c6ac510..49b2d1a 100644 --- a/extensions.py +++ b/extensions.py @@ -1,20 +1,13 @@ import re -def humanize_tags_from_json(value: str, default: str): +def humanize_tags_from_json(value: str, default: str) -> str: if value != "": - output = str() - tags = value.split() - - for t in tags: - output += f"{re.sub('_\\(.*', '', t)}, " - output = output[:-2] - - return output + return ", ".join([re.sub('_\\(.*', '', t) for t in value.split()]) return default -def format_rating(value: str): +def format_rating(value: str) -> str | None: match value: case "g": # Negative Squared Latin Capital Letter G @@ -28,3 +21,4 @@ def format_rating(value: str): case "e": # Negative Squared Latin Capital Letter E return "🅴" + return None diff --git a/inline_query.py b/inline_query.py index d308db3..a3f19c4 100644 --- a/inline_query.py +++ b/inline_query.py @@ -1,8 +1,7 @@ from uuid import uuid4 -import requests from telegram import Update, InlineKeyboardButton, InlineQueryResultArticle, InputTextMessageContent, \ - InlineKeyboardMarkup + InlineKeyboardMarkup, LinkPreviewOptions from telegram.constants import ParseMode from telegram.ext import ContextTypes @@ -36,6 +35,24 @@ async def answer_query(update: Update, query: str, data) -> None: copyrights = humanize_tags_from_json(data['tag_string_copyright'], "unknown copyright") artists = humanize_tags_from_json(data['tag_string_artist'], "unknown artist") rating = format_rating(data['rating']) + + if data['is_banned']: + results = [ + InlineQueryResultArticle( + id=str(uuid4()), + title=f"ID: {query}", + description=f"{characters} ({copyrights}) drawn by {artists}", + input_message_content=InputTextMessageContent( + f"#{query} {characters} ({copyrights}) drawn by {artists} {rating}\n" + f"This post has been removed because of a takedown request or rule violation.", + parse_mode=ParseMode.HTML + ) + ) + ] + + await update.inline_query.answer(results) + return + keyboard = [ [ InlineKeyboardButton(f"Open in {app.name}", @@ -51,10 +68,9 @@ async def answer_query(update: Update, query: str, data) -> None: description=f"{characters} ({copyrights}) drawn by {artists}", thumbnail_url=data['preview_file_url'], input_message_content=InputTextMessageContent( - f"ID: {query} {rating}\n" - f"{characters} ({copyrights}) " - f"drawn by {artists}", - parse_mode=ParseMode.HTML + f"#{query} {characters} ({copyrights}) drawn by {artists} {rating}", + parse_mode=ParseMode.HTML, + link_preview_options=LinkPreviewOptions(url=data['large_file_url']) ), reply_markup=InlineKeyboardMarkup(keyboard) ) @@ -68,9 +84,10 @@ async def invalid_query(update: Update, query: str) -> None: InlineQueryResultArticle( id=str(uuid4()), title=f"ID: {query}", - description="not found.", + description="Error", input_message_content=InputTextMessageContent( - f"ID: {query}\nrequested post does not exist.", + f"#{query}\n" + f"That record was not found.", parse_mode=ParseMode.HTML ) ) diff --git a/main.py b/main.py index 4f19837..5bd891a 100644 --- a/main.py +++ b/main.py @@ -28,7 +28,7 @@ def main() -> None: application.run_polling(allowed_updates=commands.Update.ALL_TYPES) -def get_token(): +def get_token() -> None: if os.getenv("BOT_TOKEN") is not None: return os.getenv("BOT_TOKEN") diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..29bdc4d Binary files /dev/null and b/requirements.txt differ