@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 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/starboard/index.ts"],"sourcesContent":["/**\n * Starboard builtin module\n * Handles star reactions and hall of fame\n */\n\nimport type { FurlowSpec, CommandDefinition, EventHandler, TableDefinition } from '@furlow/schema';\n\nexport interface StarboardConfig {\n /** Starboard channel */\n channel?: string;\n /** Minimum stars required */\n threshold?: number;\n /** Emoji to use (default: star) */\n emoji?: string;\n /** Self-starring allowed */\n selfStar?: boolean;\n /** Bot messages can be starred */\n botMessages?: boolean;\n /** Ignored channels */\n ignoredChannels?: string[];\n /** NSFW channel handling */\n nsfwAllowed?: boolean;\n /** Star tiers with different thresholds */\n tiers?: Array<{\n threshold: number;\n emoji: string;\n color?: string;\n }>;\n}\n\nexport const starboardTables: Record<string, TableDefinition> = {\n starboard_messages: {\n columns: {\n id: { type: 'number', primary: true },\n guild_id: { type: 'string', index: true },\n source_channel_id: { type: 'string' },\n source_message_id: { type: 'string', unique: true },\n starboard_message_id: { type: 'string' },\n author_id: { type: 'string', index: true },\n star_count: { type: 'number', default: 0 },\n created_at: { type: 'timestamp' },\n },\n },\n starboard_stars: {\n columns: {\n id: { type: 'number', primary: true },\n message_id: { type: 'string', index: true },\n user_id: { type: 'string' },\n created_at: { type: 'timestamp' },\n },\n },\n};\n\nexport const starboardEventHandlers: EventHandler[] = [\n // Handle star reactions\n {\n event: 'reaction_add',\n condition: '${(reaction.emoji.name === (config.starboard?.emoji || \"⭐\") || reaction.emoji.name === \"🌟\") && config.starboard?.channel}',\n actions: [\n // Check if channel is ignored\n {\n action: 'flow_if',\n condition: '${config.starboard.ignoredChannels?.includes(channel.id)}',\n then: [{ action: 'abort' }],\n },\n // Check NSFW\n {\n action: 'flow_if',\n condition: '${channel.nsfw && !config.starboard.nsfwAllowed}',\n then: [{ action: 'abort' }],\n },\n // Check self-star\n {\n action: 'flow_if',\n condition: '${!config.starboard.selfStar && user.id === message.author.id}',\n then: [{ action: 'abort' }],\n },\n // Check bot messages\n {\n action: 'flow_if',\n condition: '${!config.starboard.botMessages && message.author.bot}',\n then: [{ action: 'abort' }],\n },\n // Check if already starred by this user\n {\n action: 'db_query',\n table: 'starboard_stars',\n where: { message_id: '${message.id}', user_id: '${user.id}' },\n as: 'existingStar',\n },\n {\n action: 'flow_if',\n condition: '${existingStar.length > 0}',\n then: [{ action: 'abort' }],\n },\n // Add star\n {\n action: 'db_insert',\n table: 'starboard_stars',\n data: {\n message_id: '${message.id}',\n user_id: '${user.id}',\n created_at: '${now()}',\n },\n },\n // Count stars\n {\n action: 'db_query',\n table: 'starboard_stars',\n where: { message_id: '${message.id}' },\n as: 'allStars',\n },\n {\n action: 'set',\n key: 'starCount',\n value: '${allStars.length}',\n },\n // Get threshold\n {\n action: 'set',\n key: 'threshold',\n value: '${config.starboard.threshold || 3}',\n },\n // Get appropriate tier\n {\n action: 'set',\n key: 'tier',\n value: '${config.starboard.tiers ? config.starboard.tiers.filter(t => starCount >= t.threshold).pop() : null}',\n },\n {\n action: 'set',\n key: 'displayEmoji',\n value: '${tier?.emoji || config.starboard.emoji || \"⭐\"}',\n },\n {\n action: 'set',\n key: 'embedColor',\n value: '${tier?.color || \"#ffd700\"}',\n },\n // Check if already on starboard\n {\n action: 'db_query',\n table: 'starboard_messages',\n where: { source_message_id: '${message.id}' },\n as: 'existing',\n },\n {\n action: 'flow_if',\n condition: '${existing.length > 0}',\n then: [\n // Update existing starboard message\n {\n action: 'db_update',\n table: 'starboard_messages',\n where: { source_message_id: '${message.id}' },\n data: { star_count: '${starCount}' },\n },\n {\n action: 'edit_message',\n channel: '${config.starboard.channel}',\n message: '${existing[0].starboard_message_id}',\n content: '${displayEmoji} **${starCount}** | <#${channel.id}>',\n },\n ],\n else: [\n // Create new starboard entry if threshold met\n {\n action: 'flow_if',\n condition: '${starCount >= threshold}',\n then: [\n // Build embed\n {\n action: 'set',\n key: 'imageUrl',\n value: '${message.attachments.first()?.url || message.embeds[0]?.image?.url || message.embeds[0]?.thumbnail?.url}',\n },\n {\n action: 'send_message',\n channel: '${config.starboard.channel}',\n content: '${displayEmoji} **${starCount}** | <#${channel.id}>',\n embed: {\n author: {\n name: '${message.author.tag}',\n icon_url: '${message.author.avatarURL}',\n },\n description: '${message.content}\\n\\n[Jump to message](${message.url})',\n color: '${embedColor}',\n image: '${imageUrl ? { url: imageUrl } : null}',\n timestamp: '${message.createdAt}',\n footer: {\n text: 'ID: ${message.id}',\n },\n },\n as: 'starboardMessage',\n },\n {\n action: 'db_insert',\n table: 'starboard_messages',\n data: {\n guild_id: '${guild.id}',\n source_channel_id: '${channel.id}',\n source_message_id: '${message.id}',\n starboard_message_id: '${starboardMessage.id}',\n author_id: '${message.author.id}',\n star_count: '${starCount}',\n created_at: '${now()}',\n },\n },\n ],\n },\n ],\n },\n ],\n },\n // Handle star removal\n {\n event: 'reaction_remove',\n condition: '${(reaction.emoji.name === (config.starboard?.emoji || \"⭐\") || reaction.emoji.name === \"🌟\") && config.starboard?.channel}',\n actions: [\n // Remove star record\n {\n action: 'db_delete',\n table: 'starboard_stars',\n where: { message_id: '${message.id}', user_id: '${user.id}' },\n },\n // Count remaining stars\n {\n action: 'db_query',\n table: 'starboard_stars',\n where: { message_id: '${message.id}' },\n as: 'allStars',\n },\n {\n action: 'set',\n key: 'starCount',\n value: '${allStars.length}',\n },\n // Check if on starboard\n {\n action: 'db_query',\n table: 'starboard_messages',\n where: { source_message_id: '${message.id}' },\n as: 'existing',\n },\n {\n action: 'flow_if',\n condition: '${existing.length > 0}',\n then: [\n {\n action: 'flow_if',\n condition: '${starCount < (config.starboard.threshold || 3)}',\n then: [\n // Remove from starboard\n {\n action: 'delete_message',\n channel: '${config.starboard.channel}',\n message: '${existing[0].starboard_message_id}',\n },\n {\n action: 'db_delete',\n table: 'starboard_messages',\n where: { source_message_id: '${message.id}' },\n },\n ],\n else: [\n // Update count\n {\n action: 'set',\n key: 'tier',\n value: '${config.starboard.tiers ? config.starboard.tiers.filter(t => starCount >= t.threshold).pop() : null}',\n },\n {\n action: 'set',\n key: 'displayEmoji',\n value: '${tier?.emoji || config.starboard.emoji || \"⭐\"}',\n },\n {\n action: 'db_update',\n table: 'starboard_messages',\n where: { source_message_id: '${message.id}' },\n data: { star_count: '${starCount}' },\n },\n {\n action: 'edit_message',\n channel: '${config.starboard.channel}',\n message: '${existing[0].starboard_message_id}',\n content: '${displayEmoji} **${starCount}** | <#${channel.id}>',\n },\n ],\n },\n ],\n },\n ],\n },\n];\n\nexport const starboardCommands: CommandDefinition[] = [\n {\n name: 'starboard',\n description: 'Starboard commands',\n subcommands: [\n {\n name: 'setup',\n description: 'Set up the starboard',\n options: [\n { name: 'channel', description: 'Starboard channel', type: 'channel', required: true },\n { name: 'threshold', description: 'Minimum stars required', type: 'integer', required: false },\n { name: 'emoji', description: 'Star emoji', type: 'string', required: false },\n ],\n actions: [\n {\n action: 'set',\n key: 'config.starboard.channel',\n value: '${args.channel.id}',\n scope: 'guild',\n },\n {\n action: 'flow_if',\n condition: '${args.threshold}',\n then: [\n {\n action: 'set',\n key: 'config.starboard.threshold',\n value: '${args.threshold}',\n scope: 'guild',\n },\n ],\n },\n {\n action: 'flow_if',\n condition: '${args.emoji}',\n then: [\n {\n action: 'set',\n key: 'config.starboard.emoji',\n value: '${args.emoji}',\n scope: 'guild',\n },\n ],\n },\n {\n action: 'reply',\n content: 'Starboard set up in ${args.channel}!',\n ephemeral: true,\n },\n ],\n },\n {\n name: 'stats',\n description: 'View starboard statistics',\n actions: [\n {\n action: 'db_query',\n table: 'starboard_messages',\n where: { guild_id: '${guild.id}' },\n order_by: 'star_count DESC',\n limit: 5,\n as: 'topMessages',\n },\n {\n action: 'db_query',\n table: 'starboard_messages',\n where: { guild_id: '${guild.id}' },\n as: 'allMessages',\n },\n {\n action: 'set',\n key: 'totalStars',\n value: '${allMessages.reduce((sum, m) => sum + m.star_count, 0)}',\n },\n {\n action: 'reply',\n embed: {\n title: 'Starboard Statistics',\n color: '#ffd700',\n fields: [\n { name: 'Total Starred Messages', value: '${allMessages.length}', inline: true },\n { name: 'Total Stars', value: '${totalStars}', inline: true },\n { name: 'Top Starred Messages', value: '${topMessages.map((m, i) => (i + 1) + \". \" + m.star_count + \" stars - <@\" + m.author_id + \">\").join(\"\\\\n\") || \"None yet!\"}' },\n ],\n },\n },\n ],\n },\n {\n name: 'random',\n description: 'Get a random starred message',\n actions: [\n {\n action: 'db_query',\n table: 'starboard_messages',\n where: { guild_id: '${guild.id}' },\n as: 'allMessages',\n },\n {\n action: 'flow_if',\n condition: '${allMessages.length === 0}',\n then: [\n { action: 'reply', content: 'No starred messages yet!', ephemeral: true },\n { action: 'abort' },\n ],\n },\n {\n action: 'set',\n key: 'randomMessage',\n value: '${allMessages[floor(random(0, allMessages.length))]}',\n },\n {\n action: 'reply',\n content: '⭐ **${randomMessage.star_count}** - https://discord.com/channels/${guild.id}/${randomMessage.source_channel_id}/${randomMessage.source_message_id}',\n },\n ],\n },\n ],\n },\n];\n\nexport function getStarboardSpec(config: StarboardConfig = {}): Partial<FurlowSpec> {\n return {\n events: starboardEventHandlers,\n commands: starboardCommands,\n state: {\n tables: starboardTables,\n },\n };\n}\n"],"mappings":";AA8BO,IAAM,kBAAmD;AAAA,EAC9D,oBAAoB;AAAA,IAClB,SAAS;AAAA,MACP,IAAI,EAAE,MAAM,UAAU,SAAS,KAAK;AAAA,MACpC,UAAU,EAAE,MAAM,UAAU,OAAO,KAAK;AAAA,MACxC,mBAAmB,EAAE,MAAM,SAAS;AAAA,MACpC,mBAAmB,EAAE,MAAM,UAAU,QAAQ,KAAK;AAAA,MAClD,sBAAsB,EAAE,MAAM,SAAS;AAAA,MACvC,WAAW,EAAE,MAAM,UAAU,OAAO,KAAK;AAAA,MACzC,YAAY,EAAE,MAAM,UAAU,SAAS,EAAE;AAAA,MACzC,YAAY,EAAE,MAAM,YAAY;AAAA,IAClC;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,SAAS;AAAA,MACP,IAAI,EAAE,MAAM,UAAU,SAAS,KAAK;AAAA,MACpC,YAAY,EAAE,MAAM,UAAU,OAAO,KAAK;AAAA,MAC1C,SAAS,EAAE,MAAM,SAAS;AAAA,MAC1B,YAAY,EAAE,MAAM,YAAY;AAAA,IAClC;AAAA,EACF;AACF;AAEO,IAAM,yBAAyC;AAAA;AAAA,EAEpD;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA;AAAA,MAEP;AAAA,QACE,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,MAAM,CAAC,EAAE,QAAQ,QAAQ,CAAC;AAAA,MAC5B;AAAA;AAAA,MAEA;AAAA,QACE,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,MAAM,CAAC,EAAE,QAAQ,QAAQ,CAAC;AAAA,MAC5B;AAAA;AAAA,MAEA;AAAA,QACE,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,MAAM,CAAC,EAAE,QAAQ,QAAQ,CAAC;AAAA,MAC5B;AAAA;AAAA,MAEA;AAAA,QACE,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,MAAM,CAAC,EAAE,QAAQ,QAAQ,CAAC;AAAA,MAC5B;AAAA;AAAA,MAEA;AAAA,QACE,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,OAAO,EAAE,YAAY,iBAAiB,SAAS,aAAa;AAAA,QAC5D,IAAI;AAAA,MACN;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,MAAM,CAAC,EAAE,QAAQ,QAAQ,CAAC;AAAA,MAC5B;AAAA;AAAA,MAEA;AAAA,QACE,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,MAAM;AAAA,UACJ,YAAY;AAAA,UACZ,SAAS;AAAA,UACT,YAAY;AAAA,QACd;AAAA,MACF;AAAA;AAAA,MAEA;AAAA,QACE,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,OAAO,EAAE,YAAY,gBAAgB;AAAA,QACrC,IAAI;AAAA,MACN;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA;AAAA,MAEA;AAAA,QACE,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA;AAAA,MAEA;AAAA,QACE,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA;AAAA,MAEA;AAAA,QACE,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,OAAO,EAAE,mBAAmB,gBAAgB;AAAA,QAC5C,IAAI;AAAA,MACN;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,MAAM;AAAA;AAAA,UAEJ;AAAA,YACE,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,OAAO,EAAE,mBAAmB,gBAAgB;AAAA,YAC5C,MAAM,EAAE,YAAY,eAAe;AAAA,UACrC;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,SAAS;AAAA,YACT,SAAS;AAAA,UACX;AAAA,QACF;AAAA,QACA,MAAM;AAAA;AAAA,UAEJ;AAAA,YACE,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,MAAM;AAAA;AAAA,cAEJ;AAAA,gBACE,QAAQ;AAAA,gBACR,KAAK;AAAA,gBACL,OAAO;AAAA,cACT;AAAA,cACA;AAAA,gBACE,QAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,SAAS;AAAA,gBACT,OAAO;AAAA,kBACL,QAAQ;AAAA,oBACN,MAAM;AAAA,oBACN,UAAU;AAAA,kBACZ;AAAA,kBACA,aAAa;AAAA,kBACb,OAAO;AAAA,kBACP,OAAO;AAAA,kBACP,WAAW;AAAA,kBACX,QAAQ;AAAA,oBACN,MAAM;AAAA,kBACR;AAAA,gBACF;AAAA,gBACA,IAAI;AAAA,cACN;AAAA,cACA;AAAA,gBACE,QAAQ;AAAA,gBACR,OAAO;AAAA,gBACP,MAAM;AAAA,kBACJ,UAAU;AAAA,kBACV,mBAAmB;AAAA,kBACnB,mBAAmB;AAAA,kBACnB,sBAAsB;AAAA,kBACtB,WAAW;AAAA,kBACX,YAAY;AAAA,kBACZ,YAAY;AAAA,gBACd;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAEA;AAAA,IACE,OAAO;AAAA,IACP,WAAW;AAAA,IACX,SAAS;AAAA;AAAA,MAEP;AAAA,QACE,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,OAAO,EAAE,YAAY,iBAAiB,SAAS,aAAa;AAAA,MAC9D;AAAA;AAAA,MAEA;AAAA,QACE,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,OAAO,EAAE,YAAY,gBAAgB;AAAA,QACrC,IAAI;AAAA,MACN;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA;AAAA,MAEA;AAAA,QACE,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,OAAO,EAAE,mBAAmB,gBAAgB;AAAA,QAC5C,IAAI;AAAA,MACN;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,MAAM;AAAA,UACJ;AAAA,YACE,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,MAAM;AAAA;AAAA,cAEJ;AAAA,gBACE,QAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,SAAS;AAAA,cACX;AAAA,cACA;AAAA,gBACE,QAAQ;AAAA,gBACR,OAAO;AAAA,gBACP,OAAO,EAAE,mBAAmB,gBAAgB;AAAA,cAC9C;AAAA,YACF;AAAA,YACA,MAAM;AAAA;AAAA,cAEJ;AAAA,gBACE,QAAQ;AAAA,gBACR,KAAK;AAAA,gBACL,OAAO;AAAA,cACT;AAAA,cACA;AAAA,gBACE,QAAQ;AAAA,gBACR,KAAK;AAAA,gBACL,OAAO;AAAA,cACT;AAAA,cACA;AAAA,gBACE,QAAQ;AAAA,gBACR,OAAO;AAAA,gBACP,OAAO,EAAE,mBAAmB,gBAAgB;AAAA,gBAC5C,MAAM,EAAE,YAAY,eAAe;AAAA,cACrC;AAAA,cACA;AAAA,gBACE,QAAQ;AAAA,gBACR,SAAS;AAAA,gBACT,SAAS;AAAA,gBACT,SAAS;AAAA,cACX;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,IAAM,oBAAyC;AAAA,EACpD;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,MACX;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,UACP,EAAE,MAAM,WAAW,aAAa,qBAAqB,MAAM,WAAW,UAAU,KAAK;AAAA,UACrF,EAAE,MAAM,aAAa,aAAa,0BAA0B,MAAM,WAAW,UAAU,MAAM;AAAA,UAC7F,EAAE,MAAM,SAAS,aAAa,cAAc,MAAM,UAAU,UAAU,MAAM;AAAA,QAC9E;AAAA,QACA,SAAS;AAAA,UACP;AAAA,YACE,QAAQ;AAAA,YACR,KAAK;AAAA,YACL,OAAO;AAAA,YACP,OAAO;AAAA,UACT;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,MAAM;AAAA,cACJ;AAAA,gBACE,QAAQ;AAAA,gBACR,KAAK;AAAA,gBACL,OAAO;AAAA,gBACP,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,MAAM;AAAA,cACJ;AAAA,gBACE,QAAQ;AAAA,gBACR,KAAK;AAAA,gBACL,OAAO;AAAA,gBACP,OAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,UACP;AAAA,YACE,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,OAAO,EAAE,UAAU,cAAc;AAAA,YACjC,UAAU;AAAA,YACV,OAAO;AAAA,YACP,IAAI;AAAA,UACN;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,OAAO,EAAE,UAAU,cAAc;AAAA,YACjC,IAAI;AAAA,UACN;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,KAAK;AAAA,YACL,OAAO;AAAA,UACT;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,OAAO;AAAA,cACL,OAAO;AAAA,cACP,OAAO;AAAA,cACP,QAAQ;AAAA,gBACN,EAAE,MAAM,0BAA0B,OAAO,yBAAyB,QAAQ,KAAK;AAAA,gBAC/E,EAAE,MAAM,eAAe,OAAO,iBAAiB,QAAQ,KAAK;AAAA,gBAC5D,EAAE,MAAM,wBAAwB,OAAO,6HAA6H;AAAA,cACtK;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS;AAAA,UACP;AAAA,YACE,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,OAAO,EAAE,UAAU,cAAc;AAAA,YACjC,IAAI;AAAA,UACN;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,MAAM;AAAA,cACJ,EAAE,QAAQ,SAAS,SAAS,4BAA4B,WAAW,KAAK;AAAA,cACxE,EAAE,QAAQ,QAAQ;AAAA,YACpB;AAAA,UACF;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,KAAK;AAAA,YACL,OAAO;AAAA,UACT;AAAA,UACA;AAAA,YACE,QAAQ;AAAA,YACR,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,SAA0B,CAAC,GAAwB;AAClF,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,MACL,QAAQ;AAAA,IACV;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { FurlowSpec, ComponentDefinition, CommandDefinition, EventHandler, TableDefinition } from '@furlow/schema';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Tickets builtin module
|
|
5
|
+
* Handles ticket creation, claiming, closing, and transcripts
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
interface TicketsConfig {
|
|
9
|
+
/** Category to create tickets in */
|
|
10
|
+
category?: string;
|
|
11
|
+
/** Support roles that can see tickets */
|
|
12
|
+
supportRoles?: string[];
|
|
13
|
+
/** Ticket channel naming pattern */
|
|
14
|
+
channelPattern?: string;
|
|
15
|
+
/** Maximum open tickets per user */
|
|
16
|
+
maxTicketsPerUser?: number;
|
|
17
|
+
/** Ticket panel channel */
|
|
18
|
+
panelChannel?: string;
|
|
19
|
+
/** Log channel for ticket transcripts */
|
|
20
|
+
logChannel?: string;
|
|
21
|
+
/** Auto-close inactive tickets (hours) */
|
|
22
|
+
autoCloseAfter?: number;
|
|
23
|
+
/** Ticket categories/types */
|
|
24
|
+
categories?: Array<{
|
|
25
|
+
id: string;
|
|
26
|
+
name: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
emoji?: string;
|
|
29
|
+
supportRoles?: string[];
|
|
30
|
+
}>;
|
|
31
|
+
/** DM user on ticket close */
|
|
32
|
+
dmOnClose?: boolean;
|
|
33
|
+
/** Include transcript on close */
|
|
34
|
+
includeTranscript?: boolean;
|
|
35
|
+
}
|
|
36
|
+
declare const ticketsTables: Record<string, TableDefinition>;
|
|
37
|
+
declare const ticketPanelComponents: ComponentDefinition[];
|
|
38
|
+
declare const ticketControlComponents: ComponentDefinition[];
|
|
39
|
+
declare const ticketsEventHandlers: EventHandler[];
|
|
40
|
+
declare const ticketsCommands: CommandDefinition[];
|
|
41
|
+
declare function getTicketsSpec(config?: TicketsConfig): Partial<FurlowSpec>;
|
|
42
|
+
|
|
43
|
+
export { type TicketsConfig, getTicketsSpec, ticketControlComponents, ticketPanelComponents, ticketsCommands, ticketsEventHandlers, ticketsTables };
|