diff --git a/mipac/models/instance.py b/mipac/models/instance.py index 94fbe65..a71e6d0 100644 --- a/mipac/models/instance.py +++ b/mipac/models/instance.py @@ -3,7 +3,12 @@ from __future__ import annotations from typing import TYPE_CHECKING from mipac.models.lite.instance import LiteInstanceMeta -from mipac.types.instance import IFederationInstance, IInstanceMeta +from mipac.types.instance import ( + IFederationInstance, + IInstanceFeatures, + IInstanceMeta, + IInstancePolicies, +) if TYPE_CHECKING: from mipac.client import ClientActions @@ -115,12 +120,11 @@ class FederationInstance: return self.__instance.get('last_communicated_at') -class InstanceMeta(LiteInstanceMeta): +class InstanceFeatures: def __init__( - self, instance: IInstanceMeta, *, client: ClientActions + self, features: IInstanceFeatures, *, client: ClientActions ) -> None: - super().__init__(instance, client=client) - self.__features = instance['features'] + self.__features = features @property def registration(self) -> bool: @@ -173,3 +177,116 @@ class InstanceMeta(LiteInstanceMeta): @property def miauth(self) -> bool: return self.__features['miauth'] + + +class InstancePolicies: + def __init__(self, policies: IInstancePolicies) -> None: + self.__policies = policies + + @property + def gtl_available(self) -> bool: + return self.__policies['gtl_available'] + + @property + def ltl_available(self) -> bool: + return self.__policies['ltl_available'] + + @property + def can_public_note(self) -> bool: + return self.__policies['can_public_note'] + + @property + def can_invite(self) -> bool: + return self.__policies['can_invite'] + + @property + def can_manage_custom_emojis(self) -> bool: + return self.__policies['can_manage_custom_emojis'] + + @property + def can_hide_ads(self) -> bool: + return self.__policies['can_hide_ads'] + + @property + def drive_capacity_mb(self) -> int: + return self.__policies['drive_capacity_mb'] + + @property + def pin_limit(self) -> int: + return self.__policies['pin_limit'] + + @property + def antenna_limit(self) -> int: + return self.__policies['antenna_limit'] + + @property + def word_mute_limit(self) -> int: + return self.__policies['word_mute_limit'] + + @property + def webhook_limit(self) -> int: + return self.__policies['webhook_limit'] + + @property + def clip_limit(self) -> int: + return self.__policies['clip_limit'] + + @property + def note_each_clips_limit(self) -> int: + return self.__policies['note_each_clips_limit'] + + @property + def user_list_limit(self) -> int: + return self.__policies['user_list_limit'] + + @property + def user_each_user_lists_limit(self) -> int: + return self.__policies['user_each_user_lists_limit'] + + @property + def rate_limit_factor(self) -> int: + return self.__policies['rate_limit_factor'] + + +class InstanceMeta(LiteInstanceMeta): + def __init__( + self, instance: IInstanceMeta, *, client: ClientActions + ) -> None: + super().__init__(instance, client=client) + self.__meta = instance + + @property + def policies(self) -> InstancePolicies | None: + return ( + InstancePolicies(self.__meta['policies']) + if 'policies' in self.__meta + else None + ) + + @property + def features(self): + return InstanceFeatures(self.__meta['features'], client=self.__client) + + @property + def cache_remote_files(self) -> bool: + return self.__meta['cache_remote_files'] + + @property + def pinned_pages(self) -> list[str]: + return self.__meta.get('pinned_pages', []) + + @property + def pinned_clip_id(self) -> str | None: + return self.__meta.get('pinned_clip_id') + + @property + def require_setup(self) -> bool: + return self.__meta.get('require_setup', False) + + @property + def proxy_account_name(self) -> str | None: + return self.__meta.get('proxy_account_name') + + @property + def proxy_account(self) -> str | None: + return self.__meta.get('proxy_account')