{
"id": "social.colibri.beta.actor.defs",
"defs": {
"mute": {
"type": "object",
"required": [
"subject",
"createdAt"
],
"properties": {
"subject": {
"refs": [
"#mutedActor",
"#mutedChannel"
],
"type": "union",
"closed": true,
"description": "What is muted. A user or a community is named by DID, a channel by its space."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "When the mute was created."
}
},
"description": "A muted subject."
},
"status": {
"type": "object",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 32,
"description": "The status text."
},
"emoji": {
"type": "string",
"description": "An emoji shown beside the status."
}
},
"description": "A user's status line."
},
"presence": {
"type": "object",
"required": [
"onlineState"
],
"properties": {
"voice": {
"ref": "#voiceState",
"type": "ref",
"description": "Where the user is connected for voice, if anywhere."
},
"status": {
"ref": "#status",
"type": "ref",
"description": "The user's status line."
},
"onlineState": {
"type": "string",
"description": "Derived online state.",
"knownValues": [
"online",
"away",
"dnd",
"offline"
]
}
},
"description": "A user's live, off-protocol state."
},
"mutedActor": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "The muted user or community."
}
},
"description": "A muted user or community."
},
"voiceState": {
"type": "object",
"required": [
"channel"
],
"properties": {
"muted": {
"type": "boolean",
"description": "Whether the user's microphone is muted, for any reason."
},
"channel": {
"type": "string",
"format": "space-ref",
"description": "The voice channel the user is connected to."
},
"deafened": {
"type": "boolean",
"description": "Whether the user has incoming audio silenced, for any reason."
},
"serverMuted": {
"type": "boolean",
"description": "Whether a moderator muted them. When this is true they cannot unmute themselves, and a client must not offer them the control."
},
"serverDeafened": {
"type": "boolean",
"description": "Whether a moderator deafened them. When this is true they cannot undeafen themselves."
}
},
"description": "A user's voice connection."
},
"preferences": {
"type": "object",
"required": [
"notificationLevel",
"communityOrder",
"mutes",
"gifFavorites"
],
"properties": {
"mutes": {
"type": "array",
"items": {
"ref": "#mute",
"type": "ref"
},
"description": "Subjects the user has muted."
},
"gifFavorites": {
"type": "array",
"items": {
"ref": "social.colibri.beta.embed.defs#gifView",
"type": "ref"
},
"description": "GIFs saved from the picker, stored whole."
},
"communityOrder": {
"type": "array",
"items": {
"type": "string",
"format": "did",
"description": "A community."
},
"description": "Communities in preferred sidebar order."
},
"notificationLevel": {
"type": "string",
"description": "Which messages produce a notification.",
"knownValues": [
"all",
"mentionsAndReplies"
]
}
},
"description": "The authenticated user's own settings, as the AppView currently holds them."
},
"profileView": {
"type": "object",
"required": [
"did",
"handle",
"displayName",
"isBot",
"syncBluesky"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "The user's DID."
},
"isBot": {
"type": "boolean",
"description": "Whether the account is labelled as an automated account."
},
"theme": {
"ref": "social.colibri.beta.actor.profile#theme",
"type": "ref",
"description": "Colibri-only profile theming, read from the profile record even when the mirrored fields come from Bluesky."
},
"avatar": {
"type": "string",
"format": "uri",
"description": "URL of the user's avatar, served by this AppView's blob proxy."
},
"banner": {
"type": "string",
"format": "uri",
"description": "URL of the user's profile banner, served by this AppView's blob proxy."
},
"handle": {
"type": "string",
"format": "handle",
"description": "The user's handle, or 'handle.invalid' when it does not resolve."
},
"presence": {
"ref": "#presence",
"type": "ref",
"description": "Live presence, when the AppView is tracking any."
},
"description": {
"type": "string",
"description": "Resolved bio."
},
"displayName": {
"type": "string",
"description": "Resolved display name, falling back to the handle."
},
"syncBluesky": {
"type": "boolean",
"description": "Whether the mirrored profile fields come from app.bsky.actor.profile."
},
"preferredBadge": {
"type": "string",
"description": "Label value of the badge the user chose to display."
}
},
"description": "A Colibri user as the AppView serves them: identity, resolved profile, and presence."
},
"mutedChannel": {
"type": "object",
"required": [
"channel"
],
"properties": {
"channel": {
"type": "string",
"format": "space-ref",
"description": "The muted channel's space."
}
},
"description": "A muted channel. Muting a channel silences it without leaving the community it belongs to."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}