diff --git a/bot/config.py b/bot/config.py index 4993fa1..02ce85c 100644 --- a/bot/config.py +++ b/bot/config.py @@ -1,4 +1,5 @@ import os BOT_TOKEN = os.environ.get("BOT_TOKEN") or "" +REDIS_URL = os.environ.get("REDIS_URL") or "" FEEDBACK_CHAT_ID = os.environ.get("FEEDBACK_CHAT_ID", "").replace("-", "-100") diff --git a/handlers/handle_private.py b/handlers/handle_private.py index fa8efa5..05f7023 100644 --- a/handlers/handle_private.py +++ b/handlers/handle_private.py @@ -2,6 +2,7 @@ from bot.config import FEEDBACK_CHAT_ID from bot.announce import edit_announce from bot.api import telegram_api import logging +from store import get_all_removed logger = logging.getLogger(__name__) logging.basicConfig(level=logging.INFO) @@ -11,15 +12,20 @@ start_message = { 'ru': "Доброе утро! Можешь напечатать здесь любое сообщение для передачи в чат" } + async def handle_private(msg, state): text = msg.get("text") sender = msg.get("from", {}) + uid = sender.get("id") lang = sender.get("language_code", "ru") if lang != "ru" and lang != "en": lang = "en" if text.startswith("/"): if text == '/start': - await telegram_api("sendMessage", chat_id=sender.get("id"), text=start_message[lang]) + await telegram_api("sendMessage", chat_id=uid, text=start_message[lang]) + elif text == '/removed': + removed_messages = await get_all_removed(uid) + await telegram_api("sendMessage", chat_id=uid, text="\n".join(removed_messages.values())) else: await telegram_api("forwardMessage", from_chat_id=sender.get("id"), message_id=msg.get("id"), chat_id=FEEDBACK_CHAT_ID) else: diff --git a/handlers/messages_routing.py b/handlers/messages_routing.py index d7f0a92..8a1157b 100644 --- a/handlers/messages_routing.py +++ b/handlers/messages_routing.py @@ -1,6 +1,6 @@ import logging import math - +from store import redis from bot.api import telegram_api from bot.config import FEEDBACK_CHAT_ID from nlp.toxicity_detector import detector @@ -36,8 +36,9 @@ async def messages_routing(msg, state): logger.info(f'\ntext: {text}\ntoxic: {math.floor(toxic_score*100)}%') if toxic_score > 0.71: if toxic_score > 0.85: + await redis.execute("SET", f"removed:{uid}:{cid}:{mid}", text) await telegram_api( - "deletemessage", + "deleteMessage", chat_id=cid, message_id=mid ) diff --git a/main.py b/main.py index 8e97dbe..54f2437 100644 --- a/main.py +++ b/main.py @@ -16,7 +16,7 @@ state = dict() async def start(): logger.info("\tstarted") async with ClientSession() as session: - offset = 0 # начальное значение offset + offset = 0 # init offset while True: response = await telegram_api("getUpdates", offset=offset, allowed_updates=['message', 'message_reaction']) if isinstance(response, dict): @@ -48,5 +48,4 @@ async def start(): if __name__ == "__main__": - # Запуск асинхронного цикла asyncio.run(start()) diff --git a/store.py b/store.py new file mode 100644 index 0000000..7909e09 --- /dev/null +++ b/store.py @@ -0,0 +1,21 @@ +from bot.config import REDIS_URL +import redis.asyncio as r + +# Connect to Redis +redis = r.Redis.from_url(REDIS_URL) + + +async def get_all_removed(uid): + key = f"removed:{uid}:*" + + # Create a dictionary to hold the keys and values + texts = [] + + # Use scan_iter to find all keys matching the pattern + for key in await redis.scan_iter(pattern): + # Fetch the value for each key + value = await redis.get(key) + if value: + texts.append(value) + + return texts