add fix
This commit is contained in:
parent
ef3e20f8f7
commit
fcc0c81d7c
@ -7,8 +7,8 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
- .env_prod
|
- .env_prod
|
||||||
networks:
|
# networks:
|
||||||
- app_network
|
# - app_network
|
||||||
depends_on:
|
depends_on:
|
||||||
postgres:
|
postgres:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
@ -30,8 +30,8 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./docker/postgres/data:/var/lib/postgresql/data
|
- ./docker/postgres/data:/var/lib/postgresql/data
|
||||||
- ./sql_scripts/create_table.sql:/docker-entrypoint-initdb.d/create_table.sql
|
- ./sql_scripts/create_table.sql:/docker-entrypoint-initdb.d/create_table.sql
|
||||||
networks:
|
# networks:
|
||||||
- app_network
|
# - app_network
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
image: redis:latest
|
image: redis:latest
|
||||||
@ -39,8 +39,8 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "6379:6379"
|
- "6379:6379"
|
||||||
networks:
|
# networks:
|
||||||
- app_network
|
# - app_network
|
||||||
|
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
image: "rabbitmq:3-management"
|
image: "rabbitmq:3-management"
|
||||||
@ -57,9 +57,9 @@ services:
|
|||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
retries: 5
|
||||||
networks:
|
# networks:
|
||||||
- app_network
|
# - app_network
|
||||||
|
|
||||||
networks:
|
#networks:
|
||||||
app_network:
|
# app_network:
|
||||||
external: true
|
# external: true
|
@ -1 +1 @@
|
|||||||
MESSAGE_CHANG_SIZE: int = 20
|
MESSAGE_CHANG_SIZE: int = 30
|
@ -1,3 +1,5 @@
|
|||||||
|
import asyncio
|
||||||
|
|
||||||
from pyrogram import Client
|
from pyrogram import Client
|
||||||
from pyrogram.types import Message
|
from pyrogram.types import Message
|
||||||
|
|
||||||
@ -9,9 +11,12 @@ from src.core.tg_service import utils as api_tg_utils
|
|||||||
DATA: dict[int, list[MessageFromChatSchema]] = dict()
|
DATA: dict[int, list[MessageFromChatSchema]] = dict()
|
||||||
|
|
||||||
|
|
||||||
|
lock = asyncio.Lock()
|
||||||
|
|
||||||
async def message_listener(client: Client, message: Message):
|
async def message_listener(client: Client, message: Message):
|
||||||
print("received message")
|
print("received message")
|
||||||
if api_tg_utils.check_message_condition(message):
|
if api_tg_utils.check_message_condition(message):
|
||||||
|
async with lock:
|
||||||
await check_user_exists(
|
await check_user_exists(
|
||||||
user_pyrogram=message.from_user,
|
user_pyrogram=message.from_user,
|
||||||
)
|
)
|
||||||
|
@ -18,4 +18,6 @@ async def send_to_tg_from_bot(text: str):
|
|||||||
async with AsyncClient() as client:
|
async with AsyncClient() as client:
|
||||||
response = await client.post(url, json=payload)
|
response = await client.post(url, json=payload)
|
||||||
print(response)
|
print(response)
|
||||||
|
if response.status_code != 200:
|
||||||
|
print(response.text)
|
||||||
return response
|
return response
|
||||||
|
@ -17,6 +17,6 @@ async def notify_for_success(
|
|||||||
chat=chat,
|
chat=chat,
|
||||||
)
|
)
|
||||||
|
|
||||||
# await send_to_tg_from_bot(
|
await send_to_tg_from_bot(
|
||||||
# text=message
|
text=message
|
||||||
# )
|
)
|
@ -21,22 +21,85 @@ def create_and_format_message(
|
|||||||
chat: TgChat,
|
chat: TgChat,
|
||||||
user_model: User,
|
user_model: User,
|
||||||
) -> str:
|
) -> str:
|
||||||
if user_model.username:
|
def escape_markdown_v2(text: str) -> str:
|
||||||
user_link = f"[{user_model.username}](tg://user?id={user_model.id})"
|
escape_chars = '_*[]()~`>#+-=|{}.!'
|
||||||
else:
|
return ''.join('\\' + char if char in escape_chars else char for char in text)
|
||||||
user_link = f"ID: {user_model.id}"
|
|
||||||
|
|
||||||
messages_text = "\n".join(
|
# Формирование информации о пользователе
|
||||||
f"{msg.message_time.isoformat()}: {msg.text}\n" for msg in messages
|
username = escape_markdown_v2(user_model.username) if user_model.username else f"ID: {user_model.id}"
|
||||||
|
user_link = f"[{username}](tg://user?id={user_model.id})" if user_model.username else f"ID: {user_model.id}"
|
||||||
|
|
||||||
|
# Формирование информации о чате
|
||||||
|
chat_title = escape_markdown_v2(chat.title)
|
||||||
|
chat_link = (
|
||||||
|
f"https://t.me/c/{str(chat.id)[4:]}"
|
||||||
|
if str(chat.id).startswith("-100")
|
||||||
|
else f"https://t.me/{chat.username}" if chat.username
|
||||||
|
else f"Chat ID: {chat.id}"
|
||||||
)
|
)
|
||||||
messages_text = '```dialog\n' + messages_text + '```'
|
|
||||||
|
|
||||||
chat_link = f"https://t.me/c/{str(chat.id)[4:]}" if str(chat.id).startswith(
|
# Экранирование причины
|
||||||
"-100") else f"https://t.me/{chat.id}"
|
reason_escaped = escape_markdown_v2(reason)
|
||||||
|
|
||||||
return f""" 🔥 *Найдена успешка!*
|
# Базовый заголовок сообщения
|
||||||
👤 *Пользователь:* {user_link}\n
|
header = (
|
||||||
🐩 *Чат*: [{chat.title}]({chat_link})
|
f"🔥 *Найдена успешка!*\n"
|
||||||
📌 *Причина:* {reason}
|
f"👤 *Пользователь:* {user_link}\n"
|
||||||
📝 *Диалог:* {messages_text}
|
f"🐩 *Чат:* [{chat_title}]({chat_link})\n"
|
||||||
"""
|
f"📌 *Причина:* {reason_escaped}\n\n"
|
||||||
|
f"📝 *Диалог:*\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Расчет доступной длины для контента
|
||||||
|
MAX_LENGTH = 4096
|
||||||
|
header_length = len(header)
|
||||||
|
available_length = MAX_LENGTH - header_length
|
||||||
|
|
||||||
|
# Формирование блоков сообщений
|
||||||
|
message_blocks = []
|
||||||
|
current_length = 0
|
||||||
|
|
||||||
|
for msg in messages:
|
||||||
|
# Очистка и подготовка текста
|
||||||
|
clean_text = msg.text.replace('```', 'ʻʻʻ') # Заменяем опасные символы
|
||||||
|
escaped_text = escape_markdown_v2(clean_text)
|
||||||
|
|
||||||
|
sender_username = escape_markdown_v2(
|
||||||
|
msg.user_relationship.username or str(msg.user_id)
|
||||||
|
)
|
||||||
|
# Формирование блока сообщения
|
||||||
|
block = (
|
||||||
|
f"**{sender_username}:**\n"
|
||||||
|
f"```\n"
|
||||||
|
f"{escaped_text}\n"
|
||||||
|
f"```\n\n"
|
||||||
|
)
|
||||||
|
block_length = len(block)
|
||||||
|
|
||||||
|
# Проверка на превышение длины
|
||||||
|
if current_length + block_length > available_length:
|
||||||
|
remaining_space = available_length - current_length
|
||||||
|
if remaining_space > 20: # Минимальный значимый блок
|
||||||
|
truncated_text = escaped_text[:remaining_space - 20] + "..."
|
||||||
|
block = (
|
||||||
|
f"**Пользователь:**\n"
|
||||||
|
f"```\n"
|
||||||
|
f"{truncated_text}\n"
|
||||||
|
f"```\n\n"
|
||||||
|
f"_... сообщение обрезано ..._"
|
||||||
|
)
|
||||||
|
message_blocks.append(block)
|
||||||
|
break
|
||||||
|
|
||||||
|
message_blocks.append(block)
|
||||||
|
current_length += block_length
|
||||||
|
|
||||||
|
# Сборка финального сообщения
|
||||||
|
content = ''.join(message_blocks).strip()
|
||||||
|
full_message = header + content
|
||||||
|
|
||||||
|
# Финальная проверка длины
|
||||||
|
if len(full_message) > MAX_LENGTH:
|
||||||
|
full_message = full_message[:MAX_LENGTH - 17] + "\n```\n...\n```\n_... сообщение обрезано ..._"
|
||||||
|
|
||||||
|
return full_message
|
@ -1,6 +1,7 @@
|
|||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
from sqlalchemy import insert, select
|
from sqlalchemy import insert, select
|
||||||
|
from sqlalchemy.orm import joinedload
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from src.core.database import TgChat, TgMessage
|
from src.core.database import TgChat, TgMessage
|
||||||
@ -30,6 +31,7 @@ async def get_messages_by_slice_id(
|
|||||||
) -> list[TgMessage]:
|
) -> list[TgMessage]:
|
||||||
stmt = (
|
stmt = (
|
||||||
select(TgMessage)
|
select(TgMessage)
|
||||||
|
.options(joinedload(TgMessage.user_relationship))
|
||||||
.where(
|
.where(
|
||||||
TgMessage.slice_id == slice_id
|
TgMessage.slice_id == slice_id
|
||||||
)
|
)
|
||||||
|
@ -17,6 +17,7 @@ async def create_success_record(
|
|||||||
message: ResponseFromGeminiSchema,
|
message: ResponseFromGeminiSchema,
|
||||||
session: Annotated[AsyncSession, Depends(db_helper.get_async_session)],
|
session: Annotated[AsyncSession, Depends(db_helper.get_async_session)],
|
||||||
):
|
):
|
||||||
|
print(message.success)
|
||||||
await workers_crud.bulk_create_success_reasons(
|
await workers_crud.bulk_create_success_reasons(
|
||||||
success_schema=message,
|
success_schema=message,
|
||||||
session=session,
|
session=session,
|
||||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user