2024-06-03 10:27:42 +00:00
|
|
|
|
import logging
|
|
|
|
|
import math
|
2024-09-26 11:07:00 +00:00
|
|
|
|
from store import redis
|
2024-01-07 09:19:46 +00:00
|
|
|
|
from bot.api import telegram_api
|
|
|
|
|
from bot.config import FEEDBACK_CHAT_ID
|
2024-09-26 10:07:01 +00:00
|
|
|
|
from nlp.toxicity_detector import detector
|
2024-01-07 09:19:46 +00:00
|
|
|
|
from handlers.handle_private import handle_private
|
2024-06-03 10:27:42 +00:00
|
|
|
|
|
|
|
|
|
logger = logging.getLogger('handlers.messages_routing')
|
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
2024-01-07 09:19:46 +00:00
|
|
|
|
|
|
|
|
|
async def messages_routing(msg, state):
|
|
|
|
|
cid = msg["chat"]["id"]
|
|
|
|
|
uid = msg["from"]["id"]
|
|
|
|
|
text = msg.get("text")
|
2024-09-26 12:50:50 +00:00
|
|
|
|
reply_msg = msg.get("reply_to_message")
|
2024-01-07 09:19:46 +00:00
|
|
|
|
|
|
|
|
|
if cid == uid:
|
|
|
|
|
# сообщения в личке с ботом
|
|
|
|
|
logger.info("private chat message")
|
|
|
|
|
await handle_private(msg, state)
|
|
|
|
|
|
|
|
|
|
elif str(cid) == FEEDBACK_CHAT_ID:
|
|
|
|
|
# сообщения из группы обратной связи
|
|
|
|
|
logger.info("feedback chat message")
|
|
|
|
|
logger.debug(msg)
|
|
|
|
|
if reply_msg:
|
|
|
|
|
reply_chat_id = reply_msg.get("chat", {}).get("id")
|
|
|
|
|
if reply_chat_id != FEEDBACK_CHAT_ID:
|
2024-09-26 12:50:50 +00:00
|
|
|
|
await telegram_api("sendMessage", chat_id=reply_chat_id, text=text, reply_to_message_id=reply_msg.get("message_id"))
|
2024-01-07 09:19:46 +00:00
|
|
|
|
|
2024-02-12 12:50:35 +00:00
|
|
|
|
elif bool(text):
|
2024-09-26 10:07:01 +00:00
|
|
|
|
mid = msg.get("message_id")
|
2024-09-26 13:28:29 +00:00
|
|
|
|
if text == '/toxic@welcomecenter_bot':
|
|
|
|
|
latest_toxic_message_id = await redis.get(f"toxic:{cid}")
|
|
|
|
|
if latest_toxic_message_id:
|
|
|
|
|
rmsg = reply_msg.get("message_id", latest_toxic_message_id)
|
|
|
|
|
await telegram_api(
|
|
|
|
|
"sendMessage",
|
|
|
|
|
chat_id=cid,
|
|
|
|
|
reply_to_message_id=rmsg,
|
|
|
|
|
text=f"{latest_toxic.get(f"{cid}:{rmsg}", 0)}% токсичности"
|
|
|
|
|
)
|
|
|
|
|
await telegram_api(
|
|
|
|
|
"deleteMessage",
|
|
|
|
|
chat_id=cid,
|
|
|
|
|
message_id=mid
|
|
|
|
|
)
|
2024-09-26 12:38:14 +00:00
|
|
|
|
else:
|
|
|
|
|
toxic_score = detector(text)
|
|
|
|
|
toxic_perc = math.floor(toxic_score*100)
|
2024-09-26 13:28:29 +00:00
|
|
|
|
await redis.set(f"toxic:{cid}", mid)
|
|
|
|
|
await redis.set(f"toxic:{cid}:{mid}", toxic_perc, ex=60*60*24*3)
|
2024-09-26 12:38:14 +00:00
|
|
|
|
logger.info(f'\ntext: {text}\ntoxic: {toxic_perc}%')
|
|
|
|
|
if toxic_score > 0.81:
|
|
|
|
|
if toxic_score > 0.90:
|
|
|
|
|
await redis.set(f"removed:{uid}:{cid}:{mid}", text)
|
|
|
|
|
await telegram_api(
|
|
|
|
|
"deleteMessage",
|
|
|
|
|
chat_id=cid,
|
|
|
|
|
message_id=mid
|
|
|
|
|
)
|
|
|
|
|
else:
|
|
|
|
|
await telegram_api(
|
|
|
|
|
"setMessageReaction",
|
|
|
|
|
chat_id=cid,
|
|
|
|
|
is_big=True,
|
|
|
|
|
message_id=mid,
|
|
|
|
|
reaction=f'[{{"type":"emoji", "emoji":"🙉"}}]'
|
|
|
|
|
)
|
2024-02-12 12:50:35 +00:00
|
|
|
|
|
2024-01-07 09:19:46 +00:00
|
|
|
|
else:
|
|
|
|
|
pass
|