@furlow/builtins 0.1.0
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.
- package/dist/afk/index.d.ts +21 -0
- package/dist/afk/index.js +195 -0
- package/dist/afk/index.js.map +1 -0
- package/dist/auto-responder/index.d.ts +21 -0
- package/dist/auto-responder/index.js +356 -0
- package/dist/auto-responder/index.js.map +1 -0
- package/dist/giveaways/index.d.ts +25 -0
- package/dist/giveaways/index.js +416 -0
- package/dist/giveaways/index.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +5402 -0
- package/dist/index.js.map +1 -0
- package/dist/leveling/index.d.ts +46 -0
- package/dist/leveling/index.js +521 -0
- package/dist/leveling/index.js.map +1 -0
- package/dist/logging/index.d.ts +52 -0
- package/dist/logging/index.js +519 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/moderation/index.d.ts +83 -0
- package/dist/moderation/index.js +221 -0
- package/dist/moderation/index.js.map +1 -0
- package/dist/music/index.d.ts +33 -0
- package/dist/music/index.js +414 -0
- package/dist/music/index.js.map +1 -0
- package/dist/polls/index.d.ts +21 -0
- package/dist/polls/index.js +395 -0
- package/dist/polls/index.js.map +1 -0
- package/dist/reaction-roles/index.d.ts +19 -0
- package/dist/reaction-roles/index.js +551 -0
- package/dist/reaction-roles/index.js.map +1 -0
- package/dist/reminders/index.d.ts +23 -0
- package/dist/reminders/index.js +224 -0
- package/dist/reminders/index.js.map +1 -0
- package/dist/starboard/index.d.ts +35 -0
- package/dist/starboard/index.js +401 -0
- package/dist/starboard/index.js.map +1 -0
- package/dist/tickets/index.d.ts +43 -0
- package/dist/tickets/index.js +614 -0
- package/dist/tickets/index.js.map +1 -0
- package/dist/utilities/index.d.ts +15 -0
- package/dist/utilities/index.js +299 -0
- package/dist/utilities/index.js.map +1 -0
- package/dist/welcome/index.d.ts +48 -0
- package/dist/welcome/index.js +302 -0
- package/dist/welcome/index.js.map +1 -0
- package/package.json +109 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { FurlowSpec, CommandDefinition } from '@furlow/schema';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Utilities builtin module
|
|
5
|
+
* Common utility commands: serverinfo, userinfo, avatar, etc.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
interface UtilitiesConfig {
|
|
9
|
+
/** Commands to enable/disable */
|
|
10
|
+
enabledCommands?: string[];
|
|
11
|
+
}
|
|
12
|
+
declare const utilitiesCommands: CommandDefinition[];
|
|
13
|
+
declare function getUtilitiesSpec(config?: UtilitiesConfig): Partial<FurlowSpec>;
|
|
14
|
+
|
|
15
|
+
export { type UtilitiesConfig, getUtilitiesSpec, utilitiesCommands };
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
// src/utilities/index.ts
|
|
2
|
+
var utilitiesCommands = [
|
|
3
|
+
{
|
|
4
|
+
name: "serverinfo",
|
|
5
|
+
description: "View server information",
|
|
6
|
+
actions: [
|
|
7
|
+
{
|
|
8
|
+
action: "set",
|
|
9
|
+
key: "boostLevel",
|
|
10
|
+
value: '${["None", "Level 1", "Level 2", "Level 3"][guild.premiumTier]}'
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
action: "set",
|
|
14
|
+
key: "verificationLevel",
|
|
15
|
+
value: '${["None", "Low", "Medium", "High", "Highest"][guild.verificationLevel]}'
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
action: "reply",
|
|
19
|
+
embed: {
|
|
20
|
+
title: "${guild.name}",
|
|
21
|
+
thumbnail: "${guild.iconURL({ size: 256 })}",
|
|
22
|
+
color: "#5865f2",
|
|
23
|
+
fields: [
|
|
24
|
+
{ name: "Owner", value: "<@${guild.ownerId}>", inline: true },
|
|
25
|
+
{ name: "Created", value: '${timestamp(guild.createdAt, "R")}', inline: true },
|
|
26
|
+
{ name: "Members", value: "${guild.memberCount}", inline: true },
|
|
27
|
+
{ name: "Channels", value: "${guild.channels.cache.size}", inline: true },
|
|
28
|
+
{ name: "Roles", value: "${guild.roles.cache.size}", inline: true },
|
|
29
|
+
{ name: "Emojis", value: "${guild.emojis.cache.size}", inline: true },
|
|
30
|
+
{ name: "Boost Level", value: "${boostLevel}", inline: true },
|
|
31
|
+
{ name: "Boosts", value: "${guild.premiumSubscriptionCount || 0}", inline: true },
|
|
32
|
+
{ name: "Verification", value: "${verificationLevel}", inline: true }
|
|
33
|
+
],
|
|
34
|
+
footer: { text: "ID: ${guild.id}" }
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "userinfo",
|
|
41
|
+
description: "View user information",
|
|
42
|
+
options: [
|
|
43
|
+
{ name: "user", description: "User to view", type: "user", required: false }
|
|
44
|
+
],
|
|
45
|
+
actions: [
|
|
46
|
+
{
|
|
47
|
+
action: "set",
|
|
48
|
+
key: "targetUser",
|
|
49
|
+
value: "${args.user || user}"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
action: "set",
|
|
53
|
+
key: "targetMember",
|
|
54
|
+
value: "${guild.members.cache.get(targetUser.id)}"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
action: "set",
|
|
58
|
+
key: "roles",
|
|
59
|
+
value: '${targetMember?.roles?.cache?.filter(r => r.id !== guild.id)?.sort((a, b) => b.position - a.position)?.map(r => r.toString())?.slice(0, 10)?.join(", ") || "None"}'
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
action: "reply",
|
|
63
|
+
embed: {
|
|
64
|
+
title: "${targetUser.tag}",
|
|
65
|
+
thumbnail: "${targetUser.avatarURL({ size: 256 })}",
|
|
66
|
+
color: '${targetMember?.displayHexColor || "#5865f2"}',
|
|
67
|
+
fields: [
|
|
68
|
+
{ name: "Username", value: "${targetUser.username}", inline: true },
|
|
69
|
+
{ name: "Nickname", value: '${targetMember?.nickname || "None"}', inline: true },
|
|
70
|
+
{ name: "Bot", value: '${targetUser.bot ? "Yes" : "No"}', inline: true },
|
|
71
|
+
{ name: "Created", value: '${timestamp(targetUser.createdAt, "R")}', inline: true },
|
|
72
|
+
{ name: "Joined", value: '${targetMember?.joinedAt ? timestamp(targetMember.joinedAt, "R") : "N/A"}', inline: true },
|
|
73
|
+
{ name: "Highest Role", value: '${targetMember?.roles?.highest?.toString() || "None"}', inline: true },
|
|
74
|
+
{ name: "Roles (${targetMember?.roles?.cache?.size - 1 || 0})", value: "${roles}", inline: false }
|
|
75
|
+
],
|
|
76
|
+
footer: { text: "ID: ${targetUser.id}" }
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: "avatar",
|
|
83
|
+
description: "View user avatar",
|
|
84
|
+
options: [
|
|
85
|
+
{ name: "user", description: "User to view", type: "user", required: false }
|
|
86
|
+
],
|
|
87
|
+
actions: [
|
|
88
|
+
{
|
|
89
|
+
action: "set",
|
|
90
|
+
key: "targetUser",
|
|
91
|
+
value: "${args.user || user}"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
action: "reply",
|
|
95
|
+
embed: {
|
|
96
|
+
title: "${targetUser.tag}'s Avatar",
|
|
97
|
+
image: "${targetUser.avatarURL({ size: 1024 }) || targetUser.defaultAvatarURL}",
|
|
98
|
+
color: "#5865f2",
|
|
99
|
+
description: '[PNG](${targetUser.avatarURL({ format: "png", size: 1024 })}) | [JPG](${targetUser.avatarURL({ format: "jpg", size: 1024 })}) | [WEBP](${targetUser.avatarURL({ format: "webp", size: 1024 })})'
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
name: "banner",
|
|
106
|
+
description: "View user banner",
|
|
107
|
+
options: [
|
|
108
|
+
{ name: "user", description: "User to view", type: "user", required: false }
|
|
109
|
+
],
|
|
110
|
+
actions: [
|
|
111
|
+
{
|
|
112
|
+
action: "set",
|
|
113
|
+
key: "targetUser",
|
|
114
|
+
value: "${args.user || user}"
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
action: "flow_if",
|
|
118
|
+
condition: "${!targetUser.bannerURL()}",
|
|
119
|
+
then: [
|
|
120
|
+
{ action: "reply", content: "This user has no banner!", ephemeral: true },
|
|
121
|
+
{ action: "abort" }
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
action: "reply",
|
|
126
|
+
embed: {
|
|
127
|
+
title: "${targetUser.tag}'s Banner",
|
|
128
|
+
image: "${targetUser.bannerURL({ size: 1024 })}",
|
|
129
|
+
color: "#5865f2"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: "roleinfo",
|
|
136
|
+
description: "View role information",
|
|
137
|
+
options: [
|
|
138
|
+
{ name: "role", description: "Role to view", type: "role", required: true }
|
|
139
|
+
],
|
|
140
|
+
actions: [
|
|
141
|
+
{
|
|
142
|
+
action: "reply",
|
|
143
|
+
embed: {
|
|
144
|
+
title: "${args.role.name}",
|
|
145
|
+
color: "${args.role.hexColor}",
|
|
146
|
+
fields: [
|
|
147
|
+
{ name: "Color", value: "${args.role.hexColor}", inline: true },
|
|
148
|
+
{ name: "Position", value: "${args.role.position}", inline: true },
|
|
149
|
+
{ name: "Members", value: "${args.role.members.size}", inline: true },
|
|
150
|
+
{ name: "Hoisted", value: '${args.role.hoist ? "Yes" : "No"}', inline: true },
|
|
151
|
+
{ name: "Mentionable", value: '${args.role.mentionable ? "Yes" : "No"}', inline: true },
|
|
152
|
+
{ name: "Managed", value: '${args.role.managed ? "Yes" : "No"}', inline: true },
|
|
153
|
+
{ name: "Created", value: '${timestamp(args.role.createdAt, "R")}', inline: true }
|
|
154
|
+
],
|
|
155
|
+
footer: { text: "ID: ${args.role.id}" }
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: "channelinfo",
|
|
162
|
+
description: "View channel information",
|
|
163
|
+
options: [
|
|
164
|
+
{ name: "channel", description: "Channel to view", type: "channel", required: false }
|
|
165
|
+
],
|
|
166
|
+
actions: [
|
|
167
|
+
{
|
|
168
|
+
action: "set",
|
|
169
|
+
key: "targetChannel",
|
|
170
|
+
value: "${args.channel || channel}"
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
action: "reply",
|
|
174
|
+
embed: {
|
|
175
|
+
title: "#${targetChannel.name}",
|
|
176
|
+
color: "#5865f2",
|
|
177
|
+
fields: [
|
|
178
|
+
{ name: "Type", value: "${targetChannel.type}", inline: true },
|
|
179
|
+
{ name: "Category", value: '${targetChannel.parent?.name || "None"}', inline: true },
|
|
180
|
+
{ name: "Position", value: "${targetChannel.position}", inline: true },
|
|
181
|
+
{ name: "NSFW", value: '${targetChannel.nsfw ? "Yes" : "No"}', inline: true },
|
|
182
|
+
{ name: "Created", value: '${timestamp(targetChannel.createdAt, "R")}', inline: true },
|
|
183
|
+
{ name: "Topic", value: '${targetChannel.topic || "None"}', inline: false }
|
|
184
|
+
],
|
|
185
|
+
footer: { text: "ID: ${targetChannel.id}" }
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
name: "ping",
|
|
192
|
+
description: "Check bot latency",
|
|
193
|
+
actions: [
|
|
194
|
+
{
|
|
195
|
+
action: "reply",
|
|
196
|
+
content: "Pong! Latency: ${client.ws.ping}ms"
|
|
197
|
+
}
|
|
198
|
+
]
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
name: "invite",
|
|
202
|
+
description: "Get bot invite link",
|
|
203
|
+
actions: [
|
|
204
|
+
{
|
|
205
|
+
action: "reply",
|
|
206
|
+
embed: {
|
|
207
|
+
title: "Invite ${client.user.username}",
|
|
208
|
+
description: "[Click here to invite](https://discord.com/oauth2/authorize?client_id=${client.user.id}&permissions=8&scope=bot%20applications.commands)",
|
|
209
|
+
color: "#5865f2"
|
|
210
|
+
},
|
|
211
|
+
ephemeral: true
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
name: "membercount",
|
|
217
|
+
description: "View member count",
|
|
218
|
+
actions: [
|
|
219
|
+
{
|
|
220
|
+
action: "set",
|
|
221
|
+
key: "humans",
|
|
222
|
+
value: "${guild.members.cache.filter(m => !m.user.bot).size}"
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
action: "set",
|
|
226
|
+
key: "bots",
|
|
227
|
+
value: "${guild.members.cache.filter(m => m.user.bot).size}"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
action: "reply",
|
|
231
|
+
embed: {
|
|
232
|
+
title: "Member Count",
|
|
233
|
+
color: "#5865f2",
|
|
234
|
+
fields: [
|
|
235
|
+
{ name: "Total", value: "${guild.memberCount}", inline: true },
|
|
236
|
+
{ name: "Humans", value: "${humans}", inline: true },
|
|
237
|
+
{ name: "Bots", value: "${bots}", inline: true }
|
|
238
|
+
]
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
]
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
name: "emojis",
|
|
245
|
+
description: "List server emojis",
|
|
246
|
+
actions: [
|
|
247
|
+
{
|
|
248
|
+
action: "set",
|
|
249
|
+
key: "staticEmojis",
|
|
250
|
+
value: '${guild.emojis.cache.filter(e => !e.animated).map(e => e.toString()).slice(0, 50).join(" ")}'
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
action: "set",
|
|
254
|
+
key: "animatedEmojis",
|
|
255
|
+
value: '${guild.emojis.cache.filter(e => e.animated).map(e => e.toString()).slice(0, 50).join(" ")}'
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
action: "reply",
|
|
259
|
+
embed: {
|
|
260
|
+
title: "${guild.name} Emojis",
|
|
261
|
+
color: "#5865f2",
|
|
262
|
+
fields: [
|
|
263
|
+
{ name: "Static (${guild.emojis.cache.filter(e => !e.animated).size})", value: '${staticEmojis || "None"}' },
|
|
264
|
+
{ name: "Animated (${guild.emojis.cache.filter(e => e.animated).size})", value: '${animatedEmojis || "None"}' }
|
|
265
|
+
]
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
]
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
name: "roles",
|
|
272
|
+
description: "List server roles",
|
|
273
|
+
actions: [
|
|
274
|
+
{
|
|
275
|
+
action: "set",
|
|
276
|
+
key: "roleList",
|
|
277
|
+
value: '${guild.roles.cache.filter(r => r.id !== guild.id).sort((a, b) => b.position - a.position).map(r => r.toString()).slice(0, 40).join(", ")}'
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
action: "reply",
|
|
281
|
+
embed: {
|
|
282
|
+
title: "${guild.name} Roles (${guild.roles.cache.size - 1})",
|
|
283
|
+
description: "${roleList}",
|
|
284
|
+
color: "#5865f2"
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
]
|
|
288
|
+
}
|
|
289
|
+
];
|
|
290
|
+
function getUtilitiesSpec(config = {}) {
|
|
291
|
+
return {
|
|
292
|
+
commands: utilitiesCommands
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
export {
|
|
296
|
+
getUtilitiesSpec,
|
|
297
|
+
utilitiesCommands
|
|
298
|
+
};
|
|
299
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/index.ts"],"sourcesContent":["/**\n * Utilities builtin module\n * Common utility commands: serverinfo, userinfo, avatar, etc.\n */\n\nimport type { FurlowSpec, CommandDefinition } from '@furlow/schema';\n\nexport interface UtilitiesConfig {\n /** Commands to enable/disable */\n enabledCommands?: string[];\n}\n\nexport const utilitiesCommands: CommandDefinition[] = [\n {\n name: 'serverinfo',\n description: 'View server information',\n actions: [\n {\n action: 'set',\n key: 'boostLevel',\n value: '${[\"None\", \"Level 1\", \"Level 2\", \"Level 3\"][guild.premiumTier]}',\n },\n {\n action: 'set',\n key: 'verificationLevel',\n value: '${[\"None\", \"Low\", \"Medium\", \"High\", \"Highest\"][guild.verificationLevel]}',\n },\n {\n action: 'reply',\n embed: {\n title: '${guild.name}',\n thumbnail: '${guild.iconURL({ size: 256 })}',\n color: '#5865f2',\n fields: [\n { name: 'Owner', value: '<@${guild.ownerId}>', inline: true },\n { name: 'Created', value: '${timestamp(guild.createdAt, \"R\")}', inline: true },\n { name: 'Members', value: '${guild.memberCount}', inline: true },\n { name: 'Channels', value: '${guild.channels.cache.size}', inline: true },\n { name: 'Roles', value: '${guild.roles.cache.size}', inline: true },\n { name: 'Emojis', value: '${guild.emojis.cache.size}', inline: true },\n { name: 'Boost Level', value: '${boostLevel}', inline: true },\n { name: 'Boosts', value: '${guild.premiumSubscriptionCount || 0}', inline: true },\n { name: 'Verification', value: '${verificationLevel}', inline: true },\n ],\n footer: { text: 'ID: ${guild.id}' },\n },\n },\n ],\n },\n {\n name: 'userinfo',\n description: 'View user information',\n options: [\n { name: 'user', description: 'User to view', type: 'user', required: false },\n ],\n actions: [\n {\n action: 'set',\n key: 'targetUser',\n value: '${args.user || user}',\n },\n {\n action: 'set',\n key: 'targetMember',\n value: '${guild.members.cache.get(targetUser.id)}',\n },\n {\n action: 'set',\n key: 'roles',\n value: '${targetMember?.roles?.cache?.filter(r => r.id !== guild.id)?.sort((a, b) => b.position - a.position)?.map(r => r.toString())?.slice(0, 10)?.join(\", \") || \"None\"}',\n },\n {\n action: 'reply',\n embed: {\n title: '${targetUser.tag}',\n thumbnail: '${targetUser.avatarURL({ size: 256 })}',\n color: '${targetMember?.displayHexColor || \"#5865f2\"}',\n fields: [\n { name: 'Username', value: '${targetUser.username}', inline: true },\n { name: 'Nickname', value: '${targetMember?.nickname || \"None\"}', inline: true },\n { name: 'Bot', value: '${targetUser.bot ? \"Yes\" : \"No\"}', inline: true },\n { name: 'Created', value: '${timestamp(targetUser.createdAt, \"R\")}', inline: true },\n { name: 'Joined', value: '${targetMember?.joinedAt ? timestamp(targetMember.joinedAt, \"R\") : \"N/A\"}', inline: true },\n { name: 'Highest Role', value: '${targetMember?.roles?.highest?.toString() || \"None\"}', inline: true },\n { name: 'Roles (${targetMember?.roles?.cache?.size - 1 || 0})', value: '${roles}', inline: false },\n ],\n footer: { text: 'ID: ${targetUser.id}' },\n },\n },\n ],\n },\n {\n name: 'avatar',\n description: 'View user avatar',\n options: [\n { name: 'user', description: 'User to view', type: 'user', required: false },\n ],\n actions: [\n {\n action: 'set',\n key: 'targetUser',\n value: '${args.user || user}',\n },\n {\n action: 'reply',\n embed: {\n title: '${targetUser.tag}\\'s Avatar',\n image: '${targetUser.avatarURL({ size: 1024 }) || targetUser.defaultAvatarURL}',\n color: '#5865f2',\n description: '[PNG](${targetUser.avatarURL({ format: \"png\", size: 1024 })}) | [JPG](${targetUser.avatarURL({ format: \"jpg\", size: 1024 })}) | [WEBP](${targetUser.avatarURL({ format: \"webp\", size: 1024 })})',\n },\n },\n ],\n },\n {\n name: 'banner',\n description: 'View user banner',\n options: [\n { name: 'user', description: 'User to view', type: 'user', required: false },\n ],\n actions: [\n {\n action: 'set',\n key: 'targetUser',\n value: '${args.user || user}',\n },\n {\n action: 'flow_if',\n condition: '${!targetUser.bannerURL()}',\n then: [\n { action: 'reply', content: 'This user has no banner!', ephemeral: true },\n { action: 'abort' },\n ],\n },\n {\n action: 'reply',\n embed: {\n title: '${targetUser.tag}\\'s Banner',\n image: '${targetUser.bannerURL({ size: 1024 })}',\n color: '#5865f2',\n },\n },\n ],\n },\n {\n name: 'roleinfo',\n description: 'View role information',\n options: [\n { name: 'role', description: 'Role to view', type: 'role', required: true },\n ],\n actions: [\n {\n action: 'reply',\n embed: {\n title: '${args.role.name}',\n color: '${args.role.hexColor}',\n fields: [\n { name: 'Color', value: '${args.role.hexColor}', inline: true },\n { name: 'Position', value: '${args.role.position}', inline: true },\n { name: 'Members', value: '${args.role.members.size}', inline: true },\n { name: 'Hoisted', value: '${args.role.hoist ? \"Yes\" : \"No\"}', inline: true },\n { name: 'Mentionable', value: '${args.role.mentionable ? \"Yes\" : \"No\"}', inline: true },\n { name: 'Managed', value: '${args.role.managed ? \"Yes\" : \"No\"}', inline: true },\n { name: 'Created', value: '${timestamp(args.role.createdAt, \"R\")}', inline: true },\n ],\n footer: { text: 'ID: ${args.role.id}' },\n },\n },\n ],\n },\n {\n name: 'channelinfo',\n description: 'View channel information',\n options: [\n { name: 'channel', description: 'Channel to view', type: 'channel', required: false },\n ],\n actions: [\n {\n action: 'set',\n key: 'targetChannel',\n value: '${args.channel || channel}',\n },\n {\n action: 'reply',\n embed: {\n title: '#${targetChannel.name}',\n color: '#5865f2',\n fields: [\n { name: 'Type', value: '${targetChannel.type}', inline: true },\n { name: 'Category', value: '${targetChannel.parent?.name || \"None\"}', inline: true },\n { name: 'Position', value: '${targetChannel.position}', inline: true },\n { name: 'NSFW', value: '${targetChannel.nsfw ? \"Yes\" : \"No\"}', inline: true },\n { name: 'Created', value: '${timestamp(targetChannel.createdAt, \"R\")}', inline: true },\n { name: 'Topic', value: '${targetChannel.topic || \"None\"}', inline: false },\n ],\n footer: { text: 'ID: ${targetChannel.id}' },\n },\n },\n ],\n },\n {\n name: 'ping',\n description: 'Check bot latency',\n actions: [\n {\n action: 'reply',\n content: 'Pong! Latency: ${client.ws.ping}ms',\n },\n ],\n },\n {\n name: 'invite',\n description: 'Get bot invite link',\n actions: [\n {\n action: 'reply',\n embed: {\n title: 'Invite ${client.user.username}',\n description: '[Click here to invite](https://discord.com/oauth2/authorize?client_id=${client.user.id}&permissions=8&scope=bot%20applications.commands)',\n color: '#5865f2',\n },\n ephemeral: true,\n },\n ],\n },\n {\n name: 'membercount',\n description: 'View member count',\n actions: [\n {\n action: 'set',\n key: 'humans',\n value: '${guild.members.cache.filter(m => !m.user.bot).size}',\n },\n {\n action: 'set',\n key: 'bots',\n value: '${guild.members.cache.filter(m => m.user.bot).size}',\n },\n {\n action: 'reply',\n embed: {\n title: 'Member Count',\n color: '#5865f2',\n fields: [\n { name: 'Total', value: '${guild.memberCount}', inline: true },\n { name: 'Humans', value: '${humans}', inline: true },\n { name: 'Bots', value: '${bots}', inline: true },\n ],\n },\n },\n ],\n },\n {\n name: 'emojis',\n description: 'List server emojis',\n actions: [\n {\n action: 'set',\n key: 'staticEmojis',\n value: '${guild.emojis.cache.filter(e => !e.animated).map(e => e.toString()).slice(0, 50).join(\" \")}',\n },\n {\n action: 'set',\n key: 'animatedEmojis',\n value: '${guild.emojis.cache.filter(e => e.animated).map(e => e.toString()).slice(0, 50).join(\" \")}',\n },\n {\n action: 'reply',\n embed: {\n title: '${guild.name} Emojis',\n color: '#5865f2',\n fields: [\n { name: 'Static (${guild.emojis.cache.filter(e => !e.animated).size})', value: '${staticEmojis || \"None\"}' },\n { name: 'Animated (${guild.emojis.cache.filter(e => e.animated).size})', value: '${animatedEmojis || \"None\"}' },\n ],\n },\n },\n ],\n },\n {\n name: 'roles',\n description: 'List server roles',\n actions: [\n {\n action: 'set',\n key: 'roleList',\n value: '${guild.roles.cache.filter(r => r.id !== guild.id).sort((a, b) => b.position - a.position).map(r => r.toString()).slice(0, 40).join(\", \")}',\n },\n {\n action: 'reply',\n embed: {\n title: '${guild.name} Roles (${guild.roles.cache.size - 1})',\n description: '${roleList}',\n color: '#5865f2',\n },\n },\n ],\n },\n];\n\nexport function getUtilitiesSpec(config: UtilitiesConfig = {}): Partial<FurlowSpec> {\n return {\n commands: utilitiesCommands,\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { FurlowSpec, CanvasGenerator, CommandDefinition, EventHandler } from '@furlow/schema';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Welcome builtin module
|
|
5
|
+
* Handles member join/leave messages, auto-role assignment, and welcome images
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
interface WelcomeConfig {
|
|
9
|
+
/** Channel to send welcome messages */
|
|
10
|
+
channel?: string;
|
|
11
|
+
/** Welcome message template */
|
|
12
|
+
message?: string;
|
|
13
|
+
/** Embed for welcome messages */
|
|
14
|
+
embed?: {
|
|
15
|
+
title?: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
color?: string;
|
|
18
|
+
thumbnail?: string;
|
|
19
|
+
image?: string;
|
|
20
|
+
footer?: string;
|
|
21
|
+
};
|
|
22
|
+
/** Use welcome image */
|
|
23
|
+
useImage?: boolean;
|
|
24
|
+
/** Welcome image generator name */
|
|
25
|
+
imageGenerator?: string;
|
|
26
|
+
/** Roles to assign on join */
|
|
27
|
+
autoRoles?: string[];
|
|
28
|
+
/** Leave channel (defaults to welcome channel) */
|
|
29
|
+
leaveChannel?: string;
|
|
30
|
+
/** Leave message template */
|
|
31
|
+
leaveMessage?: string;
|
|
32
|
+
/** Leave embed */
|
|
33
|
+
leaveEmbed?: {
|
|
34
|
+
title?: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
color?: string;
|
|
37
|
+
};
|
|
38
|
+
/** DM new members */
|
|
39
|
+
dmNewMembers?: boolean;
|
|
40
|
+
/** DM message */
|
|
41
|
+
dmMessage?: string;
|
|
42
|
+
}
|
|
43
|
+
declare const welcomeEventHandlers: EventHandler[];
|
|
44
|
+
declare const welcomeCommands: CommandDefinition[];
|
|
45
|
+
declare const welcomeCanvasGenerators: Record<string, CanvasGenerator>;
|
|
46
|
+
declare function getWelcomeSpec(config?: WelcomeConfig): Partial<FurlowSpec>;
|
|
47
|
+
|
|
48
|
+
export { type WelcomeConfig, getWelcomeSpec, welcomeCanvasGenerators, welcomeCommands, welcomeEventHandlers };
|