@crowbartools/firebot-types 5.67.0-alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +43 -0
  3. package/index.d.ts +5 -0
  4. package/index.js +5 -0
  5. package/package.json +44 -0
  6. package/types/accounts.d.ts +13 -0
  7. package/types/auth.d.ts +51 -0
  8. package/types/channel-rewards.d.ts +63 -0
  9. package/types/chat.d.ts +159 -0
  10. package/types/commands.d.ts +138 -0
  11. package/types/counters.d.ts +13 -0
  12. package/types/currency.d.ts +15 -0
  13. package/types/discord.d.ts +10 -0
  14. package/types/effects.d.ts +223 -0
  15. package/types/events.d.ts +99 -0
  16. package/types/expressionish.d.ts +74 -0
  17. package/types/games.d.ts +22 -0
  18. package/types/goals.d.ts +7 -0
  19. package/types/hotkeys.d.ts +12 -0
  20. package/types/icons.d.ts +6 -0
  21. package/types/import.d.ts +69 -0
  22. package/types/index.d.ts +40 -0
  23. package/types/integrations.d.ts +93 -0
  24. package/types/moderation.d.ts +59 -0
  25. package/types/modules/event-manager.d.ts +29 -0
  26. package/types/modules/frontend-communicator.d.ts +53 -0
  27. package/types/modules/index.d.ts +2 -0
  28. package/types/overlay-widgets.d.ts +240 -0
  29. package/types/parameters.d.ts +414 -0
  30. package/types/plugins.d.ts +201 -0
  31. package/types/power-ups.d.ts +20 -0
  32. package/types/pronouns.d.ts +11 -0
  33. package/types/quick-actions.d.ts +18 -0
  34. package/types/quotes.d.ts +17 -0
  35. package/types/ranks.d.ts +23 -0
  36. package/types/restrictions.d.ts +65 -0
  37. package/types/roles.d.ts +21 -0
  38. package/types/script-api.d.ts +95 -0
  39. package/types/settings.d.ts +131 -0
  40. package/types/setups.d.ts +49 -0
  41. package/types/sort-tags.d.ts +4 -0
  42. package/types/timers.d.ts +36 -0
  43. package/types/triggers.d.ts +61 -0
  44. package/types/ui/angular.d.ts +31 -0
  45. package/types/ui/backend-communicator.d.ts +8 -0
  46. package/types/ui/effect-helper-service.d.ts +5 -0
  47. package/types/ui/effect-queues-service.d.ts +10 -0
  48. package/types/ui/firebot-root-scope.d.ts +5 -0
  49. package/types/ui/index.d.ts +12 -0
  50. package/types/ui/modal-factory.d.ts +30 -0
  51. package/types/ui/modal-service.d.ts +21 -0
  52. package/types/ui/ng-toast.d.ts +3 -0
  53. package/types/ui/object-copy-helper.d.ts +9 -0
  54. package/types/ui/platform-service.d.ts +7 -0
  55. package/types/ui/preset-effect-lists-service.d.ts +20 -0
  56. package/types/ui/settings-service.d.ts +5 -0
  57. package/types/util-types.d.ts +52 -0
  58. package/types/variable-macros.d.ts +7 -0
  59. package/types/variables.d.ts +59 -0
  60. package/types/viewers.d.ts +30 -0
  61. package/types/webhooks.d.ts +5 -0
  62. package/types/websocket.d.ts +70 -0
