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