mirror of
https://github.com/openmax-server/server.git
synced 2026-05-12 16:55:47 +00:00
MAX: отдача черного списка
This commit is contained in:
@@ -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
|
||||
@@ -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,
|
||||
|
||||
66
src/oneme/processors/contacts.py
Normal file
66
src/oneme/processors/contacts.py
Normal 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)
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user