online.timtinkers.bot.command
Schema Diff
+39 -108
Compatibility Analysis
Breaking Changes Detected
43 breaking changes, 28 non-breaking changes.
Breaking Changes (43)
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command#commandType" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameter" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameter.description" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameter.name" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameter.required" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameter.type" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameterizedCommand" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command#rngCommand" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command#simpleCommand" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.commandType" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.parameters" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.parameters:items" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.responseFacets" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.responseFacets:items" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.responseTemplate" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.responseTemplateFacets" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.responseTemplateFacets:items" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngMax" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngMin" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngParameter" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngTemplate" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngTemplateFacets" }
- RemovedVertex RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngTemplateFacets:items" }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command#parameter", tgt: "online.timtinkers.bot.command#parameter.description", kind: "prop", name: Some("description") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command#parameter", tgt: "online.timtinkers.bot.command#parameter.name", kind: "prop", name: Some("name") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command#parameter", tgt: "online.timtinkers.bot.command#parameter.required", kind: "prop", name: Some("required") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command#parameter", tgt: "online.timtinkers.bot.command#parameter.type", kind: "prop", name: Some("type") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.commandType", kind: "prop", name: Some("commandType") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.parameters", kind: "prop", name: Some("parameters") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.responseFacets", kind: "prop", name: Some("responseFacets") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.responseTemplate", kind: "prop", name: Some("responseTemplate") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.responseTemplateFacets", kind: "prop", name: Some("responseTemplateFacets") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.rngMax", kind: "prop", name: Some("rngMax") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.rngMin", kind: "prop", name: Some("rngMin") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.rngParameter", kind: "prop", name: Some("rngParameter") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.rngTemplate", kind: "prop", name: Some("rngTemplate") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.rngTemplateFacets", kind: "prop", name: Some("rngTemplateFacets") }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body.parameters", tgt: "online.timtinkers.bot.command:body.parameters:items", kind: "items", name: None }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body.responseFacets", tgt: "online.timtinkers.bot.command:body.responseFacets:items", kind: "items", name: None }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body.responseTemplateFacets", tgt: "online.timtinkers.bot.command:body.responseTemplateFacets:items", kind: "items", name: None }
- RemovedEdge RemovedEdge { src: "online.timtinkers.bot.command:body.rngTemplateFacets", tgt: "online.timtinkers.bot.command:body.rngTemplateFacets:items", kind: "items", name: None }
- ConstraintAdded ConstraintAdded { vertex_id: "online.timtinkers.bot.command:body.globalCooldown", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "online.timtinkers.bot.command:body.userCooldown", sort: "minimum", value: "0" }
Non-Breaking Changes (28)
- AddedVertex AddedVertex { vertex_id: "online.timtinkers.bot.command#default" }
- AddedVertex AddedVertex { vertex_id: "online.timtinkers.bot.command#moderator" }
- AddedVertex AddedVertex { vertex_id: "online.timtinkers.bot.command#permissionLevel" }
- AddedVertex AddedVertex { vertex_id: "online.timtinkers.bot.command#streamer" }
- AddedVertex AddedVertex { vertex_id: "online.timtinkers.bot.command#vip" }
- AddedVertex AddedVertex { vertex_id: "online.timtinkers.bot.command:body.globalCooldown" }
- AddedVertex AddedVertex { vertex_id: "online.timtinkers.bot.command:body.hidden" }
- AddedVertex AddedVertex { vertex_id: "online.timtinkers.bot.command:body.isReply" }
- AddedVertex AddedVertex { vertex_id: "online.timtinkers.bot.command:body.permissions" }
- AddedVertex AddedVertex { vertex_id: "online.timtinkers.bot.command:body.permissions:items" }
- AddedVertex AddedVertex { vertex_id: "online.timtinkers.bot.command:body.userCooldown" }
- AddedEdge AddedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.globalCooldown", kind: "prop", name: Some("globalCooldown") }
- AddedEdge AddedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.hidden", kind: "prop", name: Some("hidden") }
- AddedEdge AddedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.isReply", kind: "prop", name: Some("isReply") }
- AddedEdge AddedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.permissions", kind: "prop", name: Some("permissions") }
- AddedEdge AddedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.userCooldown", kind: "prop", name: Some("userCooldown") }
- AddedEdge AddedEdge { src: "online.timtinkers.bot.command:body.permissions", tgt: "online.timtinkers.bot.command:body.permissions:items", kind: "items", name: None }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command#parameter.required", sort: "default" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command#parameter.name", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command#parameter.name", sort: "minLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command#parameter.description", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.responseTemplate", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.responseTemplate", sort: "maxGraphemes" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.rngTemplate", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.rngTemplate", sort: "maxGraphemes" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command#parameter.type", sort: "enum" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.response", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.response", sort: "maxGraphemes" }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "online.timtinkers.bot.command#commandType" }RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameter" }RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameter.description" }RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameter.name" }RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameter.required" }RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameter.type" }RemovedVertex { vertex_id: "online.timtinkers.bot.command#parameterizedCommand" }RemovedVertex { vertex_id: "online.timtinkers.bot.command#rngCommand" }RemovedVertex { vertex_id: "online.timtinkers.bot.command#simpleCommand" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.commandType" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.parameters" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.parameters:items" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.responseFacets" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.responseFacets:items" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.responseTemplate" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.responseTemplateFacets" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.responseTemplateFacets:items" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngMax" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngMin" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngParameter" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngTemplate" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngTemplateFacets" }RemovedVertex { vertex_id: "online.timtinkers.bot.command:body.rngTemplateFacets:items" }
Added Elements
AddedVertex { vertex_id: "online.timtinkers.bot.command#default" }AddedVertex { vertex_id: "online.timtinkers.bot.command#moderator" }AddedVertex { vertex_id: "online.timtinkers.bot.command#permissionLevel" }AddedVertex { vertex_id: "online.timtinkers.bot.command#streamer" }AddedVertex { vertex_id: "online.timtinkers.bot.command#vip" }AddedVertex { vertex_id: "online.timtinkers.bot.command:body.globalCooldown" }AddedVertex { vertex_id: "online.timtinkers.bot.command:body.hidden" }AddedVertex { vertex_id: "online.timtinkers.bot.command:body.isReply" }AddedVertex { vertex_id: "online.timtinkers.bot.command:body.permissions" }AddedVertex { vertex_id: "online.timtinkers.bot.command:body.permissions:items" }AddedVertex { vertex_id: "online.timtinkers.bot.command:body.userCooldown" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "online.timtinkers.bot.command:body.globalCooldown", sort: "minimum", value: "0" }
- ConstraintAdded ConstraintAdded { vertex_id: "online.timtinkers.bot.command:body.userCooldown", sort: "minimum", value: "0" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.response", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.response", sort: "maxGraphemes" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command#parameter.required", sort: "default" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.responseTemplate", sort: "maxGraphemes" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.responseTemplate", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command#parameter.name", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command#parameter.name", sort: "minLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command#parameter.type", sort: "enum" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command#parameter.description", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.rngTemplate", sort: "maxGraphemes" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "online.timtinkers.bot.command:body.rngTemplate", sort: "maxLength" }
Additional Notes
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command#parameter", tgt: "online.timtinkers.bot.command#parameter.description", kind: "prop", name: Some("description") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command#parameter", tgt: "online.timtinkers.bot.command#parameter.name", kind: "prop", name: Some("name") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command#parameter", tgt: "online.timtinkers.bot.command#parameter.required", kind: "prop", name: Some("required") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command#parameter", tgt: "online.timtinkers.bot.command#parameter.type", kind: "prop", name: Some("type") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.commandType", kind: "prop", name: Some("commandType") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.parameters", kind: "prop", name: Some("parameters") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.responseFacets", kind: "prop", name: Some("responseFacets") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.responseTemplate", kind: "prop", name: Some("responseTemplate") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.responseTemplateFacets", kind: "prop", name: Some("responseTemplateFacets") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.rngMax", kind: "prop", name: Some("rngMax") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.rngMin", kind: "prop", name: Some("rngMin") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.rngParameter", kind: "prop", name: Some("rngParameter") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.rngTemplate", kind: "prop", name: Some("rngTemplate") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.rngTemplateFacets", kind: "prop", name: Some("rngTemplateFacets") }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body.parameters", tgt: "online.timtinkers.bot.command:body.parameters:items", kind: "items", name: None }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body.responseFacets", tgt: "online.timtinkers.bot.command:body.responseFacets:items", kind: "items", name: None }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body.responseTemplateFacets", tgt: "online.timtinkers.bot.command:body.responseTemplateFacets:items", kind: "items", name: None }
- Breaking: RemovedEdge { src: "online.timtinkers.bot.command:body.rngTemplateFacets", tgt: "online.timtinkers.bot.command:body.rngTemplateFacets:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.globalCooldown", kind: "prop", name: Some("globalCooldown") }
- Non-breaking: AddedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.hidden", kind: "prop", name: Some("hidden") }
- Non-breaking: AddedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.isReply", kind: "prop", name: Some("isReply") }
- Non-breaking: AddedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.permissions", kind: "prop", name: Some("permissions") }
- Non-breaking: AddedEdge { src: "online.timtinkers.bot.command:body", tgt: "online.timtinkers.bot.command:body.userCooldown", kind: "prop", name: Some("userCooldown") }
- Non-breaking: AddedEdge { src: "online.timtinkers.bot.command:body.permissions", tgt: "online.timtinkers.bot.command:body.permissions:items", kind: "items", name: None }
1
1
{
2
2
"id": "online.timtinkers.bot.command",
3
3
"defs": {
4
+
"vip": {
5
+
"type": "token",
6
+
"description": "A VIP viewer"
7
+
},
4
8
"main": {
5
9
"key": "tid",
6
10
"type": "record",
7
11
"record": {
8
12
"type": "object",
9
13
"required": [
10
14
"trigger",
11
-
"commandType",
15
+
"response",
12
16
"createdAt"
13
17
],
14
18
"properties": {
15
-
"rngMax": {
16
-
"type": "integer",
17
-
"description": "Maximum value for RNG (inclusive, required for rngCommand type)"
19
+
"hidden": {
20
+
"type": "boolean",
21
+
"description": "Whether the command is hidden from the !commands list"
18
22
},
19
-
"rngMin": {
20
-
"type": "integer",
21
-
"description": "Minimum value for RNG (inclusive, required for rngCommand type)"
23
+
"isReply": {
24
+
"type": "boolean",
25
+
"description": "Whether the bot should reply to the triggering message rather than posting standalone"
22
26
},
23
27
"trigger": {
24
28
"type": "string",
25
29
"maxLength": 50,
26
30
"minLength": 1,
27
31
"description": "The command trigger without prefix (e.g., 'socials', 'hug', 'd6')"
28
32
},
29
33
"response": {
30
34
"type": "string",
31
-
"maxLength": 3000,
32
-
"description": "Static response text (required for simpleCommand type)",
33
-
"maxGraphemes": 300
35
+
"description": "Response text supporting variable substitution ($user, $target, $arg[n], $randomNumber[min,max], etc.). Length is validated at runtime after substitution."
34
36
},
35
37
"createdAt": {
36
38
"type": "string",
37
39
"format": "datetime"
38
40
},
39
-
"parameters": {
40
-
"type": "array",
41
-
"items": {
42
-
"ref": "#parameter",
43
-
"type": "ref"
44
-
},
45
-
"maxLength": 10,
46
-
"minLength": 1,
47
-
"description": "Parameter definitions (required for parameterizedCommand type)"
48
-
},
49
-
"commandType": {
50
-
"ref": "#commandType",
51
-
"type": "ref",
52
-
"description": "The type of command (simple, parameterized, or rng)"
53
-
},
54
41
"description": {
55
42
"type": "string",
56
43
"maxLength": 300,
57
44
"description": "Optional help text describing what the command does"
58
45
},
59
-
"rngTemplate": {
60
-
"type": "string",
61
-
"maxLength": 3000,
62
-
"description": "Template with {result} placeholder for RNG result and optional {paramName} for input (required for rngCommand type)",
63
-
"maxGraphemes": 300
64
-
},
65
-
"rngParameter": {
66
-
"ref": "#parameter",
67
-
"type": "ref",
68
-
"description": "Optional parameter definition for rngCommand type (e.g., target user for 'stinky' command)"
69
-
},
70
-
"responseFacets": {
46
+
"permissions": {
71
47
"type": "array",
72
48
"items": {
73
-
"ref": "place.stream.richtext.facet",
49
+
"ref": "#permissionLevel",
74
50
"type": "ref"
75
51
},
76
-
"description": "Annotations of response text (mentions, URLs, etc)"
77
-
},
78
-
"responseTemplate": {
79
-
"type": "string",
80
-
"maxLength": 3000,
81
-
"description": "Template with {paramName} placeholders (required for parameterizedCommand type)",
82
-
"maxGraphemes": 300
52
+
"maxLength": 10,
53
+
"description": "Roles that are allowed to use this command. If omitted, the command is available to everyone."
83
54
},
84
-
"rngTemplateFacets": {
85
-
"type": "array",
86
-
"items": {
87
-
"ref": "place.stream.richtext.facet",
88
-
"type": "ref"
89
-
},
90
-
"description": "Annotations for RNG template text"
55
+
"userCooldown": {
56
+
"type": "integer",
57
+
"minimum": 0,
58
+
"description": "Per-user cooldown in seconds. 0 means no cooldown."
91
59
},
92
-
"responseTemplateFacets": {
93
-
"type": "array",
94
-
"items": {
95
-
"ref": "place.stream.richtext.facet",
96
-
"type": "ref"
97
-
},
98
-
"description": "Annotations for template text (mentions, URLs, etc). Indices should reference the template string before substitution."
60
+
"globalCooldown": {
61
+
"type": "integer",
62
+
"minimum": 0,
63
+
"description": "Global cooldown in seconds shared across all users. 0 means no cooldown."
99
64
}
100
65
}
101
66
},
102
-
"description": "Record representing a chat bot command. Commands can be simple (static response), parameterized (template-based with arguments), or RNG-based (random number generation)."
67
+
"description": "Record representing a chat bot command. The response field supports variable substitution (e.g. $user, $target, $randomNumber[min,max]) which is resolved at runtime."
103
68
},
104
-
"parameter": {
105
-
"type": "object",
106
-
"required": [
107
-
"name",
108
-
"type"
109
-
],
110
-
"properties": {
111
-
"name": {
112
-
"type": "string",
113
-
"maxLength": 30,
114
-
"minLength": 1,
115
-
"description": "Parameter name used in template (e.g., 'target' for {target})"
116
-
},
117
-
"type": {
118
-
"enum": [
119
-
"string",
120
-
"handle",
121
-
"number"
122
-
],
123
-
"type": "string",
124
-
"description": "Expected parameter type for validation"
125
-
},
126
-
"required": {
127
-
"type": "boolean",
128
-
"default": true,
129
-
"description": "Whether this parameter must be provided"
130
-
},
131
-
"description": {
132
-
"type": "string",
133
-
"maxLength": 200,
134
-
"description": "Help text for this parameter"
135
-
}
136
-
},
137
-
"description": "Definition of a command parameter"
69
+
"default": {
70
+
"type": "token",
71
+
"description": "Any viewer (default permission level)"
72
+
},
73
+
"streamer": {
74
+
"type": "token",
75
+
"description": "The channel owner / streamer"
138
76
},
139
-
"rngCommand": {
77
+
"moderator": {
140
78
"type": "token",
141
-
"description": "A command that generates a random number within a specified range and formats it using a template"
79
+
"description": "A channel moderator"
142
80
},
143
-
"commandType": {
81
+
"permissionLevel": {
144
82
"type": "string",
145
83
"knownValues": [
146
-
"online.timtinkers.bot.command#simpleCommand",
147
-
"online.timtinkers.bot.command#parameterizedCommand",
148
-
"online.timtinkers.bot.command#rngCommand"
84
+
"online.timtinkers.bot.command#streamer",
85
+
"online.timtinkers.bot.command#moderator",
86
+
"online.timtinkers.bot.command#vip",
87
+
"online.timtinkers.bot.command#default"
149
88
]
150
-
},
151
-
"simpleCommand": {
152
-
"type": "token",
153
-
"description": "A command that returns a static response with no parameters"
154
-
},
155
-
"parameterizedCommand": {
156
-
"type": "token",
157
-
"description": "A command that accepts one or more parameters and uses a response template"
158
89
}
159
90
},
160
91
"$type": "com.atproto.lexicon.schema",
161
92
"lexicon": 1
162
93
}