Closed github-actions[bot] closed 1 year ago
https://api.github.com/yepcord/server/blob/4e0cb962580c7ea8f5a0261f2c5605a0ca44f72f/src/yepcord/models/users.py#L316
guild_folders: list = ormar.JSON(default=[]) restricted_guilds: list = ormar.JSON(default=[]) def ds_json(self) -> dict: data = { "locale": self.locale, "show_current_game": self.show_current_game, "restricted_guilds": self.restricted_guilds, "default_guilds_restricted": self.default_guilds_restricted, "inline_attachment_media": self.inline_attachment_media, "inline_embed_media": self.inline_attachment_media, "gif_auto_play": self.gif_auto_play, "render_embeds": self.render_embeds, "render_reactions": self.render_reactions, "animate_emoji": self.animate_emoji, "enable_tts_command": self.enable_tts_command, "message_display_compact": self.message_display_compact, "convert_emoticons": self.convert_emoticons, "explicit_content_filter": self.explicit_content_filter, "disable_games_tab": self.disable_games_tab, "theme": self.theme, "developer_mode": self.developer_mode, "guild_positions": self.guild_positions, "detect_platform_accounts": self.detect_platform_accounts, "status": self.status, "afk_timeout": self.afk_timeout, "timezone_offset": self.timezone_offset, "stream_notifications_enabled": self.stream_notifications_enabled, "allow_accessibility_detection": self.allow_accessibility_detection, "contact_sync_enabled": self.contact_sync_enabled, "native_phone_integration_enabled": self.native_phone_integration_enabled, "animate_stickers": self.animate_stickers, "friend_discovery_flags": self.friend_discovery_flags, "view_nsfw_guilds": self.view_nsfw_guilds, "view_nsfw_commands": self.view_nsfw_commands, "passwordless": self.passwordless, "friend_source_flags": self.friend_source_flags, "guild_folders": self.guild_folders, "custom_status": self.custom_status, "activity_restricted_guild_ids": self.activity_restricted_guild_ids } if data["status"] == "offline": data["status"] = "invisible" return data def ds_json_consent(self) -> dict: return { "personalization": { "consented": self.personalization }, "usage_statistics": { "consented": self.usage_statistics } } class UserSettingsProto: def __init__(self, settings: UserSettings): self._settings = settings def __getattr__(self, item: str) -> Any: return getattr(self._settings, item, None) def get(self) -> PreloadedUserSettings: proto = PreloadedUserSettings( versions=Versions(client_version=14, data_version=1), # TODO: get data version from database user_content=UserContentSettings(dismissed_contents=bytes.fromhex(self.dismissed_contents)), voice_and_video=VoiceAndVideoSettings( afk_timeout=UInt32Value(value=self.afk_timeout), stream_notifications_enabled=BoolValue(value=self.stream_notifications_enabled) ), text_and_images=TextAndImagesSettings( use_rich_chat_input=BoolValue(value=self.use_rich_chat_input), use_thread_sidebar=BoolValue(value=self.use_thread_sidebar), render_spoilers=StringValue(value=self.render_spoilers), inline_attachment_media=BoolValue(value=self.inline_attachment_media), inline_embed_media=BoolValue(value=self.inline_embed_media), render_embeds=BoolValue(value=self.render_embeds), render_reactions=BoolValue(value=self.render_reactions), explicit_content_filter=UInt32Value(value=self.explicit_content_filter), view_nsfw_guilds=BoolValue(value=self.view_nsfw_guilds), convert_emoticons=BoolValue(value=self.convert_emoticons), animate_stickers=UInt32Value(value=self.animate_stickers), expression_suggestions_enabled=BoolValue(value=self.expression_suggestions_enabled), message_display_compact=BoolValue(value=self.message_display_compact), view_image_descriptions=BoolValue(value=self.view_image_descriptions) ), privacy=PrivacySettings( friend_source_flags=UInt32Value(value=14), default_guilds_restricted=self.default_guilds_restricted, allow_accessibility_detection=self.allow_accessibility_detection ), status=StatusSettings( status=StringValue(value=self.status), show_current_game=BoolValue(value=self.show_current_game) ), localization=LocalizationSettings( locale=StringValue(value=self.locale), timezone_offset=Int32Value(value=self.timezone_offset) ), appearance=AppearanceSettings( theme=Theme.DARK if self.theme == "dark" else Theme.LIGHT, developer_mode=self.developer_mode ), guild_folders=GuildFolders(folders=[GuildFolder(**folder) for folder in self.guild_folders]) ) if d := self.friend_source_flags: if d["all"]: proto.privacy.friend_source_flags.value = 14 elif d["mutual_friends"] and d["mutual_guilds"]: proto.privacy.friend_source_flags.value = 6 elif d["mutual_guilds"]: proto.privacy.friend_source_flags.value = 4 elif d["mutual_friends"]: proto.privacy.friend_source_flags.value = 2 else: proto.privacy.friend_source_flags.value = 0 return proto @staticmethod def to_dict(proto: PreloadedUserSettings, changes: dict=None) -> dict: if changes is None: changes = {} fields = [ ("text_and_images.inline_attachment_media.value", "inline_attachment_media"), ("status.show_current_game.value", "show_current_game"), ("text_and_images.view_nsfw_guilds.value", "view_nsfw_guilds"), ("text_and_images.enable_tts_command.value", "enable_tts_command"), ("text_and_images.render_reactions.value", "render_reactions"), ("text_and_images.gif_auto_play.value", "gif_auto_play"), ("voice_and_video.stream_notifications_enabled.value", "stream_notifications_enabled"), ("text_and_images.animate_emoji.value", "animate_emoji"), ("voice_and_video.afk_timeout.value", "afk_timeout"), ("text_and_images.view_nsfw_commands.value", "view_nsfw_commands"), ("privacy.detect_platform_accounts.value", "detect_platform_accounts"), ("text_and_images.explicit_content_filter.value", "explicit_content_filter"), ("status.status.value", "status"), ("privacy.default_guilds_restricted", "default_guilds_restricted"), ("privacy.allow_accessibility_detection", "allow_accessibility_detection"), ("localization.locale.locale_code", "locale"), ("voice_and_video.native_phone_integration_enabled.value", "native_phone_integration_enabled"), ("localization.timezone_offset.offset", "timezone_offset"), ("privacy.friend_discovery_flags.value", "friend_discovery_flags"), ("privacy.contact_sync_enabled.value", "contact_sync_enabled"), ("game_library.disable_games_tab.value", "disable_games_tab"), ("appearance.developer_mode", "developer_mode"), ("text_and_images.render_embeds.value", "render_embeds"), ("text_and_images.animate_stickers.value", "animate_stickers"), ("text_and_images.message_display_compact.value", "message_display_compact"), ("text_and_images.convert_emoticons.value", "convert_emoticons"), ("privacy.passwordless.value", "passwordless"), ("privacy.activity_restricted_guild_ids", "activity_restricted_guild_ids"), ("privacy.restricted_guild_ids", "restricted_guilds"), ("text_and_images.render_spoilers.value", "render_spoilers"), ("text_and_images.inline_embed_media.value", "inline_embed_media"), ("text_and_images.use_thread_sidebar.value", "use_thread_sidebar"), ("text_and_images.use_rich_chat_input.value", "use_rich_chat_input"), ("text_and_images.expression_suggestions_enabled.value", "expression_suggestions_enabled"), ("text_and_images.view_image_descriptions.value", "view_image_descriptions"), ] for proto_path, out_name in fields: proto_get(proto, proto_path, output_dict=changes, output_name=out_name) return changes async def update(self, proto: PreloadedUserSettings) -> None: changes = UserSettingsProto.to_dict(proto) if (theme := proto_get(proto, "appearance.theme", 1)) is not None: changes["theme"] = "dark" if theme == 1 else "light" if (custom_status := proto_get(proto, "status.custom_status")) is not None: cs = { "text": proto_get(custom_status, "text", None), "emoji_id": proto_get(custom_status, "emoji_id", None), "emoji_name": proto_get(custom_status, "emoji_name", None), "expires_at_ms": proto_get(custom_status, "expires_at_ms", None) } changes["custom_status"] = cs if (p := proto_get(proto, "privacy.friend_source_flags.value")) is not None: if p == 14: changes["friend_source_flags"] = {"all": True} elif p == 6: changes["friend_source_flags"] = {"all": False, "mutual_friends": True, "mutual_guilds": True} elif p == 4: changes["friend_source_flags"] = {"all": False, "mutual_friends": False, "mutual_guilds": True} elif p == 2: changes["friend_source_flags"] = {"all": False, "mutual_friends": True, "mutual_guilds": False} else: changes["friend_source_flags"] = {"all": False, "mutual_friends": False, "mutual_guilds": True} else: changes["friend_source_flags"] = {"all": False, "mutual_friends": False, "mutual_guilds": False} if (dismissed_contents := proto_get(proto, "user_content.dismissed_contents")) is not None: changes["dismissed_contents"] = dismissed_contents[:128].hex() if guild_folders := proto_get(proto, "guild_folders.folders"): folders = [] for folder in guild_folders: folders.append({"guild_ids": list(folder.guild_ids)}) if folder_id := proto_get(folder, "id.value"): folders[-1]["id"] = {"value": folder_id} if folder_name := proto_get(folder, "name.value"): folders[-1]["name"] = {"value": folder_name} if folder_color := proto_get(folder, "color.value"): folders[-1]["color"] = {"value": folder_color} changes["guild_folders"] = folders await self._settings.update(**changes) class FrecencySettings(ormar.Model): class Meta(DefaultMeta):
Closed in ebc034e74f8ed5d751d2b17f8b6ffaccee2757e3
https://api.github.com/yepcord/server/blob/4e0cb962580c7ea8f5a0261f2c5605a0ca44f72f/src/yepcord/models/users.py#L316