apexify.js 1.2.1

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 (75) hide show
  1. package/README.md +1117 -0
  2. package/index.js +111 -0
  3. package/lib/ai/apexAI.js +312 -0
  4. package/lib/ai/functions/chunkString.js +8 -0
  5. package/lib/ai/functions/draw.js +347 -0
  6. package/lib/ai/functions/generateVoiceResponse.js +239 -0
  7. package/lib/ai/functions/processImageAttachments.js +93 -0
  8. package/lib/ai/functions/processMessageContent.js +48 -0
  9. package/lib/ai/functions/readFiles.js +95 -0
  10. package/lib/ai/functions/shouldDrawImage.js +12 -0
  11. package/lib/ai/utils.js +18 -0
  12. package/lib/canvas/ApexPainter.js +1194 -0
  13. package/lib/canvas/themes/level ara.ttf +0 -0
  14. package/lib/canvas/themes/levelFont.ttf +0 -0
  15. package/lib/canvas/themes/levels-card.js +872 -0
  16. package/lib/canvas/themes/music-card.js +342 -0
  17. package/lib/canvas/themes/numbers.ttf +0 -0
  18. package/lib/canvas/themes/tajawal.ttf +0 -0
  19. package/lib/database/MongoDB.js +126 -0
  20. package/lib/database/NanoDB.js +1318 -0
  21. package/lib/database/mongoDb/aggregate.js +120 -0
  22. package/lib/database/mongoDb/countDocs.js +115 -0
  23. package/lib/database/mongoDb/createCollection.js +125 -0
  24. package/lib/database/mongoDb/dataSize.js +89 -0
  25. package/lib/database/mongoDb/distinct.js +110 -0
  26. package/lib/database/mongoDb/drop.js +76 -0
  27. package/lib/database/mongoDb/find.js +122 -0
  28. package/lib/database/mongoDb/geoNear.js +91 -0
  29. package/lib/database/mongoDb/index.js +71 -0
  30. package/lib/database/mongoDb/listCollections.js +81 -0
  31. package/lib/database/mongoDb/migrateAndPrune.js +89 -0
  32. package/lib/database/mongoDb/migrateData.js +79 -0
  33. package/lib/database/mongoDb/remove.js +73 -0
  34. package/lib/database/mongoDb/removeMany.js +73 -0
  35. package/lib/database/mongoDb/removeManyExcept.js +91 -0
  36. package/lib/database/mongoDb/removeSpecific.js +93 -0
  37. package/lib/database/mongoDb/save.js +94 -0
  38. package/lib/database/mongoDb/searchMany.js +109 -0
  39. package/lib/database/mongoDb/textSearch.js +88 -0
  40. package/lib/database/mongoDb/updateAll.js +80 -0
  41. package/lib/database/mongoDb/updateAllExcept.js +108 -0
  42. package/lib/database/mongoDb/updateData.js +106 -0
  43. package/lib/database/nanoDb/fetchData.js +39 -0
  44. package/lib/database/nanoDb/removeField.js +46 -0
  45. package/lib/database/nanoDb/saveData.js +68 -0
  46. package/lib/database/nanoDb/updateFilter.js +24 -0
  47. package/lib/database/ready-schemas.js +245 -0
  48. package/lib/database/utils.js +58 -0
  49. package/lib/discord/discord-build/commands-(prefix)/music/functions/buttons.js +361 -0
  50. package/lib/discord/discord-build/commands-(prefix)/music/functions/end.js +58 -0
  51. package/lib/discord/discord-build/commands-(prefix)/music/functions/start.js +115 -0
  52. package/lib/discord/discord-build/commands-(prefix)/music/play.js +152 -0
  53. package/lib/discord/discord-build/commands-(prefix)/music/previous.js +82 -0
  54. package/lib/discord/discord-build/commands-(prefix)/music/resume.js +93 -0
  55. package/lib/discord/discord-build/commands-(prefix)/music/skip.js +82 -0
  56. package/lib/discord/discord-build/commands-(prefix)/music/stop.js +79 -0
  57. package/lib/discord/discord-build/components/buttons.js +75 -0
  58. package/lib/discord/discord-build/components/menus.js +81 -0
  59. package/lib/discord/discord-build/components/paginator.js +156 -0
  60. package/lib/discord/discord-build/components/permsChecker.js +81 -0
  61. package/lib/discord/discord-build/utils.js +21 -0
  62. package/lib/discord/events/eventer.js +100 -0
  63. package/lib/discord/events/handler/drawMenu.js +351 -0
  64. package/lib/discord/events/handler/tools.js +652 -0
  65. package/lib/discord/events/prefixRegister.js +136 -0
  66. package/lib/discord/events/prefixResponder.js +163 -0
  67. package/lib/discord/events/slashRegister.js +199 -0
  68. package/lib/discord/events/slashResponder.js +108 -0
  69. package/lib/discord/events/starter.js +335 -0
  70. package/lib/discord/functions/perms.js +19 -0
  71. package/lib/discord/utils.js +6 -0
  72. package/lib/general-functions/discord/type-writer.js +77 -0
  73. package/lib/general-functions/utils.js +0 -0
  74. package/lib/utils.js +90 -0
  75. package/package.json +118 -0
