diff --git a/classes/holo_user.py b/classes/holo_user.py index bce31e9..cef36cf 100644 --- a/classes/holo_user.py +++ b/classes/holo_user.py @@ -1,5 +1,6 @@ from datetime import datetime from asyncio import sleep +from ftfy import fix_text from traceback import format_exc from app import app, isAnAdmin from typing import Any, List, Literal, Union @@ -122,6 +123,11 @@ class HoloUser(): * adm_context (`bool`, *optional*): Whether context sender is an admin. Defaults to False. """ + if text is not None: + text = fix_text(text) + elif caption is not None: + caption = fix_text(caption) + # Check if any text available and log message sending if text is not None: logWrite(f"{context.from_user.id} sent message '{text}' to {self.id} (source message: {context.id})") @@ -313,6 +319,9 @@ class HoloUser(): if progress["state"] == "fill" and progress["sent"] is False: + if msg.text is not None: + msg.text = fix_text(msg.text) + if stage == 2: try: @@ -359,6 +368,9 @@ class HoloUser(): return elif stage == 10: + if len(query) > 1024: + await msg.reply_text(locale("question10_too_long", "message", locale=self.locale), reply_markup=ForceReply(placeholder=str(locale(f"question{stage}", "force_reply", locale=self.locale)))) + return progress["application"][str(stage)] = query col_tmp.update_one({"user": {"$eq": self.id}, "type": {"$eq": "application"}}, {"$set": {"application": progress["application"], "complete": True}}) application_content = [] @@ -378,6 +390,9 @@ class HoloUser(): await msg.reply_text(locale("confirm", "message", locale=self.locale).format("\n".join(application_content)), reply_markup=ReplyKeyboardMarkup(locale("confirm", "keyboard", locale=self.locale), resize_keyboard=True)) else: + if len(query) > 256: + await msg.reply_text(locale("question_too_long", "message", locale=self.locale), reply_markup=ForceReply(placeholder=str(locale(f"question{stage}", "force_reply", locale=self.locale)))) + return progress["application"][str(stage)] = query col_tmp.update_one({"user": {"$eq": self.id}, "type": {"$eq": "application"}}, {"$set": {"application": progress["application"], "stage": progress["stage"]+1}}) await msg.reply_text(locale(f"question{stage+1}", "message", locale=self.locale), reply_markup=ForceReply(placeholder=str(locale(f"question{stage+1}", "force_reply", locale=self.locale)))) @@ -430,10 +445,20 @@ class HoloUser(): stage = progress["stage"] + if msg.text is not None: + msg.text = fix_text(msg.text) + elif msg.caption is not None: + msg.caption = fix_text(msg.caption) + if progress["state"] == "fill" and progress["sent"] is False: if stage == 1: + if len(query) > 240: + logWrite(f"User {msg.from_user.id} failed stage {stage} due to sending invalid date format") + await msg.reply_text(locale(f"sponsor1_invalid", "message", locale=self.locale), reply_markup=ForceReply(placeholder=str(locale(f"sponsor{stage}", "force_reply", locale=self.locale)))) + return + progress["sponsorship"]["streamer"] = query col_tmp.update_one({"user": {"$eq": self.id}, "type": {"$eq": "sponsorship"}}, {"$set": {"sponsorship": progress["sponsorship"], "stage": progress["stage"]+1}}) await msg.reply_text(locale(f"sponsor{stage+1}", "message", locale=self.locale), reply_markup=ForceReply(placeholder=str(locale(f"sponsor{stage+1}", "force_reply", locale=self.locale)))) diff --git a/locale/uk.json b/locale/uk.json index 1fc89d2..bf71dec 100644 --- a/locale/uk.json +++ b/locale/uk.json @@ -13,6 +13,7 @@ "question8": "Чи дивишся ти стріми дівчат Хололайву?", "question9": "Чиї пісні з Хололайву тобі подобаються найбільше?", "question10": "Ну і нарешті, розкажи трохи про себе. Про хобі, чим тобі подобається займатись. Одним повідомленням, будь ласка.", + "question_too_long": "Текст занадто довгий. Будь ласка, умісти відповідь у 256 символів.", "question2_underage": "Вибач, але треба досягти віку {0} років, щоб приєднатись до нас. Такі обмеження існують для того, щоб всім у спільноті було цікаво одне з одним.", "question2_invalid": "Будь ласка, введи дату формату `ДД.ММ.РРРР`", "question2_joke": "Шутнік, ми так і поняли. Але будь ласка, введи реальне значення.", @@ -20,9 +21,11 @@ "question3_found": "Використовую наступний результат:\n• {0} ({1})", "question3_error": "⚠️ **Сталась помилка**\nНе вдалось отримати географічну мітку. Розробника повідомлено про цю помилку. Будь ласка, спробуйте ще раз.", "question3_traceback": "⚠️ **Сталась помилка**\nПомилка отримання геокодингу для `{0}`\nПомилка: `{1}`\n\nTraceback:\n```\n{2}\n```", + "question10_too_long": "Текст занадто довгий. Будь ласка, умісти відповідь у 1024 символи.", "sponsorship_apply": "ℹ️ Оформіть платну підписку на когось з Холо, заповніть форму та отримайте особливу роль в якості винагороди!", "sponsorship_applying": "ℹ️ Розпочато заповнення форми на отримання бонусів за платну підписку на холодівчат.", "sponsor1": "На яку саме дівчину платна підписка?", + "sponsor1_invalid": "Будь ласка, введіть ім'я не довше за 240 символів", "sponsor2": "До якої дати (`ДД.ММ.РРРР`) підписка?", "sponsor2_invalid": "Будь ласка, введи дату формату `ДД.ММ.РРРР`", "sponsor2_past": "Вказана дата знаходиться в минулому. Будь ласка, вкажіть правильний термін дії підписки", @@ -108,6 +111,7 @@ "spoiler_empty": "Спойлер категорії \"{0}\" без опису", "spoiler_described": "Спойлер категорії \"{0}\": {1}", "spoiler_description_enter": "Добре, введіть бажаний опис спойлера", + "spoiler_description_too_long": "Текст занадто довгий. Будь ласка, умісти опис у 1024 символи.", "spoiler_using_description": "Встановлено опис спойлера: {0}\n\nЗалишилось додати вміст самого спойлера. Бот приймає текстове повідомлення, фото, відео, файл а також гіф зображення (1 шт.)", "spoiler_send_description": "Тепер треба надіслати коротенький опис спойлера, щоб люди розуміли що під ним варто очкувати. Надішли мінус (-) щоб пропустити цей крок.", "spoiler_ready": "Успіх! Спойлер створено. Користуйтесь кнопкою нижче щоб надіслати його.", diff --git a/modules/handlers/everything.py b/modules/handlers/everything.py index 78d3fc3..eaf83cb 100644 --- a/modules/handlers/everything.py +++ b/modules/handlers/everything.py @@ -1,6 +1,7 @@ from traceback import print_exc from app import app, isAnAdmin import asyncio +from ftfy import fix_text from pyrogram import filters from pyrogram.types import Message, ForceReply, InlineKeyboardMarkup, InlineKeyboardButton from pyrogram.client import Client @@ -95,8 +96,13 @@ async def any_stage(app: Client, msg: Message): # if msg.text == lc[-1][0]: # await msg.reply_text(locale("spoiler_description_enter", "message", locale=msg.from_user), reply_markup=ForceReply(placeholder=locale("spoiler_description", "force_reply", locale=msg.from_user))) # return + if msg.text != "-": + msg.text = fix_text(msg.text) + if len(msg.text) > 1024: + await msg.reply_text(locale("spoiler_description_too_long", "message", locale=msg.from_user), reply_markup=ForceReply(placeholder=locale("spoiler_description", "force_reply", locale=msg.from_user))) + return col_spoilers.find_one_and_update( {"user": msg.from_user.id, "completed": False}, {"$set": {"description": msg.text}} ) else: col_spoilers.find_one_and_update( {"user": msg.from_user.id, "completed": False}, {"$set": {"description": ""}} ) diff --git a/requirements.txt b/requirements.txt index 7b778a1..8e2a18e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,9 +2,10 @@ APScheduler==3.9.1.post1 fastapi~=0.88.0 psutil==5.9.4 pymongo==4.3.3 -Pyrogram~=2.0.95 +Pyrogram~=2.0.96 requests==2.28.1 tgcrypto==1.2.5 python_dateutil==2.8.2 starlette~=0.22.0 -ujson~=5.7.0 \ No newline at end of file +ujson~=5.7.0 +ftfy~=6.1.1 \ No newline at end of file