diff --git a/src/kwork_api/__pycache__/client.cpython-312.pyc b/src/kwork_api/__pycache__/client.cpython-312.pyc index aba3e05..b50ddec 100644 Binary files a/src/kwork_api/__pycache__/client.cpython-312.pyc and b/src/kwork_api/__pycache__/client.cpython-312.pyc differ diff --git a/src/kwork_api/client.py b/src/kwork_api/client.py index 2154e8e..446a0fe 100644 --- a/src/kwork_api/client.py +++ b/src/kwork_api/client.py @@ -907,190 +907,215 @@ class KworkClient: data = await self.client._request("POST", "/blockedDialogList") 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 — это настройки интересов пользователя: - - Предпочитаемые категории - - Ключевые слова для мониторинга - - Фильтры для поиска - - Returns: - Словарь с настройками предпочтений. + Вспомогательные эндпоинты которые не вошли в другие категории: + - Пользовательские настройки и предпочтения (wants) + - Статусы кворков и заказов + - Персональные предложения (offers) + - Настройки профиля + - Статус онлайн/оффлайн 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]: - """ - Получить статус предпочтений. - Returns: - Статус wants с метаданными. - """ - return await self._request("POST", "/wantsStatusList") - - async def get_kworks_status(self) -> dict[str, Any]: - """ - Получить статусы кворков пользователя. + def __init__(self, client: "KworkClient"): + self.client = client - Возвращает информацию о статусах всех кворков - текущего пользователя (активен, на модерации, и т.д.). + async def get_wants(self) -> dict[str, Any]: + """ + Получить пользовательские предпочтения (wants). + + Wants — это настройки интересов пользователя: + - Предпочитаемые категории + - Ключевые слова для мониторинга + - Фильтры для поиска + + Returns: + Словарь с настройками предпочтений. + + Example: + wants = await client.other.get_wants() + print(wants) + """ + return await self.client._request("POST", "/myWants") - Returns: - Словарь со статусами кворков. + async def get_wants_status(self) -> dict[str, Any]: + """ + Получить статус предпочтений. + + Returns: + Статус wants с метаданными. + """ + return await self.client._request("POST", "/wantsStatusList") - Example: - status = await client.get_kworks_status() - print(status) - """ - return await self._request("POST", "/kworksStatusList") - - async def get_offers(self) -> dict[str, Any]: - """ - Получить персональные предложения. + async def get_kworks_status(self) -> dict[str, Any]: + """ + Получить статусы кворков пользователя. + + Возвращает информацию о статусах всех кворков + текущего пользователя (активен, на модерации, и т.д.). + + Returns: + Словарь со статусами кворков. + + Example: + status = await client.other.get_kworks_status() + print(status) + """ + return await self.client._request("POST", "/kworksStatusList") - Returns: - Список персональных предложений от Kwork. - """ - return await self._request("POST", "/offers") - - async def get_exchange_info(self) -> dict[str, Any]: - """ - Получить информацию об обмене валюты. + async def get_offers(self) -> dict[str, Any]: + """ + Получить персональные предложения. + + Returns: + Список персональных предложений от Kwork. + """ + return await self.client._request("POST", "/offers") - Returns: - Информация о курсах валют и обмене. - """ - return await self._request("POST", "/exchangeInfo") - - async def get_channel(self) -> dict[str, Any]: - """ - Получить информацию о канале пользователя. + async def get_exchange_info(self) -> dict[str, Any]: + """ + Получить информацию об обмене валюты. + + Returns: + Информация о курсах валют и обмене. + """ + return await self.client._request("POST", "/exchangeInfo") - Returns: - Данные канала (если есть). - """ - return await self._request("POST", "/getChannel") - - async def get_in_app_notification(self) -> dict[str, Any]: - """ - Получить внутриприложенное уведомление. + async def get_channel(self) -> dict[str, Any]: + """ + Получить информацию о канале пользователя. + + Returns: + Данные канала (если есть). + """ + return await self.client._request("POST", "/getChannel") - Returns: - Данные in-app уведомления. - """ - return await self._request("POST", "/getInAppNotification") - - async def get_security_user_data(self) -> dict[str, Any]: - """ - Получить данные безопасности пользователя. + async def get_in_app_notification(self) -> dict[str, Any]: + """ + Получить внутриприложенное уведомление. + + Returns: + Данные in-app уведомления. + """ + return await self.client._request("POST", "/getInAppNotification") - Returns: - Информация о безопасности аккаунта. - """ - return await self._request("POST", "/getSecurityUserData") - - async def is_dialog_allow(self, user_id: int) -> bool: - """ - Проверить возможность начала диалога с пользователем. + async def get_security_user_data(self) -> dict[str, Any]: + """ + Получить данные безопасности пользователя. + + Returns: + Информация о безопасности аккаунта. + """ + return await self.client._request("POST", "/getSecurityUserData") - Args: - user_id: ID пользователя для проверки. + async def is_dialog_allow(self, user_id: int) -> bool: + """ + Проверить возможность начала диалога с пользователем. + + Args: + user_id: ID пользователя для проверки. + + Returns: + True если диалог разрешён, False иначе. + + Example: + allowed = await client.other.is_dialog_allow(12345) + if allowed: + print("Можно написать сообщение") + """ + data = await self.client._request( + "POST", + "/isDialogAllow", + json={"user_id": user_id}, + ) + return data.get("allowed", False) - Returns: - True если диалог разрешён, False иначе. + async def get_viewed_kworks(self) -> list[Kwork]: + """ + Получить просмотренные кворки. + + Возвращает список кворков, которые пользователь + просматривал ранее. + + Returns: + Список просмотренных кворков. + + Example: + 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", [])] - Example: - 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]: - """ - Получить просмотренные кворки. + async def get_favorite_categories(self) -> list[int]: + """ + Получить ID избранных категорий. + + Returns: + Список ID категорий, добавленных в избранное. + + 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]: + """ + Обновить настройки пользователя. + + Args: + settings: Словарь с настройками для обновления. + Структура зависит от конкретных настроек. + + Returns: + Ответ API с подтверждением обновления. + + 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]: + """ + Установить статус пользователя "оффлайн". + + Скрывает онлайн-статус от других пользователей. + + Returns: + Подтверждение изменения статуса. + + Example: + await client.other.go_offline() + """ + return await self.client._request("POST", "/offline") - Example: - viewed = await client.get_viewed_kworks() - 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]: - """ - Получить ID избранных категорий. - - Returns: - Список 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]: - """ - Обновить настройки пользователя. - - Args: - settings: Словарь с настройками для обновления. - Структура зависит от конкретных настроек. - - Returns: - Ответ API с подтверждением обновления. - - Example: - await client.update_settings({ - "email_notifications": True, - "language": "ru" - }) - """ - return await self._request("POST", "/updateSettings", json=settings) - - async def go_offline(self) -> dict[str, Any]: - """ - Установить статус пользователя "оффлайн". - - Скрывает онлайн-статус от других пользователей. - - Returns: - Подтверждение изменения статуса. - - Example: - await client.go_offline() - """ - return await self._request("POST", "/offline") - - async def get_actor(self) -> dict[str, Any]: - """ - Получить информацию об актёре (текущем пользователе). - - Returns: - Данные актёра/пользователя. - """ - return await self._request("POST", "/actor") + async def get_actor(self) -> dict[str, Any]: + """ + Получить информацию об актёре (текущем пользователе). + + Returns: + Данные актёра/пользователя. + """ + return await self.client._request("POST", "/actor") # ========== API Property Accessors ========== @@ -1118,3 +1143,8 @@ class KworkClient: def notifications(self) -> NotificationsAPI: """API уведомлений.""" return self.NotificationsAPI(self) + + @property + def other(self) -> OtherAPI: + """Прочее API.""" + return self.OtherAPI(self)