refactor: вернул OtherAPI как отдельный класс

OtherAPI остаётся отдельным классом с property accessor:
- client.other.get_wants()
- client.other.get_kworks_status()
- client.other.go_offline()
- и т.д.
This commit is contained in:
root 2026-03-23 04:36:47 +00:00
parent 127e5927bc
commit 6ad63ee3e0
2 changed files with 193 additions and 163 deletions

View File

@ -907,190 +907,215 @@ class KworkClient:
data = await self.client._request("POST", "/blockedDialogList") data = await self.client._request("POST", "/blockedDialogList")
return [Dialog.model_validate(d) for d in data.get("dialogs", [])] return [Dialog.model_validate(d) for d in data.get("dialogs", [])]
# ========== User Settings & Preferences ========== # ========== Other Endpoints ==========
async def get_wants(self) -> dict[str, Any]: class OtherAPI:
""" """
Получить пользовательские предпочтения (wants). Прочее API.
Wants это настройки интересов пользователя: Вспомогательные эндпоинты которые не вошли в другие категории:
- Предпочитаемые категории - Пользовательские настройки и предпочтения (wants)
- Ключевые слова для мониторинга - Статусы кворков и заказов
- Фильтры для поиска - Персональные предложения (offers)
- Настройки профиля
Returns: - Статус онлайн/оффлайн
Словарь с настройками предпочтений.
Example: Example:
wants = await client.get_wants() # Пользовательские предпочтения
print(wants) wants = await client.other.get_wants()
# Статус кворков
status = await client.other.get_kworks_status()
# Установить статус оффлайн
await client.other.go_offline()
""" """
return await self._request("POST", "/myWants")
async def get_wants_status(self) -> dict[str, Any]: def __init__(self, client: "KworkClient"):
""" self.client = client
Получить статус предпочтений.
Returns: async def get_wants(self) -> dict[str, Any]:
Статус wants с метаданными. """
""" Получить пользовательские предпочтения (wants).
return await self._request("POST", "/wantsStatusList")
async def get_kworks_status(self) -> dict[str, Any]: Wants это настройки интересов пользователя:
""" - Предпочитаемые категории
Получить статусы кворков пользователя. - Ключевые слова для мониторинга
- Фильтры для поиска
Возвращает информацию о статусах всех кворков Returns:
текущего пользователя (активен, на модерации, и т.д.). Словарь с настройками предпочтений.
Returns: Example:
Словарь со статусами кворков. wants = await client.other.get_wants()
print(wants)
"""
return await self.client._request("POST", "/myWants")
Example: async def get_wants_status(self) -> dict[str, Any]:
status = await client.get_kworks_status() """
print(status) Получить статус предпочтений.
"""
return await self._request("POST", "/kworksStatusList")
async def get_offers(self) -> dict[str, Any]: Returns:
""" Статус wants с метаданными.
Получить персональные предложения. """
return await self.client._request("POST", "/wantsStatusList")
Returns: async def get_kworks_status(self) -> dict[str, Any]:
Список персональных предложений от Kwork. """
""" Получить статусы кворков пользователя.
return await self._request("POST", "/offers")
async def get_exchange_info(self) -> dict[str, Any]: Возвращает информацию о статусах всех кворков
""" текущего пользователя (активен, на модерации, и т.д.).
Получить информацию об обмене валюты.
Returns: Returns:
Информация о курсах валют и обмене. Словарь со статусами кворков.
"""
return await self._request("POST", "/exchangeInfo")
async def get_channel(self) -> dict[str, Any]: Example:
""" status = await client.other.get_kworks_status()
Получить информацию о канале пользователя. print(status)
"""
return await self.client._request("POST", "/kworksStatusList")
Returns: async def get_offers(self) -> dict[str, Any]:
Данные канала (если есть). """
""" Получить персональные предложения.
return await self._request("POST", "/getChannel")
async def get_in_app_notification(self) -> dict[str, Any]: Returns:
""" Список персональных предложений от Kwork.
Получить внутриприложенное уведомление. """
return await self.client._request("POST", "/offers")
Returns: async def get_exchange_info(self) -> dict[str, Any]:
Данные in-app уведомления. """
""" Получить информацию об обмене валюты.
return await self._request("POST", "/getInAppNotification")
async def get_security_user_data(self) -> dict[str, Any]: Returns:
""" Информация о курсах валют и обмене.
Получить данные безопасности пользователя. """
return await self.client._request("POST", "/exchangeInfo")
Returns: async def get_channel(self) -> dict[str, Any]:
Информация о безопасности аккаунта. """
""" Получить информацию о канале пользователя.
return await self._request("POST", "/getSecurityUserData")
async def is_dialog_allow(self, user_id: int) -> bool: Returns:
""" Данные канала (если есть).
Проверить возможность начала диалога с пользователем. """
return await self.client._request("POST", "/getChannel")
Args: async def get_in_app_notification(self) -> dict[str, Any]:
user_id: ID пользователя для проверки. """
Получить внутриприложенное уведомление.
Returns: Returns:
True если диалог разрешён, False иначе. Данные in-app уведомления.
"""
return await self.client._request("POST", "/getInAppNotification")
Example: async def get_security_user_data(self) -> dict[str, Any]:
allowed = await client.is_dialog_allow(12345) """
if allowed: Получить данные безопасности пользователя.
print("Можно написать сообщение")
"""
data = await self._request(
"POST",
"/isDialogAllow",
json={"user_id": user_id},
)
return data.get("allowed", False)
async def get_viewed_kworks(self) -> list[Kwork]: Returns:
""" Информация о безопасности аккаунта.
Получить просмотренные кворки. """
return await self.client._request("POST", "/getSecurityUserData")
Возвращает список кворков, которые пользователь async def is_dialog_allow(self, user_id: int) -> bool:
просматривал ранее. """
Проверить возможность начала диалога с пользователем.
Returns: Args:
Список просмотренных кворков. user_id: ID пользователя для проверки.
Example: Returns:
viewed = await client.get_viewed_kworks() True если диалог разрешён, False иначе.
print(f"Просмотрено: {len(viewed)} кворков")
"""
data = await self._request("POST", "/viewedCatalogKworks")
return [Kwork.model_validate(k) for k in data.get("kworks", [])]
async def get_favorite_categories(self) -> list[int]: Example:
""" allowed = await client.other.is_dialog_allow(12345)
Получить ID избранных категорий. if allowed:
print("Можно написать сообщение")
"""
data = await self.client._request(
"POST",
"/isDialogAllow",
json={"user_id": user_id},
)
return data.get("allowed", False)
Returns: async def get_viewed_kworks(self) -> list[Kwork]:
Список ID категорий, добавленных в избранное. """
Получить просмотренные кворки.
Example: Возвращает список кворков, которые пользователь
cats = await client.get_favorite_categories() просматривал ранее.
print(f"Избранные категории: {cats}")
"""
data = await self._request("POST", "/favoriteCategories")
return data.get("categories", [])
async def update_settings(self, settings: dict[str, Any]) -> dict[str, Any]: Returns:
""" Список просмотренных кворков.
Обновить настройки пользователя.
Args: Example:
settings: Словарь с настройками для обновления. viewed = await client.other.get_viewed_kworks()
Структура зависит от конкретных настроек. print(f"Просмотрено: {len(viewed)} кворков")
"""
data = await self.client._request("POST", "/viewedCatalogKworks")
return [Kwork.model_validate(k) for k in data.get("kworks", [])]
Returns: async def get_favorite_categories(self) -> list[int]:
Ответ API с подтверждением обновления. """
Получить ID избранных категорий.
Example: Returns:
await client.update_settings({ Список ID категорий, добавленных в избранное.
"email_notifications": True,
"language": "ru"
})
"""
return await self._request("POST", "/updateSettings", json=settings)
async def go_offline(self) -> dict[str, Any]: Example:
""" cats = await client.other.get_favorite_categories()
Установить статус пользователя "оффлайн". print(f"Избранные категории: {cats}")
"""
data = await self.client._request("POST", "/favoriteCategories")
return data.get("categories", [])
Скрывает онлайн-статус от других пользователей. async def update_settings(self, settings: dict[str, Any]) -> dict[str, Any]:
"""
Обновить настройки пользователя.
Returns: Args:
Подтверждение изменения статуса. settings: Словарь с настройками для обновления.
Структура зависит от конкретных настроек.
Example: Returns:
await client.go_offline() Ответ API с подтверждением обновления.
"""
return await self._request("POST", "/offline")
async def get_actor(self) -> dict[str, Any]: Example:
""" await client.other.update_settings({
Получить информацию об актёре (текущем пользователе). "email_notifications": True,
"language": "ru"
})
"""
return await self.client._request("POST", "/updateSettings", json=settings)
Returns: async def go_offline(self) -> dict[str, Any]:
Данные актёра/пользователя. """
""" Установить статус пользователя "оффлайн".
return await self._request("POST", "/actor")
Скрывает онлайн-статус от других пользователей.
Returns:
Подтверждение изменения статуса.
Example:
await client.other.go_offline()
"""
return await self.client._request("POST", "/offline")
async def get_actor(self) -> dict[str, Any]:
"""
Получить информацию об актёре (текущем пользователе).
Returns:
Данные актёра/пользователя.
"""
return await self.client._request("POST", "/actor")
# ========== API Property Accessors ========== # ========== API Property Accessors ==========
@ -1118,3 +1143,8 @@ class KworkClient:
def notifications(self) -> NotificationsAPI: def notifications(self) -> NotificationsAPI:
"""API уведомлений.""" """API уведомлений."""
return self.NotificationsAPI(self) return self.NotificationsAPI(self)
@property
def other(self) -> OtherAPI:
"""Прочее API."""
return self.OtherAPI(self)