txlyre 1 viikko sitten
vanhempi
commit
f79fee103f
3 muutettua tiedostoa jossa 43 lisäystä ja 17 poistoa
  1. 26 13
      actions.py
  2. 6 2
      commands.py
  3. 11 2
      openkriemy.py

+ 26 - 13
actions.py

@@ -9,15 +9,13 @@ from telethon.tl.functions.stickers import (
     CreateStickerSetRequest,
     AddStickerToSetRequest,
 )
-from telethon.tl.functions.messages import UploadMediaRequest, GetStickerSetRequest
+from telethon.tl.functions.messages import UploadMediaRequest
 from telethon.tl.types import (
     InputStickerSetID,
-    InputStickerSetShortName,
     InputStickerSetItem,
     InputMediaUploadedDocument,
     InputPeerSelf,
 )
-from telethon.errors import MessageEmptyError
 from tortoise.expressions import F
 
 from models import (
@@ -278,6 +276,7 @@ async def disable_markov(peer_id):
 async def list_markov_chats():
     return await MarkovChat.all()
 
+
 async def markov_say(bot, peer_id, reply_to=None, init_state=None):
     if not bot.markov.is_ready:
         return
@@ -293,18 +292,23 @@ async def markov_say(bot, peer_id, reply_to=None, init_state=None):
 
     await bot.send_message(peer_id, message=text, reply_to=reply_to)
 
+
 async def run(text):
     match = re.match(r"^(\w+)(?:\s|\n)((?:\n|.)*)$", text)
     if not match:
-        return "Пожалуйста, не оставляйте ввод пустым!"
+        return None, None, "Пожалуйста, не оставляйте ввод пустым!"
 
     language_name, text = match.groups()
 
+    text = re.sub(r"^```\w+\n((.|\n)*)```$", r"\1", text)
+
     if text.startswith("```") and text.endswith("```"):
         text = text[3:-3]
 
     text = text.replace("\xa0", " ")  # i hate telegram
 
+    input_text = text
+
     async with ClientSession() as session:
         try:
             async with session.post(
@@ -313,14 +317,26 @@ async def run(text):
                 if resp.status in (404, 500):
                     info = await resp.json()
 
-                    return f"Произошла ошибка при попытке обращения к API… :(\nОтвет API: {info['detail']}"
+                    return (
+                        language_name,
+                        input_text,
+                        f"Произошла ошибка при попытке обращения к API… :(\nОтвет API: {info['detail']}",
+                    )
                 elif resp.status != 200:
-                    return "Сервер API временно недоступен. Пожалуйста, попробуйте ещё раз чуть позже."
+                    return (
+                        language_name,
+                        input_text,
+                        "Сервер API временно недоступен. Пожалуйста, попробуйте ещё раз чуть позже.",
+                    )
 
                 text = await resp.read()
                 text = text.decode("UTF-8")[:4096]
-        except:
-            return "Произошла ошибка при попытке обращения к API… :("
+        except Exception:
+            return (
+                language_name,
+                input_text,
+                "Произошла ошибка при попытке обращения к API… :(",
+            )
 
     text = remove_ansi_escapes(text).strip()
     text = filter(
@@ -330,9 +346,6 @@ async def run(text):
     text = text.replace("`", "")
 
     if not text:
-        return "<пусто>"
+        return language_name, input_text, "<пусто>"
 
-    try:
-        return f"```\n{text}```"
-    except (ValueError, MessageEmptyError):
-        return "<Telegram не смог декодировать текст сообщения>"
+    return language_name, input_text, f"```\n{text}```"

+ 6 - 2
commands.py

@@ -9,6 +9,7 @@ from ujson import dumps
 from tortoise.exceptions import IntegrityError
 from telethon.utils import get_display_name, get_peer_id
 from telethon.tl.types import MessageEntityCode
+from telethon.errors import MessageEmptyError
 
 from aiofiles.os import remove, path
 from aiohttp import ClientSession
@@ -530,7 +531,10 @@ async def run_handler(bot, event, command):
 
         return
 
-    await event.reply(await run(command.args_string))
+    try:
+        await event.reply(await run(command.args_string))
+    except (ValueError, MessageEmptyError):
+        await event.reply("<Telegram не смог декодировать текст сообщения>")
 
 
 async def sylvy_handler(bot, event, command):
@@ -640,7 +644,7 @@ COMMANDS = {
     "markov": Handler(markov_handler, is_restricted=True),
     "save": Handler(save_handler),
     "bday": Handler(bday_handler),
-    "vpn": Handler(vpn_handler),
+    # "vpn": Handler(vpn_handler),
     "sylvy": Handler(sylvy_handler, is_public=True),
     "run": Handler(run_handler, is_public=True),
     "say": Handler(say_handler, is_public=True),

+ 11 - 2
openkriemy.py

@@ -40,8 +40,17 @@ async def on_inline_query(event):
     if not text:
         return
 
-    result = await run(text)
-    result = f"```{text.replace('`', '')}```\n{result}"
+    lang, input_text, result = await run(text)
+    if not lang:
+        await event.answer(
+            [
+                event.builder.article(result, text=result),
+            ]
+        )
+
+        return
+
+    result = f"Ввод:\n```{lang}\n{input_text.replace('`', '')}```\nВывод:\n{result}"
 
     await event.answer(
         [