MAX: отдача черного списка

This commit is contained in:
Alexey Polyakov
2026-04-24 23:31:55 +03:00
parent 810d480dbd
commit cd9ba981ae
5 changed files with 91 additions and 1 deletions

View File

@@ -130,4 +130,8 @@ class ChatHistoryPayloadModel(pydantic.BaseModel):
class ChatSubscribePayloadModel(pydantic.BaseModel):
chatId: int
subscribe: bool
subscribe: bool
class ContactListPayloadModel(pydantic.BaseModel):
status: str
count: int = None

View File

@@ -3,6 +3,7 @@ from .auth import AuthProcessors
from .calls import CallsProcessors
from .chats import ChatsProcessors
from .complains import ComplainsProcessors
from .contacts import ContactsProcessors
from .folders import FoldersProcessors
from .history import HistoryProcessors
from .main import MainProcessors
@@ -16,6 +17,7 @@ class Processors(
CallsProcessors,
ChatsProcessors,
ComplainsProcessors,
ContactsProcessors,
FoldersProcessors,
HistoryProcessors,
MainProcessors,

View File

@@ -0,0 +1,66 @@
import pydantic
from classes.baseprocessor import BaseProcessor
from oneme.models import ContactListPayloadModel
class ContactsProcessors(BaseProcessor):
async def contact_list(self, payload, seq, writer, userId):
"""Обработчик получения контактов"""
# Валидируем данные пакета
try:
ContactListPayloadModel.model_validate(payload)
except pydantic.ValidationError as error:
self.logger.error(f"Возникли ошибки при валидации пакета: {error}")
await self._send_error(seq, self.opcodes.CONTACT_LIST, self.error_types.INVALID_PAYLOAD, writer)
return
status = payload.get("status")
count = payload.get("count")
# Итоговый контакт-лист
contact_list = []
if status == "BLOCKED":
# Собираем контакты, которые в черном списке
blocked = []
async with self.db_pool.acquire() as conn:
async with conn.cursor() as cursor:
if count:
await cursor.execute(
"SELECT * FROM contacts WHERE owner_id = %s AND is_blocked = TRUE LIMIT %s",
(userId, count),
)
else:
await cursor.execute(
"SELECT * FROM contacts WHERE owner_id = %s AND is_blocked = TRUE",
(userId,),
)
rows = await cursor.fetchall()
for row in rows:
blocked.append(
{
"id": int(row.get("contact_id")),
"firstname": row.get("custom_firstname"),
"lastname": row.get("custom_lastname"),
"blocked": True,
}
)
# Генерируем контакт-лист
contact_list = await self.tools.generate_contacts(
blocked, self.db_pool, avatar_base_url=self.config.avatar_base_url
)
# Собираем данные пакета
response_payload = {
"contacts": contact_list
}
# Создаем пакет
packet = self.proto.pack_packet(
seq=seq, opcode=self.opcodes.CONTACT_LIST, payload=response_payload
)
# Отправляем пакет
await self._send(writer, packet)

View File

@@ -253,6 +253,15 @@ class OnemeMobile:
writer,
userId,
)
case self.opcodes.CONTACT_LIST:
await self.auth_required(
userPhone,
self.processors.contact_list,
payload,
seq,
writer,
userId,
)
case self.opcodes.COMPLAIN_REASONS_GET:
await self.auth_required(
userPhone,

View File

@@ -227,6 +227,15 @@ class OnemeWS:
websocket,
userId,
)
case self.opcodes.CONTACT_LIST:
await self.auth_required(
userPhone,
self.processors.contact_list,
payload,
seq,
websocket,
userId,
)
case self.opcodes.COMPLAIN_REASONS_GET:
await self.auth_required(
userPhone,