mirror of
https://github.com/openmax-server/server.git
synced 2026-05-23 03:51:43 +03:00
MAX: блокировка и разблокировка контакта
This commit is contained in:
@@ -13,6 +13,8 @@ class Static:
|
|||||||
CHAT_NOT_FOUND = "chat_not_found"
|
CHAT_NOT_FOUND = "chat_not_found"
|
||||||
CHAT_NOT_ACCESS = "chat_not_access"
|
CHAT_NOT_ACCESS = "chat_not_access"
|
||||||
RATE_LIMITED = "rate_limited"
|
RATE_LIMITED = "rate_limited"
|
||||||
|
CONTACT_NOT_FOUND = "contact_not_found"
|
||||||
|
CONTACT_ALREADY_ADDED = "contact_already_added"
|
||||||
|
|
||||||
class ChatTypes:
|
class ChatTypes:
|
||||||
DIALOG = "DIALOG"
|
DIALOG = "DIALOG"
|
||||||
@@ -80,7 +82,19 @@ class Static:
|
|||||||
"error": "error.rate_limited",
|
"error": "error.rate_limited",
|
||||||
"message": "Too many attempts. Please try again later",
|
"message": "Too many attempts. Please try again later",
|
||||||
"title": "Слишком много попыток"
|
"title": "Слишком много попыток"
|
||||||
}
|
},
|
||||||
|
"contact_not_found": {
|
||||||
|
"localizedMessage": "Контакт не найден",
|
||||||
|
"error": "contact.not.found",
|
||||||
|
"message": "Contact not found",
|
||||||
|
"title": "Контакт не найден"
|
||||||
|
},
|
||||||
|
"contact_already_added": {
|
||||||
|
"localizedMessage": "Контакт уже добавлен",
|
||||||
|
"error": "contact.already.added",
|
||||||
|
"message": "Contact already added",
|
||||||
|
"title": "Контакт уже добавлен"
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
### Сообщения бота
|
### Сообщения бота
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ class ContactsProcessors(BaseProcessor):
|
|||||||
user = await cursor.fetchone()
|
user = await cursor.fetchone()
|
||||||
|
|
||||||
if not user:
|
if not user:
|
||||||
await self._send_error(seq, self.opcodes.CONTACT_UPDATE, self.error_types.USER_NOT_FOUND, writer)
|
await self._send_error(seq, self.opcodes.CONTACT_UPDATE, self.error_types.CONTACT_NOT_FOUND, writer)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Проверяем, не добавлен ли уже контакт
|
# Проверяем, не добавлен ли уже контакт
|
||||||
@@ -161,6 +161,67 @@ class ContactsProcessors(BaseProcessor):
|
|||||||
|
|
||||||
await self._send(writer, packet)
|
await self._send(writer, packet)
|
||||||
|
|
||||||
|
elif action == "BLOCK":
|
||||||
|
async with self.db_pool.acquire() as conn:
|
||||||
|
async with conn.cursor() as cursor:
|
||||||
|
# Проверяем, существует ли контакт
|
||||||
|
await cursor.execute(
|
||||||
|
"SELECT * FROM contacts WHERE owner_id = %s AND contact_id = %s",
|
||||||
|
(userId, contactId)
|
||||||
|
)
|
||||||
|
row = await cursor.fetchone()
|
||||||
|
|
||||||
|
# Обновляем существующий контакт, если такой есть
|
||||||
|
if row:
|
||||||
|
await cursor.execute(
|
||||||
|
"UPDATE contacts SET is_blocked = TRUE WHERE owner_id = %s AND contact_id = %s",
|
||||||
|
(userId, contactId)
|
||||||
|
)
|
||||||
|
else: # В ином случае добавляем новую запись в бд
|
||||||
|
await cursor.execute("SELECT * FROM users WHERE id = %s", (contactId,))
|
||||||
|
user = await cursor.fetchone()
|
||||||
|
if not user:
|
||||||
|
await self._send_error(seq, self.opcodes.CONTACT_UPDATE, self.error_types.USER_NOT_FOUND, writer)
|
||||||
|
return
|
||||||
|
|
||||||
|
await cursor.execute(
|
||||||
|
"INSERT INTO contacts (owner_id, contact_id, custom_firstname, custom_lastname, is_blocked) VALUES (%s, %s, %s, %s, TRUE)",
|
||||||
|
(userId, contactId, firstName, lastName)
|
||||||
|
)
|
||||||
|
|
||||||
|
packet = self.proto.pack_packet(
|
||||||
|
cmd=self.proto.CMD_OK, seq=seq, opcode=self.opcodes.CONTACT_UPDATE, payload=None
|
||||||
|
)
|
||||||
|
|
||||||
|
await self._send(writer, packet)
|
||||||
|
|
||||||
|
elif action == "UNBLOCK":
|
||||||
|
# Разблокируем контакт
|
||||||
|
async with self.db_pool.acquire() as conn:
|
||||||
|
async with conn.cursor() as cursor:
|
||||||
|
# Проверяем, существует ли контакт
|
||||||
|
await cursor.execute(
|
||||||
|
"SELECT * FROM contacts WHERE owner_id = %s AND contact_id = %s",
|
||||||
|
(userId, contactId)
|
||||||
|
)
|
||||||
|
row = await cursor.fetchone()
|
||||||
|
|
||||||
|
# Обновляем контакт, если он есть
|
||||||
|
if row:
|
||||||
|
await cursor.execute(
|
||||||
|
"UPDATE contacts SET is_blocked = FALSE WHERE owner_id = %s AND contact_id = %s",
|
||||||
|
(userId, contactId)
|
||||||
|
)
|
||||||
|
else: # В ином случае отправляем ошибку
|
||||||
|
await self._send_error(seq, self.opcodes.CONTACT_UPDATE, self.error_types.CONTACT_NOT_FOUND, writer)
|
||||||
|
return
|
||||||
|
|
||||||
|
packet = self.proto.pack_packet(
|
||||||
|
cmd=self.proto.CMD_OK, seq=seq, opcode=self.opcodes.CONTACT_UPDATE, payload=None
|
||||||
|
)
|
||||||
|
|
||||||
|
await self._send(writer, packet)
|
||||||
|
|
||||||
async def contact_presence(self, payload, seq, writer):
|
async def contact_presence(self, payload, seq, writer):
|
||||||
"""Обработчик получения статуса контактов"""
|
"""Обработчик получения статуса контактов"""
|
||||||
# Валидируем данные пакета
|
# Валидируем данные пакета
|
||||||
|
|||||||
Reference in New Issue
Block a user