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,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ ///////NanoDB
4
+ exports.matchesFilterQuery = exports.updateOption = exports.removeFields = exports.fetchData = exports.saveData = exports.updateAllExcept = exports.updateAll = exports.updateData = exports.migrateAndPrune = exports.migrateData = exports.textSearch = exports.searchMany = exports.removeSpecific = exports.removeManyExcept = exports.removeMany = exports.remove = exports.listCollections = exports.listIndexes = exports.geoNear = exports.find = exports.drop = exports.distinct = exports.dataSize = exports.countDocs = exports.createTable = exports.aggregate = exports.save = void 0;
5
+ const saveData_1 = require("./nanoDb/saveData");
6
+ Object.defineProperty(exports, "saveData", { enumerable: true, get: function () { return saveData_1.saveData; } });
7
+ const fetchData_1 = require("./nanoDb/fetchData");
8
+ Object.defineProperty(exports, "fetchData", { enumerable: true, get: function () { return fetchData_1.fetchData; } });
9
+ const removeField_1 = require("./nanoDb/removeField");
10
+ Object.defineProperty(exports, "removeFields", { enumerable: true, get: function () { return removeField_1.removeFields; } });
11
+ Object.defineProperty(exports, "matchesFilterQuery", { enumerable: true, get: function () { return removeField_1.matchesFilterQuery; } });
12
+ const updateFilter_1 = require("./nanoDb/updateFilter");
13
+ Object.defineProperty(exports, "updateOption", { enumerable: true, get: function () { return updateFilter_1.updateOption; } });
14
+ ///////MongoDB
15
+ const save_1 = require("./mongoDb/save");
16
+ Object.defineProperty(exports, "save", { enumerable: true, get: function () { return save_1.save; } });
17
+ const aggregate_1 = require("./mongoDb/aggregate");
18
+ Object.defineProperty(exports, "aggregate", { enumerable: true, get: function () { return aggregate_1.aggregate; } });
19
+ const createTable_1 = require("./mongoDb/createCollection");
20
+ Object.defineProperty(exports, "createTable", { enumerable: true, get: function () { return createTable_1.createTable; } });
21
+ const countDocuments_1 = require("./mongoDb/countDocs");
22
+ Object.defineProperty(exports, "countDocs", { enumerable: true, get: function () { return countDocuments_1.countDocs; } });
23
+ const dataSize_1 = require("./mongoDb/dataSize");
24
+ Object.defineProperty(exports, "dataSize", { enumerable: true, get: function () { return dataSize_1.dataSize; } });
25
+ const distinct_1 = require("./mongoDb/distinct");
26
+ Object.defineProperty(exports, "distinct", { enumerable: true, get: function () { return distinct_1.distinct; } });
27
+ const drop_1 = require("./mongoDb/drop");
28
+ Object.defineProperty(exports, "drop", { enumerable: true, get: function () { return drop_1.drop; } });
29
+ const find_1 = require("./mongoDb/find");
30
+ Object.defineProperty(exports, "find", { enumerable: true, get: function () { return find_1.find; } });
31
+ const geoNear_1 = require("./mongoDb/geoNear");
32
+ Object.defineProperty(exports, "geoNear", { enumerable: true, get: function () { return geoNear_1.geoNear; } });
33
+ const listIndexes_1 = require("./mongoDb/index");
34
+ Object.defineProperty(exports, "listIndexes", { enumerable: true, get: function () { return listIndexes_1.listIndexes; } });
35
+ const listCollections_1 = require("./mongoDb/listCollections");
36
+ Object.defineProperty(exports, "listCollections", { enumerable: true, get: function () { return listCollections_1.listCollections; } });
37
+ const remove_1 = require("./mongoDb/remove");
38
+ Object.defineProperty(exports, "remove", { enumerable: true, get: function () { return remove_1.remove; } });
39
+ const removeMany_1 = require("./mongoDb/removeMany");
40
+ Object.defineProperty(exports, "removeMany", { enumerable: true, get: function () { return removeMany_1.removeMany; } });
41
+ const removeManyExcept_1 = require("./mongoDb/removeManyExcept");
42
+ Object.defineProperty(exports, "removeManyExcept", { enumerable: true, get: function () { return removeManyExcept_1.removeManyExcept; } });
43
+ const removeSpecific_1 = require("./mongoDb/removeSpecific");
44
+ Object.defineProperty(exports, "removeSpecific", { enumerable: true, get: function () { return removeSpecific_1.removeSpecific; } });
45
+ const searchMany_1 = require("./mongoDb/searchMany");
46
+ Object.defineProperty(exports, "searchMany", { enumerable: true, get: function () { return searchMany_1.searchMany; } });
47
+ const textSearch_1 = require("./mongoDb/textSearch");
48
+ Object.defineProperty(exports, "textSearch", { enumerable: true, get: function () { return textSearch_1.textSearch; } });
49
+ const migrateData_1 = require("./mongoDb/migrateData");
50
+ Object.defineProperty(exports, "migrateData", { enumerable: true, get: function () { return migrateData_1.migrateData; } });
51
+ const migrateAndPrune_1 = require("./mongoDb/migrateAndPrune");
52
+ Object.defineProperty(exports, "migrateAndPrune", { enumerable: true, get: function () { return migrateAndPrune_1.migrateAndPrune; } });
53
+ const updateData_1 = require("./mongoDb/updateData");
54
+ Object.defineProperty(exports, "updateData", { enumerable: true, get: function () { return updateData_1.updateData; } });
55
+ const updateAll_1 = require("./mongoDb/updateAll");
56
+ Object.defineProperty(exports, "updateAll", { enumerable: true, get: function () { return updateAll_1.updateAll; } });
57
+ const updateAllExcept_1 = require("./mongoDb/updateAllExcept");
58
+ Object.defineProperty(exports, "updateAllExcept", { enumerable: true, get: function () { return updateAllExcept_1.updateAllExcept; } });
@@ -0,0 +1,361 @@
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.handleButtonInteraction = void 0;
40
+ var discord_js_1 = require("discord.js");
41
+ function handleButtonInteraction(interaction) {
42
+ return __awaiter(this, void 0, void 0, function () {
43
+ var button, botMember, member, player, totalMilliseconds, totalSeconds, days, hours, minutes, seconds, components, durationString, newVolume, response, player, player, totalMilliseconds, totalSeconds, days, hours, minutes, seconds, components, durationString, row, stopEmbed, player, totalMilliseconds, totalSeconds, days, hours, minutes, seconds, components, durationString, row, resEmbed, player, botMember, member, player, totalMilliseconds, totalSeconds, days, hours, minutes, seconds, components, durationString, newVolume, response;
44
+ return __generator(this, function (_a) {
45
+ switch (_a.label) {
46
+ case 0:
47
+ if (!interaction.isButton())
48
+ return [2 /*return*/];
49
+ button = interaction.customId;
50
+ if (!(button === "decrease_music")) return [3 /*break*/, 8];
51
+ botMember = interaction.guild.members.cache.get(interaction.client.user.id);
52
+ if (!botMember.voice.channel) {
53
+ return [2 /*return*/, interaction.reply({
54
+ content: "I need to be in a voice channel to use this command.",
55
+ ephemeral: true,
56
+ })];
57
+ }
58
+ member = interaction.guild.members.cache.get(interaction.user.id);
59
+ if (!member.voice.channel) {
60
+ return [2 /*return*/, interaction.reply({
61
+ content: "You need to be in a voice channel to use this command.",
62
+ ephemeral: true,
63
+ })];
64
+ }
65
+ if (member.voice.channel.id !== botMember.voice.channel.id) {
66
+ return [2 /*return*/, interaction.reply({
67
+ content: "You need to be in the same voice channel as the bot to use this command.",
68
+ ephemeral: true,
69
+ })];
70
+ }
71
+ player = interaction.client.riffy.get(interaction.guild.id);
72
+ if (!!player) return [3 /*break*/, 2];
73
+ return [4 /*yield*/, interaction.reply({
74
+ content: "No music is being played at the moment.",
75
+ ephemeral: true,
76
+ })];
77
+ case 1: return [2 /*return*/, _a.sent()];
78
+ case 2:
79
+ totalMilliseconds = player.current.info.length;
80
+ totalSeconds = Math.floor(totalMilliseconds / 1000);
81
+ days = Math.floor(totalSeconds / (3600 * 24));
82
+ hours = Math.floor((totalSeconds % (3600 * 24)) / 3600);
83
+ minutes = Math.floor((totalSeconds % 3600) / 60);
84
+ seconds = Math.floor(totalSeconds % 60);
85
+ components = [];
86
+ if (days > 0)
87
+ components.push("".concat(days, " d").concat(days > 1 ? "s" : ""));
88
+ if (hours > 0)
89
+ components.push("".concat(hours, " hr").concat(hours > 1 ? "s" : ""));
90
+ if (minutes > 0)
91
+ components.push("".concat(minutes, " min").concat(minutes > 1 ? "s" : ""));
92
+ if (seconds > 0)
93
+ components.push("".concat(seconds, " sec").concat(seconds > 1 ? "s" : ""));
94
+ durationString = components.join(", ");
95
+ if (!(player.volume === 0)) return [3 /*break*/, 4];
96
+ return [4 /*yield*/, interaction.reply({
97
+ content: "Volume is at 0 already you can't decrease it more than that.",
98
+ ephemeral: true,
99
+ })];
100
+ case 3: return [2 /*return*/, _a.sent()];
101
+ case 4:
102
+ if (!player) return [3 /*break*/, 7];
103
+ newVolume = player.volume - 20;
104
+ player.setVolume(newVolume);
105
+ response = new discord_js_1.EmbedBuilder()
106
+ .setTitle("Playing Song")
107
+ .setColor("#1dadc0")
108
+ .setDescription("- `Requested By:` <@".concat(interaction.user.id, ">.\n- `Song Name:` ").concat(player.current.info.title, ".\n- `Author:` ").concat(player.current.info.author, ".\n- `Volume:` __").concat(player.volume, "__.\n- `Duration:` **").concat(durationString, "**."))
109
+ .setTimestamp()
110
+ .setThumbnail(player.current.info.thumbnail);
111
+ return [4 /*yield*/, interaction.deferUpdate()];
112
+ case 5:
113
+ _a.sent();
114
+ return [4 /*yield*/, interaction.editReply({ embeds: [response] })];
115
+ case 6:
116
+ _a.sent();
117
+ _a.label = 7;
118
+ case 7: return [3 /*break*/, 39];
119
+ case 8:
120
+ if (!(button === "previous_music")) return [3 /*break*/, 16];
121
+ return [4 /*yield*/, interaction.client.riffy.players.get(interaction.guild.id)];
122
+ case 9:
123
+ player = _a.sent();
124
+ if (!!(player === null || player === void 0 ? void 0 : player.previous)) return [3 /*break*/, 11];
125
+ return [4 /*yield*/, interaction.reply({
126
+ content: "No previous player to add.",
127
+ ephemeral: true,
128
+ })];
129
+ case 10: return [2 /*return*/, _a.sent()];
130
+ case 11:
131
+ if (!player.playing && !player.paused)
132
+ return [2 /*return*/, player.play()];
133
+ return [4 /*yield*/, player.queue.add(player.previous)];
134
+ case 12:
135
+ _a.sent();
136
+ if (!player) return [3 /*break*/, 14];
137
+ return [4 /*yield*/, player.stop(true)];
138
+ case 13:
139
+ _a.sent();
140
+ _a.label = 14;
141
+ case 14: return [4 /*yield*/, interaction.reply({
142
+ content: "Playin the previous song please wait...",
143
+ ephemeral: true,
144
+ })];
145
+ case 15: return [2 /*return*/, _a.sent()];
146
+ case 16:
147
+ if (!(button === "stop_music")) return [3 /*break*/, 21];
148
+ player = interaction.client.riffy.players.get(interaction.guild.id);
149
+ if (!!player) return [3 /*break*/, 18];
150
+ return [4 /*yield*/, interaction.reply({
151
+ content: "No music is being played at the moment.",
152
+ ephemeral: true,
153
+ })];
154
+ case 17: return [2 /*return*/, _a.sent()];
155
+ case 18:
156
+ totalMilliseconds = player.current.info.length;
157
+ totalSeconds = Math.floor(totalMilliseconds / 1000);
158
+ days = Math.floor(totalSeconds / (3600 * 24));
159
+ hours = Math.floor((totalSeconds % (3600 * 24)) / 3600);
160
+ minutes = Math.floor((totalSeconds % 3600) / 60);
161
+ seconds = Math.floor(totalSeconds % 60);
162
+ components = [];
163
+ if (days > 0)
164
+ components.push("".concat(days, " d").concat(days > 1 ? "s" : ""));
165
+ if (hours > 0)
166
+ components.push("".concat(hours, " hr").concat(hours > 1 ? "s" : ""));
167
+ if (minutes > 0)
168
+ components.push("".concat(minutes, " min").concat(minutes > 1 ? "s" : ""));
169
+ if (seconds > 0)
170
+ components.push("".concat(seconds, " sec").concat(seconds > 1 ? "s" : ""));
171
+ durationString = components.join(", ");
172
+ row = new discord_js_1.ActionRowBuilder().addComponents(new discord_js_1.ButtonBuilder()
173
+ .setCustomId("decrease_music")
174
+ .setStyle(2)
175
+ .setLabel("-"), new discord_js_1.ButtonBuilder()
176
+ .setCustomId("previous_music")
177
+ .setStyle(2)
178
+ .setLabel("<="), new discord_js_1.ButtonBuilder()
179
+ .setCustomId("resume_music")
180
+ .setStyle(2)
181
+ .setLabel("||"), new discord_js_1.ButtonBuilder()
182
+ .setCustomId("next_music")
183
+ .setStyle(2)
184
+ .setLabel("=>"), new discord_js_1.ButtonBuilder()
185
+ .setCustomId("increase_music")
186
+ .setStyle(2)
187
+ .setLabel("+"));
188
+ stopEmbed = new discord_js_1.EmbedBuilder()
189
+ .setTitle("Stopping The Song ")
190
+ .setColor("#1dadc0")
191
+ .setDescription("- `Requested By:` <@".concat(interaction.user.id, ">.\n- `Song Name:` ").concat(player.current.info.title, ".\n- `Author:` ").concat(player.current.info.author, ".\n- `Volume:` __").concat(player.volume, "__.\n- `Duration:` **").concat(durationString, "**."))
192
+ .setTimestamp()
193
+ .setThumbnail(player.current.info.thumbnail)
194
+ .setFooter({
195
+ text: "Requested by: ".concat(interaction.user.tag),
196
+ iconURL: interaction.user.displayAvatarURL(),
197
+ });
198
+ return [4 /*yield*/, interaction.deferUpdate()];
199
+ case 19:
200
+ _a.sent();
201
+ return [4 /*yield*/, interaction.editReply({
202
+ embeds: [stopEmbed],
203
+ components: [row],
204
+ })];
205
+ case 20: return [2 /*return*/, _a.sent()];
206
+ case 21:
207
+ if (!(button === "resume_music")) return [3 /*break*/, 26];
208
+ player = interaction.client.riffy.players.get(interaction.guild.id);
209
+ if (!!player) return [3 /*break*/, 23];
210
+ return [4 /*yield*/, interaction.reply({
211
+ content: "No music is being played at the moment.",
212
+ ephemeral: true,
213
+ })];
214
+ case 22: return [2 /*return*/, _a.sent()];
215
+ case 23:
216
+ totalMilliseconds = player.current.info.length;
217
+ totalSeconds = Math.floor(totalMilliseconds / 1000);
218
+ days = Math.floor(totalSeconds / (3600 * 24));
219
+ hours = Math.floor((totalSeconds % (3600 * 24)) / 3600);
220
+ minutes = Math.floor((totalSeconds % 3600) / 60);
221
+ seconds = Math.floor(totalSeconds % 60);
222
+ components = [];
223
+ if (days > 0)
224
+ components.push("".concat(days, " d").concat(days > 1 ? "s" : ""));
225
+ if (hours > 0)
226
+ components.push("".concat(hours, " hr").concat(hours > 1 ? "s" : ""));
227
+ if (minutes > 0)
228
+ components.push("".concat(minutes, " min").concat(minutes > 1 ? "s" : ""));
229
+ if (seconds > 0)
230
+ components.push("".concat(seconds, " sec").concat(seconds > 1 ? "s" : ""));
231
+ durationString = components.join(", ");
232
+ player.pause();
233
+ row = new discord_js_1.ActionRowBuilder().addComponents(new discord_js_1.ButtonBuilder()
234
+ .setCustomId("decrease_music")
235
+ .setStyle(2)
236
+ .setLabel("-"), new discord_js_1.ButtonBuilder()
237
+ .setCustomId("previous_music")
238
+ .setStyle(2)
239
+ .setLabel("<="), new discord_js_1.ButtonBuilder()
240
+ .setCustomId("stop_music")
241
+ .setStyle(2)
242
+ .setLabel("▶"), new discord_js_1.ButtonBuilder()
243
+ .setCustomId("next_music")
244
+ .setStyle(2)
245
+ .setLabel("=>"), new discord_js_1.ButtonBuilder()
246
+ .setCustomId("increase_music")
247
+ .setStyle(2)
248
+ .setLabel("+"));
249
+ resEmbed = new discord_js_1.EmbedBuilder()
250
+ .setTitle("Playing Song ")
251
+ .setColor("#1dadc0")
252
+ .setDescription("- `Requested By:` <@".concat(interaction.user.id, ">.\n- `Song Name:` ").concat(player.current.info.title, ".\n- `Author:` ").concat(player.current.info.author, ".\n- `Volume:` __").concat(player.volume, "__.\n- `Duration:` **").concat(durationString, "**."))
253
+ .setTimestamp()
254
+ .setThumbnail(player.current.info.thumbnail)
255
+ .setFooter({
256
+ text: "requested by: ".concat(interaction.user.usernam),
257
+ iconURL: interaction.user.displayAvatarURL(),
258
+ });
259
+ return [4 /*yield*/, interaction.deferUpdate()];
260
+ case 24:
261
+ _a.sent();
262
+ return [4 /*yield*/, interaction.editReply({
263
+ embeds: [resEmbed],
264
+ components: [row],
265
+ })];
266
+ case 25: return [2 /*return*/, _a.sent()];
267
+ case 26:
268
+ if (!(button === "next_music")) return [3 /*break*/, 32];
269
+ player = interaction.client.riffy.players.get(interaction.guild.id);
270
+ if (!!player) return [3 /*break*/, 28];
271
+ return [4 /*yield*/, interaction.reply({
272
+ content: "No music is being played at the moment.",
273
+ ephemeral: true,
274
+ })];
275
+ case 27: return [2 /*return*/, _a.sent()];
276
+ case 28:
277
+ if (!player) return [3 /*break*/, 30];
278
+ return [4 /*yield*/, player.stop()];
279
+ case 29:
280
+ _a.sent();
281
+ _a.label = 30;
282
+ case 30: return [4 /*yield*/, interaction.reply({ content: "Playing next...", ephemeral: true })];
283
+ case 31:
284
+ _a.sent();
285
+ return [3 /*break*/, 39];
286
+ case 32:
287
+ if (!(button === "increase_music")) return [3 /*break*/, 39];
288
+ botMember = interaction.guild.members.cache.get(interaction.client.user.id);
289
+ if (!botMember.voice.channel) {
290
+ return [2 /*return*/, interaction.reply({
291
+ content: "I need to be in a voice channel to use this command.",
292
+ ephemeral: true,
293
+ })];
294
+ }
295
+ member = interaction.guild.members.cache.get(interaction.user.id);
296
+ if (!member.voice.channel) {
297
+ return [2 /*return*/, interaction.reply({
298
+ content: "You need to be in a voice channel to use this command.",
299
+ ephemeral: true,
300
+ })];
301
+ }
302
+ if (member.voice.channel.id !== botMember.voice.channel.id) {
303
+ return [2 /*return*/, interaction.reply({
304
+ content: "You need to be in the same voice channel as the bot to use this command.",
305
+ ephemeral: true,
306
+ })];
307
+ }
308
+ player = interaction.client.riffy.get(interaction.guild.id);
309
+ if (!!player) return [3 /*break*/, 34];
310
+ return [4 /*yield*/, interaction.reply({
311
+ content: "No music is being played at the moment.",
312
+ ephemeral: true,
313
+ })];
314
+ case 33: return [2 /*return*/, _a.sent()];
315
+ case 34:
316
+ totalMilliseconds = player.current.info.length;
317
+ totalSeconds = Math.floor(totalMilliseconds / 1000);
318
+ days = Math.floor(totalSeconds / (3600 * 24));
319
+ hours = Math.floor((totalSeconds % (3600 * 24)) / 3600);
320
+ minutes = Math.floor((totalSeconds % 3600) / 60);
321
+ seconds = Math.floor(totalSeconds % 60);
322
+ components = [];
323
+ if (days > 0)
324
+ components.push("".concat(days, " d").concat(days > 1 ? "s" : ""));
325
+ if (hours > 0)
326
+ components.push("".concat(hours, " hr").concat(hours > 1 ? "s" : ""));
327
+ if (minutes > 0)
328
+ components.push("".concat(minutes, " min").concat(minutes > 1 ? "s" : ""));
329
+ if (seconds > 0)
330
+ components.push("".concat(seconds, " sec").concat(seconds > 1 ? "s" : ""));
331
+ durationString = components.join(", ");
332
+ if (!(player.volume === 1000)) return [3 /*break*/, 36];
333
+ return [4 /*yield*/, interaction.reply({
334
+ content: "Volume is at 1000 already you can't increase it more than that.",
335
+ ephemeral: true,
336
+ })];
337
+ case 35: return [2 /*return*/, _a.sent()];
338
+ case 36:
339
+ if (!player) return [3 /*break*/, 39];
340
+ newVolume = player.volume + 20;
341
+ player.setVolume(newVolume);
342
+ response = new discord_js_1.EmbedBuilder()
343
+ .setTitle("Playing Song ")
344
+ .setColor("#1dadc0")
345
+ .setDescription("- `Requested By:` <@".concat(interaction.user.id, ">.\n- `Song Name:` ").concat(player.current.info.title, ".\n- `Author:` ").concat(player.current.info.author, ".\n- `Volume:` __").concat(player.volume, "__.\n- `Duration:` **").concat(durationString, "**."))
346
+ .setTimestamp()
347
+ .setThumbnail(player.current.info.thumbnail);
348
+ return [4 /*yield*/, interaction.deferUpdate()];
349
+ case 37:
350
+ _a.sent();
351
+ return [4 /*yield*/, interaction.editReply({ embeds: [response] })];
352
+ case 38:
353
+ _a.sent();
354
+ _a.label = 39;
355
+ case 39: return [2 /*return*/];
356
+ }
357
+ });
358
+ });
359
+ }
360
+
361
+ exports.handleButtonInteraction = handleButtonInteraction;
@@ -0,0 +1,58 @@
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.handleQueueEnd = void 0;
40
+ function handleQueueEnd(client, player) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ var channel, autoplay;
43
+ return __generator(this, function (_a) {
44
+ channel = client.channels.cache.get(player.textChannel);
45
+ autoplay = false;
46
+ if (autoplay) {
47
+ player.autoplay(player);
48
+ }
49
+ else {
50
+ player.destroy();
51
+ channel.send("Queue has ended.");
52
+ }
53
+ return [2 /*return*/];
54
+ });
55
+ });
56
+ }
57
+
58
+ exports.handleQueueEnd = handleQueueEnd;
@@ -0,0 +1,115 @@
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.handleTrackStart = void 0;
40
+ var discord_js_1 = require("discord.js");
41
+ var music_card_js_1 = require("../../../../../canvas/themes/music-card.js");
42
+ function handleTrackStart(client, player, track) {
43
+ return __awaiter(this, void 0, void 0, function () {
44
+ var channel, totalMilliseconds, totalSeconds, days, hours, minutes, seconds, components, durationString, v, attachment, embedTrack, musicButtons, error_1;
45
+ return __generator(this, function (_a) {
46
+ switch (_a.label) {
47
+ case 0:
48
+ _a.trys.push([0, 5, , 6]);
49
+ return [4 /*yield*/, client.channels.cache.get(player.textChannel)];
50
+ case 1:
51
+ channel = _a.sent();
52
+ totalMilliseconds = track.info.length;
53
+ totalSeconds = Math.floor(totalMilliseconds / 1000);
54
+ days = Math.floor(totalSeconds / (3600 * 24));
55
+ hours = Math.floor((totalSeconds % (3600 * 24)) / 3600);
56
+ minutes = Math.floor((totalSeconds % 3600) / 60);
57
+ seconds = Math.floor(totalSeconds % 60);
58
+ components = [];
59
+ if (days > 0)
60
+ components.push("".concat(days, " d").concat(days > 1 ? "s" : ""));
61
+ if (hours > 0)
62
+ components.push("".concat(hours, " hr").concat(hours > 1 ? "s" : ""));
63
+ if (minutes > 0)
64
+ components.push("".concat(minutes, " min").concat(minutes > 1 ? "s" : ""));
65
+ if (seconds > 0)
66
+ components.push("".concat(seconds, " sec").concat(seconds > 1 ? "s" : ""));
67
+ durationString = components.join(", ");
68
+ return [4 /*yield*/, player.setVolume(400)];
69
+ case 2:
70
+ v = _a.sent();
71
+ return [4 /*yield*/, (0, music_card_js_1.drawCard)(track.info.thumbnail, durationString, track.info.title, track.info.author, v, discord_js_1.AttachmentBuilder)];
72
+ case 3:
73
+ attachment = _a.sent();
74
+ embedTrack = new discord_js_1.EmbedBuilder()
75
+ .setTitle("Playing Song")
76
+ .setColor("#1dadc0")
77
+ .setDescription("- `Requested By:` <@".concat(track.info.requester.id, ">.\n- `Song Name:` ").concat(track.info.title, ".\n- `Author:` ").concat(track.info.author, ".\n- `Volume:` __").concat(v.volume, "__.\n- `Duration:` **").concat(durationString, "**."))
78
+ .setTimestamp()
79
+ .setImage("attachment://music-theme.png")
80
+ .setThumbnail(track.info.thumbnail);
81
+ musicButtons = new discord_js_1.ActionRowBuilder().addComponents(new discord_js_1.ButtonBuilder()
82
+ .setCustomId("decrease_music")
83
+ .setStyle(2)
84
+ .setLabel("-"), new discord_js_1.ButtonBuilder()
85
+ .setCustomId("previous_music")
86
+ .setStyle(2)
87
+ .setLabel("<="), new discord_js_1.ButtonBuilder()
88
+ .setCustomId("stop_music")
89
+ .setStyle(2)
90
+ .setLabel("▶️"), new discord_js_1.ButtonBuilder()
91
+ .setCustomId("next_music")
92
+ .setStyle(2)
93
+ .setLabel("=>"), new discord_js_1.ButtonBuilder()
94
+ .setCustomId("increase_music")
95
+ .setStyle(2)
96
+ .setLabel("+"));
97
+ return [4 /*yield*/, channel.send({
98
+ embeds: [embedTrack],
99
+ components: [musicButtons],
100
+ files: [attachment],
101
+ })];
102
+ case 4:
103
+ _a.sent();
104
+ return [3 /*break*/, 6];
105
+ case 5:
106
+ error_1 = _a.sent();
107
+ console.error("Error handling track start:", error_1.message);
108
+ return [3 /*break*/, 6];
109
+ case 6: return [2 /*return*/];
110
+ }
111
+ });
112
+ });
113
+ }
114
+
115
+ exports.handleTrackStart = handleTrackStart;