@@ -0,0 +1,347 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.drawImage = void 0;
40
+ var google_translate_1 = require("@iamtraction/google-translate");
41
+ var sharp_1 = require("sharp");
42
+ var discord_js_1 = require("discord.js");
43
+ var axios_1 = require("axios");
44
+ var sdk = require("api")("@prodia/v1.3.0#be019b2kls0gqss3");
45
+ sdk.auth("43435e1c-cab1-493f-a224-f51e4b97ce8d");
46
+ var validHercaiModals = [
47
+ "v1",
48
+ "v2",
49
+ "v2-beta",
50
+ "lexica",
51
+ "prodia",
52
+ "animefy",
53
+ "raava",
54
+ "shonin",
55
+ "v3",
56
+ ];
57
+ var validProdiaModals = [
58
+ "3Guofeng3_v34.safetensors [50f420de]",
59
+ "absolutereality_V16.safetensors [37db0fc3]",
60
+ "absolutereality_v181.safetensors [3d9d4d2b]",
61
+ "amIReal_V41.safetensors [0a8a2e61]",
62
+ "analog-diffusion-1.0.ckpt [9ca13f02]",
63
+ "anythingv3_0-pruned.ckpt [2700c435]",
64
+ "anything-v4.5-pruned.ckpt [65745d25]",
65
+ "anythingV5_PrtRE.safetensors [893e49b9]",
66
+ "AOM3A3_orangemixs.safetensors [9600da17]",
67
+ "blazing_drive_v10g.safetensors [ca1c1eab]",
68
+ "cetusMix_Version35.safetensors [de2f2560]",
69
+ "childrensStories_v13D.safetensors [9dfaabcb]",
70
+ "childrensStories_v1SemiReal.safetensors [a1c56dbb]",
71
+ "childrensStories_v1ToonAnime.safetensors [2ec7b88b]",
72
+ "Counterfeit_v30.safetensors [9e2a8f19]",
73
+ "cuteyukimixAdorable_midchapter3.safetensors [04bdffe6]",
74
+ "cyberrealistic_v33.safetensors [82b0d085]",
75
+ "dalcefo_v4.safetensors [425952fe]",
76
+ "deliberate_v2.safetensors [10ec4b29]",
77
+ "deliberate_v3.safetensors [afd9d2d4]",
78
+ "dreamlike-anime-1.0.safetensors [4520e090]",
79
+ "dreamlike-diffusion-1.0.safetensors [5c9fd6e0]",
80
+ "dreamlike-photoreal-2.0.safetensors [fdcf65e7]",
81
+ "dreamshaper_6BakedVae.safetensors [114c8abb]",
82
+ "dreamshaper_7.safetensors [5cf5ae06]",
83
+ "dreamshaper_8.safetensors [9d40847d]",
84
+ "edgeOfRealism_eorV20.safetensors [3ed5de15]",
85
+ "EimisAnimeDiffusion_V1.ckpt [4f828a15]",
86
+ "elldreths-vivid-mix.safetensors [342d9d26]",
87
+ "epicrealism_naturalSinRC1VAE.safetensors [90a4c676]",
88
+ "ICantBelieveItsNotPhotography_seco.safetensors [4e7a3dfd]",
89
+ "juggernaut_aftermath.safetensors [5e20c455]",
90
+ "lofi_v4.safetensors [ccc204d6]",
91
+ "lyriel_v16.safetensors [68fceea2]",
92
+ "majicmixRealistic_v4.safetensors [29d0de58]",
93
+ "mechamix_v10.safetensors [ee685731]",
94
+ "meinamix_meinaV9.safetensors [2ec66ab0]",
95
+ "meinamix_meinaV11.safetensors [b56ce717]",
96
+ "neverendingDream_v122.safetensors [f964ceeb]",
97
+ "openjourney_V4.ckpt [ca2f377f]",
98
+ "pastelMixStylizedAnime_pruned_fp16.safetensors [793a26e8]",
99
+ "portraitplus_V1.0.safetensors [1400e684]",
100
+ "protogenx34.safetensors [5896f8d5]",
101
+ "Realistic_Vision_V1.4-pruned-fp16.safetensors [8d21810b]",
102
+ "Realistic_Vision_V2.0.safetensors [79587710]",
103
+ "Realistic_Vision_V4.0.safetensors [29a7afaa]",
104
+ "Realistic_Vision_V5.0.safetensors [614d1063]",
105
+ "redshift_diffusion-V10.safetensors [1400e684]",
106
+ "revAnimated_v122.safetensors [3f4fefd9]",
107
+ "rundiffusionFX25D_v10.safetensors [cd12b0ee]",
108
+ "rundiffusionFX_v10.safetensors [cd4e694d]",
109
+ "sdv1_4.ckpt [7460a6fa]",
110
+ "v1-5-pruned-emaonly.safetensors [d7049739]",
111
+ "v1-5-inpainting.safetensors [21c7ab71]",
112
+ "shoninsBeautiful_v10.safetensors [25d8c546]",
113
+ "theallys-mix-ii-churned.safetensors [5d9225a4]",
114
+ "timeless-1.0.ckpt [7c4971d4]",
115
+ "toonyou_beta6.safetensors [980f6b15]",
116
+ ];
117
+ function drawImage(_0x2f79ae, numOfImages, _0x28baff, _0x5cea2c, _0x59b128, _0x182d15) {
118
+ return __awaiter(this, void 0, void 0, function () {
119
+ function retry(fn, retriesLeft) {
120
+ if (retriesLeft === void 0) { retriesLeft = maxRetryAttempts; }
121
+ return __awaiter(this, void 0, void 0, function () {
122
+ var error_2;
123
+ return __generator(this, function (_a) {
124
+ switch (_a.label) {
125
+ case 0:
126
+ _a.trys.push([0, 2, , 4]);
127
+ return [4 /*yield*/, fn()];
128
+ case 1: return [2 /*return*/, _a.sent()];
129
+ case 2:
130
+ error_2 = _a.sent();
131
+ if (retriesLeft === 0) {
132
+ throw error_2;
133
+ }
134
+ console.error("Retry failed, ".concat(retriesLeft, " attempts left. Error: ").concat(error_2.message));
135
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, retryInterval); })];
136
+ case 3:
137
+ _a.sent();
138
+ return [2 /*return*/, retry(fn, retriesLeft - 1)];
139
+ case 4: return [2 /*return*/];
140
+ }
141
+ });
142
+ });
143
+ }
144
+ var maxRetryAttempts, retryInterval, translatedText_1, _0x168f75, buttonsRow1, imageUrls, _0x4d7fb6, generateResponse, generatedJobId, error_1, _0x279cfe, _0x2b4402, _0x46cafe, _0x254246, urlButton, imageUrl, _0x29a652, urlButton, selectMenu_1, options, redrawButton, row1, row2, _0x56e917_1;
145
+ return __generator(this, function (_a) {
146
+ switch (_a.label) {
147
+ case 0:
148
+ maxRetryAttempts = 3;
149
+ retryInterval = 5000;
150
+ _a.label = 1;
151
+ case 1:
152
+ _a.trys.push([1, 25, , 26]);
153
+ if (numOfImages > 4 || numOfImages <= 0) {
154
+ throw new Error("Number of images can't be greater than 4 or smaller than 0.");
155
+ }
156
+ return [4 /*yield*/, retry(function () {
157
+ return (0, google_translate_1)(_0x28baff, {
158
+ from: "auto",
159
+ to: "en",
160
+ });
161
+ })];
162
+ case 2:
163
+ translatedText_1 = _a.sent();
164
+ _0x168f75 = [];
165
+ buttonsRow1 = [];
166
+ imageUrls = [];
167
+ _0x4d7fb6 = 0x0;
168
+ _a.label = 3;
169
+ case 3:
170
+ if (!(_0x4d7fb6 < numOfImages)) return [3 /*break*/, 23];
171
+ _a.label = 4;
172
+ case 4:
173
+ _a.trys.push([4, 11, , 16]);
174
+ if (!validHercaiModals.includes(_0x182d15)) return [3 /*break*/, 6];
175
+ return [4 /*yield*/, retry(function () {
176
+ return _0x5cea2c.drawImage({
177
+ model: _0x182d15,
178
+ prompt: translatedText_1.text,
179
+ });
180
+ })];
181
+ case 5:
182
+ _0x59b128 = _a.sent();
183
+ return [3 /*break*/, 10];
184
+ case 6:
185
+ if (!validProdiaModals.includes(_0x182d15)) return [3 /*break*/, 9];
186
+ return [4 /*yield*/, sdk.generate({
187
+ model: _0x182d15,
188
+ prompt: translatedText_1.text,
189
+ })];
190
+ case 7:
191
+ generateResponse = _a.sent();
192
+ generatedJobId = generateResponse.data.job;
193
+ return [4 /*yield*/, checkJobStatus(generatedJobId)];
194
+ case 8:
195
+ _0x59b128 = _a.sent();
196
+ return [3 /*break*/, 10];
197
+ case 9: throw new Error("Invalid modal name.");
198
+ case 10: return [3 /*break*/, 16];
199
+ case 11:
200
+ error_1 = _a.sent();
201
+ if (!(error_1.response && error_1.response.status === 429)) return [3 /*break*/, 12];
202
+ console.error("Too many requests. Please try again later.");
203
+ return [2 /*return*/, _0x2f79ae.reply("Please wait i am in a cool down for a minute")];
204
+ case 12:
205
+ if (!(error_1.response && error_1.response.status === 500)) return [3 /*break*/, 13];
206
+ console.error("Internal server error. Please try again later.");
207
+ return [2 /*return*/, _0x2f79ae.reply("Please wait i am in a cool down for a minute")];
208
+ case 13: return [4 /*yield*/, _0x2f79ae.reply("Please wait i am in a cool down for a minute")];
209
+ case 14:
210
+ _a.sent();
211
+ throw new Error("Error processing message in file");
212
+ case 15: return [3 /*break*/, 16];
213
+ case 16:
214
+ _0x279cfe = void 0;
215
+ if (!(_0x182d15 === "v3")) return [3 /*break*/, 19];
216
+ return [4 /*yield*/, retry(function () {
217
+ return axios_1.get(_0x59b128.url, {
218
+ responseType: "arraybuffer",
219
+ });
220
+ })];
221
+ case 17:
222
+ _0x2b4402 = _a.sent();
223
+ _0x279cfe = Buffer.from(_0x2b4402.data, "binary");
224
+ return [4 /*yield*/, (0, sharp_1)(_0x279cfe)
225
+ .resize({
226
+ width: 0x320,
227
+ })
228
+ .toBuffer()];
229
+ case 18:
230
+ _0x46cafe = _a.sent();
231
+ _0x254246 = new discord_js_1.AttachmentBuilder(_0x46cafe, "image_".concat(_0x4d7fb6 + 1, ".png"));
232
+ _0x168f75.push(_0x254246);
233
+ urlButton = new discord_js_1.ButtonBuilder()
234
+ .setStyle("Link")
235
+ .setLabel("Image ".concat(_0x4d7fb6 + 1))
236
+ .setURL(_0x59b128.url);
237
+ buttonsRow1.push(urlButton);
238
+ imageUrls.push(_0x59b128.url);
239
+ return [3 /*break*/, 20];
240
+ case 19:
241
+ imageUrl = _0x59b128.url || _0x59b128;
242
+ _0x29a652 = new discord_js_1.AttachmentBuilder(imageUrl, "image_".concat(_0x4d7fb6 + 1, ".png"));
243
+ _0x168f75.push(_0x29a652);
244
+ urlButton = new discord_js_1.ButtonBuilder()
245
+ .setStyle("Link")
246
+ .setLabel("Image ".concat(_0x4d7fb6 + 1))
247
+ .setURL(imageUrl);
248
+ buttonsRow1.push(urlButton);
249
+ imageUrls.push(imageUrl);
250
+ _a.label = 20;
251
+ case 20: return [4 /*yield*/, new Promise(function (_0x412825) { return setTimeout(_0x412825, 0x7d0); })];
252
+ case 21:
253
+ _a.sent();
254
+ _a.label = 22;
255
+ case 22:
256
+ _0x4d7fb6++;
257
+ return [3 /*break*/, 3];
258
+ case 23:
259
+ selectMenu_1 = new discord_js_1.StringSelectMenuBuilder()
260
+ .setCustomId("image_processing_select")
261
+ .setPlaceholder("Select Image Process");
262
+ options = [
263
+ "Resizing",
264
+ "Color Filters",
265
+ "Convert Image Extension",
266
+ "Brightness",
267
+ "Sepia",
268
+ "Pixelate",
269
+ "Blur",
270
+ "Fade",
271
+ "Opaque",
272
+ "Grayscale",
273
+ "Contrast",
274
+ ];
275
+ options.forEach(function (option, index) {
276
+ var selectOption = new discord_js_1.StringSelectMenuOptionBuilder()
277
+ .setLabel(option)
278
+ .setValue("process_".concat(index + 1));
279
+ selectMenu_1.addOptions(selectOption);
280
+ });
281
+ redrawButton = new discord_js_1.ButtonBuilder()
282
+ .setStyle("Primary")
283
+ .setLabel("Redraw")
284
+ .setCustomId("redraw_button");
285
+ row1 = new discord_js_1.ActionRowBuilder().addComponents(buttonsRow1, redrawButton);
286
+ row2 = new discord_js_1.ActionRowBuilder().addComponents(selectMenu_1);
287
+ return [4 /*yield*/, _0x2f79ae.reply({
288
+ files: _0x168f75,
289
+ components: [row1, row2],
290
+ allowedMentions: { repliedUser: false },
291
+ })];
292
+ case 24:
293
+ _a.sent();
294
+ return [2 /*return*/, imageUrls];
295
+ case 25:
296
+ _0x56e917_1 = _a.sent();
297
+ console.error("Error in drawImage:", _0x56e917_1.message);
298
+ if (_0x56e917_1.response) {
299
+ console.error("Status code:", _0x56e917_1.response.status);
300
+ console.error("Response data:", _0x56e917_1.response.data);
301
+ }
302
+ _0x2f79ae.reply({
303
+ content: "An error occurred while processing the images.",
304
+ allowedMentions: { repliedUser: false },
305
+ });
306
+ return [2 /*return*/, []];
307
+ case 26: return [2 /*return*/];
308
+ }
309
+ });
310
+ });
311
+ }
312
+ exports.drawImage = drawImage;
313
+ function checkJobStatus(jobId) {
314
+ return __awaiter(this, void 0, void 0, function () {
315
+ var getJobResponse, jobData, error_3;
316
+ return __generator(this, function (_a) {
317
+ switch (_a.label) {
318
+ case 0:
319
+ _a.trys.push([0, 5, , 6]);
320
+ return [4 /*yield*/, sdk.getJob({ jobId: jobId })];
321
+ case 1:
322
+ getJobResponse = _a.sent();
323
+ jobData = getJobResponse.data;
324
+ if (!(jobData.status === "generating" || jobData.status === "queued")) return [3 /*break*/, 3];
325
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 3000); })];
326
+ case 2:
327
+ _a.sent();
328
+ return [2 /*return*/, checkJobStatus(jobId)];
329
+ case 3:
330
+ if (jobData.status === "succeeded") {
331
+ return [2 /*return*/, jobData.imageUrl];
332
+ }
333
+ else {
334
+ console.error("Job failed:", jobData);
335
+ return [2 /*return*/, null];
336
+ }
337
+ _a.label = 4;
338
+ case 4: return [3 /*break*/, 6];
339
+ case 5:
340
+ error_3 = _a.sent();
341
+ console.error(error_3);
342
+ return [2 /*return*/, null];
343
+ case 6: return [2 /*return*/];
344
+ }
345
+ });
346
+ });
347
+ }
@@ -0,0 +1,239 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.generateVoiceResponse = void 0;
40
+ var hercai_1 = require("hercai");
41
+ var google_translate_1 = require("@iamtraction/google-translate");
42
+ var axios_1 = require("axios");
43
+ var tesseract_1 = require("tesseract.js");
44
+ var chunkString_1 = require("./chunkString");
45
+ var draw_1 = require("./draw");
46
+ var fs_1 = require("fs");
47
+ var herc = new hercai_1.Hercai();
48
+ var isProcessing = false;
49
+ function generateVoiceResponse(message, numOfImages, finalText, hercai, response, imageModel, draw, drawValid, chatModel, voiceModel, voice_code, letter, apiKey) {
50
+ return __awaiter(this, void 0, void 0, function () {
51
+ var msg, attachment, imageUrl, worker, text, translationResult, chunks, delay, _loop_1, _i, chunks_1, chunk, options, response_1, audioData, error_1, encodedParams, options, response_2, error_2, error_3;
52
+ var _this = this;
53
+ return __generator(this, function (_a) {
54
+ switch (_a.label) {
55
+ case 0:
56
+ if (message.author.bot || isProcessing || !message.guild) {
57
+ return [2 /*return*/];
58
+ }
59
+ isProcessing = true;
60
+ _a.label = 1;
61
+ case 1:
62
+ _a.trys.push([1, 23, 24, 25]);
63
+ msg = message.content;
64
+ if (!drawValid) return [3 /*break*/, 3];
65
+ return [4 /*yield*/, (0, draw_1.drawImage)(message, numOfImages, finalText, hercai, response, imageModel)];
66
+ case 2: return [2 /*return*/, _a.sent()];
67
+ case 3:
68
+ if (!(message.attachments.size > 0)) return [3 /*break*/, 7];
69
+ attachment = message.attachments.first();
70
+ imageUrl = attachment.url;
71
+ return [4 /*yield*/, (0, tesseract_1.createWorker)()];
72
+ case 4:
73
+ worker = _a.sent();
74
+ return [4 /*yield*/, worker.recognize(imageUrl)];
75
+ case 5:
76
+ text = (_a.sent()).data.text;
77
+ return [4 /*yield*/, worker.terminate()];
78
+ case 6:
79
+ _a.sent();
80
+ msg += "\n" + text;
81
+ _a.label = 7;
82
+ case 7: return [4 /*yield*/, herc.question({
83
+ model: chatModel,
84
+ content: msg,
85
+ })];
86
+ case 8:
87
+ msg = _a.sent();
88
+ msg = msg.reply.replace(/\n/g, " ");
89
+ if (!(voiceModel === "google")) return [3 /*break*/, 11];
90
+ if (!!isEnglish(msg)) return [3 /*break*/, 10];
91
+ return [4 /*yield*/, (0, google_translate_1)(msg, {
92
+ from: "auto",
93
+ to: "en",
94
+ })];
95
+ case 9:
96
+ translationResult = _a.sent();
97
+ msg = translationResult.text;
98
+ _a.label = 10;
99
+ case 10:
100
+ chunks = (0, chunkString_1.chunkString)(msg, 200);
101
+ delay = 0;
102
+ _loop_1 = function (chunk) {
103
+ setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
104
+ var encodedChunk, url, mp3Stream;
105
+ return __generator(this, function (_a) {
106
+ switch (_a.label) {
107
+ case 0:
108
+ encodedChunk = encodeURIComponent(chunk);
109
+ url = "https://translate.google.com/translate_tts?ie=UTF-8&tl=en&client=tw-ob&q=".concat(encodedChunk);
110
+ return [4 /*yield*/, axios_1.get(url, {
111
+ responseType: "stream",
112
+ headers: {
113
+ Referer: "http://translate.google.com/",
114
+ "User-Agent": "stagefright/1.2 (Linux;Android 5.0)",
115
+ },
116
+ })];
117
+ case 1:
118
+ mp3Stream = _a.sent();
119
+ return [4 /*yield*/, message.reply({
120
+ files: [
121
+ {
122
+ attachment: mp3Stream.data,
123
+ name: "respond.mp3",
124
+ },
125
+ ],
126
+ allowedMentions: { repliedUser: false },
127
+ })];
128
+ case 2: return [2 /*return*/, _a.sent()];
129
+ }
130
+ });
131
+ }); }, delay);
132
+ delay += 3000;
133
+ };
134
+ for (_i = 0, chunks_1 = chunks; _i < chunks_1.length; _i++) {
135
+ chunk = chunks_1[_i];
136
+ _loop_1(chunk);
137
+ }
138
+ return [3 /*break*/, 22];
139
+ case 11:
140
+ if (!(voiceModel === "apexAI")) return [3 /*break*/, 17];
141
+ if (!apiKey) {
142
+ throw new Error('Error: The apexAI model requires a premium account for generation. Please visit our support server at https://discord.gg/4uhpr7w8wW for assistance.');
143
+ }
144
+ options = {
145
+ method: "POST",
146
+ url: "https://text-to-speech-neural-google.p.rapidapi.com/generateAudioFiles",
147
+ headers: {
148
+ "content-type": "application/json",
149
+ "X-RapidAPI-Key": "your_rapid_api_key_here",
150
+ "X-RapidAPI-Host": "text-to-speech-neural-google.p.rapidapi.com",
151
+ },
152
+ data: {
153
+ audioFormat: "ogg",
154
+ paragraphChunks: [msg],
155
+ voiceParams: {
156
+ name: "Wavenet-".concat(letter || "c"),
157
+ engine: "google",
158
+ languageCode: "en-US",
159
+ },
160
+ },
161
+ };
162
+ _a.label = 12;
163
+ case 12:
164
+ _a.trys.push([12, 15, , 16]);
165
+ return [4 /*yield*/, axios_1.request(options)];
166
+ case 13:
167
+ response_1 = _a.sent();
168
+ audioData = response_1.data.audioStream;
169
+ fs_1.writeFileSync("output.ogg", Buffer.from(audioData, "base64"));
170
+ return [4 /*yield*/, message.reply({
171
+ files: [
172
+ {
173
+ attachment: "output.ogg",
174
+ name: "respond.ogg",
175
+ },
176
+ ],
177
+ allowedMentions: { repliedUser: false },
178
+ })];
179
+ case 14: return [2 /*return*/, _a.sent()];
180
+ case 15:
181
+ error_1 = _a.sent();
182
+ console.error(error_1);
183
+ return [3 /*break*/, 16];
184
+ case 16: return [3 /*break*/, 22];
185
+ case 17:
186
+ if (!(voiceModel === "zenithAi")) return [3 /*break*/, 22];
187
+ if (!apiKey) {
188
+ throw new Error('Error: The zenithAi model requires a premium account for generation. Please visit our support server at https://discord.gg/4uhpr7w8wW for assistance.');
189
+ }
190
+ encodedParams = new URLSearchParams();
191
+ encodedParams.set("voice_code", voice_code || "en-US-3");
192
+ encodedParams.set("text", msg);
193
+ encodedParams.set("speed", "1.00");
194
+ encodedParams.set("pitch", "1.00");
195
+ encodedParams.set("output_type", "audio_url");
196
+ options = {
197
+ method: "POST",
198
+ url: "https://cloudlabs-text-to-speech.p.rapidapi.com/synthesize",
199
+ headers: {
200
+ "content-type": "application/x-www-form-urlencoded",
201
+ "X-RapidAPI-Key": "your_rapid_api_key_here",
202
+ "X-RapidAPI-Host": "cloudlabs-text-to-speech.p.rapidapi.com",
203
+ },
204
+ data: encodedParams,
205
+ };
206
+ _a.label = 18;
207
+ case 18:
208
+ _a.trys.push([18, 21, , 22]);
209
+ return [4 /*yield*/, axios_1.request(options)];
210
+ case 19:
211
+ response_2 = _a.sent();
212
+ console.log(response_2.data.result.audio_url);
213
+ return [4 /*yield*/, message.reply({
214
+ files: [response_2.data.result.audio_url],
215
+ allowedMentions: { repliedUser: false },
216
+ })];
217
+ case 20: return [2 /*return*/, _a.sent()];
218
+ case 21:
219
+ error_2 = _a.sent();
220
+ console.error(error_2);
221
+ return [3 /*break*/, 22];
222
+ case 22: return [3 /*break*/, 25];
223
+ case 23:
224
+ error_3 = _a.sent();
225
+ console.error(error_3);
226
+ message.reply("The response of the bot was too long and couldn't be sent as a voice.");
227
+ return [3 /*break*/, 25];
228
+ case 24:
229
+ isProcessing = false;
230
+ return [7 /*endfinally*/];
231
+ case 25: return [2 /*return*/];
232
+ }
233
+ });
234
+ });
235
+ }
236
+ exports.generateVoiceResponse = generateVoiceResponse;
237
+ function isEnglish(str) {
238
+ return /^[A-Za-z0-9!@#$%^&()_+\-=\[\]{};':"\\|,.<>\/?]+$/.test(str);
239
+ }