@ninenity/neutrun 1.0.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 (226) hide show
  1. package/README.md +5 -0
  2. package/dist/CLI/Bootstrap.d.ts +2 -0
  3. package/dist/CLI/Bootstrap.d.ts.map +1 -0
  4. package/dist/CLI/Bootstrap.js +71 -0
  5. package/dist/CLI/Bootstrap.js.map +1 -0
  6. package/dist/CLI/Localize.d.ts +2 -0
  7. package/dist/CLI/Localize.d.ts.map +1 -0
  8. package/dist/CLI/Localize.js +248 -0
  9. package/dist/CLI/Localize.js.map +1 -0
  10. package/dist/CLI/Translate.d.ts +2 -0
  11. package/dist/CLI/Translate.d.ts.map +1 -0
  12. package/dist/CLI/Translate.js +82 -0
  13. package/dist/CLI/Translate.js.map +1 -0
  14. package/dist/CLI/bin.d.ts +3 -0
  15. package/dist/CLI/bin.d.ts.map +1 -0
  16. package/dist/CLI/bin.js +36 -0
  17. package/dist/CLI/bin.js.map +1 -0
  18. package/dist/Emojis/EmojiLoader.d.ts +4 -0
  19. package/dist/Emojis/EmojiLoader.d.ts.map +1 -0
  20. package/dist/Emojis/EmojiLoader.js +262 -0
  21. package/dist/Emojis/EmojiLoader.js.map +1 -0
  22. package/dist/Emojis/Pool.d.ts +3 -0
  23. package/dist/Emojis/Pool.d.ts.map +1 -0
  24. package/dist/Emojis/Pool.js +33 -0
  25. package/dist/Emojis/Pool.js.map +1 -0
  26. package/dist/Emojis/index.d.ts +3 -0
  27. package/dist/Emojis/index.d.ts.map +1 -0
  28. package/dist/Emojis/index.js +9 -0
  29. package/dist/Emojis/index.js.map +1 -0
  30. package/dist/Emojis/types.d.ts +15 -0
  31. package/dist/Emojis/types.d.ts.map +1 -0
  32. package/dist/Emojis/types.js +3 -0
  33. package/dist/Emojis/types.js.map +1 -0
  34. package/dist/I18n/index.d.ts +34 -0
  35. package/dist/I18n/index.d.ts.map +1 -0
  36. package/dist/I18n/index.js +77 -0
  37. package/dist/I18n/index.js.map +1 -0
  38. package/dist/Logger/Color.d.ts +15 -0
  39. package/dist/Logger/Color.d.ts.map +1 -0
  40. package/dist/Logger/Color.js +54 -0
  41. package/dist/Logger/Color.js.map +1 -0
  42. package/dist/Logger/index.d.ts +38 -0
  43. package/dist/Logger/index.d.ts.map +1 -0
  44. package/dist/Logger/index.js +577 -0
  45. package/dist/Logger/index.js.map +1 -0
  46. package/dist/Modules/Bots/index.d.ts +4 -0
  47. package/dist/Modules/Bots/index.d.ts.map +1 -0
  48. package/dist/Modules/Bots/index.js +45 -0
  49. package/dist/Modules/Bots/index.js.map +1 -0
  50. package/dist/Modules/Component/index.d.ts +14 -0
  51. package/dist/Modules/Component/index.d.ts.map +1 -0
  52. package/dist/Modules/Component/index.js +32 -0
  53. package/dist/Modules/Component/index.js.map +1 -0
  54. package/dist/Modules/Config/index.d.ts +5 -0
  55. package/dist/Modules/Config/index.d.ts.map +1 -0
  56. package/dist/Modules/Config/index.js +13 -0
  57. package/dist/Modules/Config/index.js.map +1 -0
  58. package/dist/Modules/Database/index.d.ts +15 -0
  59. package/dist/Modules/Database/index.d.ts.map +1 -0
  60. package/dist/Modules/Database/index.js +22 -0
  61. package/dist/Modules/Database/index.js.map +1 -0
  62. package/dist/Modules/Diagnostics/ModuleDiagnostics.d.ts +18 -0
  63. package/dist/Modules/Diagnostics/ModuleDiagnostics.d.ts.map +1 -0
  64. package/dist/Modules/Diagnostics/ModuleDiagnostics.js +101 -0
  65. package/dist/Modules/Diagnostics/ModuleDiagnostics.js.map +1 -0
  66. package/dist/Modules/Diagnostics/index.d.ts +3 -0
  67. package/dist/Modules/Diagnostics/index.d.ts.map +1 -0
  68. package/dist/Modules/Diagnostics/index.js +7 -0
  69. package/dist/Modules/Diagnostics/index.js.map +1 -0
  70. package/dist/Modules/Logs/index.d.ts +4 -0
  71. package/dist/Modules/Logs/index.d.ts.map +1 -0
  72. package/dist/Modules/Logs/index.js +11 -0
  73. package/dist/Modules/Logs/index.js.map +1 -0
  74. package/dist/Modules/Storage/index.d.ts +3 -0
  75. package/dist/Modules/Storage/index.d.ts.map +1 -0
  76. package/dist/Modules/Storage/index.js +11 -0
  77. package/dist/Modules/Storage/index.js.map +1 -0
  78. package/dist/Modules/index.d.ts +8 -0
  79. package/dist/Modules/index.d.ts.map +1 -0
  80. package/dist/Modules/index.js +45 -0
  81. package/dist/Modules/index.js.map +1 -0
  82. package/dist/Shared/Autocomplete.d.ts +31 -0
  83. package/dist/Shared/Autocomplete.d.ts.map +1 -0
  84. package/dist/Shared/Autocomplete.js +37 -0
  85. package/dist/Shared/Autocomplete.js.map +1 -0
  86. package/dist/Shared/ChannelLoader.d.ts +4 -0
  87. package/dist/Shared/ChannelLoader.d.ts.map +1 -0
  88. package/dist/Shared/ChannelLoader.js +133 -0
  89. package/dist/Shared/ChannelLoader.js.map +1 -0
  90. package/dist/Shared/Client.d.ts +30 -0
  91. package/dist/Shared/Client.d.ts.map +1 -0
  92. package/dist/Shared/Client.js +517 -0
  93. package/dist/Shared/Client.js.map +1 -0
  94. package/dist/Shared/ComponentAutoDeploy.d.ts +3 -0
  95. package/dist/Shared/ComponentAutoDeploy.d.ts.map +1 -0
  96. package/dist/Shared/ComponentAutoDeploy.js +230 -0
  97. package/dist/Shared/ComponentAutoDeploy.js.map +1 -0
  98. package/dist/Shared/ComponentRuntime.d.ts +43 -0
  99. package/dist/Shared/ComponentRuntime.d.ts.map +1 -0
  100. package/dist/Shared/ComponentRuntime.js +393 -0
  101. package/dist/Shared/ComponentRuntime.js.map +1 -0
  102. package/dist/Shared/Config.d.ts +6 -0
  103. package/dist/Shared/Config.d.ts.map +1 -0
  104. package/dist/Shared/Config.js +15 -0
  105. package/dist/Shared/Config.js.map +1 -0
  106. package/dist/Shared/ConfigLoader.d.ts +2 -0
  107. package/dist/Shared/ConfigLoader.d.ts.map +1 -0
  108. package/dist/Shared/ConfigLoader.js +74 -0
  109. package/dist/Shared/ConfigLoader.js.map +1 -0
  110. package/dist/Shared/ConfigProxy.d.ts +2 -0
  111. package/dist/Shared/ConfigProxy.d.ts.map +1 -0
  112. package/dist/Shared/ConfigProxy.js +46 -0
  113. package/dist/Shared/ConfigProxy.js.map +1 -0
  114. package/dist/Shared/ConsoleLog.d.ts +7 -0
  115. package/dist/Shared/ConsoleLog.d.ts.map +1 -0
  116. package/dist/Shared/ConsoleLog.js +23 -0
  117. package/dist/Shared/ConsoleLog.js.map +1 -0
  118. package/dist/Shared/CooldownManager.d.ts +16 -0
  119. package/dist/Shared/CooldownManager.d.ts.map +1 -0
  120. package/dist/Shared/CooldownManager.js +167 -0
  121. package/dist/Shared/CooldownManager.js.map +1 -0
  122. package/dist/Shared/Definer.d.ts +10 -0
  123. package/dist/Shared/Definer.d.ts.map +1 -0
  124. package/dist/Shared/Definer.js +711 -0
  125. package/dist/Shared/Definer.js.map +1 -0
  126. package/dist/Shared/EventBus.d.ts +48 -0
  127. package/dist/Shared/EventBus.d.ts.map +1 -0
  128. package/dist/Shared/EventBus.js +181 -0
  129. package/dist/Shared/EventBus.js.map +1 -0
  130. package/dist/Shared/InteractionContext.d.ts +12 -0
  131. package/dist/Shared/InteractionContext.d.ts.map +1 -0
  132. package/dist/Shared/InteractionContext.js +34 -0
  133. package/dist/Shared/InteractionContext.js.map +1 -0
  134. package/dist/Shared/InteractionManager.d.ts +27 -0
  135. package/dist/Shared/InteractionManager.d.ts.map +1 -0
  136. package/dist/Shared/InteractionManager.js +256 -0
  137. package/dist/Shared/InteractionManager.js.map +1 -0
  138. package/dist/Shared/LocalBotRegistry.d.ts +14 -0
  139. package/dist/Shared/LocalBotRegistry.d.ts.map +1 -0
  140. package/dist/Shared/LocalBotRegistry.js +140 -0
  141. package/dist/Shared/LocalBotRegistry.js.map +1 -0
  142. package/dist/Shared/LogTransport.d.ts +49 -0
  143. package/dist/Shared/LogTransport.d.ts.map +1 -0
  144. package/dist/Shared/LogTransport.js +357 -0
  145. package/dist/Shared/LogTransport.js.map +1 -0
  146. package/dist/Shared/Neutrun.d.ts +55 -0
  147. package/dist/Shared/Neutrun.d.ts.map +1 -0
  148. package/dist/Shared/Neutrun.js +269 -0
  149. package/dist/Shared/Neutrun.js.map +1 -0
  150. package/dist/Shared/Plugin.d.ts +8 -0
  151. package/dist/Shared/Plugin.d.ts.map +1 -0
  152. package/dist/Shared/Plugin.js +3 -0
  153. package/dist/Shared/Plugin.js.map +1 -0
  154. package/dist/Shared/Pool.d.ts +3 -0
  155. package/dist/Shared/Pool.d.ts.map +1 -0
  156. package/dist/Shared/Pool.js +29 -0
  157. package/dist/Shared/Pool.js.map +1 -0
  158. package/dist/Shared/ProcessManager.d.ts +11 -0
  159. package/dist/Shared/ProcessManager.d.ts.map +1 -0
  160. package/dist/Shared/ProcessManager.js +56 -0
  161. package/dist/Shared/ProcessManager.js.map +1 -0
  162. package/dist/Shared/QueueManager.d.ts +9 -0
  163. package/dist/Shared/QueueManager.d.ts.map +1 -0
  164. package/dist/Shared/QueueManager.js +65 -0
  165. package/dist/Shared/QueueManager.js.map +1 -0
  166. package/dist/Shared/RoleLoader.d.ts +4 -0
  167. package/dist/Shared/RoleLoader.d.ts.map +1 -0
  168. package/dist/Shared/RoleLoader.js +138 -0
  169. package/dist/Shared/RoleLoader.js.map +1 -0
  170. package/dist/Shared/Supervisor.d.ts +67 -0
  171. package/dist/Shared/Supervisor.d.ts.map +1 -0
  172. package/dist/Shared/Supervisor.js +308 -0
  173. package/dist/Shared/Supervisor.js.map +1 -0
  174. package/dist/Shared/TelemetryService.d.ts +63 -0
  175. package/dist/Shared/TelemetryService.d.ts.map +1 -0
  176. package/dist/Shared/TelemetryService.js +631 -0
  177. package/dist/Shared/TelemetryService.js.map +1 -0
  178. package/dist/Shared/Utils.d.ts +94 -0
  179. package/dist/Shared/Utils.d.ts.map +1 -0
  180. package/dist/Shared/Utils.js +390 -0
  181. package/dist/Shared/Utils.js.map +1 -0
  182. package/dist/Shared/WebSocket.d.ts +15 -0
  183. package/dist/Shared/WebSocket.d.ts.map +1 -0
  184. package/dist/Shared/WebSocket.js +599 -0
  185. package/dist/Shared/WebSocket.js.map +1 -0
  186. package/dist/Types/Client.Type.d.ts +130 -0
  187. package/dist/Types/Client.Type.d.ts.map +1 -0
  188. package/dist/Types/Client.Type.js +182 -0
  189. package/dist/Types/Client.Type.js.map +1 -0
  190. package/dist/Types/Command.Type.d.ts +28 -0
  191. package/dist/Types/Command.Type.d.ts.map +1 -0
  192. package/dist/Types/Command.Type.js +4 -0
  193. package/dist/Types/Command.Type.js.map +1 -0
  194. package/dist/Types/Definer.Type.d.ts +37 -0
  195. package/dist/Types/Definer.Type.d.ts.map +1 -0
  196. package/dist/Types/Definer.Type.js +4 -0
  197. package/dist/Types/Definer.Type.js.map +1 -0
  198. package/dist/Types/InputInteraction.Type.d.ts +90 -0
  199. package/dist/Types/InputInteraction.Type.d.ts.map +1 -0
  200. package/dist/Types/InputInteraction.Type.js +339 -0
  201. package/dist/Types/InputInteraction.Type.js.map +1 -0
  202. package/dist/Types/Interaction.Type.d.ts +47 -0
  203. package/dist/Types/Interaction.Type.d.ts.map +1 -0
  204. package/dist/Types/Interaction.Type.js +4 -0
  205. package/dist/Types/Interaction.Type.js.map +1 -0
  206. package/dist/Types/Log.Type.d.ts +28 -0
  207. package/dist/Types/Log.Type.d.ts.map +1 -0
  208. package/dist/Types/Log.Type.js +3 -0
  209. package/dist/Types/Log.Type.js.map +1 -0
  210. package/dist/Types/Permission.Type.d.ts +17 -0
  211. package/dist/Types/Permission.Type.d.ts.map +1 -0
  212. package/dist/Types/Permission.Type.js +13 -0
  213. package/dist/Types/Permission.Type.js.map +1 -0
  214. package/dist/Types/PrefixCommandBuilder.Type.d.ts +81 -0
  215. package/dist/Types/PrefixCommandBuilder.Type.d.ts.map +1 -0
  216. package/dist/Types/PrefixCommandBuilder.Type.js +203 -0
  217. package/dist/Types/PrefixCommandBuilder.Type.js.map +1 -0
  218. package/dist/Types/TaskDefiner.Type.d.ts +14 -0
  219. package/dist/Types/TaskDefiner.Type.d.ts.map +1 -0
  220. package/dist/Types/TaskDefiner.Type.js +4 -0
  221. package/dist/Types/TaskDefiner.Type.js.map +1 -0
  222. package/dist/index.d.ts +44 -0
  223. package/dist/index.d.ts.map +1 -0
  224. package/dist/index.js +122 -0
  225. package/dist/index.js.map +1 -0
  226. package/package.json +55 -0
