123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- {
- "$schema": "http://json-schema.org/draft-07/schema",
- "$id": "https://schemas.premid.app/metadata/1.9",
- "title": "Metadata",
- "type": "object",
- "description": "Metadata that describes a presence.",
- "definitions": {
- "user": {
- "type": "object",
- "description": "User information.",
- "properties": {
- "name": {
- "type": "string",
- "description": "The name of the user."
- },
- "id": {
- "type": "string",
- "description": "The Discord snowflake of the user.",
- "pattern": "^\\d+$"
- }
- },
- "additionalProperties": false,
- "required": ["name", "id"]
- }
- },
- "properties": {
- "$schema": {
- "$comment": "This is required otherwise the schema will fail itself when it is applied to a document via $schema. This is optional so that validators that use this schema don't fail if the metadata doesn't have the $schema property.",
- "type": "string",
- "description": "The metadata schema URL."
- },
- "author": {
- "$ref": "#/definitions/user",
- "description": "The author of this presence."
- },
- "contributors": {
- "type": "array",
- "description": "Any extra contributors to this presence.",
- "items": {
- "$ref": "#/definitions/user"
- }
- },
- "service": {
- "type": "string",
- "description": "The service this presence is for."
- },
- "altnames": {
- "type": "array",
- "description": "Alternative names for the service.",
- "items": {
- "type": "string",
- "description": "An alternative name."
- },
- "minItems": 1
- },
- "description": {
- "type": "object",
- "description": "A description of the presence in multiple languages.",
- "propertyNames": {
- "type": "string",
- "description": "The language key. The key must be languagecode(_REGIONCODE).",
- "pattern": "^[a-z]{2}(?:_(?:[A-Z]{2}|[0-9]{1,3}))?$"
- },
- "patternProperties": {
- "^[a-z]{2}(?:_(?:[A-Z]{2}|[0-9]{1,3}))?$": {
- "type": "string",
- "description": "The description of the presence in the key's language."
- }
- },
- "additionalProperties": false,
- "required": ["en"]
- },
- "url": {
- "type": ["string", "array"],
- "description": "The service's website URL, or an array of URLs. Protocols should not be added.",
- "pattern": "^(([a-z0-9-]+\\.)*[0-9a-z_-]+(\\.[a-z]+)+|(\\d{1,3}\\.){3}\\d{1,3}|localhost)$",
- "items": {
- "type": "string",
- "description": "One of the service's website URLs.",
- "pattern": "^(([a-z0-9-]+\\.)*[0-9a-z_-]+(\\.[a-z]+)+|(\\d{1,3}\\.){3}\\d{1,3}|localhost)$"
- },
- "minItems": 2
- },
- "version": {
- "type": "string",
- "description": "The SemVer version of the presence. Must just be major.minor.patch.",
- "pattern": "^\\d+\\.\\d+\\.\\d+$"
- },
- "logo": {
- "type": "string",
- "description": "The logo of the service this presence is for.",
- "pattern": "^https?://.+\\.(png|jpe?g|gif|webp)$"
- },
- "thumbnail": {
- "type": "string",
- "description": "A thumbnail of the service this presence is for.",
- "pattern": "^https?://.+\\.(png|jpe?g|gif|webp)$"
- },
- "color": {
- "type": "string",
- "description": "The theme color of the service this presence is for. Must be either a 6 digit or a 3 digit hex code.",
- "pattern": "^#([A-Fa-f0-9]{3}){1,2}$"
- },
- "tags": {
- "type": ["array"],
- "description": "The tags for the presence.",
- "items": {
- "type": "string",
- "description": "A tag.",
- "pattern": "^[^A-Z\\s!\"#$%&'()*+,./:;<=>?@\\[\\\\\\]^_`{|}~]+$"
- },
- "minItems": 1
- },
- "category": {
- "type": "string",
- "description": "The category the presence falls under.",
- "enum": ["anime", "games", "music", "socials", "videos", "other"]
- },
- "iframe": {
- "type": "boolean",
- "description": "Whether or not the presence should run in IFrames."
- },
- "readLogs": {
- "type": "boolean",
- "description": "Whether or not the extension should be reading logs."
- },
- "regExp": {
- "type": "string",
- "description": "A regular expression used to match URLs for the presence to inject into."
- },
- "iFrameRegExp": {
- "type": "string",
- "description": "A regular expression used to match IFrames for the presence to inject into."
- },
- "button": {
- "type": "boolean",
- "description": "Controls whether the presence is automatically added when the extension is installed. For partner presences only."
- },
- "warning": {
- "type": "boolean",
- "description": "Shows a warning saying that it requires additional steps for the presence to function correctly."
- },
- "settings": {
- "type": "array",
- "description": "An array of settings the user can change in the presence.",
- "items": {
- "type": "object",
- "description": "A setting.",
- "properties": {
- "id": {
- "type": "string",
- "description": "The ID of the setting."
- },
- "title": {
- "type": "string",
- "description": "The title of the setting. Required only if `multiLanguage` is disabled."
- },
- "icon": {
- "type": "string",
- "description": "The icon of the setting. Required only if `multiLanguage` is disabled.",
- "pattern": "^fa([bsdrlt]|([-](brands|solid|duotone|regular|light|thin))) fa-[0-9a-z-]+$"
- },
- "if": {
- "type": "object",
- "description": "Restrict showing this setting if another setting is the defined value.",
- "propertyNames": {
- "type": "string",
- "description": "The ID of the setting."
- },
- "patternProperties": {
- "": {
- "type": ["string", "number", "boolean"],
- "description": "The value of the setting."
- }
- },
- "additionalProperties": false
- },
- "placeholder": {
- "type": "string",
- "description": "The placeholder for settings that require input. Shown when the input is empty."
- },
- "value": {
- "type": ["string", "number", "boolean"],
- "description": "The default value of the setting. Not compatible with `values`."
- },
- "values": {
- "type": "array",
- "description": "The default values of the setting. Not compatible with `value`.",
- "items": {
- "type": ["string", "number", "boolean"],
- "description": "The value of the setting."
- }
- },
- "multiLanguage": {
- "type": ["string", "boolean", "array"],
- "description": "When false, multi-localization is disabled. When true, strings from the `general.json` file are available for use. When a string, it is the name of a file (excluding .json) of a used language from the localization GitHub repo. When an array of strings, it is all of the file names (excluding .json) of used languages from the localization GitHub repo.",
- "items": {
- "type": "string",
- "description": "The name of a file from the localization GitHub repository."
- }
- }
- },
- "additionalProperties": false
- }
- }
- },
- "additionalProperties": false,
- "required": [
- "author",
- "service",
- "description",
- "url",
- "version",
- "logo",
- "thumbnail",
- "color",
- "tags",
- "category"
- ]
- }
|