spectre-html-transcripts 3.3.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.
Files changed (91) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +153 -0
  3. package/dist/downloader/images.d.ts +43 -0
  4. package/dist/downloader/images.js +125 -0
  5. package/dist/downloader/images.js.map +1 -0
  6. package/dist/generator/index.d.ts +20 -0
  7. package/dist/generator/index.js +79 -0
  8. package/dist/generator/index.js.map +1 -0
  9. package/dist/generator/renderers/attachment.d.ts +24 -0
  10. package/dist/generator/renderers/attachment.js +49 -0
  11. package/dist/generator/renderers/attachment.js.map +1 -0
  12. package/dist/generator/renderers/components/Button.d.ts +9 -0
  13. package/dist/generator/renderers/components/Button.js +19 -0
  14. package/dist/generator/renderers/components/Button.js.map +1 -0
  15. package/dist/generator/renderers/components/Container.d.ts +5 -0
  16. package/dist/generator/renderers/components/Container.js +22 -0
  17. package/dist/generator/renderers/components/Container.js.map +1 -0
  18. package/dist/generator/renderers/components/Media Gallery.d.ts +6 -0
  19. package/dist/generator/renderers/components/Media Gallery.js +39 -0
  20. package/dist/generator/renderers/components/Media Gallery.js.map +1 -0
  21. package/dist/generator/renderers/components/Select Menu.d.ts +5 -0
  22. package/dist/generator/renderers/components/Select Menu.js +41 -0
  23. package/dist/generator/renderers/components/Select Menu.js.map +1 -0
  24. package/dist/generator/renderers/components/Spacing.d.ts +6 -0
  25. package/dist/generator/renderers/components/Spacing.js +17 -0
  26. package/dist/generator/renderers/components/Spacing.js.map +1 -0
  27. package/dist/generator/renderers/components/Thumbnail.d.ts +5 -0
  28. package/dist/generator/renderers/components/Thumbnail.js +16 -0
  29. package/dist/generator/renderers/components/Thumbnail.js.map +1 -0
  30. package/dist/generator/renderers/components/section/Section.d.ts +10 -0
  31. package/dist/generator/renderers/components/section/Section.js +21 -0
  32. package/dist/generator/renderers/components/section/Section.js.map +1 -0
  33. package/dist/generator/renderers/components/section/SectionAccessory.d.ts +6 -0
  34. package/dist/generator/renderers/components/section/SectionAccessory.js +19 -0
  35. package/dist/generator/renderers/components/section/SectionAccessory.js.map +1 -0
  36. package/dist/generator/renderers/components/section/SectionContent.d.ts +6 -0
  37. package/dist/generator/renderers/components/section/SectionContent.js +15 -0
  38. package/dist/generator/renderers/components/section/SectionContent.js.map +1 -0
  39. package/dist/generator/renderers/components/styles.d.ts +29 -0
  40. package/dist/generator/renderers/components/styles.js +110 -0
  41. package/dist/generator/renderers/components/styles.js.map +1 -0
  42. package/dist/generator/renderers/components/utils.d.ts +36 -0
  43. package/dist/generator/renderers/components/utils.js +98 -0
  44. package/dist/generator/renderers/components/utils.js.map +1 -0
  45. package/dist/generator/renderers/components.d.ts +15 -0
  46. package/dist/generator/renderers/components.js +62 -0
  47. package/dist/generator/renderers/components.js.map +1 -0
  48. package/dist/generator/renderers/content.d.ts +31 -0
  49. package/dist/generator/renderers/content.js +137 -0
  50. package/dist/generator/renderers/content.js.map +1 -0
  51. package/dist/generator/renderers/embed.d.ts +12 -0
  52. package/dist/generator/renderers/embed.js +53 -0
  53. package/dist/generator/renderers/embed.js.map +1 -0
  54. package/dist/generator/renderers/message.d.ts +7 -0
  55. package/dist/generator/renderers/message.js +69 -0
  56. package/dist/generator/renderers/message.js.map +1 -0
  57. package/dist/generator/renderers/reply.d.ts +7 -0
  58. package/dist/generator/renderers/reply.js +59 -0
  59. package/dist/generator/renderers/reply.js.map +1 -0
  60. package/dist/generator/renderers/systemMessage.d.ts +13 -0
  61. package/dist/generator/renderers/systemMessage.js +133 -0
  62. package/dist/generator/renderers/systemMessage.js.map +1 -0
  63. package/dist/generator/transcript.d.ts +10 -0
  64. package/dist/generator/transcript.js +86 -0
  65. package/dist/generator/transcript.js.map +1 -0
  66. package/dist/index.d.ts +35 -0
  67. package/dist/index.js +148 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/static/client.d.ts +2 -0
  70. package/dist/static/client.js +30 -0
  71. package/dist/static/client.js.map +1 -0
  72. package/dist/test.js +65 -0
  73. package/dist/types.d.ts +75 -0
  74. package/dist/types.js +10 -0
  75. package/dist/types.js.map +1 -0
  76. package/dist/utils/buildProfiles.d.ts +11 -0
  77. package/dist/utils/buildProfiles.js +41 -0
  78. package/dist/utils/buildProfiles.js.map +1 -0
  79. package/dist/utils/djsAdapter.d.ts +9 -0
  80. package/dist/utils/djsAdapter.js +96 -0
  81. package/dist/utils/djsAdapter.js.map +1 -0
  82. package/dist/utils/embeds.d.ts +1 -0
  83. package/dist/utils/embeds.js +17 -0
  84. package/dist/utils/embeds.js.map +1 -0
  85. package/dist/utils/extend.d.ts +8 -0
  86. package/dist/utils/extend.js +8 -0
  87. package/dist/utils/extend.js.map +1 -0
  88. package/dist/utils/utils.d.ts +14 -0
  89. package/dist/utils/utils.js +44 -0
  90. package/dist/utils/utils.js.map +1 -0
  91. package/package.json +73 -0