@@ -0,0 +1,711 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.StartTasksScheduler = exports.RegisterSlashCommands = exports.Setup = exports.StopTasksForClient = exports.StopTaskTimer = exports.StartTaskTimer = exports.ExecuteTask = void 0;
40
+ // --------------------------------------------------------------------------------
41
+ const discord_js_1 = require("discord.js");
42
+ const InputInteraction_Type_1 = require("../Types/InputInteraction.Type");
43
+ const Permission_Type_1 = require("../Types/Permission.Type");
44
+ const InteractionContext_1 = require("./InteractionContext");
45
+ const InteractionManager_1 = __importDefault(require("./InteractionManager"));
46
+ const ConsoleLog_1 = require("./ConsoleLog");
47
+ const Color_1 = __importDefault(require("../Logger/Color"));
48
+ const CooldownManager_1 = __importDefault(require("./CooldownManager"));
49
+ const QueueManager_1 = __importDefault(require("./QueueManager"));
50
+ const I18n_1 = __importDefault(require("../I18n"));
51
+ const InputInteraction_Type_2 = require("../Types/InputInteraction.Type");
52
+ const TelemetryService_1 = __importDefault(require("./TelemetryService"));
53
+ const ComponentRuntime = __importStar(require("./ComponentRuntime"));
54
+ const RoleLoader_1 = __importDefault(require("./RoleLoader"));
55
+ const ChannelLoader_1 = __importDefault(require("./ChannelLoader"));
56
+ const WebSocket = __importStar(require("./WebSocket"));
57
+ // --------------------------------------------------------------------------------
58
+ const ProcessCooldown = async (interaction, commandId, definer) => {
59
+ const userId = interaction.user.id;
60
+ const guildId = interaction.guildId || interaction.guild?.id || undefined;
61
+ const globalCooldown = CooldownManager_1.default.check(userId, 'global');
62
+ if (globalCooldown) {
63
+ TelemetryService_1.default.registerCounter('cooldownGlobalRejections');
64
+ const Reply = {
65
+ content: `Você está em cooldown global. Aguarde ${globalCooldown.formatted}.`,
66
+ allowedMentions: { parse: [] },
67
+ flags: 64
68
+ };
69
+ if (interaction.reply)
70
+ await interaction.reply(Reply).catch(() => { });
71
+ return false;
72
+ }
73
+ const cmdCooldown = CooldownManager_1.default.check(userId, commandId, guildId);
74
+ if (cmdCooldown) {
75
+ TelemetryService_1.default.registerCounter('cooldownRejections');
76
+ const Reply = {
77
+ content: `Aguarde ${cmdCooldown.formatted} para usar este comando novamente.`,
78
+ allowedMentions: { parse: [] },
79
+ flags: 64
80
+ };
81
+ if (interaction.reply)
82
+ await interaction.reply(Reply).catch(() => { });
83
+ return false;
84
+ }
85
+ if (definer.cooldown) {
86
+ let duration = null;
87
+ if (Array.isArray(definer.cooldown)) {
88
+ const userRoles = interaction.member?.roles?.cache?.map((R) => R.id) || [];
89
+ duration = CooldownManager_1.default.resolveLowestDuration(userRoles, definer.cooldown);
90
+ }
91
+ else {
92
+ duration = definer.cooldown;
93
+ }
94
+ if (duration) {
95
+ CooldownManager_1.default.set(userId, commandId, duration, guildId);
96
+ }
97
+ }
98
+ return true;
99
+ };
100
+ const ProcessQueue = async (interaction, commandId, definer, execute) => {
101
+ if (definer.queue) {
102
+ TelemetryService_1.default.registerCounter('queuedCommands');
103
+ // Prefixo "cmd:" isola as filas automáticas dos definers das filas
104
+ // manuais de client.queue(<name>): sem ele, `queue: 'guild'` colidiria
105
+ // com uma fila manual de mesmo nome no mesmo escopo.
106
+ let key = `cmd:${commandId}`;
107
+ if (definer.queue === 'user') {
108
+ // User queues are isolated by guild. Use global-user when an old bot
109
+ // explicitly needs one user queue shared across every guild.
110
+ key += `:user:${interaction.guildId || 'dm'}:${interaction.user.id}`;
111
+ }
112
+ else if (definer.queue === 'channel')
113
+ key += `:channel:${interaction.channelId}`;
114
+ else if (definer.queue === 'guild')
115
+ key += `:guild:${interaction.guildId || 'dm'}`;
116
+ else if (definer.queue === 'global-user')
117
+ key += `:user:${interaction.user.id}`;
118
+ else
119
+ key += `:${definer.queue}`;
120
+ await QueueManager_1.default.enqueue(key, execute);
121
+ }
122
+ else {
123
+ await execute();
124
+ }
125
+ };
126
+ const SafeAsyncListener = (label, handler) => (...args) => {
127
+ const guildId = args
128
+ .map((arg) => arg?.guildId || arg?.guild?.id || arg?.member?.guild?.id || undefined)
129
+ .find(Boolean);
130
+ void Promise.resolve()
131
+ .then(() => guildId
132
+ ? (0, InteractionContext_1.RunWithGuild)(String(guildId), () => handler(...args))
133
+ : handler(...args))
134
+ .catch((error) => {
135
+ (0, ConsoleLog_1.logError)(`Erro no listener ${label}: ${error?.message || error}`, 'Events');
136
+ });
137
+ };
138
+ const RegisterSlashCommands = async (client) => {
139
+ const Token = process.env.BOT_TOKEN;
140
+ const ApplicationId = client.application?.id || client.user?.id;
141
+ if (Token && ApplicationId) {
142
+ const Rest = new discord_js_1.REST({ version: '10' }).setToken(Token);
143
+ const GlobalCommands = client.slashCommands
144
+ .filter((d) => d.global === true)
145
+ .map((d) => d.data.toJSON());
146
+ const GuildCommands = client.slashCommands
147
+ .filter((d) => d.global !== true)
148
+ .map((d) => d.data.toJSON());
149
+ const GlobalContextMenuCommands = client.contextMenuCommands
150
+ .filter((d) => d.global === true)
151
+ .map((d) => d.data.toJSON());
152
+ const GuildContextMenuCommands = client.contextMenuCommands
153
+ .filter((d) => d.global !== true)
154
+ .map((d) => d.data.toJSON());
155
+ try {
156
+ await Rest.put(discord_js_1.Routes.applicationCommands(ApplicationId), {
157
+ body: [...GlobalCommands, ...GlobalContextMenuCommands]
158
+ });
159
+ const Total = GlobalCommands.length + GlobalContextMenuCommands.length;
160
+ if (Total > 0) {
161
+ (0, ConsoleLog_1.logSuccess)(`${(0, Color_1.default)(String(Total), 'cyan', 'bold')} comandos globais registrados`);
162
+ }
163
+ }
164
+ catch (error) {
165
+ (0, ConsoleLog_1.logError)('Erro ao registrar comandos globais');
166
+ }
167
+ const Guilds = client.guilds.cache;
168
+ for (const [GuildId, Guild] of Guilds) {
169
+ try {
170
+ await Rest.put(discord_js_1.Routes.applicationGuildCommands(ApplicationId, GuildId), {
171
+ body: [...GuildCommands, ...GuildContextMenuCommands]
172
+ });
173
+ const Total = GuildCommands.length + GuildContextMenuCommands.length;
174
+ if (Total > 0) {
175
+ (0, ConsoleLog_1.logSuccess)(`${(0, Color_1.default)(String(Total), 'cyan', 'bold')} comandos registrados`, 'Loader');
176
+ }
177
+ }
178
+ catch (error) {
179
+ (0, ConsoleLog_1.logError)(`Erro ao registrar comandos em ${Guild.name}`);
180
+ }
181
+ }
182
+ }
183
+ };
184
+ exports.RegisterSlashCommands = RegisterSlashCommands;
185
+ const ParseTimeoutMs = (timeout) => {
186
+ if (typeof timeout === 'number')
187
+ return timeout;
188
+ const str = String(timeout).trim().toLowerCase();
189
+ const match = str.match(/^(\d+)\s*(s|sec|seconds|m|min|minutes|h|hour|hours|d|day|days)?$/);
190
+ if (!match) {
191
+ const parsed = Number(str);
192
+ return isNaN(parsed) ? 60000 : parsed;
193
+ }
194
+ const value = parseInt(match[1], 10);
195
+ const unit = match[2];
196
+ switch (unit) {
197
+ case 's':
198
+ case 'sec':
199
+ case 'seconds':
200
+ return value * 1000;
201
+ case 'm':
202
+ case 'min':
203
+ case 'minutes':
204
+ return value * 60 * 1000;
205
+ case 'h':
206
+ case 'hour':
207
+ case 'hours':
208
+ return value * 60 * 60 * 1000;
209
+ case 'd':
210
+ case 'day':
211
+ case 'days':
212
+ return value * 24 * 60 * 60 * 1000;
213
+ default:
214
+ return value;
215
+ }
216
+ };
217
+ const activeTaskTimers = new Map();
218
+ const runningTasks = new Set();
219
+ const taskKey = (client, taskId) => `${client.runtimeKey || 'default'}:${taskId}`;
220
+ const ExecuteTask = async (client, task) => {
221
+ const startedAt = Date.now();
222
+ try {
223
+ if (task.scope !== 'guild') {
224
+ await task.execute(client);
225
+ }
226
+ else {
227
+ for (const guildId of client.guilds.cache.keys()) {
228
+ await (0, InteractionContext_1.RunWithGuild)(guildId, () => task.execute(client, guildId));
229
+ }
230
+ }
231
+ TelemetryService_1.default.registerAction('job', task.id, true, {}, undefined, Date.now() - startedAt);
232
+ }
233
+ catch (error) {
234
+ TelemetryService_1.default.registerAction('job', task.id, false, {}, String(error), Date.now() - startedAt);
235
+ throw error;
236
+ }
237
+ };
238
+ exports.ExecuteTask = ExecuteTask;
239
+ const StartTaskTimer = (client, taskId) => {
240
+ const task = client.tasks.get(taskId);
241
+ if (!task)
242
+ throw new Error(`Task "${taskId}" não está registrada.`);
243
+ const scopedTaskId = taskKey(client, taskId);
244
+ if (activeTaskTimers.has(scopedTaskId)) {
245
+ clearInterval(activeTaskTimers.get(scopedTaskId));
246
+ activeTaskTimers.delete(scopedTaskId);
247
+ }
248
+ const timeoutMs = Math.max(1_000, ParseTimeoutMs(task.timeout));
249
+ const timer = setInterval(async () => {
250
+ if (runningTasks.has(scopedTaskId))
251
+ return;
252
+ runningTasks.add(scopedTaskId);
253
+ try {
254
+ await (0, exports.ExecuteTask)(client, task);
255
+ }
256
+ catch (error) {
257
+ (0, ConsoleLog_1.logError)(`Erro ao executar task ${(0, Color_1.default)(taskId, 'cyan', 'bold')}: ${error}`);
258
+ }
259
+ finally {
260
+ runningTasks.delete(scopedTaskId);
261
+ }
262
+ }, timeoutMs);
263
+ timer.unref?.();
264
+ activeTaskTimers.set(scopedTaskId, timer);
265
+ (0, ConsoleLog_1.logInfo)(`Task ativada/iniciada: ${(0, Color_1.default)(taskId, 'cyan', 'bold')} (${timeoutMs}ms)`);
266
+ };
267
+ exports.StartTaskTimer = StartTaskTimer;
268
+ const StopTaskTimer = (taskId, runtimeKey) => {
269
+ const scopedTaskId = runtimeKey
270
+ ? `${runtimeKey}:${taskId}`
271
+ : Array.from(activeTaskTimers.keys()).find((key) => key.endsWith(`:${taskId}`)) || taskId;
272
+ const timer = activeTaskTimers.get(scopedTaskId);
273
+ if (timer) {
274
+ clearInterval(timer);
275
+ activeTaskTimers.delete(scopedTaskId);
276
+ (0, ConsoleLog_1.logInfo)(`Task pausada/parada: ${(0, Color_1.default)(taskId, 'cyan', 'bold')}`);
277
+ }
278
+ };
279
+ exports.StopTaskTimer = StopTaskTimer;
280
+ const StopTasksForClient = (runtimeKey) => {
281
+ const prefix = `${runtimeKey}:`;
282
+ for (const [key, timer] of activeTaskTimers.entries()) {
283
+ if (!key.startsWith(prefix))
284
+ continue;
285
+ clearInterval(timer);
286
+ activeTaskTimers.delete(key);
287
+ }
288
+ for (const key of Array.from(runningTasks)) {
289
+ if (key.startsWith(prefix))
290
+ runningTasks.delete(key);
291
+ }
292
+ };
293
+ exports.StopTasksForClient = StopTasksForClient;
294
+ const StartTasksScheduler = (client) => {
295
+ if (!client.tasks || client.tasks.size === 0)
296
+ return;
297
+ client.tasks.forEach((task, taskId) => {
298
+ if (task.runOnStart) {
299
+ void Promise.resolve()
300
+ .then(() => (0, exports.ExecuteTask)(client, task))
301
+ .catch((err) => (0, ConsoleLog_1.logError)(`Erro na execução inicial da task ${taskId}: ${err}`));
302
+ }
303
+ if (task.started !== false) {
304
+ (0, exports.StartTaskTimer)(client, taskId);
305
+ }
306
+ else {
307
+ (0, ConsoleLog_1.logInfo)(`Task registrada (aguardando acionamento manual via runTask/startTask): ${(0, Color_1.default)(taskId, 'cyan', 'bold')}`);
308
+ }
309
+ });
310
+ };
311
+ exports.StartTasksScheduler = StartTasksScheduler;
312
+ const Setup = async (client) => {
313
+ // Graceful Shutdown
314
+ const shutdownHandler = async () => {
315
+ (0, ConsoleLog_1.logInfo)('Encerrando serviços e finalizando aplicação...', 'Shutdown');
316
+ (0, exports.StopTasksForClient)(client.runtimeKey || 'default');
317
+ await client.destroy();
318
+ process.exit(0);
319
+ };
320
+ process.once('SIGINT', shutdownHandler);
321
+ process.once('SIGTERM', shutdownHandler);
322
+ client._on(discord_js_1.Events.GuildCreate, SafeAsyncListener('GuildCreate', async (guild) => {
323
+ TelemetryService_1.default.registerEvent('discord:guildCreate');
324
+ TelemetryService_1.default.registerCounter('guildsJoined');
325
+ (0, ConsoleLog_1.logInfo)(`Adicionado em uma nova guild: ${guild.name}. Sincronizando comandos...`);
326
+ await (0, RoleLoader_1.default)(client);
327
+ await (0, ChannelLoader_1.default)(client);
328
+ await WebSocket.SendResourceSnapshot();
329
+ await RegisterSlashCommands(client);
330
+ }));
331
+ client._on(discord_js_1.Events.GuildDelete, SafeAsyncListener('GuildDelete', async () => {
332
+ TelemetryService_1.default.registerEvent('discord:guildDelete');
333
+ TelemetryService_1.default.registerCounter('guildsLeft');
334
+ await (0, RoleLoader_1.default)(client);
335
+ await (0, ChannelLoader_1.default)(client);
336
+ await WebSocket.SendResourceSnapshot();
337
+ }));
338
+ client.registeredEvents.forEach((definers, eventName) => {
339
+ definers.forEach((definer) => {
340
+ client._on(eventName, SafeAsyncListener(`event:${eventName}`, async (...args) => {
341
+ const startedAt = Date.now();
342
+ try {
343
+ await definer.execute(...args);
344
+ TelemetryService_1.default.registerEvent(`discord:${eventName}`, {
345
+ durationMs: Date.now() - startedAt
346
+ });
347
+ }
348
+ catch (error) {
349
+ TelemetryService_1.default.registerEvent(`discord:${eventName}`, {
350
+ error: true,
351
+ durationMs: Date.now() - startedAt
352
+ });
353
+ throw error;
354
+ }
355
+ }));
356
+ });
357
+ });
358
+ client.registeredOnceEvents.forEach((definers, eventName) => {
359
+ definers.forEach((definer) => {
360
+ client._once(eventName, SafeAsyncListener(`once:${eventName}`, async (...args) => {
361
+ const startedAt = Date.now();
362
+ try {
363
+ await definer.execute(...args);
364
+ TelemetryService_1.default.registerEvent(`discord:once:${eventName}`, {
365
+ durationMs: Date.now() - startedAt
366
+ });
367
+ }
368
+ catch (error) {
369
+ TelemetryService_1.default.registerEvent(`discord:once:${eventName}`, {
370
+ error: true,
371
+ durationMs: Date.now() - startedAt
372
+ });
373
+ throw error;
374
+ }
375
+ }));
376
+ });
377
+ });
378
+ client._on(discord_js_1.Events.InteractionCreate, SafeAsyncListener('InteractionCreate', async (interaction) => {
379
+ TelemetryService_1.default.registerCounter('interactionsSeen');
380
+ if (interaction.isAutocomplete()) {
381
+ const Command = client.slashCommands.get(interaction.commandName);
382
+ if (!Command?.autocomplete) {
383
+ // Autocomplete sem handler não pode ficar sem resposta: o Discord
384
+ // exibe "carregando" eternamente para o usuário.
385
+ await interaction.respond([]).catch(() => { });
386
+ return;
387
+ }
388
+ TelemetryService_1.default.registerCounter('autocompleteRequests');
389
+ const autocompleteStartedAt = Date.now();
390
+ try {
391
+ await Command.autocomplete(interaction);
392
+ TelemetryService_1.default.registerAction('autocomplete', interaction.commandName, true, { user: interaction.user.id, guild: interaction.guildId }, undefined, Date.now() - autocompleteStartedAt);
393
+ }
394
+ catch (error) {
395
+ (0, ConsoleLog_1.logError)(`Erro no autocomplete do comando ${(0, Color_1.default)(interaction.commandName, 'cyan', 'bold')}: ${error}`);
396
+ TelemetryService_1.default.registerAction('autocomplete', interaction.commandName, false, { user: interaction.user.id, guild: interaction.guildId }, String(error), Date.now() - autocompleteStartedAt);
397
+ }
398
+ return;
399
+ }
400
+ if (interaction.isChatInputCommand()) {
401
+ const Command = client.slashCommands.get(interaction.commandName);
402
+ if (!Command) {
403
+ // Comando removido/renomeado após o Discord cachear a entrada:
404
+ // responder, não deixar a interação morrer com "falhou".
405
+ TelemetryService_1.default.registerCounter('unknownCommandInteractions');
406
+ await interaction
407
+ .reply({
408
+ content: 'Este comando não está mais disponível. Tente novamente em instantes.',
409
+ flags: 64
410
+ })
411
+ .catch(() => { });
412
+ return;
413
+ }
414
+ const CreateRequire = (options) => {
415
+ const Member = interaction.member;
416
+ const ChannelId = interaction.channelId;
417
+ if (options.roles && Member) {
418
+ const RoleIds = Member.roles?.cache?.map((R) => R.id) || [];
419
+ if ('any' in options.roles) {
420
+ const HasAny = options.roles.any.some((Id) => RoleIds.includes(Id));
421
+ if (!HasAny) {
422
+ throw new Permission_Type_1.PermissionError(options.message ||
423
+ 'Você não tem o cargo necessário para usar este comando.');
424
+ }
425
+ }
426
+ if ('all' in options.roles) {
427
+ const HasAll = options.roles.all.every((Id) => RoleIds.includes(Id));
428
+ if (!HasAll) {
429
+ throw new Permission_Type_1.PermissionError(options.message ||
430
+ 'Você não tem o cargo necessário para usar este comando.');
431
+ }
432
+ }
433
+ if ('min' in options.roles) {
434
+ const Count = options.roles.from.filter((Id) => RoleIds.includes(Id)).length;
435
+ if (Count < options.roles.min) {
436
+ throw new Permission_Type_1.PermissionError(options.message ||
437
+ 'Você não tem o cargo necessário para usar este comando.');
438
+ }
439
+ }
440
+ }
441
+ if (options.channels && ChannelId) {
442
+ if ('any' in options.channels) {
443
+ const InAny = options.channels.any.includes(ChannelId);
444
+ if (!InAny) {
445
+ throw new Permission_Type_1.PermissionError(options.message ||
446
+ 'Este comando não pode ser usado neste canal.');
447
+ }
448
+ }
449
+ if ('all' in options.channels) {
450
+ const InAll = options.channels.all.includes(ChannelId);
451
+ if (!InAll) {
452
+ throw new Permission_Type_1.PermissionError(options.message ||
453
+ 'Este comando não pode ser usado neste canal.');
454
+ }
455
+ }
456
+ if ('min' in options.channels) {
457
+ const Count = options.channels.from.filter((Id) => Id === ChannelId).length;
458
+ if (Count < options.channels.min) {
459
+ throw new Permission_Type_1.PermissionError(options.message ||
460
+ 'Este comando não pode ser usado neste canal.');
461
+ }
462
+ }
463
+ }
464
+ return Promise.resolve(true);
465
+ };
466
+ const Ctx = ComponentRuntime.attachRequests(Object.assign(interaction, {
467
+ Type: 'Slash',
468
+ require: CreateRequire,
469
+ t: (key, params, locale) => {
470
+ return I18n_1.default.t(key, params, locale || interaction.locale || interaction.guild?.preferredLocale);
471
+ }
472
+ }), client.runtimeKey);
473
+ Ctx.options = (0, InputInteraction_Type_2.ProxyOptions)(Ctx.options);
474
+ try {
475
+ const canExecute = await ProcessCooldown(Ctx, interaction.commandName, Command);
476
+ if (!canExecute)
477
+ return;
478
+ const executeAction = async () => {
479
+ // A medição começa aqui para excluir o tempo de espera na fila.
480
+ const handlerStartedAt = Date.now();
481
+ await (0, InteractionContext_1.RunWith)(Ctx, () => Command.execute(Ctx));
482
+ TelemetryService_1.default.registerAction('slash', interaction.commandName, true, {
483
+ user: interaction.user.id,
484
+ guild: interaction.guildId,
485
+ params: interaction.options.data
486
+ }, undefined, Date.now() - handlerStartedAt);
487
+ };
488
+ await ProcessQueue(Ctx, interaction.commandName, Command, executeAction);
489
+ TelemetryService_1.default.registerCounter('slashHandled');
490
+ }
491
+ catch (error) {
492
+ if (error instanceof Permission_Type_1.PermissionError) {
493
+ TelemetryService_1.default.registerCounter('permissionRejections');
494
+ const Reply = { content: error.message, flags: 64 };
495
+ if (interaction.replied || interaction.deferred) {
496
+ await interaction.followUp(Reply).catch(() => { });
497
+ }
498
+ else {
499
+ await interaction.reply(Reply).catch(() => { });
500
+ }
501
+ return;
502
+ }
503
+ (0, ConsoleLog_1.logError)(`Erro no slash command ${(0, Color_1.default)(interaction.commandName, 'cyan', 'bold')}: ${error}`);
504
+ TelemetryService_1.default.registerAction('slash', interaction.commandName, false, {
505
+ user: interaction.user.id,
506
+ guild: interaction.guildId,
507
+ params: interaction.options.data
508
+ }, String(error));
509
+ const Reply = { content: 'Erro ao executar comando', flags: 64 };
510
+ if (interaction.replied || interaction.deferred) {
511
+ await interaction.followUp(Reply).catch(() => { });
512
+ }
513
+ else {
514
+ await interaction.reply(Reply).catch(() => { });
515
+ }
516
+ }
517
+ return;
518
+ }
519
+ if (interaction.isContextMenuCommand()) {
520
+ const Command = client.contextMenuCommands.get(interaction.commandName);
521
+ if (!Command)
522
+ return;
523
+ const Ctx = ComponentRuntime.attachRequests((0, InputInteraction_Type_1.CreateContextMenuInputCommandInteraction)(interaction), client.runtimeKey);
524
+ try {
525
+ const handlerStartedAt = Date.now();
526
+ await (0, InteractionContext_1.RunWith)(Ctx, () => Command.execute(Ctx));
527
+ TelemetryService_1.default.registerAction('context', interaction.commandName, true, {
528
+ user: interaction.user.id,
529
+ guild: interaction.guildId
530
+ }, undefined, Date.now() - handlerStartedAt);
531
+ }
532
+ catch (error) {
533
+ if (error instanceof Permission_Type_1.PermissionError) {
534
+ TelemetryService_1.default.registerCounter('permissionRejections');
535
+ const Reply = { content: error.message, flags: 64 };
536
+ if (interaction.replied || interaction.deferred) {
537
+ await interaction.followUp(Reply).catch(() => { });
538
+ }
539
+ else {
540
+ await interaction.reply(Reply).catch(() => { });
541
+ }
542
+ return;
543
+ }
544
+ (0, ConsoleLog_1.logError)(`Erro no context menu ${(0, Color_1.default)(interaction.commandName, 'cyan', 'bold')}: ${error}`);
545
+ TelemetryService_1.default.registerAction('context', interaction.commandName, false, {
546
+ user: interaction.user.id,
547
+ guild: interaction.guildId
548
+ }, String(error));
549
+ const Reply = { content: 'Erro ao executar comando', flags: 64 };
550
+ if (interaction.replied || interaction.deferred) {
551
+ await interaction.followUp(Reply).catch(() => { });
552
+ }
553
+ else {
554
+ await interaction.reply(Reply).catch(() => { });
555
+ }
556
+ }
557
+ return;
558
+ }
559
+ if (interaction.isModalSubmit()) {
560
+ const Modal = client.modals.get(interaction.customId);
561
+ if (!Modal) {
562
+ // Modal sem handler registrado (ex.: removido após restart):
563
+ // responder evita o "falha na interação" para o usuário.
564
+ TelemetryService_1.default.registerCounter('unknownModalSubmits');
565
+ await interaction
566
+ .reply({
567
+ content: 'Este formulário não está mais disponível.',
568
+ flags: 64
569
+ })
570
+ .catch(() => { });
571
+ return;
572
+ }
573
+ TelemetryService_1.default.registerCounter('modalSubmits');
574
+ const handlerStartedAt = Date.now();
575
+ try {
576
+ await Modal.execute(interaction);
577
+ TelemetryService_1.default.registerAction('modal', interaction.customId, true, { user: interaction.user.id, guild: interaction.guildId }, undefined, Date.now() - handlerStartedAt);
578
+ }
579
+ catch (error) {
580
+ (0, ConsoleLog_1.logError)(`Erro no modal ${(0, Color_1.default)(interaction.customId, 'cyan', 'bold')}: ${error}`);
581
+ TelemetryService_1.default.registerAction('modal', interaction.customId, false, { user: interaction.user.id, guild: interaction.guildId }, String(error), Date.now() - handlerStartedAt);
582
+ const Reply = { content: 'Erro ao processar modal', flags: 64 };
583
+ if (interaction.replied || interaction.deferred) {
584
+ await interaction.followUp(Reply).catch(() => { });
585
+ }
586
+ else {
587
+ await interaction.reply(Reply).catch(() => { });
588
+ }
589
+ }
590
+ return;
591
+ }
592
+ if (interaction.isButton() || interaction.isAnySelectMenu()) {
593
+ TelemetryService_1.default.registerCounter('componentInteractions');
594
+ const ActiveComponent = InteractionManager_1.default.FindActive(interaction.customId, interaction, client.runtimeKey);
595
+ if (!ActiveComponent) {
596
+ const runtimeStartedAt = Date.now();
597
+ try {
598
+ if (await ComponentRuntime.resolve(interaction, client.runtimeKey)) {
599
+ TelemetryService_1.default.registerAction('component', interaction.customId, true, { user: interaction.user.id, guild: interaction.guildId, runtime: 'componentb' }, undefined, Date.now() - runtimeStartedAt);
600
+ return;
601
+ }
602
+ }
603
+ catch (error) {
604
+ (0, ConsoleLog_1.logError)(`Erro no runtime da ComponentB ${(0, Color_1.default)(interaction.customId, 'cyan', 'bold')}: ${error?.message || error}`, 'ComponentB');
605
+ TelemetryService_1.default.registerAction('component', interaction.customId, false, { user: interaction.user.id, guild: interaction.guildId, runtime: 'componentb' }, String(error?.message || error), Date.now() - runtimeStartedAt);
606
+ if (!interaction.replied && !interaction.deferred) {
607
+ await interaction.reply({
608
+ content: 'Não foi possível processar este componente.',
609
+ flags: 64
610
+ }).catch(() => { });
611
+ }
612
+ }
613
+ return;
614
+ }
615
+ if (ActiveComponent.user &&
616
+ ActiveComponent.user !== interaction.user.id) {
617
+ TelemetryService_1.default.registerCounter('componentUserMismatches');
618
+ await interaction
619
+ .reply({
620
+ content: 'Você não pode interagir com este componente.',
621
+ flags: 64
622
+ })
623
+ .catch(() => { });
624
+ return;
625
+ }
626
+ const handlerStartedAt = Date.now();
627
+ try {
628
+ if (ActiveComponent.definer.Execute) {
629
+ const Ctx = InteractionManager_1.default.CreateContext(interaction);
630
+ await ActiveComponent.definer.Execute(Ctx);
631
+ }
632
+ else {
633
+ await InteractionManager_1.default.ResolveActive(interaction.customId, interaction, client.runtimeKey);
634
+ }
635
+ TelemetryService_1.default.registerAction('component', interaction.customId, true, { user: interaction.user.id, guild: interaction.guildId }, undefined, Date.now() - handlerStartedAt);
636
+ }
637
+ catch (error) {
638
+ (0, ConsoleLog_1.logError)(`Erro no componente ${(0, Color_1.default)(interaction.customId, 'cyan', 'bold')}: ${error}`);
639
+ TelemetryService_1.default.registerAction('component', interaction.customId, false, { user: interaction.user.id, guild: interaction.guildId }, String(error), Date.now() - handlerStartedAt);
640
+ const Reply = {
641
+ content: 'Erro ao processar componente',
642
+ flags: 64
643
+ };
644
+ if (interaction.replied || interaction.deferred) {
645
+ await interaction.followUp(Reply).catch(() => { });
646
+ }
647
+ else {
648
+ await interaction.reply(Reply).catch(() => { });
649
+ }
650
+ }
651
+ return;
652
+ }
653
+ }));
654
+ const Prefix = process.env.PREFIX || '!';
655
+ client._on(discord_js_1.Events.MessageCreate, SafeAsyncListener('MessageCreate', async (message) => {
656
+ if (message.author.bot)
657
+ return;
658
+ TelemetryService_1.default.registerCounter('messagesSeen');
659
+ if (!message.content.startsWith(Prefix))
660
+ return;
661
+ const Args = message.content.slice(Prefix.length).trim().split(/ +/);
662
+ const CommandName = Args.shift()?.toLowerCase();
663
+ if (!CommandName)
664
+ return;
665
+ let Command = client.prefixCommands.get(CommandName);
666
+ if (!Command) {
667
+ Command = client.prefixCommands.find((cmd) => {
668
+ const Config = cmd.data.toConfig();
669
+ return Config.Aliases.some((A) => A.toLowerCase() === CommandName);
670
+ });
671
+ }
672
+ if (!Command)
673
+ return;
674
+ const Config = Command.data.toConfig();
675
+ const Ctx = ComponentRuntime.attachRequests((0, InputInteraction_Type_1.CreatePrefixInputCommandInteraction)(message, Args, Config, Config.Name, client.runtimeKey), client.runtimeKey);
676
+ try {
677
+ const canExecute = await ProcessCooldown(Ctx, Config.Name, Command);
678
+ if (!canExecute)
679
+ return;
680
+ const executeAction = async () => {
681
+ const handlerStartedAt = Date.now();
682
+ await (0, InteractionContext_1.RunWith)(Ctx, () => Command.execute(Ctx));
683
+ TelemetryService_1.default.registerAction('prefix', Config.Name, true, {
684
+ user: message.author.id,
685
+ guild: message.guildId,
686
+ params: Args
687
+ }, undefined, Date.now() - handlerStartedAt);
688
+ };
689
+ await ProcessQueue(Ctx, Config.Name, Command, executeAction);
690
+ TelemetryService_1.default.registerCounter('prefixHandled');
691
+ }
692
+ catch (error) {
693
+ if (error instanceof Permission_Type_1.PermissionError) {
694
+ TelemetryService_1.default.registerCounter('permissionRejections');
695
+ await message.reply(error.message).catch(() => { });
696
+ return;
697
+ }
698
+ const errorMessage = error instanceof Error ? error.message : String(error);
699
+ (0, ConsoleLog_1.logError)(`Erro no prefix command ${(0, Color_1.default)(Config.Name, 'cyan', 'bold')}: ${errorMessage}`);
700
+ TelemetryService_1.default.registerAction('prefix', Config.Name, false, {
701
+ user: message.author.id,
702
+ guild: message.guildId,
703
+ params: Args
704
+ }, String(error));
705
+ await message.reply('Erro ao executar comando').catch(() => { });
706
+ }
707
+ }));
708
+ };
709
+ exports.Setup = Setup;
710
+ // --------------------------------------------------------------------------------
711
+ //# sourceMappingURL=Definer.js.map