Skip to content

Commit 6643a7b

Browse files
committed
implement improved integration types + firebot param types
1 parent 1b2f28d commit 6643a7b

4 files changed

Lines changed: 296 additions & 33 deletions

File tree

package-lock.json

Lines changed: 22 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@
2727
"@types/express": "^4.17.1",
2828
"@types/node": "^16.0.0",
2929
"fs-extra": "^10.0.0",
30-
"moment": "^2.24.0"
30+
"moment": "^2.24.0",
31+
"tiny-typed-emitter": "^2.1.0"
3132
},
3233
"volta": {
33-
"node": "14.18.1"
34+
"node": "14.18.1",
35+
"npm": "8.16.0"
3436
}
3537
}
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
import { Firebot } from "..";
2+
3+
type BaseParameter = {
4+
title: string;
5+
description?: string;
6+
tip?: string;
7+
showBottomHr?: boolean;
8+
validation?: {
9+
required?: boolean;
10+
};
11+
};
12+
13+
type StringParameter = BaseParameter & {
14+
type: "string";
15+
useTextArea?: boolean;
16+
default: string;
17+
};
18+
19+
type PasswordParameter = BaseParameter & {
20+
type: "password";
21+
default: string;
22+
};
23+
24+
type BooleanParameter = BaseParameter & {
25+
type: "boolean";
26+
default: boolean;
27+
};
28+
29+
type NumberParameter = BaseParameter & {
30+
type: "number";
31+
placeholder?: string;
32+
default: number;
33+
validation?: {
34+
min?: number;
35+
max?: number;
36+
};
37+
};
38+
39+
type EnumParameter = BaseParameter & {
40+
type: "enum";
41+
options: Array<string | number>;
42+
default: string | number;
43+
};
44+
45+
type FilepathParameter = BaseParameter & {
46+
type: "filepath";
47+
fileOptions?: {
48+
directoryOnly: boolean;
49+
filters: Array<{
50+
name: string;
51+
extensions: string[];
52+
}>;
53+
title: string;
54+
buttonLabel: string;
55+
};
56+
};
57+
58+
type EffectListParameter = BaseParameter & {
59+
type: "effectlist";
60+
};
61+
62+
type DiscordChannelWebhookParameter = BaseParameter & {
63+
type: "discord-channel-webhooks";
64+
};
65+
66+
type CurrencySelectParameter = BaseParameter & {
67+
type: "currency-select";
68+
default?: string;
69+
};
70+
71+
type ChatterSelectParameter = BaseParameter & {
72+
type: "chatter-select";
73+
default?: "Bot" | "Streamer";
74+
};
75+
76+
type EditableListParameter = BaseParameter & {
77+
type: "editable-list";
78+
default?: string[];
79+
settings: {
80+
useTextArea: boolean;
81+
sortable: boolean;
82+
addLabel: string;
83+
editLabel: string;
84+
noneAddedText: string;
85+
};
86+
};
87+
88+
type MultiselectParameter = BaseParameter & {
89+
type: "multiselect";
90+
default?: string[] | number[];
91+
settings: {
92+
options: Array<{
93+
id: string | number;
94+
name: string;
95+
}>;
96+
};
97+
};
98+
99+
export type RolePercentageParameterValue = {
100+
basePercent: number;
101+
roles: Array<{
102+
roleId: string;
103+
percent: number;
104+
}>;
105+
};
106+
107+
type RolePercentagesParameter = BaseParameter & {
108+
type: "role-percentages";
109+
default?: RolePercentageParameterValue;
110+
};
111+
112+
export type RoleNumberParameterValue = {
113+
base: number;
114+
roles: Array<{
115+
roleId: string;
116+
value: number;
117+
}>;
118+
};
119+
120+
type RoleNumberParameter = BaseParameter & {
121+
type: "role-numbers";
122+
default?: RoleNumberParameterValue;
123+
settings: {
124+
defaultBase: number;
125+
defaultOther: number;
126+
min?: number;
127+
max?: number;
128+
};
129+
};
130+
131+
type FirebotParameter =
132+
| StringParameter
133+
| PasswordParameter
134+
| BooleanParameter
135+
| NumberParameter
136+
| EnumParameter
137+
| EffectListParameter
138+
| DiscordChannelWebhookParameter
139+
| CurrencySelectParameter
140+
| ChatterSelectParameter
141+
| EditableListParameter
142+
| MultiselectParameter
143+
| RolePercentagesParameter
144+
| RoleNumberParameter;
145+
146+
type DefaultParametersConfig<P> = {
147+
[K in keyof P]: P[K] extends string
148+
?
149+
| StringParameter
150+
| PasswordParameter
151+
| FilepathParameter
152+
| ChatterSelectParameter
153+
| CurrencySelectParameter
154+
: P[K] extends number
155+
? NumberParameter
156+
: P[K] extends boolean
157+
? BooleanParameter
158+
: P[K] extends Array<string> | Array<number>
159+
? EnumParameter | MultiselectParameter | EditableListParameter
160+
: P[K] extends RolePercentageParameterValue
161+
? RolePercentagesParameter
162+
: P[K] extends RoleNumberParameterValue
163+
? RoleNumberParameter
164+
: P[K] extends Firebot.EffectList
165+
? EffectListParameter
166+
: FirebotParameter;
167+
};
168+
169+
type FirebotParamCategory<ParamConfig extends Record<string, unknown>> = {
170+
title: string;
171+
sortRank?: number;
172+
settings: DefaultParametersConfig<ParamConfig>;
173+
};
174+
175+
export type FirebotParams = Record<string, Record<string, unknown>>;
176+
177+
export type FirebotParameterCategories<Config extends FirebotParams> = {
178+
[Category in keyof Config]: FirebotParamCategory<Config[Category]>;
179+
};

0 commit comments

Comments
 (0)