mirror of
https://github.com/openmax-server/server.git
synced 2026-05-22 19:41:41 +03:00
MAX: отдача черного списка
This commit is contained in:
@@ -130,4 +130,8 @@ class ChatHistoryPayloadModel(pydantic.BaseModel):
|
|||||||
|
|
||||||
class ChatSubscribePayloadModel(pydantic.BaseModel):
|
class ChatSubscribePayloadModel(pydantic.BaseModel):
|
||||||
chatId: int
|
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 .calls import CallsProcessors
|
||||||
from .chats import ChatsProcessors
|
from .chats import ChatsProcessors
|
||||||
from .complains import ComplainsProcessors
|
from .complains import ComplainsProcessors
|
||||||
|
from .contacts import ContactsProcessors
|
||||||
from .folders import FoldersProcessors
|
from .folders import FoldersProcessors
|
||||||
from .history import HistoryProcessors
|
from .history import HistoryProcessors
|
||||||
from .main import MainProcessors
|
from .main import MainProcessors
|
||||||
@@ -16,6 +17,7 @@ class Processors(
|
|||||||
CallsProcessors,
|
CallsProcessors,
|
||||||
ChatsProcessors,
|
ChatsProcessors,
|
||||||
ComplainsProcessors,
|
ComplainsProcessors,
|
||||||
|
ContactsProcessors,
|
||||||
FoldersProcessors,
|
FoldersProcessors,
|
||||||
HistoryProcessors,
|
HistoryProcessors,
|
||||||
MainProcessors,
|
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,
|
writer,
|
||||||
userId,
|
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:
|
case self.opcodes.COMPLAIN_REASONS_GET:
|
||||||
await self.auth_required(
|
await self.auth_required(
|
||||||
userPhone,
|
userPhone,
|
||||||
|
|||||||
@@ -227,6 +227,15 @@ class OnemeWS:
|
|||||||
websocket,
|
websocket,
|
||||||
userId,
|
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:
|
case self.opcodes.COMPLAIN_REASONS_GET:
|
||||||
await self.auth_required(
|
await self.auth_required(
|
||||||
userPhone,
|
userPhone,
|
||||||
|
|||||||
Reference in New Issue
Block a user