Protobuf de configurações do usuário
Um snapshot de preferências sincronizadas contém as configurações de cliente que uma conta compartilha entre seus dispositivos. É uma mensagem fluxer.user.preferences.v1.SyncedPreferences codificada em base64 no campo synced_preferences do objeto de configurações do usuário. O Decoding Chat o armazena e não interpreta nenhum campo nesta página.
Lendo e escrevendo o snapshot
Seção intitulada “Lendo e escrevendo o snapshot”Decodifique a string antes de ler qualquer preferência e codifique uma mensagem SyncedPreferences válida ao escrever uma. O endpoint Modificar configurações do usuário atual recebe o snapshot completo todas as vezes.
A string vazia em uma resposta significa que nada está armazenado. Enviar null ou a string vazia irá limpá-lo. Um snapshot armazenado chega às outras sessões da conta através do evento Atualização nas configurações do usuário.
Um snapshot retornado pode ter uma codificação diferente da enviada. Campos desconhecidos e valores enum sobrevivem ao processo de envio e retorno. Um snapshot contendo apenas valores padrão é retornado como uma string vazia.
Um envio pode usar o alfabeto base64 padrão ou o seguro para URL, com ou sem preenchimento. O Decoding Chat sempre retorna o alfabeto padrão com preenchimento.
Como ler a coluna de tipo
Seção intitulada “Como ler a coluna de tipo”Os tipos aqui são os tipos declarados no Protobuf. Um campo cujo tipo declarado é uma enumeração aparece como int32, sua representação em bytes, e a coluna de Descrição contém um link para a enumeração.
Um campo sem o marcador opcional sempre decodifica e contém o seu valor zero do Protobuf. Isso é falso (false) para um tipo bool, 0 para um tipo numérico, a string vazia, um campo repetido vazio ou um mapa vazio. Um campo com o marcador opcional rastreia sua presença e fica ausente até que um valor seja armazenado. Todo campo de mensagem singular rastreia a presença da mesma forma, então um grupo de preferências estará ausente do snapshot até que um cliente escreva nele.
O Decoding Chat não aplica limites a nenhum campo individual da mensagem, então todos os tamanhos, intervalos e membros de enumerações abaixo descrevem o que o cliente principal (first-party) escreve e lê.
Motivos de rejeição
Seção intitulada “Motivos de rejeição”O Decoding Chat relata cada entrada no array errors resultante contra o caminho synced_preferences. Ele verifica a string codificada primeiro.
| Condição | Status e código | Códigos de elemento |
|---|---|---|
| String codificada maior que 699052 caracteres | 400 INVALID_FORM_BODY | CONTENT_EXCEEDS_MAX_LENGTH e INVALID_FORMAT |
| String codificada fora do alfabeto base64 | 400 INVALID_FORM_BODY | INVALID_FORMAT |
| Mensagem decodificada acima de 524288 bytes | 400 VALIDATION_ERROR | TOO_LARGE |
Bytes que não decodificam como SyncedPreferences | 400 VALIDATION_ERROR | INVALID_FORMAT |
Uma string de comprimento excessivo atrai duas entradas para o mesmo caminho.
Objeto de preferências sincronizadas
Seção intitulada “Objeto de preferências sincronizadas”SyncedPreferences é a mensagem raiz. A maioria dos campos são grupos de preferências. Use o esquema Protobuf para números de campos, não suas posições nesta tabela.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| accessibility? | objeto de configurações de acessibilidade | Preferências de acessibilidade, exibição, movimento, mídia e interação |
| accessibility_overrides? | objeto de substituições de acessibilidade | Flags para configurações de mídia, sem consumidor ativo |
| textual_preview? | objeto de configurações de pré-visualização de texto | Preferências de quebra de pré-visualização de texto |
| emoji_picker? | objeto de estado do seletor de emojis | Uso do seletor de emojis, favoritos e categorias recolhidas |
| sticker_picker? | objeto de estado do seletor de figurinhas | Uso do seletor de figurinhas, favoritos e categorias recolhidas |
| memes_picker? | objeto de estado do seletor de memes | Uso do seletor de memes, favoritos e categorias recolhidas |
| emoji? | objeto de estado de emojis | Preferência de tom de pele dos emojis |
| emoji_sticker_layout? | objeto de configurações de layout de emojis e figurinhas | Preferências de layout do seletor de emojis e figurinhas |
| favorite_gifs?1 | objeto de configurações de GIFs favoritos | Entradas de GIFs favoritos salvos |
| favorites? | objeto de estado de favoritos | Layout de categorias e canais favoritos |
| recent_mentions? | objeto de configurações de menções recentes | Filtros de inclusão de menções recentes |
| sidebar? | objeto de preferências da barra lateral | Estado da barra lateral de mensagens diretas |
| member_list? | objeto de estado da lista de membros | Estado de visibilidade da lista de membros |
| unread_channels? | objeto de estado de canais não lidos | Estado de canais não lidos recolhidos |
| mention_frecency? | objeto de estado de frequência e recência de menções | Estado de frequência e recência de menções por guilda |
| nagbars? | objeto de dispensas de avisos | Estado de avisos de conta e guilda dispensados |
| dismissed_upsells? | objeto de promoções dispensadas | Estado de promoções (upsells) dispensadas |
| guild_nsfw_agreements? | objeto de acordos de conteúdo adulto da guilda | Avisos de canal, categoria e guilda com conteúdo adulto aceitos |
| whats_new? | objeto de estado do que há de novo | Última entrada de atualização dispensada |
| privacy? | objeto de preferências de privacidade | Preferências de privacidade de anexo, atividade e pré-visualização de stream |
| local_spam_overrides? | objeto de substituições de spam de usuário local | Substituições de classificação de spam para usuário local |
| sanitize_urls2 | bool | Se parâmetros de rastreamento são removidos das URLs em uma mensagem de saída |
| sound? | objeto de configurações de som | Ativação, volume e substituições de som por som |
| spellcheck? | objeto de configurações de verificação ortográfica | Preferências de mecanismo, dicionário e idioma da verificação ortográfica |
| search_engines? | objeto de configurações de motores de busca | Escolhas de provedores de tradução, busca reversa de imagens e texto |
| permission_layout? | objeto de configurações de layout de permissão | Preferências de layout do editor de permissões |
| guild_member_layout? | objeto de configurações de layout de membro da guilda | Preferência de layout da exibição de membros da guilda |
| guild_folders?3 | objeto de estado expandido de pastas de guildas | Identificadores de pastas de guildas expandidas |
| hidden_guild_buttons? | objeto de botões de lista de guildas ocultos | Estado dos botões da lista de guildas ocultos |
| keyboard_mode_intro? | objeto de estado de introdução ao modo teclado | Estado de introdução ao modo de teclado |
| input_monitoring? | objeto de estado dos avisos de monitoramento de entrada | Estado dos avisos de monitoramento de entrada |
| voice_prompts? | objeto de estado de avisos de voz | Estado do aviso de confirmação de voz suprimido |
| sudo_prompt? | objeto de estado de aviso de sudo | Último método de verificação de sudo usado |
| keybinds? | objeto de configurações de atalhos de teclado | Atalhos personalizados e preferências de modo de transmissão |
| chat_input? | objeto de configurações de entrada de chat | Preferências de comportamento do compositor de chat |
| save_camera_uploads_to_device?4 | bool | Se envios da câmera também são gravados no dispositivo |
| double_tap_reaction? | objeto de emoji de reação | Emoji que um toque duplo em uma mensagem adiciona como uma reação |
1 As entradas vivem dentro do snapshot, e a coleção de memes da conta não contém nenhuma delas
2 O único escalar simples na mensagem raiz, então ele não possui presença e é lido como falso (false) até que um cliente armazene verdadeiro (true). Ele se aplica ao conteúdo que um cliente está prestes a enviar, e o cliente principal deixa as URLs dentro de códigos inline e blocos de código inalterados
3 Contém apenas quais pastas estão expandidas. O próprio layout da pasta é guild_folders no objeto de configurações do usuário
4 O único escalar opcional na mensagem raiz, então ele rastreia presença. Nenhuma superfície ativa lê ou escreve nele
Objeto de configurações de acessibilidade
Seção intitulada “Objeto de configurações de acessibilidade”O campo accessibility possui preferências de exibição, movimento, mensagens, mídia, voz e interação. Quase todos os campos são opcionais, então distinga um campo ausente de um valor zero armazenado antes de aplicar um padrão.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| saturation_factor?1 | double | Multiplicador de saturação de cor |
| always_underline_links | bool | Se os links são sempre sublinhados |
| enable_text_selection? | bool | Se o texto da mensagem pode ser selecionado |
| show_message_send_button? | bool | Se o compositor de mensagens mostra um botão de envio |
| show_textarea_focus_ring? | bool | Se o compositor de mensagens mostra um anel de foco |
| hide_keyboard_hints | bool | Se as dicas de atalho de teclado ficam ocultas |
| escape_exits_keyboard_mode? | bool | Se Esc sai do modo de navegação por teclado |
| sync_reduced_motion_with_system? | bool | Se a redução de movimento segue a preferência do sistema operacional |
| reduced_motion_override?2 | bool | Preferência explícita de redução de movimento |
| message_group_spacing?3 | double | Espaçamento entre grupos de mensagens |
| message_gutter?3 | double | Tamanho do recuo horizontal da mensagem |
| font_size?3 | double | Tamanho da fonte da mensagem |
| show_user_avatars_in_compact_mode? | bool | Se mensagens compactas mostram avatares de usuários |
| mobile_sticker_animation_overridden4 | bool | Se o valor da animação de figurinhas em dispositivos móveis se aplica em um layout móvel |
| mobile_gif_autoplay_overridden4 | bool | Se o valor da reprodução automática de GIFs em dispositivos móveis se aplica em um layout móvel |
| mobile_animate_emoji_overridden4 | bool | Se o valor da animação de emojis em dispositivos móveis se aplica em um layout móvel |
| mobile_sticker_animation_value?5 | int32 | Configuração de animação de figurinhas no dispositivo móvel |
| mobile_gif_autoplay_value? | bool | Valor da reprodução automática de GIFs no dispositivo móvel |
| mobile_animate_emoji_value? | bool | Valor da animação de emojis no dispositivo móvel |
| auto_send_klipy_gifs | bool | Se a seleção de um GIF o envia imediatamente |
| show_gif_button? | bool | Se o compositor mostra o botão de GIF |
| show_memes_button? | bool | Se o compositor mostra o botão de memes |
| show_stickers_button? | bool | Se o compositor mostra o botão de figurinhas |
| show_emoji_button? | bool | Se o compositor mostra o botão de emojis |
| show_media_favorite_button? | bool | Se as ações de mídia mostram o botão de favorito |
| show_media_download_button? | bool | Se as ações de mídia mostram o botão de download |
| show_media_delete_button? | bool | Se as ações de mídia mostram o botão de exclusão |
| show_suppress_embeds_button? | bool | Se as ações da mensagem mostram o botão de suprimir incorporações (embeds) |
| show_gif_indicator? | bool | Se a mídia em GIF mostra um indicador de GIF |
| show_attachment_expiry_indicator? | bool | Se os anexos mostram seu indicador de expiração |
| use_browser_locale_for_time_format? | bool | Se a formatação de tempo usa a localidade (locale) do navegador |
| channel_typing_indicator_mode | int32 | Modo do indicador de digitação no canal |
| show_selected_channel_typing_indicator? | bool | Se o indicador de digitação é mostrado para o canal selecionado |
| show_message_action_bar? | bool | Se as mensagens mostram a barra de ações |
| show_message_action_bar_quick_reactions? | bool | Se a barra de ações da mensagem mostra reações rápidas |
| show_message_action_bar_shift_expand? | bool | Se segurar Shift expande a barra de ações da mensagem |
| show_message_action_bar_only_more_button? | bool | Se a barra de ações da mensagem mostra apenas o botão “mais” |
| show_default_emojis_in_autocomplete? | bool | Se o preenchimento automático inclui emojis padrão |
| show_custom_emojis_in_autocomplete? | bool | Se o preenchimento automático inclui emojis personalizados |
| show_stickers_in_autocomplete? | bool | Se o preenchimento automático inclui figurinhas |
| show_memes_in_autocomplete? | bool | Se o preenchimento automático inclui memes |
| voice_channel_join_requires_double_click? | bool | Se a entrada em um canal de voz requer um clique duplo |
| custom_theme_css?6 | string | CSS de tema personalizado |
| show_favorites? | bool | Se a seção de favoritos é exibida |
| zoom_level?7 | double | Nível de zoom do aplicativo |
| dm_message_preview_mode | int32 | Modo de pré-visualização de mensagem direta |
| enable_tts_command? | bool | Se o comando de texto para fala (TTS) está ativado |
| tts_rate?8 | double | Taxa de reprodução de texto para fala |
| show_faded_unread_on_muted_channels? | bool | Se canais silenciados retêm um indicador esmaecido de não lidos |
| show_context_menu_shortcuts? | bool | Se os menus de contexto mostram atalhos de teclado |
| confirm_before_starting_calls? | bool | Se iniciar uma chamada requer confirmação |
| hdr_display_mode | int32 | Modo de exibição HDR |
| preserve_edit_draft? | bool | Se o cancelamento de uma edição de mensagem preserva o seu rascunho |
| stay_interactive_when_unfocused? | bool | Se a animação e a interação permanecem ativas enquanto o aplicativo está sem foco |
| confirm_before_joining_voice_channels? | bool | Se a entrada em canais de voz requer confirmação |
| screen_reader_announce_new_messages? | bool | Se o leitor de tela anuncia novas mensagens |
| first_click_pass_through_when_unfocused? | bool | Se o primeiro clique também ativa o controle quando o aplicativo está sem foco |
| compact_message_group_spacing?3 | double | Espaçamento entre grupos de mensagens compactas |
| scroll_to_bottom_on_message_send? | bool | Se enviar uma mensagem rola o canal para o final |
| dim_strikethrough_text? | bool | Se o texto tachado fica visualmente esmaecido |
| sequential_file_send? | bool | Se vários arquivos selecionados são enviados uma mensagem de cada vez |
| mobile_splash_zoom_animation? | bool | Se a tela inicial de dispositivos móveis reproduz a animação de zoom |
1 Um multiplicador aplicado à cor da interface, onde 1 deixa a cor inalterada
2 Somente leitura enquanto sync_reduced_motion_with_system for falso
3 Um comprimento em pixels CSS. O cliente principal usa como padrão 16 para message_group_spacing, message_gutter e font_size, e 0 para compact_message_group_spacing
4 O campo mobile_*_value pareado é somente leitura enquanto essa flag for verdadeira, e apenas em um layout de dispositivo móvel. Enquanto a flag for falsa, o cliente principal usa como padrão a configuração de nível de conta para animação de emojis, e um padrão móvel fixo para reprodução automática de GIFs e animação de figurinhas
5 A mesma enumeração de animate_stickers no objeto de configurações do usuário. Este campo é o substituto local para dispositivos móveis
6 O CSS completo do tema personalizado sincronizado da conta, armazenado inline. Um cliente que optou por não sincronizar seu tema aplica um tema local em vez disso e reemite este valor inalterado, para que não sobrescreva o valor nos dispositivos que o sincronizam
7 Um multiplicador, onde 1 não é dimensionado. Não usado pelo cliente principal
8 Um multiplicador, onde 1 é a taxa de fala não modificada
Os números de campo 42 e 43 são reservados, juntamente com os nomes attachment_media_dimension_size e embed_media_dimension_size. Nenhum dos números pode ser reutilizado.
Modos do indicador de digitação no canal
Seção intitulada “Modos do indicador de digitação no canal”| Valor | Nome | Descrição |
|---|---|---|
| 0 | CHANNEL_TYPING_INDICATOR_MODE_UNSPECIFIED | Nenhum modo explícito é selecionado |
| 1 | CHANNEL_TYPING_INDICATOR_MODE_AVATARS | Mostrar usuários digitando como avatares |
| 2 | CHANNEL_TYPING_INDICATOR_MODE_INDICATOR_ONLY | Mostrar um indicador de digitação sem avatares |
| 3 | CHANNEL_TYPING_INDICATOR_MODE_HIDDEN | Ocultar o indicador de digitação |
Modos de pré-visualização de mensagem direta
Seção intitulada “Modos de pré-visualização de mensagem direta”| Valor | Nome | Descrição |
|---|---|---|
| 0 | DM_MESSAGE_PREVIEW_MODE_UNSPECIFIED | Nenhum modo explícito é selecionado |
| 1 | DM_MESSAGE_PREVIEW_MODE_ALL | Mostrar pré-visualizações para todas as mensagens diretas |
| 2 | DM_MESSAGE_PREVIEW_MODE_UNREAD_ONLY | Mostrar pré-visualizações apenas para mensagens diretas não lidas |
| 3 | DM_MESSAGE_PREVIEW_MODE_NONE | Ocultar pré-visualizações de mensagens diretas |
HDR display modes
Seção intitulada “HDR display modes”| Valor | Nome | Descrição |
|---|---|---|
| 0 | HDR_DISPLAY_MODE_UNSPECIFIED | Nenhum modo explícito é selecionado |
| 1 | HDR_DISPLAY_MODE_FULL | Exibir mídia HDR sem limitar seu alcance |
| 2 | HDR_DISPLAY_MODE_STANDARD | Limitar mídia HDR a um alcance dinâmico padrão |
Objeto de substituições de acessibilidade
Seção intitulada “Objeto de substituições de acessibilidade”O campo accessibility_overrides não é usado pelo cliente principal. Use os campos mobile_*_overridden e os campos mobile_*_value correspondentes nas configurações de acessibilidade.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| gif_autoplay_dirty | bool | Flag de alteração da reprodução automática de GIFs |
| animate_emoji_dirty | bool | Flag de alteração da animação de emojis |
| animate_stickers_dirty | bool | Flag de alteração da animação de figurinhas |
Objeto de configurações de pré-visualização de texto
Seção intitulada “Objeto de configurações de pré-visualização de texto”O campo textual_preview controla a quebra de linha na pré-visualização inline de um anexo de texto.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| wrap_text | bool | Se linhas longas são quebradas em uma pré-visualização de texto |
Objeto de estatísticas de uso
Seção intitulada “Objeto de estatísticas de uso”O objeto de estatísticas de uso registra o uso do seletor para uma expressão ou um meme. É o valor do mapa do campo usage em todo grupo de estado de seletores, para que os seletores de emojis, figurinhas e memes classifiquem suas entradas a partir do mesmo formato.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| count | uint32 | Número de usos registrados |
| last_used_ms1 | int64 | Timestamp Unix em milissegundos do uso mais recente |
1 Milissegundos desde 1970-01-01T00:00:00Z
Objeto de estado do seletor de emojis
Seção intitulada “Objeto de estado do seletor de emojis”O campo emoji_picker registra o uso de emojis, favoritos e categorias recolhidas do seletor.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| usage1 2 | map[string, objeto de estatística de uso] | Uso indexado pela chave de uso do emoji |
| favorite_emoji_ids1 | array[string] | Chaves de uso de emojis favoritos na ordem de exibição |
| collapsed_category_ids | array[string] | Identificadores de categoria de emojis recolhidas |
1 O cliente principal escreve unicode:<unique name> para um emoji padrão e custom:<guild id>:<emoji id> para um emoji personalizado
2 O cliente principal descarta uma chave que não corresponde a nenhuma forma quando lê o snapshot e não aplica esse filtro a favorite_emoji_ids
Objeto de estado do seletor de figurinhas
Seção intitulada “Objeto de estado do seletor de figurinhas”O campo sticker_picker registra o uso de figurinhas, favoritos e categorias recolhidas do seletor.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| usage | map[string, objeto de estatística de uso] | Uso indexado pelo identificador de figurinha |
| favorite_sticker_ids | array[string] | Identificadores de figurinhas favoritas na ordem de exibição |
| collapsed_category_ids | array[string] | Identificadores de categorias de figurinhas recolhidas |
Objeto de estado do seletor de memes
Seção intitulada “Objeto de estado do seletor de memes”O campo memes_picker registra o uso de memes, favoritos e categorias recolhidas do seletor. Os próprios memes pertencem à coleção de memes da conta e não são armazenados aqui.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| usage | map[string, objeto de estatística de uso] | Uso indexado pelo identificador de meme |
| favorite_meme_ids | array[string] | Identificadores de memes favoritos na ordem de exibição |
| collapsed_category_ids | array[string] | Identificadores de categorias de memes recolhidas |
Objeto de estado de emojis
Seção intitulada “Objeto de estado de emojis”O campo emoji contém o tom de pele selecionado.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| skin_tone1 | string | Modificador de tom de pele Unicode selecionado |
1 Um dos cinco modificadores de tom de pele Unicode, de U+1F3FB a U+1F3FF. A string vazia seleciona o tom padrão
Objeto de configurações de layout de emojis e figurinhas
Seção intitulada “Objeto de configurações de layout de emojis e figurinhas”O campo emoji_sticker_layout controla como os seletores de emojis e figurinhas organizam seus conteúdos.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| emoji_layout | int32 | Layout do seletor de emojis |
| sticker_view_mode | int32 | Modo de exibição do seletor de figurinhas |
Layouts do seletor de emojis
Seção intitulada “Layouts do seletor de emojis”| Valor | Nome | Descrição |
|---|---|---|
| 0 | EMOJI_PICKER_LAYOUT_UNSPECIFIED | Nenhum layout explícito é selecionado |
| 1 | EMOJI_PICKER_LAYOUT_LIST | Exibir emojis em um layout de lista |
| 2 | EMOJI_PICKER_LAYOUT_GRID | Exibir emojis em um layout de grade |
Modos de exibição do seletor de figurinhas
Seção intitulada “Modos de exibição do seletor de figurinhas”| Valor | Nome | Descrição |
|---|---|---|
| 0 | STICKER_PICKER_VIEW_MODE_UNSPECIFIED | Nenhum modo de exibição explícito é selecionado |
| 1 | STICKER_PICKER_VIEW_MODE_COZY | Exibir figurinhas no layout espaçoso |
| 2 | STICKER_PICKER_VIEW_MODE_COMPACT | Exibir figurinhas no layout compacto |
Objeto de configurações de GIFs favoritos
Seção intitulada “Objeto de configurações de GIFs favoritos”O campo favorite_gifs armazena os GIFs que a conta favoritou, juntamente com os metadados necessários para renderizar um sem outra pesquisa. Favoritar um GIF grava uma entrada aqui ou grava um meme na coleção de memes da conta, nunca ambos, e save_as_saved_media seleciona qual deles.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| entries1 | array[objeto de entrada de GIF favorito] | GIFs favoritos na ordem de exibição |
| save_as_saved_media2 | bool | Se favoritar um GIF salva um meme na coleção de memes da conta |
| seen_first_time_prompt | bool | Se o aviso de primeira vez para favoritos foi exibido |
1 O cliente principal trata url como a identidade de uma entrada e se recusa a acrescentar uma segunda entrada com uma url já presente
2 Enquanto isso for verdadeiro, o cliente principal deixa as entradas em entries inalteradas e favorita usando a opção Salvar meme da mensagem
Objeto de entrada de GIF favorito
Seção intitulada “Objeto de entrada de GIF favorito”Uma entrada descreve um GIF favoritado. Seus campos espelham o objeto de entrada de GIF resolvido retornado por Resolver URLs de GIF, para que um cliente possa armazenar uma entrada resolvida sem remodelá-la.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| url | string | URL de origem do GIF |
| proxy_url | string | URL de Media Proxy para o formato de pré-visualização |
| width1 | uint32 | Largura do formato de pré-visualização em pixels |
| height1 | uint32 | Altura do formato de pré-visualização em pixels |
| media | map[string, objeto de formato de mídia de GIF favorito] | Formatos indexados pelo nome do formato de mídia do GIF |
| content_type2 | string | Tipo de mídia da mídia referenciada por proxy_url |
| placeholder3 | string | Placeholder thumbhash compacto |
1 Zero quando as dimensões não puderem ser determinadas
2 A string vazia significa que o tipo é desconhecido, o que o cliente lê como image/gif
3 A string vazia significa que o Media Proxy não emitiu nenhum
Objeto de formato de mídia de GIF favorito
Seção intitulada “Objeto de formato de mídia de GIF favorito”Um descritor aborda uma codificação de um GIF favoritado. Ele espelha o objeto de formato de mídia de GIF.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| src | string | URL direta de mídia deste formato |
| proxy_src | string | URL de Media Proxy deste formato |
| width | uint32 | Largura deste formato em pixels |
| height | uint32 | Altura deste formato em pixels |
Objeto de estado de favoritos
Seção intitulada “Objeto de estado de favoritos”O campo favorites armazena canais favoritos, as categorias em que estão agrupados e o estado de exibição desse agrupamento. Essas categorias são privadas para a exibição de favoritos.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| channels | array[objeto de canal favorito] | Canais favoritos |
| categories | array[objeto de categoria favorita] | Categorias favoritas |
| collapsed_category_ids | array[string] | Identificadores de categorias favoritas recolhidas |
| hide_muted_channels | bool | Se canais silenciados estão ocultos dos favoritos |
| muted | bool | Se a coleção de favoritos está silenciada |
Objeto de canal favorito
Seção intitulada “Objeto de canal favorito”Uma entrada marca um canal como favorito. Identificadores de canal e guilda aqui são strings que contêm a forma decimal de um snowflake. Nada remove uma entrada quando a conta perde o acesso ao canal, então uma entrada pode referenciar um canal que a conta não pode mais resolver.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| channel_id | string | ID do canal |
| guild_id | string | ID da guilda |
| parent_id?1 | string | Categoria favorita sob a qual o canal está agrupado |
| position2 | int32 | Posição em toda a lista de favoritos |
| nickname? | string | Apelido do canal atribuído pelo usuário |
1 O id de uma categoria favorita, não um canal de categoria da guilda. Um valor ausente agrupa o canal fora de qualquer categoria
2 Uma ordem única sobre cada canal favorito. O cliente principal renumera a lista inteira a partir de 0 sempre que uma entrada é removida ou movida, e anexa uma nova entrada na contagem de entradas atual sem renumerar
Objeto de categoria favorita
Seção intitulada “Objeto de categoria favorita”Uma entrada nomeia um agrupamento na exibição de favoritos. O cliente escolhe o identificador, então não é um snowflake e o Decoding Chat nunca o resolve.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| id | string | Identificador da categoria |
| name | string | Nome da categoria |
| position1 | int32 | Posição da categoria |
1 Renumerada a partir de 0 em cada categoria sempre que uma é removida ou movida
Objeto de configurações de menções recentes
Seção intitulada “Objeto de configurações de menções recentes”O campo recent_mentions controla quais menções aparecem na exibição de menções recentes. Cada filtro definido como falso remove suas menções, e uma menção aparece apenas quando nenhum filtro a remove. include_guilds testa o canal em que a menção está.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| include_everyone?1 | bool | Se as menções @everyone devem ser incluídas |
| include_roles?1 | bool | Se as menções de cargos devem ser incluídas |
| include_guilds?1 2 | bool | Se menções em um canal da guilda devem ser incluídas |
1 O cliente principal usa como padrão todos os filtros como verdadeiro e omite o campo enquanto ele mantiver esse padrão. Um cliente que lê um valor ausente como o zero do Protobuf filtra menções que a conta espera ver
2 Falso mantém menções de mensagens diretas e descarta todas as menções cujo canal pertença a uma guilda
Objeto de preferências da barra lateral
Seção intitulada “Objeto de preferências da barra lateral”O campo sidebar armazena o estado de exibição da barra lateral de mensagens diretas.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| inline_dms_collapsed | bool | Se a seção inline de mensagens diretas está recolhida |
| show_collapsed_unread_dms_badge?1 | bool | Se a seção recolhida mostra um emblema (badge) de mensagem direta não lida |
| show_incoming_friend_request_badge?1 | bool | Se a barra lateral mostra um emblema (badge) de solicitação de amizade recebida |
1 O cliente principal usa como padrão verdadeiro e omite o campo enquanto ele mantiver esse padrão, então um cliente que lê um valor ausente como o zero do Protobuf oculta um emblema que a conta espera ver
Objeto de estado da lista de membros
Seção intitulada “Objeto de estado da lista de membros”O campo member_list armazena se o painel da lista de membros está aberto.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| members_open? | bool | Se a lista de membros está aberta |
Objeto de estado de canais não lidos
Seção intitulada “Objeto de estado de canais não lidos”O campo unread_channels armazena quais canais estão recolhidos na exibição de não lidos.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| collapsed_channel_ids | array[string] | IDs de canais recolhidos no formato decimal |
Objeto de estado de frequência e recência de menções
Seção intitulada “Objeto de estado de frequência e recência de menções”O campo mention_frecency registra com que frequência e com que recência a conta mencionou cada usuário, um conjunto de registros por guilda, para que um cliente possa classificar o preenchimento automático de menções sem uma chamada ao servidor. Ele aninha as mensagens MentionFrecencyState.Scope e MentionFrecencyState.Entry.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| scopes | array[objeto de escopo de frequência e recência de menção] | Registros de menção por guilda |
Objeto de escopo de frequência e recência de menção
Seção intitulada “Objeto de escopo de frequência e recência de menção”Um escopo contém todos os registros de menção para uma guilda. É declarado como MentionFrecencyState.Scope.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| guild_id | string | ID da guilda no formato decimal |
| entries | array[objeto de entrada de frequência e recência de menção] | Registros de menções de usuários para a guilda |
Objeto de entrada de frequência e recência de menção
Seção intitulada “Objeto de entrada de frequência e recência de menção”Uma entrada conta as menções de um usuário dentro de um escopo. É declarada como MentionFrecencyState.Entry.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| user_id | string | ID do usuário mencionado no formato decimal |
| count | uint32 | Número de menções registradas |
| last_at_ms1 | int64 | Timestamp Unix em milissegundos da menção mais recente |
1 Milissegundos desde 1970-01-01T00:00:00Z
Objeto de dispensas de avisos
Seção intitulada “Objeto de dispensas de avisos”O campo nagbars armazena avisos de toda a conta dispensados como booleanos e avisos por alvo dispensados como mapas. O número do campo 13 não está atribuído.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| ios_install | bool | Se o aviso de instalação no iOS está dispensado |
| pwa_install | bool | Se o aviso de instalação do aplicativo web progressivo (PWA) está dispensado |
| push_notification | bool | Se o aviso de notificação push está dispensado |
| desktop_notification | bool | Se o aviso de notificação no desktop está dispensado |
| premium_grace_period | bool | Se o aviso de período de tolerância premium está dispensado |
| premium_expired | bool | Se o aviso de expiração do premium está dispensado |
| premium_onboarding | bool | Se o aviso de integração (onboarding) do premium está dispensado |
| premium_trial_expiring | bool | Se o aviso de expiração da avaliação premium está dispensado |
| gift_inventory | bool | Se o aviso de inventário de presentes está dispensado |
| desktop_download | bool | Se o aviso de download para desktop está dispensado |
| guild_membership_cta | bool | Se o aviso de chamada à ação de associação à guilda está dispensado |
| visionary_mfa1 | bool | Se o aviso de MFA do premium vitalício está dispensado |
| legacy_phone_unlink | bool | Se o aviso legado de desvinculação de telefone está dispensado |
| pending_bulk_deletion | map[string, bool] | Estado de dispensa indexado pelo identificador de exclusão em massa pendente |
| invites_disabled2 | map[string, bool] | Estado de dispensa indexado por ID da guilda para avisos de convites desativados |
| guild_mfa_requirement2 | map[string, bool] | Estado de dispensa indexado por ID da guilda para avisos de requisito de MFA |
1 O aviso que este dispensa é mostrado apenas para uma conta que possui premium vitalício sem um autenticador MFA registrado
2 Indexado pela forma decimal de um snowflake de guilda. Uma chave ausente é lida como não dispensada
Objeto de promoções dispensadas
Seção intitulada “Objeto de promoções dispensadas”O campo dismissed_upsells armazena as promoções (upsells) dispensadas.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| picker_premium | bool | Se a promoção do seletor premium está dispensada |
Objeto de acordos de conteúdo adulto da guilda
Seção intitulada “Objeto de acordos de conteúdo adulto da guilda”O campo guild_nsfw_agreements armazena as confirmações de conteúdo adulto. A aceitação é registrada por alvo, então aceitar por uma guilda não registra a aceitação por suas categorias ou canais.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| agreed_channel_ids | array[string] | IDs de canais cujo aviso de conteúdo adulto foi aceito |
| agreed_guild_ids | array[string] | IDs de guildas cujo aviso de conteúdo adulto foi aceito |
| agreed_category_ids | array[string] | IDs de categorias cujo aviso de conteúdo adulto foi aceito |
Objeto de estado do que há de novo
Seção intitulada “Objeto de estado do que há de novo”O campo whats_new armazena a entrada de atualização dispensada mais recentemente.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| last_dismissed_entry_id? | string | ID da entrada de atualização dispensada mais recentemente |
Objeto de preferências de privacidade
Seção intitulada “Objeto de preferências de privacidade”O campo privacy armazena o comportamento de privacidade do cliente. O Decoding Chat não lê nada disso, e nada disso altera os campos de privacidade do objeto de configurações do usuário, os quais controlam o que o próprio Decoding Chat divulga sobre a conta.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| disable_stream_previews1 | bool | Se as pré-visualizações de stream estão desativadas |
| show_active_now? | bool | Se a visualização “ativo agora” é exibida |
| preupload_message_attachments? | bool | Se os anexos da mensagem são carregados antes do envio da mensagem |
1 O único campo neste grupo cujo efeito alcança além da própria visão da conta. Enquanto ele é verdadeiro, o cliente principal não carrega o quadro de pré-visualização do stream, portanto, nenhum outro visualizador recebe um
Objeto de substituições de spam de usuário local
Seção intitulada “Objeto de substituições de spam de usuário local”O campo local_spam_overrides armazena as classificações locais do cliente que substituem a flag pública de usuário SPAMMER apenas na exibição. O Decoding Chat não lê essas listas nem altera nenhuma flag por causa delas.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| spammer_user_ids | array[string] | IDs de usuários apresentados localmente como spammers |
| not_spammer_user_ids1 | array[string] | IDs de usuários apresentados localmente como não sendo spammers |
1 Esta lista ganha sobre spammer_user_ids e sobre a flag SPAMMER, então um ID de usuário presente em ambas as listas é apresentado como não sendo spammer
Objeto de configurações de som
Seção intitulada “Objeto de configurações de som”O campo sound controla a reprodução de som, o volume mestre e as substituições por som.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| all_sounds_disabled | bool | Se todos os sons do aplicativo estão desativados |
| master_volume?1 | double | Volume de som mestre |
| disabled_sounds | map[string, bool] | Estado de desativação indexado pelo identificador de som |
| sound_overrides2 | map[string, double] | Substituição de volume indexada pelo identificador de som |
1 Uma porcentagem. O cliente principal a restringe ao intervalo de 0 a 200, trata 100 como o padrão e omite o campo inteiramente enquanto mantém o padrão
2 Uma porcentagem na mesma escala e o volume completo para aquele único som
Identificadores de som
Seção intitulada “Identificadores de som”Ambos os mapas são indexados por uma string arbitrária e o Decoding Chat armazena e retorna qualquer chave inalterada. O cliente principal usa os identificadores abaixo, e o cliente principal ignora uma chave fora deste conjunto.
| Valor | Descrição |
|---|---|
| deaf | Som de ensurdecer |
| undeaf | Som de desensurdecer |
| mute | Som de silenciar |
| unmute | Som de dessilenciar |
| message | Som de notificação de mensagem |
| direct-message | Som de notificação de mensagem direta |
| same-channel-message | Som de notificação para o canal já em visualização |
| incoming-ring | Som de chamada recebida |
| user-join | Som de entrada de participante de voz |
| user-leave | Som de saída de participante de voz |
| user-move | Som de movimento de participante de voz |
| viewer-join | Som de entrada de visualizador de stream |
| viewer-leave | Som de saída de visualizador de stream |
| voice-disconnect | Som de desconexão de voz |
| camera-on | Som de câmera ativada |
| camera-off | Som de câmera desativada |
| screen-share-start | Som de início de compartilhamento de tela |
| screen-share-stop | Som de parada de compartilhamento de tela |
Objeto de configurações de verificação ortográfica
Seção intitulada “Objeto de configurações de verificação ortográfica”O campo spellcheck controla a verificação ortográfica, os idiomas selecionados e o dicionário pessoal.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| enabled? | bool | Se a verificação ortográfica está ativada |
| languages1 | array[string] | Idiomas selecionados de verificação ortográfica |
| personal_dictionary1 | array[string] | Palavras no dicionário pessoal |
| auto_detect? | bool | Se os idiomas de verificação ortográfica são detectados automaticamente |
| engine?2 | string | Identificador do mecanismo de verificação ortográfica selecionado |
1 O cliente principal descarta uma entrada vazia e uma entrada duplicada quando lê o snapshot
2 The first-party client recognises auto, system, and hunspell, and ignores any other value
Search engine settings object
Seção intitulada “Search engine settings object”The search_engines field stores the selected external providers. Every identifier names a provider the client defines, and Fluxer neither validates nor resolves one.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| text_search_engine_id? | string | Text search engine identifier |
| reverse_image_search_engine_id? | string | Reverse image search engine identifier |
| translation_provider_id? | string | Translation provider identifier |
Permission layout settings object
Seção intitulada “Permission layout settings object”The permission_layout field controls the layout of the permission editor.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| layout | int32 | Permission layout mode |
| grid | int32 | Permission grid mode |
Permission layout modes
Seção intitulada “Permission layout modes”| Value | Name | Description |
|---|---|---|
| 0 | PERMISSION_LAYOUT_MODE_UNSPECIFIED | No explicit layout is selected |
| 1 | PERMISSION_LAYOUT_MODE_COMFY | Use the roomy permission layout |
| 2 | PERMISSION_LAYOUT_MODE_DENSE | Use the dense permission layout |
Permission grid modes
Seção intitulada “Permission grid modes”| Value | Name | Description |
|---|---|---|
| 0 | PERMISSION_GRID_MODE_UNSPECIFIED | No explicit grid mode is selected |
| 1 | PERMISSION_GRID_MODE_SINGLE | Show one permission category at a time |
| 2 | PERMISSION_GRID_MODE_GRID | Show permission categories in a grid |
Guild member layout settings object
Seção intitulada “Guild member layout settings object”The guild_member_layout field controls how the guild member view presents its members.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| mode | int32 | Guild member view mode |
Guild member view modes
Seção intitulada “Guild member view modes”| Value | Name | Description |
|---|---|---|
| 0 | GUILD_MEMBER_VIEW_MODE_UNSPECIFIED | No explicit view mode is selected |
| 1 | GUILD_MEMBER_VIEW_MODE_TABLE | Display guild members in a table |
| 2 | GUILD_MEMBER_VIEW_MODE_GRID | Display guild members in a grid |
Guild folder expanded state object
Seção intitulada “Guild folder expanded state object”The guild_folders field stores which guild folders are expanded in the sidebar. The folders themselves are guild_folders on the user settings object.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| expanded_folder_ids1 | array[fixed64] | Expanded guild folder identifiers |
1 Each value is the id of a guild folder object. An identifier for a folder the layout no longer holds stays in the array and has no effect
Hidden guild list buttons object
Seção intitulada “Hidden guild list buttons object”The hidden_guild_buttons field stores which guild list controls are hidden.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| download_button | bool | Whether the download button is hidden |
| help_button | bool | Whether the help button is hidden |
Keyboard mode intro state object
Seção intitulada “Keyboard mode intro state object”The keyboard_mode_intro field stores whether the keyboard navigation introduction has been seen.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| seen | bool | Whether the keyboard navigation introduction was seen |
Input monitoring prompts state object
Seção intitulada “Input monitoring prompts state object”The input_monitoring field stores whether the input monitoring prompt has been seen. No live surface reads or writes it.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| seen_cta | bool | Whether the input monitoring call to action was seen |
Voice prompts state object
Seção intitulada “Voice prompts state object”The voice_prompts field stores which voice confirmation prompts the account has suppressed.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| skip_hide_own_camera_confirm | bool | Whether hiding the caller’s own camera skips confirmation |
| skip_hide_own_screenshare_confirm | bool | Whether hiding the caller’s own screen share skips confirmation |
Sudo prompt state object
Seção intitulada “Sudo prompt state object”The sudo_prompt field stores the verification method the account used most recently, so a client can preselect it the next time sudo mode is required.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| last_used_mfa_method?1 | int32 | MFA method most recently used for sudo verification |
1 The assigned values correspond to totp and webauthn in mfa_method of the sudo verification object
MFA methods
Seção intitulada “MFA methods”| Value | Name | Description |
|---|---|---|
| 0 | MFA_METHOD_UNSPECIFIED | No method is recorded |
| 1 | MFA_METHOD_TOTP | Time-based one-time password |
| 3 | MFA_METHOD_WEBAUTHN | WebAuthn credential |
The value 2 is not assigned.
Keybind settings object
Seção intitulada “Keybind settings object”The keybinds field stores custom keybinds and voice transmit behaviour.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| custom_keybinds | array[custom keybind object] | Custom keybinds |
| transmit_mode1 | string | Voice transmit mode |
| push_to_talk_release_delay_ms?2 | uint32 | Push-to-talk release delay in milliseconds |
1 The first-party client recognises voice_activity and voice_push_to_talk, and falls back to voice_activity for the empty string and for any other value
2 Read only while transmit_mode is voice_push_to_talk. The first-party client clamps it to the range 20 through 2000, treats 20 as the default, and omits the field entirely while it holds the default
Custom keybind object
Seção intitulada “Custom keybind object”One entry binds one input combination to one action. The entry has its own enabled flag and its combination has another. The first-party client gates a custom keybind on the entry’s flag alone, and reads enabled on a combination only for a built-in default binding.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| id1 | string | Keybind identifier |
| action?2 | string | Action performed by the keybind |
| combo? | keybind combo object | Input combination |
| enabled | bool | Whether the keybind is enabled |
1 Chosen by the client. The first-party client generates a replacement when it reads an entry whose id is the empty string
2 An action name the client defines. The first-party client keeps an entry whose action it does not recognise and clears action
Keybind combo object
Seção intitulada “Keybind combo object”One combination describes the key, modifiers, and buttons that trigger a keybind. The modifier flags are independent of each other, and ctrl_or_meta is a modifier of its own.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| key | string | Key value |
| code? | string | Physical key code |
| ctrl_or_meta1 | bool | Whether Control or Meta is required according to the platform |
| ctrl | bool | Whether Control is required |
| alt | bool | Whether Alt is required |
| shift | bool | Whether Shift is required |
| meta | bool | Whether Meta is required |
| global? | bool | Whether the combination is registered globally |
| enabled?2 | bool | Whether the combination is active |
| modifier_only | bool | Whether the combination contains only modifier keys |
| both_sides | bool | Whether either side of a paired modifier is accepted |
| mouse_button? | uint32 | Mouse button number |
| gamepad_button? | uint32 | Gamepad button number |
1 Resolves to Meta on macOS and to Control on every other platform, so one stored combination expresses the platform-native accelerator
2 An absent value here reads as active, the opposite of the default for enabled on the custom keybind that owns the combination
Chat input settings object
Seção intitulada “Chat input settings object”The chat_input field controls message composer behaviour.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| convert_emoticons? | bool | Whether emoticons are converted to emoji |
Reaction emoji object
Seção intitulada “Reaction emoji object”The double_tap_reaction field stores the emoji that a double tap on a message adds as a reaction. It has the same shape as the reaction emoji object. A Unicode emoji sets only name, and a custom emoji sets both id and name.
Structure
Seção intitulada “Structure”| Field | Type | Description |
|---|---|---|
| id?1 | string | Custom emoji ID, absent for a Unicode emoji |
| name | string | Unicode emoji, or the custom emoji’s name |
1 The decimal form of a snowflake. Fluxer never resolves it, so it can name a custom emoji the account can no longer use

