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.
- package/LICENSE +201 -0
- package/README.md +153 -0
- package/dist/downloader/images.d.ts +43 -0
- package/dist/downloader/images.js +125 -0
- package/dist/downloader/images.js.map +1 -0
- package/dist/generator/index.d.ts +20 -0
- package/dist/generator/index.js +79 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/renderers/attachment.d.ts +24 -0
- package/dist/generator/renderers/attachment.js +49 -0
- package/dist/generator/renderers/attachment.js.map +1 -0
- package/dist/generator/renderers/components/Button.d.ts +9 -0
- package/dist/generator/renderers/components/Button.js +19 -0
- package/dist/generator/renderers/components/Button.js.map +1 -0
- package/dist/generator/renderers/components/Container.d.ts +5 -0
- package/dist/generator/renderers/components/Container.js +22 -0
- package/dist/generator/renderers/components/Container.js.map +1 -0
- package/dist/generator/renderers/components/Media Gallery.d.ts +6 -0
- package/dist/generator/renderers/components/Media Gallery.js +39 -0
- package/dist/generator/renderers/components/Media Gallery.js.map +1 -0
- package/dist/generator/renderers/components/Select Menu.d.ts +5 -0
- package/dist/generator/renderers/components/Select Menu.js +41 -0
- package/dist/generator/renderers/components/Select Menu.js.map +1 -0
- package/dist/generator/renderers/components/Spacing.d.ts +6 -0
- package/dist/generator/renderers/components/Spacing.js +17 -0
- package/dist/generator/renderers/components/Spacing.js.map +1 -0
- package/dist/generator/renderers/components/Thumbnail.d.ts +5 -0
- package/dist/generator/renderers/components/Thumbnail.js +16 -0
- package/dist/generator/renderers/components/Thumbnail.js.map +1 -0
- package/dist/generator/renderers/components/section/Section.d.ts +10 -0
- package/dist/generator/renderers/components/section/Section.js +21 -0
- package/dist/generator/renderers/components/section/Section.js.map +1 -0
- package/dist/generator/renderers/components/section/SectionAccessory.d.ts +6 -0
- package/dist/generator/renderers/components/section/SectionAccessory.js +19 -0
- package/dist/generator/renderers/components/section/SectionAccessory.js.map +1 -0
- package/dist/generator/renderers/components/section/SectionContent.d.ts +6 -0
- package/dist/generator/renderers/components/section/SectionContent.js +15 -0
- package/dist/generator/renderers/components/section/SectionContent.js.map +1 -0
- package/dist/generator/renderers/components/styles.d.ts +29 -0
- package/dist/generator/renderers/components/styles.js +110 -0
- package/dist/generator/renderers/components/styles.js.map +1 -0
- package/dist/generator/renderers/components/utils.d.ts +36 -0
- package/dist/generator/renderers/components/utils.js +98 -0
- package/dist/generator/renderers/components/utils.js.map +1 -0
- package/dist/generator/renderers/components.d.ts +15 -0
- package/dist/generator/renderers/components.js +62 -0
- package/dist/generator/renderers/components.js.map +1 -0
- package/dist/generator/renderers/content.d.ts +31 -0
- package/dist/generator/renderers/content.js +137 -0
- package/dist/generator/renderers/content.js.map +1 -0
- package/dist/generator/renderers/embed.d.ts +12 -0
- package/dist/generator/renderers/embed.js +53 -0
- package/dist/generator/renderers/embed.js.map +1 -0
- package/dist/generator/renderers/message.d.ts +7 -0
- package/dist/generator/renderers/message.js +69 -0
- package/dist/generator/renderers/message.js.map +1 -0
- package/dist/generator/renderers/reply.d.ts +7 -0
- package/dist/generator/renderers/reply.js +59 -0
- package/dist/generator/renderers/reply.js.map +1 -0
- package/dist/generator/renderers/systemMessage.d.ts +13 -0
- package/dist/generator/renderers/systemMessage.js +133 -0
- package/dist/generator/renderers/systemMessage.js.map +1 -0
- package/dist/generator/transcript.d.ts +10 -0
- package/dist/generator/transcript.js +86 -0
- package/dist/generator/transcript.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +148 -0
- package/dist/index.js.map +1 -0
- package/dist/static/client.d.ts +2 -0
- package/dist/static/client.js +30 -0
- package/dist/static/client.js.map +1 -0
- package/dist/test.js +65 -0
- package/dist/types.d.ts +75 -0
- package/dist/types.js +10 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/buildProfiles.d.ts +11 -0
- package/dist/utils/buildProfiles.js +41 -0
- package/dist/utils/buildProfiles.js.map +1 -0
- package/dist/utils/djsAdapter.d.ts +9 -0
- package/dist/utils/djsAdapter.js +96 -0
- package/dist/utils/djsAdapter.js.map +1 -0
- package/dist/utils/embeds.d.ts +1 -0
- package/dist/utils/embeds.js +17 -0
- package/dist/utils/embeds.js.map +1 -0
- package/dist/utils/extend.d.ts +8 -0
- package/dist/utils/extend.js +8 -0
- package/dist/utils/extend.js.map +1 -0
- package/dist/utils/utils.d.ts +14 -0
- package/dist/utils/utils.js +44 -0
- package/dist/utils/utils.js.map +1 -0
- 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":"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"}
|
|
@@ -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
|
+
}
|