@@ -0,0 +1,223 @@
1
+ import ng from "angular";
2
+ import type { TriggerType, TriggersObject, Trigger } from "./triggers";
3
+ import type { Awaitable } from "./util-types";
4
+
5
+ type Func<T> = (...args: unknown[]) => T;
6
+
7
+ interface EffectScope<EffectModel> extends ng.IScope {
8
+ effect: EffectModel;
9
+ [x: string]: any;
10
+ }
11
+
12
+ export type EffectCategory =
13
+ | "common"
14
+ | "twitch"
15
+ | "moderation"
16
+ | "chat based"
17
+ | "dashboard"
18
+ | "overlay"
19
+ | "fun"
20
+ | "integrations"
21
+ | "firebot control"
22
+ | "advanced"
23
+ | "scripting";
24
+
25
+ export type EffectTriggerResponse = {
26
+ success: boolean;
27
+ execution?: {
28
+ stop: boolean;
29
+ bubbleStop: boolean;
30
+ };
31
+ outputs?: {
32
+ [x: string]: unknown;
33
+ };
34
+ };
35
+
36
+ export type EffectOutput = {
37
+ label: string;
38
+ description: string;
39
+ defaultName: string;
40
+ };
41
+
42
+ export type EffectDependencies = {
43
+ twitch?: boolean;
44
+ integrations?: Record<string, boolean>;
45
+ };
46
+
47
+ export type OverlayExtension<OverlayData = unknown> = {
48
+ dependencies?: {
49
+ globalStyles?: string;
50
+ css?: string[];
51
+ js?: Array<string | { module: boolean, url: string }>;
52
+ };
53
+ event: {
54
+ name: string;
55
+ onOverlayEvent: (data: OverlayData) => void;
56
+ };
57
+ };
58
+
59
+ export type OverlayDimensions = {
60
+ width: number;
61
+ height: number;
62
+ };
63
+
64
+ export type OverlayPosition = {
65
+ position: string;
66
+ customCoords?: {
67
+ top: number;
68
+ bottom: number;
69
+ left: number;
70
+ right: number;
71
+ };
72
+ zIndex?: number;
73
+ };
74
+
75
+ export type OverlayRotation = {
76
+ rotation: number;
77
+ rotType: "deg" | "rad" | "turn";
78
+ };
79
+
80
+ export type OverlayEnterExitAnimations = {
81
+ enterAnimation: string;
82
+ enterDuration: number;
83
+
84
+ inbetweenAnimation: string;
85
+ inbetweenDuration: number;
86
+ inbetweenDelay: number;
87
+ inbetweenRepeat: number;
88
+
89
+ exitAnimation: string;
90
+ exitDuration: number;
91
+ };
92
+
93
+ export type OverlayInstance = {
94
+ overlayInstance: string;
95
+ };
96
+
97
+ export type EffectDefinition<EffectModel = unknown> = {
98
+ id: string;
99
+ name: string;
100
+ description: string;
101
+ icon: string;
102
+ categories: EffectCategory[];
103
+ hidden?: boolean | Func<boolean>;
104
+ deprecated?: boolean;
105
+ triggers?: TriggerType[] | TriggersObject;
106
+ dependencies?: EffectDependencies | Array<"chat">;
107
+ showWhenDependenciesNotMet?: boolean;
108
+ outputs?: EffectOutput[];
109
+ /**
110
+ * If true, this effect cannot be aborted via the "Timeout" feature
111
+ */
112
+ exemptFromTimeouts?: boolean;
113
+ /**
114
+ * If true, this effect type cannot be set as "async" in the UI
115
+ */
116
+ exemptFromAsync?: boolean;
117
+ /**
118
+ * Keys of the effect model that should be exempt from having variables replaced in them automatically.
119
+ * This is useful when you want to run variable replacement manually, or not at all.
120
+ */
121
+ keysExemptFromAutoVariableReplacement?: Array<keyof EffectModel>;
122
+ /**
123
+ * If true, this effect does nothing when triggered (ex Comment effect)
124
+ * No-op effects are ignored by the random and sequential effects
125
+ */
126
+ isNoOp?: boolean;
127
+ };
128
+
129
+ export type EffectInstance<EffectModel = unknown> = {
130
+ id: string;
131
+ type: string;
132
+ effectLabel?: string | null;
133
+ effectComment?: string | null;
134
+ active?: boolean;
135
+ abortTimeout?: number | null;
136
+ percentWeight?: number | null;
137
+ outputNames?: Record<string, string>;
138
+ async?: boolean;
139
+ } & {
140
+ [K in keyof EffectModel]: EffectModel[K];
141
+ } & {
142
+ [x: string]: unknown;
143
+ };
144
+
145
+ export type EffectType<EffectModel = unknown, OverlayData = unknown> = {
146
+ definition: EffectDefinition<EffectModel>;
147
+ optionsTemplate: string;
148
+ optionsTemplateUrl?: string;
149
+ optionsController?: ($scope: EffectScope<EffectModel>, ...args: any[]) => void;
150
+ optionsValidator?: (effect: EffectModel, $scope: EffectScope<EffectModel>) => string[];
151
+ getDefaultLabel?: (effect: EffectModel, ...args: any[]) => Awaitable<string | undefined>;
152
+ onTriggerEvent: (event: {
153
+ effect: EffectInstance<EffectModel>;
154
+ trigger: Trigger;
155
+ sendDataToOverlay: (data: OverlayData, overlayInstance?: string) => void;
156
+ outputs: Record<string, unknown>;
157
+ abortSignal: AbortSignal;
158
+ }) => Awaitable<void | boolean | EffectTriggerResponse>;
159
+ overlayExtension?: OverlayExtension<OverlayData>;
160
+ };
161
+
162
+ export type EffectListRunMode = "all" | "random" | "sequential";
163
+
164
+ export interface EffectList {
165
+ id: string;
166
+ list: EffectInstance[];
167
+ queue?: string | null;
168
+ queuePriority?: "high" | "none";
169
+ queueDuration?: number;
170
+ runMode?: EffectListRunMode;
171
+ weighted?: boolean;
172
+ dontRepeatUntilAllUsed?: boolean;
173
+ }
174
+
175
+ export type PresetEffectList = {
176
+ id: string;
177
+ name: string;
178
+ args: Array<{
179
+ name: string;
180
+ }>;
181
+ effects: EffectList;
182
+ sortTags: string[];
183
+ };
184
+
185
+ type QueueMode = "auto" | "interval" | "custom" | "manual";
186
+
187
+ export type EffectQueueConfig = {
188
+ id: string;
189
+ name: string;
190
+ mode: QueueMode;
191
+ interval?: number;
192
+ sortTags: string[];
193
+ active: boolean;
194
+ runEffectsImmediatelyWhenPaused: boolean;
195
+ length: number;
196
+ queue: any[];
197
+ };
198
+
199
+ export type QueueStatus = "running" | "paused" | "idle" | "canceled";
200
+
201
+ export type RunEffectsContext = {
202
+ trigger: Trigger;
203
+ effects: EffectList;
204
+ outputs?: {
205
+ [x: string]: unknown;
206
+ };
207
+ [key: string]: unknown;
208
+ };
209
+
210
+ type QueueItem = {
211
+ runEffectsContext: RunEffectsContext;
212
+ duration?: number;
213
+ priority?: "none" | "high";
214
+ };
215
+
216
+ export type QueueState = {
217
+ status: QueueStatus;
218
+ queuedItems: QueueItem[];
219
+ activeItems: QueueItem[];
220
+ interval: number;
221
+ mode: QueueMode;
222
+ runEffectsImmediatelyWhenPaused?: boolean;
223
+ };
@@ -0,0 +1,99 @@
1
+ import type { EffectList } from "./effects";
2
+ import type { Awaitable } from "./util-types";
3
+
4
+ export type ComparisonType =
5
+ | "is"
6
+ | "is not"
7
+ | "greater than"
8
+ | "greater than or equal to"
9
+ | "less than"
10
+ | "less than or equal to"
11
+ | "contains"
12
+ | "doesn't contain"
13
+ | "doesn't start with"
14
+ | "starts with"
15
+ | "doesn't end with"
16
+ | "ends with"
17
+ | "matches regex"
18
+ | "doesn't matches regex"
19
+ | "matches regex (case insensitive)"
20
+ | "doesn't match regex (case insensitive)";
21
+
22
+ export type EventDefinition = {
23
+ id: string;
24
+ name: string;
25
+ description: string;
26
+ cached?: boolean;
27
+ cacheMetaKey?: string;
28
+ cacheTtlInSecs?: number;
29
+ manualMetadata?: Record<string, unknown>;
30
+ activityFeed?: {
31
+ icon: string;
32
+ getMessage: (eventData: Record<string, any>) => string;
33
+ excludeFromChatFeed?: boolean;
34
+ };
35
+ };
36
+
37
+ export type EventSource = {
38
+ id: string;
39
+ name: string;
40
+ description?: string;
41
+ events: EventDefinition[];
42
+ };
43
+
44
+ export type PresetValue = {
45
+ value: any;
46
+ display: string;
47
+ };
48
+
49
+ export type FilterSettings = {
50
+ type: string;
51
+ comparisonType: ComparisonType;
52
+ value: any;
53
+ };
54
+
55
+ export type EventSourceAndId = {
56
+ eventSourceId: string;
57
+ eventId: string;
58
+ };
59
+
60
+ export type EventData = EventSourceAndId & {
61
+ eventMeta: Record<string, any>;
62
+ };
63
+
64
+ export type EventFilter = {
65
+ id: string;
66
+ name: string;
67
+ description: string;
68
+ events: EventSourceAndId[];
69
+ comparisonTypes: string[];
70
+ valueType: "text" | "preset";
71
+ presetValues?(...args: unknown[]): Awaitable<PresetValue[]>;
72
+ valueIsStillValid?(filterSettings: FilterSettings, ...args: unknown[]): Awaitable<boolean>;
73
+ getSelectedValueDisplay?(filterSettings: FilterSettings, ...args: unknown[]): Awaitable<string>;
74
+ predicate(
75
+ filterSettings: FilterSettings,
76
+ eventData: EventData
77
+ ): Awaitable<boolean>;
78
+ };
79
+
80
+ export type EventFilterData = {
81
+ mode: "inclusive" | "exclusive";
82
+ filters: FilterSettings[];
83
+ };
84
+
85
+ export type EventSettings = {
86
+ id: string;
87
+ type: string;
88
+ active: boolean;
89
+ effectLabel?: string;
90
+ filterData?: EventFilterData;
91
+ effects: EffectList;
92
+ [x: string]: unknown;
93
+ };
94
+
95
+ export type EventGroup = {
96
+ id: string;
97
+ events: EventSettings[];
98
+ active?: boolean;
99
+ };
@@ -0,0 +1,74 @@
1
+ type ExpressionishBaseToken = {
2
+ type: "TEXT" | "VARIABLE" | "LOOKUP" | "IF" | "LOGICAL" | "CONDITION" | "UNKNOWN";
3
+
4
+ /**
5
+ * Rough character position of the token within the input string
6
+ */
7
+ position: number;
8
+
9
+ /**
10
+ * Depends on token type.
11
+ *
12
+ * `TEXT` or `UNKNOWN`: raw text value
13
+ *
14
+ * `VAR`, `IF`, or `LOOKUP`: name of variable
15
+ *
16
+ * `CONDITION` or `LOGICAL`: operator
17
+ */
18
+ value: string;
19
+
20
+ };
21
+
22
+ type ExpressionishTokenWithArguments = {
23
+ /**
24
+ * Arguments to resolve then pass to calling registered handler
25
+ */
26
+ arguments: Array<ExpressionishToken>;
27
+ };
28
+
29
+ type ExpressionishTextToken = ExpressionishBaseToken & {
30
+ type: "TEXT";
31
+ };
32
+
33
+ type ExpressionishLookupToken = ExpressionishBaseToken & ExpressionishTokenWithArguments & {
34
+ type: "LOOKUP";
35
+
36
+ /**
37
+ * Lookup prefix
38
+ */
39
+ prefix: string;
40
+ };
41
+
42
+ type ExpressionishVariableToken = ExpressionishBaseToken & ExpressionishTokenWithArguments & {
43
+ type: "VARIABLE";
44
+ };
45
+
46
+ type ExpressionishComparisonToken = ExpressionishBaseToken & ExpressionishTokenWithArguments & {
47
+ type: "CONDITION";
48
+ };
49
+
50
+ type ExpressionishLogicToken = ExpressionishBaseToken & ExpressionishTokenWithArguments & {
51
+ type: "LOGICAL";
52
+ };
53
+
54
+ type ExpressionishIfToken = ExpressionishBaseToken & ExpressionishTokenWithArguments & {
55
+ type: "IF";
56
+
57
+ /**
58
+ * Condition used for evaluation
59
+ */
60
+ condition: ExpressionishLogicToken | ExpressionishComparisonToken;
61
+ };
62
+
63
+ type ExpressionishUnknownToken = ExpressionishBaseToken & {
64
+ type: "UNKNOWN";
65
+ };
66
+
67
+ export type ExpressionishToken =
68
+ | ExpressionishTextToken
69
+ | ExpressionishLookupToken
70
+ | ExpressionishVariableToken
71
+ | ExpressionishComparisonToken
72
+ | ExpressionishLogicToken
73
+ | ExpressionishIfToken
74
+ | ExpressionishUnknownToken;
@@ -0,0 +1,22 @@
1
+ import type { FirebotParamCategory } from "./parameters";
2
+
3
+ export type GameSettings = {
4
+ active: boolean;
5
+ settings?: Record<string, Record<string, unknown>>;
6
+ };
7
+
8
+ export type GameDefinition = {
9
+ id: string;
10
+ name: string;
11
+ subtitle: string;
12
+ description: string;
13
+ icon: string;
14
+ active?: boolean;
15
+ settingCategories: Record<string, FirebotParamCategory<Record<string, unknown>>>;
16
+ };
17
+
18
+ export type FirebotGame = GameDefinition & {
19
+ onLoad: (settings: GameSettings) => void;
20
+ onUnload: (settings: GameSettings) => void;
21
+ onSettingsUpdate: (settings: GameSettings) => void;
22
+ };
@@ -0,0 +1,7 @@
1
+ export declare enum TwitchGoalTypes {
2
+ follow = "follower",
3
+ sub = "subscription_count",
4
+ subpoint = "subscription",
5
+ newsub = "new_subscription_count",
6
+ newsubpoint = "new_subscription"
7
+ }
@@ -0,0 +1,12 @@
1
+ import type { EffectList } from "./effects";
2
+
3
+ export type FirebotHotkey = {
4
+ id: string;
5
+ name: string;
6
+ active: boolean;
7
+ // Electron accelerator string (see https://www.electronjs.org/docs/latest/api/accelerator)
8
+ code: string;
9
+ warning: string;
10
+ effects: EffectList;
11
+ sortTags: string[];
12
+ };
@@ -0,0 +1,6 @@
1
+ export type FontAwesomeIcon = {
2
+ name: string;
3
+ className: string;
4
+ style: string;
5
+ searchTerms: string[];
6
+ };
@@ -0,0 +1,69 @@
1
+ import type { Quote } from "./quotes";
2
+ import type { FileFilter, Awaitable } from "./util-types";
3
+
4
+ export interface LoadRequest {
5
+ appId: string;
6
+ filepath: string;
7
+ }
8
+
9
+ export interface LoadResult<T = unknown[]> {
10
+ success: boolean;
11
+ data?: T;
12
+ error?: string;
13
+ }
14
+
15
+ export type ParsedQuotes = {
16
+ quotes: Quote[];
17
+ };
18
+
19
+ export type ParsedViewers<V = unknown> = {
20
+ viewers: V[];
21
+ ranks: string[];
22
+ };
23
+
24
+ export interface ImportRequest<Data = unknown, Settings = unknown> {
25
+ appId: string;
26
+ data: Data;
27
+ settings: Settings;
28
+ }
29
+
30
+ export interface ImportResult {
31
+ success: boolean;
32
+ error?: string;
33
+ }
34
+
35
+ type CustomImporterSettings = {
36
+ quotes?: unknown;
37
+ viewers?: unknown;
38
+ };
39
+
40
+ export type ThirdPartyImporter<
41
+ Settings extends CustomImporterSettings = CustomImporterSettings,
42
+ ViewerType = unknown
43
+ > = {
44
+ id: string;
45
+ appName: string;
46
+ defaultSettings?: Settings;
47
+ filetypes: FileFilter[];
48
+
49
+ loadQuotes?: (
50
+ filename: string,
51
+ settings?: Settings["quotes"]
52
+ ) => Awaitable<LoadResult<ParsedQuotes>>;
53
+
54
+ importQuotes?: (
55
+ quotes: Quote[],
56
+ settings: Settings["quotes"]
57
+ ) => Awaitable<ImportResult>;
58
+
59
+ loadViewers?: (
60
+ filename: string,
61
+ settings?: Settings["viewers"]
62
+ ) => Awaitable<LoadResult<ParsedViewers>>;
63
+
64
+ importViewers?: (
65
+ viewers: ViewerType[],
66
+ settings: Settings["viewers"],
67
+ abortSignal: AbortSignal
68
+ ) => Awaitable<ImportResult>;
69
+ };
@@ -0,0 +1,40 @@
1
+ export * from "./accounts";
2
+ export * from "./auth";
3
+ export * from "./channel-rewards";
4
+ export * from "./chat";
5
+ export * from "./commands";
6
+ export * from "./counters";
7
+ export * from "./currency";
8
+ export * from "./discord";
9
+ export * from "./effects";
10
+ export * from "./events";
11
+ export * from "./expressionish";
12
+ export * from "./games";
13
+ export * from "./goals";
14
+ export * from "./hotkeys";
15
+ export * from "./icons";
16
+ export * from "./import";
17
+ export * from "./integrations";
18
+ export * from "./moderation";
19
+ export * from "./modules";
20
+ export * from "./overlay-widgets";
21
+ export * from "./parameters";
22
+ export * from "./pronouns";
23
+ export * from "./quick-actions";
24
+ export * from "./quotes";
25
+ export * from "./ranks";
26
+ export * from "./restrictions";
27
+ export * from "./roles";
28
+ export * from "./settings";
29
+ export * from "./setups";
30
+ export * from "./sort-tags";
31
+ export * from "./timers";
32
+ export * from "./triggers";
33
+ export * from "./ui";
34
+ export * from "./util-types";
35
+ export * from "./variable-macros";
36
+ export * from "./variables";
37
+ export * from "./viewers";
38
+ export * from "./webhooks";
39
+ export * from "./websocket";
40
+ export * from "./plugins";
@@ -0,0 +1,93 @@
1
+ import type {
2
+ FirebotParameterCategories,
3
+ FirebotParams
4
+ } from "./parameters";
5
+ import type { Awaitable, ObjectOfUnknowns } from "./util-types";
6
+
7
+ export type Integration<Params extends FirebotParams = FirebotParams> = {
8
+ definition: IntegrationDefinition<Params>;
9
+ integration: IntegrationController<Params>;
10
+ };
11
+
12
+ export type IntegrationDefinition<
13
+ Params extends FirebotParams = FirebotParams
14
+ > = {
15
+ id: string;
16
+ name: string;
17
+ description: string;
18
+ connectionToggle?: boolean;
19
+ configurable?: boolean;
20
+ settingCategories: FirebotParameterCategories<Params>;
21
+ } & (
22
+ | {
23
+ linkType: "id";
24
+ idDetails: {
25
+ steps: string;
26
+ };
27
+ }
28
+ | {
29
+ linkType: "auth";
30
+ authProviderDetails: {
31
+ id: string;
32
+ name: string;
33
+ redirectUriHost?: string;
34
+ client: {
35
+ id: string;
36
+ secret: string;
37
+ };
38
+ auth: {
39
+ tokenHost: string;
40
+ tokenPath: string;
41
+ authorizePath: string;
42
+ };
43
+ autoRefreshToken?: boolean;
44
+ scopes: string;
45
+ };
46
+ }
47
+ | { linkType: "other" | "none" }
48
+ );
49
+
50
+ export interface IntegrationEvents {
51
+ connected: (id: string) => void;
52
+ disconnected: (id: string) => void;
53
+ "settings-update": (id: string, settings: Record<string, any>) => void;
54
+ }
55
+
56
+ type LinkData =
57
+ | {
58
+ accountId: string;
59
+ }
60
+ | {
61
+ auth: Record<string, unknown>;
62
+ }
63
+ | null;
64
+
65
+ export type IntegrationData<Params extends FirebotParams = FirebotParams> = {
66
+ settings: any;
67
+ userSettings?: Params;
68
+ oauth?: any;
69
+ accountId?: string;
70
+ };
71
+
72
+ export interface IntegrationController<
73
+ Params extends FirebotParams = FirebotParams
74
+ > {
75
+ connected: boolean;
76
+ init(
77
+ linked: boolean,
78
+ integrationData: IntegrationData<Params>
79
+ ): Awaitable<void>;
80
+ link?(linkData: LinkData): Awaitable<void>;
81
+ connect?(
82
+ integrationData: IntegrationData<Params>
83
+ ): Awaitable<void>;
84
+ disconnect?(): Awaitable<void>;
85
+ onUserSettingsUpdate?(
86
+ integrationData: IntegrationData<Params>
87
+ ): Awaitable<void>;
88
+ }
89
+
90
+ type IntegrationWithUnknowns = {
91
+ definition: IntegrationDefinition & ObjectOfUnknowns;
92
+ integration: IntegrationController & ObjectOfUnknowns;
93
+ };
@@ -0,0 +1,59 @@
1
+ export type ModerationTerm = {
2
+ text: string;
3
+ createdAt: number;
4
+ };
5
+
6
+ export type ModerationUser = {
7
+ id: string;
8
+ username: string;
9
+ displayName: string;
10
+ };
11
+
12
+ export type AllowedUser = {
13
+ id: string;
14
+ username: string;
15
+ displayName: string;
16
+ createdAt: number;
17
+ };
18
+
19
+ export type BannedWords = {
20
+ words: ModerationTerm[];
21
+ };
22
+
23
+ export type BannedRegularExpressions = {
24
+ regularExpressions: ModerationTerm[];
25
+ };
26
+
27
+ export type AllowList = {
28
+ urls: ModerationTerm[];
29
+ users: AllowedUser[];
30
+ };
31
+
32
+ export type ModerationImportRequest = {
33
+ filePath: string;
34
+ delimiter: "newline" | "comma" | "space";
35
+ };
36
+
37
+ export type ChatModerationSettings = {
38
+ bannedWordList: {
39
+ enabled: boolean;
40
+ exemptRoles: string[];
41
+ outputMessage?: string;
42
+ };
43
+ emoteLimit: {
44
+ enabled: boolean;
45
+ exemptRoles: string[];
46
+ max: number;
47
+ outputMessage?: string;
48
+ };
49
+ urlModeration: {
50
+ enabled: boolean;
51
+ exemptRoles: string[];
52
+ viewTime: {
53
+ enabled: boolean;
54
+ viewTimeInHours: number;
55
+ };
56
+ outputMessage?: string;
57
+ };
58
+ exemptRoles: string[];
59
+ };