package/dist/types.js ADDED
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExportReturnType = void 0;
4
+ var ExportReturnType;
5
+ (function (ExportReturnType) {
6
+ ExportReturnType["Buffer"] = "buffer";
7
+ ExportReturnType["String"] = "string";
8
+ ExportReturnType["Attachment"] = "attachment";
9
+ })(ExportReturnType || (exports.ExportReturnType = ExportReturnType = {}));
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAcA,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,qCAAiB,CAAA;IACjB,qCAAiB,CAAA;IACjB,6CAAyB,CAAA;AAC3B,CAAC,EAJW,gBAAgB,gCAAhB,gBAAgB,QAI3B"}
@@ -0,0 +1,11 @@
1
+ import { type Message } from 'discord.js-selfbot-v13';
2
+ export type Profile = {
3
+ author: string;
4
+ avatar?: string;
5
+ roleColor?: string;
6
+ roleIcon?: string;
7
+ roleName?: string;
8
+ bot?: boolean;
9
+ verified?: boolean;
10
+ };
11
+ export declare function buildProfiles(messages: Message[]): Promise<Record<string, Profile>>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildProfiles = buildProfiles;
4
+ async function buildProfiles(messages) {
5
+ const profiles = {};
6
+ // loop through messages
7
+ for (const message of messages) {
8
+ // add all users
9
+ const author = message.author;
10
+ if (!profiles[author.id]) {
11
+ // add profile
12
+ profiles[author.id] = buildProfile(message.member, author);
13
+ }
14
+ // add interaction users
15
+ if (message.interaction) {
16
+ const user = message.interaction.user;
17
+ if (!profiles[user.id]) {
18
+ profiles[user.id] = buildProfile(null, user);
19
+ }
20
+ }
21
+ // threads
22
+ if (message.thread && message.thread.lastMessage) {
23
+ profiles[message.thread.lastMessage.author.id] = buildProfile(message.thread.lastMessage.member, message.thread.lastMessage.author);
24
+ }
25
+ }
26
+ // return as a JSON
27
+ return profiles;
28
+ }
29
+ function buildProfile(member, author) {
30
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
31
+ return {
32
+ author: (_b = (_a = member === null || member === void 0 ? void 0 : member.nickname) !== null && _a !== void 0 ? _a : author.displayName) !== null && _b !== void 0 ? _b : author.username,
33
+ avatar: (_c = member === null || member === void 0 ? void 0 : member.displayAvatarURL({ size: 64 })) !== null && _c !== void 0 ? _c : author.displayAvatarURL({ size: 64 }),
34
+ roleColor: member === null || member === void 0 ? void 0 : member.displayHexColor,
35
+ roleIcon: (_e = (_d = member === null || member === void 0 ? void 0 : member.roles.icon) === null || _d === void 0 ? void 0 : _d.iconURL()) !== null && _e !== void 0 ? _e : undefined,
36
+ roleName: (_g = (_f = member === null || member === void 0 ? void 0 : member.roles.hoist) === null || _f === void 0 ? void 0 : _f.name) !== null && _g !== void 0 ? _g : undefined,
37
+ bot: author.bot,
38
+ verified: (_j = (_h = author.flags) === null || _h === void 0 ? void 0 : _h.has(1 << 16)) !== null && _j !== void 0 ? _j : false, // VerifiedBot flag in discord.js-selfbot-v13
39
+ };
40
+ }
41
+ //# sourceMappingURL=buildProfiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildProfiles.js","sourceRoot":"","sources":["../../src/utils/buildProfiles.ts"],"names":[],"mappings":";;AAaA,sCA+BC;AA/BM,KAAK,UAAU,aAAa,CAAC,QAAmB;IACrD,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAE7C,wBAAwB;IACxB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,gBAAgB;QAChB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,cAAc;YACd,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC;QAED,wBAAwB;QACxB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;YACtC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,UAAU;QACV,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YACjD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,YAAY,CAC3D,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EACjC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAClC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,MAA0B,EAAE,MAAY;;IAC5D,OAAO;QACL,MAAM,EAAE,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,QAAQ,mCAAI,MAAM,CAAC,WAAW,mCAAI,MAAM,CAAC,QAAQ;QACjE,MAAM,EAAE,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,mCAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACvF,SAAS,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,eAAe;QAClC,QAAQ,EAAE,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,IAAI,0CAAE,OAAO,EAAE,mCAAI,SAAS;QACpD,QAAQ,EAAE,MAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,CAAC,KAAK,0CAAE,IAAI,mCAAI,SAAS;QAChD,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,QAAQ,EAAE,MAAA,MAAA,MAAM,CAAC,KAAK,0CAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,mCAAI,KAAK,EAAE,6CAA6C;KAC7F,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Small adapter utilities to provide compatibility between discord.js v14+ (enum/numeric APIs)
3
+ * and discord.js-selfbot-v13 (string-based channel types and missing helper methods).
4
+ */
5
+ export declare function isTextBasedChannel(channel: any): boolean;
6
+ export declare function isDMBasedChannel(channel: any): boolean;
7
+ export declare function isThreadChannel(channel: any): boolean;
8
+ export declare function isVoiceBasedChannel(channel: any): boolean;
9
+ export declare function getChannelTypeFrom(type: any): 'channel' | 'voice' | 'thread' | 'forum';
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ /**
3
+ * Small adapter utilities to provide compatibility between discord.js v14+ (enum/numeric APIs)
4
+ * and discord.js-selfbot-v13 (string-based channel types and missing helper methods).
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.isTextBasedChannel = isTextBasedChannel;
8
+ exports.isDMBasedChannel = isDMBasedChannel;
9
+ exports.isThreadChannel = isThreadChannel;
10
+ exports.isVoiceBasedChannel = isVoiceBasedChannel;
11
+ exports.getChannelTypeFrom = getChannelTypeFrom;
12
+ function isTextBasedChannel(channel) {
13
+ if (!channel)
14
+ return false;
15
+ if (typeof channel.isTextBased === 'function')
16
+ return channel.isTextBased();
17
+ const t = channel.type;
18
+ return ['GUILD_TEXT', 'DM', 'GROUP_DM', 'GUILD_NEWS', 'GUILD_FORUM'].includes(t);
19
+ }
20
+ function isDMBasedChannel(channel) {
21
+ if (!channel)
22
+ return false;
23
+ if (typeof channel.isDMBased === 'function')
24
+ return channel.isDMBased();
25
+ const t = channel.type;
26
+ return t === 'DM' || t === 'GROUP_DM';
27
+ }
28
+ function isThreadChannel(channel) {
29
+ if (!channel)
30
+ return false;
31
+ if (typeof channel.isThread === 'function')
32
+ return channel.isThread();
33
+ const t = channel.type;
34
+ return t && t.toString().toUpperCase().includes('THREAD');
35
+ }
36
+ function isVoiceBasedChannel(channel) {
37
+ if (!channel)
38
+ return false;
39
+ if (typeof channel.isVoiceBased === 'function')
40
+ return channel.isVoiceBased();
41
+ const t = channel.type;
42
+ return t === 'GUILD_VOICE' || t === 'GUILD_STAGE_VOICE';
43
+ }
44
+ function getChannelTypeFrom(type) {
45
+ // Accept both numeric enums (v14) and string types (v13)
46
+ if (typeof type === 'number') {
47
+ // Common mapping for v14 numeric values
48
+ switch (type) {
49
+ // category / text-like
50
+ case 4: // GuildCategory
51
+ case 15: // GuildAnnouncement
52
+ case 0: // GuildText
53
+ case 1: // DM
54
+ case 3: // GroupDM
55
+ case 14: // GuildDirectory
56
+ case 16: // GuildMedia
57
+ return 'channel';
58
+ case 2: // GuildVoice
59
+ case 13: // GuildStageVoice
60
+ return 'voice';
61
+ case 11: // PublicThread
62
+ case 12: // PrivateThread
63
+ case 10: // AnnouncementThread
64
+ return 'thread';
65
+ case 15: // GuildForum (overlaps in enums across versions)
66
+ return 'forum';
67
+ default:
68
+ return 'channel';
69
+ }
70
+ }
71
+ if (typeof type === 'string') {
72
+ switch (type) {
73
+ case 'DM':
74
+ case 'GROUP_DM':
75
+ case 'GUILD_TEXT':
76
+ case 'GUILD_ANNOUNCEMENT':
77
+ case 'GUILD_CATEGORY':
78
+ case 'GUILD_DIRECTORY':
79
+ case 'GUILD_MEDIA':
80
+ return 'channel';
81
+ case 'GUILD_VOICE':
82
+ case 'GUILD_STAGE_VOICE':
83
+ return 'voice';
84
+ case 'GUILD_PUBLIC_THREAD':
85
+ case 'GUILD_PRIVATE_THREAD':
86
+ case 'GUILD_NEWS_THREAD':
87
+ return 'thread';
88
+ case 'GUILD_FORUM':
89
+ return 'forum';
90
+ default:
91
+ return 'channel';
92
+ }
93
+ }
94
+ return 'channel';
95
+ }
96
+ //# sourceMappingURL=djsAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"djsAdapter.js","sourceRoot":"","sources":["../../src/utils/djsAdapter.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAEH,gDAKC;AAED,4CAKC;AAED,0CAKC;AAED,kDAKC;AAED,gDAqDC;AAjFD,SAAgB,kBAAkB,CAAC,OAAY;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;IAC5E,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACvB,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAY;IAC3C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,SAAS,EAAE,CAAC;IACxE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACvB,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,UAAU,CAAC;AACxC,CAAC;AAED,SAAgB,eAAe,CAAC,OAAY;IAC1C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;IACtE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAAY;IAC9C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,UAAU;QAAE,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC;IAC9E,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACvB,OAAO,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,mBAAmB,CAAC;AAC1D,CAAC;AAED,SAAgB,kBAAkB,CAAC,IAAS;IAC1C,yDAAyD;IACzD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,wCAAwC;QACxC,QAAQ,IAAI,EAAE,CAAC;YACb,uBAAuB;YACvB,KAAK,CAAC,CAAC,CAAC,gBAAgB;YACxB,KAAK,EAAE,CAAC,CAAC,oBAAoB;YAC7B,KAAK,CAAC,CAAC,CAAC,YAAY;YACpB,KAAK,CAAC,CAAC,CAAC,KAAK;YACb,KAAK,CAAC,CAAC,CAAC,UAAU;YAClB,KAAK,EAAE,CAAC,CAAC,iBAAiB;YAC1B,KAAK,EAAE,EAAE,aAAa;gBACpB,OAAO,SAAS,CAAC;YACnB,KAAK,CAAC,CAAC,CAAC,aAAa;YACrB,KAAK,EAAE,EAAE,kBAAkB;gBACzB,OAAO,OAAO,CAAC;YACjB,KAAK,EAAE,CAAC,CAAC,eAAe;YACxB,KAAK,EAAE,CAAC,CAAC,gBAAgB;YACzB,KAAK,EAAE,EAAE,qBAAqB;gBAC5B,OAAO,QAAQ,CAAC;YAClB,KAAK,EAAE,EAAE,iDAAiD;gBACxD,OAAO,OAAO,CAAC;YACjB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,IAAI,CAAC;YACV,KAAK,UAAU,CAAC;YAChB,KAAK,YAAY,CAAC;YAClB,KAAK,oBAAoB,CAAC;YAC1B,KAAK,gBAAgB,CAAC;YACtB,KAAK,iBAAiB,CAAC;YACvB,KAAK,aAAa;gBAChB,OAAO,SAAS,CAAC;YACnB,KAAK,aAAa,CAAC;YACnB,KAAK,mBAAmB;gBACtB,OAAO,OAAO,CAAC;YACjB,KAAK,qBAAqB,CAAC;YAC3B,KAAK,sBAAsB,CAAC;YAC5B,KAAK,mBAAmB;gBACtB,OAAO,QAAQ,CAAC;YAClB,KAAK,aAAa;gBAChB,OAAO,OAAO,CAAC;YACjB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function calculateInlineIndex(fields: any[], currentFieldIndex: number): number;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateInlineIndex = calculateInlineIndex;
4
+ function calculateInlineIndex(fields, currentFieldIndex) {
5
+ const startIndex = currentFieldIndex - 1;
6
+ for (let i = startIndex; i >= 0; i--) {
7
+ const field = fields[i];
8
+ if (!field)
9
+ continue;
10
+ if (field.inline === false) {
11
+ const amount = startIndex - i;
12
+ return (amount % 3) + 1;
13
+ }
14
+ }
15
+ return (currentFieldIndex % 3) + 1;
16
+ }
17
+ //# sourceMappingURL=embeds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeds.js","sourceRoot":"","sources":["../../src/utils/embeds.ts"],"names":[],"mappings":";;AAEA,oDAcC;AAdD,SAAgB,oBAAoB,CAAC,MAAa,EAAE,iBAAyB;IAC3E,MAAM,UAAU,GAAG,iBAAiB,GAAG,CAAC,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC;YAC9B,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,iBAAiB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { ASTNode } from 'simple-markdown';
3
+ import type { State } from './types';
4
+ type AdditionalRule = Partial<any> & {
5
+ react: (node: ASTNode, output: (node: ASTNode, state?: unknown) => string, state: State) => ReactNode;
6
+ };
7
+ export declare const extend: (additionalRules: AdditionalRule, defaultRule: any) => AdditionalRule;
8
+ export {};
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extend = void 0;
4
+ const extend = (additionalRules, defaultRule) => {
5
+ return Object.assign({}, defaultRule, additionalRules);
6
+ };
7
+ exports.extend = extend;
8
+ //# sourceMappingURL=extend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extend.js","sourceRoot":"","sources":["../../src/utils/extend.ts"],"names":[],"mappings":";;;AAQO,MAAM,MAAM,GAAG,CAAC,eAA+B,EAAE,WAAgB,EAAkB,EAAE;IAC1F,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;AACzD,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB"}
@@ -0,0 +1,14 @@
1
+ type ComponentEmoji = {
2
+ id?: string;
3
+ name?: string;
4
+ animated?: boolean;
5
+ };
6
+ export declare function isDefined<T>(value: T | undefined | null): value is T;
7
+ export declare function formatBytes(bytes: number, decimals?: number): string;
8
+ export declare function parseDiscordEmoji(emoji: ComponentEmoji | any): string;
9
+ /**
10
+ * Converts a stream to a string
11
+ * @param stream - The stream to convert
12
+ */
13
+ export declare function streamToString(stream: NodeJS.ReadableStream): Promise<string>;
14
+ export {};
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isDefined = isDefined;
7
+ exports.formatBytes = formatBytes;
8
+ exports.parseDiscordEmoji = parseDiscordEmoji;
9
+ exports.streamToString = streamToString;
10
+ const twemoji_1 = __importDefault(require("twemoji"));
11
+ function isDefined(value) {
12
+ return value !== undefined && value !== null;
13
+ }
14
+ function formatBytes(bytes, decimals = 2) {
15
+ if (bytes === 0)
16
+ return '0 Bytes';
17
+ const k = 1024;
18
+ const dm = decimals < 0 ? 0 : decimals;
19
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
20
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
21
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
22
+ }
23
+ function parseDiscordEmoji(emoji) {
24
+ if (emoji.id) {
25
+ return `https://cdn.discordapp.com/emojis/${emoji.id}.${emoji.animated ? 'gif' : 'png'}`;
26
+ }
27
+ const codepoints = twemoji_1.default.convert
28
+ .toCodePoint(emoji.name.indexOf(String.fromCharCode(0x200d)) < 0 ? emoji.name.replace(/\uFE0F/g, '') : emoji.name)
29
+ .toLowerCase();
30
+ return `https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/svg/${codepoints}.svg`;
31
+ }
32
+ /**
33
+ * Converts a stream to a string
34
+ * @param stream - The stream to convert
35
+ */
36
+ function streamToString(stream) {
37
+ const chunks = [];
38
+ return new Promise((resolve, reject) => {
39
+ stream.on('data', (chunk) => chunks.push(chunk));
40
+ stream.on('error', reject);
41
+ stream.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
42
+ });
43
+ }
44
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":";;;;;AAIA,8BAEC;AAED,kCAUC;AAED,8CAYC;AAMD,wCAQC;AA9CD,sDAA8B;AAI9B,SAAgB,SAAS,CAAI,KAA2B;IACtD,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAC/C,CAAC;AAED,SAAgB,WAAW,CAAC,KAAa,EAAE,QAAQ,GAAG,CAAC;IACrD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAElC,MAAM,CAAC,GAAG,IAAI,CAAC;IACf,MAAM,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAExE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,OAAO,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,SAAgB,iBAAiB,CAAC,KAA2B;IAC3D,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,qCAAqC,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC3F,CAAC;IAED,MAAM,UAAU,GAAG,iBAAO,CAAC,OAAO;SAC/B,WAAW,CACV,KAAK,CAAC,IAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAK,CACxG;SACA,WAAW,EAAE,CAAC;IAEjB,OAAO,6DAA6D,UAAU,MAAM,CAAC;AACvF,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAAC,MAA6B;IAC1D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "spectre-html-transcripts",
3
+ "version": "3.3.0",
4
+ "description": "A nicely formatted html transcript generator for discord.js-selfbot-v13.",
5
+ "main": "dist/index.js",
6
+ "homepage": "https://github.com/ItzDerock/spectre-html-transcripts",
7
+ "types": "./dist/index.d.ts",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/6sfy/spectre-html-transcripts.git"
11
+ },
12
+ "keywords": [
13
+ "discord.js-selfbot-v13",
14
+ "discord.js-selfbot-v13-transcripts",
15
+ "discord.js-selfbot-v13-html-transcripts",
16
+ "html-transcripts",
17
+ "spectre-html-transcripts",
18
+ "spectre-transcripts"
19
+ ],
20
+ "author": "Derock <derock@derock.dev>",
21
+ "license": "Apache-2.0",
22
+ "files": [
23
+ "dist/**/*.js",
24
+ "dist/**/*.d.ts",
25
+ "dist/**/*.js.map"
26
+ ],
27
+ "devDependencies": {
28
+ "@eslint/eslintrc": "^3.3.1",
29
+ "@eslint/js": "^9.35.0",
30
+ "@types/debug": "^4.1.12",
31
+ "@types/node": "^24.3.1",
32
+ "@types/react": "^19.1.12",
33
+ "@types/react-dom": "^19.1.9",
34
+ "@typescript-eslint/eslint-plugin": "^8.43.0",
35
+ "@typescript-eslint/parser": "^8.43.0",
36
+ "debug": "^4.4.1",
37
+ "dotenv": "^17.2.2",
38
+ "eslint": "^9.35.0",
39
+ "globals": "^16.4.0",
40
+ "husky": "^9.1.7",
41
+ "prettier": "^3.6.2",
42
+ "pretty-quick": "^4.2.2",
43
+ "sharp": "^0.34.3",
44
+ "ts-node": "^10.9.2",
45
+ "typescript": "^5.9.2"
46
+ },
47
+ "dependencies": {
48
+ "@derockdev/discord-components-core": "^3.6.1",
49
+ "@derockdev/discord-components-react": "^3.6.1",
50
+ "discord-markdown-parser": "~1.2.0",
51
+ "react": "19.1.1",
52
+ "react-dom": "19.1.1",
53
+ "simple-markdown": "^0.7.3",
54
+ "twemoji": "^14.0.2",
55
+ "undici": "^7.15.0",
56
+ "discord-api-types": "^0.35.0"
57
+ },
58
+ "peerDependencies": {
59
+ "discord.js-selfbot-v13": "^3.7.1"
60
+ },
61
+ "overrides": {
62
+ "react": "$react",
63
+ "react-dom": "$react-dom"
64
+ },
65
+ "scripts": {
66
+ "test": "echo \"Error: no test specified\" && exit 1",
67
+ "build": "tsc -p tsconfig.json",
68
+ "test:typescript": "ts-node ./tests/generate.ts",
69
+ "test:send-components-v2": "ts-node ./tests/components-v2-send.ts",
70
+ "lint": "prettier --write --cache . && eslint --cache --fix .",
71
+ "typecheck": "tsc -p tsconfig.eslint.json"
72
+ }
73
+ }