revbot.js 0.0.13 → 0.0.15-build-test
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-35BYGFDX.js +25 -0
- package/dist/chunk-35BYGFDX.js.map +1 -0
- package/dist/chunk-3ANNOYXY.js +30 -0
- package/dist/chunk-3ANNOYXY.js.map +1 -0
- package/dist/chunk-3GLQHMWL.js +39 -0
- package/dist/chunk-3GLQHMWL.js.map +1 -0
- package/dist/chunk-43CUB3NP.js +30 -0
- package/dist/chunk-43CUB3NP.js.map +1 -0
- package/dist/chunk-55PAATU6.js +101 -0
- package/dist/chunk-55PAATU6.js.map +1 -0
- package/dist/chunk-5RK7FEID.js +47 -0
- package/dist/chunk-5RK7FEID.js.map +1 -0
- package/dist/chunk-6V6HPZ33.js +27 -0
- package/dist/chunk-6V6HPZ33.js.map +1 -0
- package/dist/chunk-6WJXGICC.js +25 -0
- package/dist/chunk-6WJXGICC.js.map +1 -0
- package/dist/chunk-7PA5MDKS.js +157 -0
- package/dist/chunk-7PA5MDKS.js.map +1 -0
- package/dist/chunk-7XUN3OQT.js +1 -0
- package/dist/chunk-7XUN3OQT.js.map +1 -0
- package/dist/chunk-AOKM5TCP.js +37 -0
- package/dist/chunk-AOKM5TCP.js.map +1 -0
- package/dist/chunk-BQS6ZLNY.js +80 -0
- package/dist/chunk-BQS6ZLNY.js.map +1 -0
- package/dist/chunk-CQ4AJZQD.js +51 -0
- package/dist/chunk-CQ4AJZQD.js.map +1 -0
- package/dist/chunk-DSM44DGO.js +156 -0
- package/dist/chunk-DSM44DGO.js.map +1 -0
- package/dist/chunk-E2P4PIDH.js +35 -0
- package/dist/chunk-E2P4PIDH.js.map +1 -0
- package/dist/chunk-EOZ7QHOH.js +151 -0
- package/dist/chunk-EOZ7QHOH.js.map +1 -0
- package/dist/chunk-FKNQEJE7.js +20 -0
- package/dist/chunk-FKNQEJE7.js.map +1 -0
- package/dist/chunk-G7DLVJKH.js +34 -0
- package/dist/chunk-G7DLVJKH.js.map +1 -0
- package/dist/chunk-GCIV7PRI.js +30 -0
- package/dist/chunk-GCIV7PRI.js.map +1 -0
- package/dist/chunk-GNQQG7EP.js +88 -0
- package/dist/chunk-GNQQG7EP.js.map +1 -0
- package/dist/chunk-H4SZEZP2.js +38 -0
- package/dist/chunk-H4SZEZP2.js.map +1 -0
- package/dist/chunk-HETUKFLM.js +7 -0
- package/dist/chunk-HETUKFLM.js.map +1 -0
- package/dist/chunk-HKLTWZSB.js +112 -0
- package/dist/chunk-HKLTWZSB.js.map +1 -0
- package/dist/chunk-ICANLKGX.js +97 -0
- package/dist/chunk-ICANLKGX.js.map +1 -0
- package/dist/chunk-J2RF7D67.js +105 -0
- package/dist/chunk-J2RF7D67.js.map +1 -0
- package/dist/chunk-K4VAG5ZU.js +16 -0
- package/dist/chunk-K4VAG5ZU.js.map +1 -0
- package/dist/chunk-LAL23AQK.js +105 -0
- package/dist/chunk-LAL23AQK.js.map +1 -0
- package/dist/chunk-LQUZ7Q7D.js +29 -0
- package/dist/chunk-LQUZ7Q7D.js.map +1 -0
- package/dist/chunk-LUDTY3LL.js +103 -0
- package/dist/chunk-LUDTY3LL.js.map +1 -0
- package/dist/chunk-LY7OFI25.js +26 -0
- package/dist/chunk-LY7OFI25.js.map +1 -0
- package/dist/chunk-MLKHJGSQ.js +68 -0
- package/dist/chunk-MLKHJGSQ.js.map +1 -0
- package/dist/chunk-MSJCRRXO.js +32 -0
- package/dist/chunk-MSJCRRXO.js.map +1 -0
- package/dist/chunk-O2IN5OZI.js +27 -0
- package/dist/chunk-O2IN5OZI.js.map +1 -0
- package/dist/chunk-OETI5C5L.js +30 -0
- package/dist/chunk-OETI5C5L.js.map +1 -0
- package/dist/chunk-OK227BBS.js +38 -0
- package/dist/chunk-OK227BBS.js.map +1 -0
- package/dist/chunk-R2PF552K.js +67 -0
- package/dist/chunk-R2PF552K.js.map +1 -0
- package/dist/chunk-RMACMP4R.js +26 -0
- package/dist/chunk-RMACMP4R.js.map +1 -0
- package/dist/chunk-SYXHGCHU.js +26 -0
- package/dist/chunk-SYXHGCHU.js.map +1 -0
- package/dist/chunk-VELIOWTX.js +25 -0
- package/dist/chunk-VELIOWTX.js.map +1 -0
- package/dist/chunk-VU3XNPDE.js +37 -0
- package/dist/chunk-VU3XNPDE.js.map +1 -0
- package/dist/chunk-W4XDXSOK.js +32 -0
- package/dist/chunk-W4XDXSOK.js.map +1 -0
- package/dist/chunk-WMWOEYVA.js +26 -0
- package/dist/chunk-WMWOEYVA.js.map +1 -0
- package/dist/chunk-X7VEORVS.js +43 -0
- package/dist/chunk-X7VEORVS.js.map +1 -0
- package/dist/chunk-XMS4UTPG.js +49 -0
- package/dist/chunk-XMS4UTPG.js.map +1 -0
- package/dist/chunk-XQEYCTYC.js +2601 -0
- package/dist/chunk-XQEYCTYC.js.map +1 -0
- package/dist/chunk-YLSAAPO4.js +79 -0
- package/dist/chunk-YLSAAPO4.js.map +1 -0
- package/dist/chunk-YXX4DJB3.js +27 -0
- package/dist/chunk-YXX4DJB3.js.map +1 -0
- package/dist/client/baseClient.cjs +799 -0
- package/dist/client/baseClient.cjs.map +1 -0
- package/dist/client/baseClient.d.cts +10 -0
- package/dist/client/baseClient.d.ts +10 -0
- package/dist/client/baseClient.js +18 -0
- package/dist/client/baseClient.js.map +1 -0
- package/dist/client/client.cjs +4286 -0
- package/dist/client/client.cjs.map +1 -0
- package/dist/client/client.d.cts +10 -0
- package/dist/client/client.d.ts +10 -0
- package/dist/client/client.js +53 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/events/bulkMessageDelete.cjs +104 -0
- package/dist/client/events/bulkMessageDelete.cjs.map +1 -0
- package/dist/client/events/bulkMessageDelete.d.cts +28 -0
- package/dist/client/events/bulkMessageDelete.d.ts +28 -0
- package/dist/client/events/bulkMessageDelete.js +11 -0
- package/dist/client/events/bulkMessageDelete.js.map +1 -0
- package/dist/client/events/channelCreate.cjs +136 -0
- package/dist/client/events/channelCreate.cjs.map +1 -0
- package/dist/client/events/channelCreate.d.cts +27 -0
- package/dist/client/events/channelCreate.d.ts +27 -0
- package/dist/client/events/channelCreate.js +11 -0
- package/dist/client/events/channelCreate.js.map +1 -0
- package/dist/client/events/channelDelete.cjs +113 -0
- package/dist/client/events/channelDelete.cjs.map +1 -0
- package/dist/client/events/channelDelete.d.cts +29 -0
- package/dist/client/events/channelDelete.d.ts +29 -0
- package/dist/client/events/channelDelete.js +11 -0
- package/dist/client/events/channelDelete.js.map +1 -0
- package/dist/client/events/channelGroupJoin.cjs +133 -0
- package/dist/client/events/channelGroupJoin.cjs.map +1 -0
- package/dist/client/events/channelGroupJoin.d.cts +30 -0
- package/dist/client/events/channelGroupJoin.d.ts +30 -0
- package/dist/client/events/channelGroupJoin.js +11 -0
- package/dist/client/events/channelGroupJoin.js.map +1 -0
- package/dist/client/events/channelGroupLeave.cjs +133 -0
- package/dist/client/events/channelGroupLeave.cjs.map +1 -0
- package/dist/client/events/channelGroupLeave.d.cts +30 -0
- package/dist/client/events/channelGroupLeave.d.ts +30 -0
- package/dist/client/events/channelGroupLeave.js +11 -0
- package/dist/client/events/channelGroupLeave.js.map +1 -0
- package/dist/client/events/channelStarttyping.cjs +110 -0
- package/dist/client/events/channelStarttyping.cjs.map +1 -0
- package/dist/client/events/channelStarttyping.d.cts +30 -0
- package/dist/client/events/channelStarttyping.d.ts +30 -0
- package/dist/client/events/channelStarttyping.js +11 -0
- package/dist/client/events/channelStarttyping.js.map +1 -0
- package/dist/client/events/channelStopTyping.cjs +110 -0
- package/dist/client/events/channelStopTyping.cjs.map +1 -0
- package/dist/client/events/channelStopTyping.d.cts +30 -0
- package/dist/client/events/channelStopTyping.d.ts +30 -0
- package/dist/client/events/channelStopTyping.js +11 -0
- package/dist/client/events/channelStopTyping.js.map +1 -0
- package/dist/client/events/channelUpdate.cjs +109 -0
- package/dist/client/events/channelUpdate.cjs.map +1 -0
- package/dist/client/events/channelUpdate.d.cts +31 -0
- package/dist/client/events/channelUpdate.d.ts +31 -0
- package/dist/client/events/channelUpdate.js +11 -0
- package/dist/client/events/channelUpdate.js.map +1 -0
- package/dist/client/events/event.cjs +124 -0
- package/dist/client/events/event.cjs.map +1 -0
- package/dist/client/events/event.d.cts +11 -0
- package/dist/client/events/event.d.ts +11 -0
- package/dist/client/events/event.js +13 -0
- package/dist/client/events/event.js.map +1 -0
- package/dist/client/events/eventManager.cjs +657 -0
- package/dist/client/events/eventManager.cjs.map +1 -0
- package/dist/client/events/eventManager.d.cts +10 -0
- package/dist/client/events/eventManager.d.ts +10 -0
- package/dist/client/events/eventManager.js +34 -0
- package/dist/client/events/eventManager.js.map +1 -0
- package/dist/client/events/index.cjs +629 -0
- package/dist/client/events/index.cjs.map +1 -0
- package/dist/client/events/index.d.cts +32 -0
- package/dist/client/events/index.d.ts +32 -0
- package/dist/client/events/index.js +96 -0
- package/dist/client/events/index.js.map +1 -0
- package/dist/client/events/message.cjs +136 -0
- package/dist/client/events/message.cjs.map +1 -0
- package/dist/client/events/message.d.cts +27 -0
- package/dist/client/events/message.d.ts +27 -0
- package/dist/client/events/message.js +11 -0
- package/dist/client/events/message.js.map +1 -0
- package/dist/client/events/messageDelete.cjs +114 -0
- package/dist/client/events/messageDelete.cjs.map +1 -0
- package/dist/client/events/messageDelete.d.cts +30 -0
- package/dist/client/events/messageDelete.d.ts +30 -0
- package/dist/client/events/messageDelete.js +11 -0
- package/dist/client/events/messageDelete.js.map +1 -0
- package/dist/client/events/messageReact.cjs +138 -0
- package/dist/client/events/messageReact.cjs.map +1 -0
- package/dist/client/events/messageReact.d.cts +40 -0
- package/dist/client/events/messageReact.d.ts +40 -0
- package/dist/client/events/messageReact.js +11 -0
- package/dist/client/events/messageReact.js.map +1 -0
- package/dist/client/events/messageUnreact.cjs +144 -0
- package/dist/client/events/messageUnreact.cjs.map +1 -0
- package/dist/client/events/messageUnreact.d.cts +28 -0
- package/dist/client/events/messageUnreact.d.ts +28 -0
- package/dist/client/events/messageUnreact.js +11 -0
- package/dist/client/events/messageUnreact.js.map +1 -0
- package/dist/client/events/messageUpdate.cjs +111 -0
- package/dist/client/events/messageUpdate.cjs.map +1 -0
- package/dist/client/events/messageUpdate.d.cts +31 -0
- package/dist/client/events/messageUpdate.d.ts +31 -0
- package/dist/client/events/messageUpdate.js +11 -0
- package/dist/client/events/messageUpdate.js.map +1 -0
- package/dist/client/events/serverCreate.cjs +131 -0
- package/dist/client/events/serverCreate.cjs.map +1 -0
- package/dist/client/events/serverCreate.d.cts +27 -0
- package/dist/client/events/serverCreate.d.ts +27 -0
- package/dist/client/events/serverCreate.js +11 -0
- package/dist/client/events/serverCreate.js.map +1 -0
- package/dist/client/events/serverDelete.cjs +110 -0
- package/dist/client/events/serverDelete.cjs.map +1 -0
- package/dist/client/events/serverDelete.d.cts +27 -0
- package/dist/client/events/serverDelete.d.ts +27 -0
- package/dist/client/events/serverDelete.js +11 -0
- package/dist/client/events/serverDelete.js.map +1 -0
- package/dist/client/events/serverMemberJoin.cjs +135 -0
- package/dist/client/events/serverMemberJoin.cjs.map +1 -0
- package/dist/client/events/serverMemberJoin.d.cts +30 -0
- package/dist/client/events/serverMemberJoin.d.ts +30 -0
- package/dist/client/events/serverMemberJoin.js +11 -0
- package/dist/client/events/serverMemberJoin.js.map +1 -0
- package/dist/client/events/serverMemberLeave.cjs +114 -0
- package/dist/client/events/serverMemberLeave.cjs.map +1 -0
- package/dist/client/events/serverMemberLeave.d.cts +30 -0
- package/dist/client/events/serverMemberLeave.d.ts +30 -0
- package/dist/client/events/serverMemberLeave.js +11 -0
- package/dist/client/events/serverMemberLeave.js.map +1 -0
- package/dist/client/events/serverMemberUpdate.cjs +135 -0
- package/dist/client/events/serverMemberUpdate.cjs.map +1 -0
- package/dist/client/events/serverMemberUpdate.d.cts +33 -0
- package/dist/client/events/serverMemberUpdate.d.ts +33 -0
- package/dist/client/events/serverMemberUpdate.js +11 -0
- package/dist/client/events/serverMemberUpdate.js.map +1 -0
- package/dist/client/events/serverRoleDelete.cjs +114 -0
- package/dist/client/events/serverRoleDelete.cjs.map +1 -0
- package/dist/client/events/serverRoleDelete.d.cts +30 -0
- package/dist/client/events/serverRoleDelete.d.ts +30 -0
- package/dist/client/events/serverRoleDelete.js +11 -0
- package/dist/client/events/serverRoleDelete.js.map +1 -0
- package/dist/client/events/serverRoleUpdate.cjs +111 -0
- package/dist/client/events/serverRoleUpdate.cjs.map +1 -0
- package/dist/client/events/serverRoleUpdate.d.cts +34 -0
- package/dist/client/events/serverRoleUpdate.d.ts +34 -0
- package/dist/client/events/serverRoleUpdate.js +11 -0
- package/dist/client/events/serverRoleUpdate.js.map +1 -0
- package/dist/client/events/serverupdate.cjs +109 -0
- package/dist/client/events/serverupdate.cjs.map +1 -0
- package/dist/client/events/serverupdate.d.cts +31 -0
- package/dist/client/events/serverupdate.d.ts +31 -0
- package/dist/client/events/serverupdate.js +11 -0
- package/dist/client/events/serverupdate.js.map +1 -0
- package/dist/client/events/userUpdate.cjs +109 -0
- package/dist/client/events/userUpdate.cjs.map +1 -0
- package/dist/client/events/userUpdate.d.cts +31 -0
- package/dist/client/events/userUpdate.d.ts +31 -0
- package/dist/client/events/userUpdate.js +11 -0
- package/dist/client/events/userUpdate.js.map +1 -0
- package/dist/client/webSocket.cjs +1018 -0
- package/dist/client/webSocket.cjs.map +1 -0
- package/dist/client/webSocket.d.cts +10 -0
- package/dist/client/webSocket.d.ts +10 -0
- package/dist/client/webSocket.js +53 -0
- package/dist/client/webSocket.js.map +1 -0
- package/dist/{index.d.mts → index-D44PqKGb.d.ts} +4 -242
- package/dist/index-XkxTx7UU.d.cts +2386 -0
- package/dist/{index.mjs → index.cjs} +112 -36
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +11 -0
- package/dist/index.d.ts +11 -2624
- package/dist/index.js +111 -4535
- package/dist/index.js.map +1 -0
- package/dist/managers/baseManager.cjs +63 -0
- package/dist/managers/baseManager.cjs.map +1 -0
- package/dist/managers/baseManager.d.cts +10 -0
- package/dist/managers/baseManager.d.ts +10 -0
- package/dist/managers/baseManager.js +8 -0
- package/dist/managers/baseManager.js.map +1 -0
- package/dist/managers/channelManager.cjs +1978 -0
- package/dist/managers/channelManager.cjs.map +1 -0
- package/dist/managers/channelManager.d.cts +10 -0
- package/dist/managers/channelManager.d.ts +10 -0
- package/dist/managers/channelManager.js +53 -0
- package/dist/managers/channelManager.js.map +1 -0
- package/dist/managers/index.cjs +2992 -0
- package/dist/managers/index.cjs.map +1 -0
- package/dist/managers/index.d.cts +10 -0
- package/dist/managers/index.d.ts +10 -0
- package/dist/managers/index.js +68 -0
- package/dist/managers/index.js.map +1 -0
- package/dist/managers/messageManager.cjs +1153 -0
- package/dist/managers/messageManager.cjs.map +1 -0
- package/dist/managers/messageManager.d.cts +10 -0
- package/dist/managers/messageManager.d.ts +10 -0
- package/dist/managers/messageManager.js +53 -0
- package/dist/managers/messageManager.js.map +1 -0
- package/dist/managers/roleManager.cjs +700 -0
- package/dist/managers/roleManager.cjs.map +1 -0
- package/dist/managers/roleManager.d.cts +10 -0
- package/dist/managers/roleManager.d.ts +10 -0
- package/dist/managers/roleManager.js +53 -0
- package/dist/managers/roleManager.js.map +1 -0
- package/dist/managers/serverChannelManager.cjs +1622 -0
- package/dist/managers/serverChannelManager.cjs.map +1 -0
- package/dist/managers/serverChannelManager.d.cts +10 -0
- package/dist/managers/serverChannelManager.d.ts +10 -0
- package/dist/managers/serverChannelManager.js +53 -0
- package/dist/managers/serverChannelManager.js.map +1 -0
- package/dist/managers/serverManager.cjs +2508 -0
- package/dist/managers/serverManager.cjs.map +1 -0
- package/dist/managers/serverManager.d.cts +10 -0
- package/dist/managers/serverManager.d.ts +10 -0
- package/dist/managers/serverManager.js +53 -0
- package/dist/managers/serverManager.js.map +1 -0
- package/dist/managers/serverMemberManager.cjs +1037 -0
- package/dist/managers/serverMemberManager.cjs.map +1 -0
- package/dist/managers/serverMemberManager.d.cts +10 -0
- package/dist/managers/serverMemberManager.d.ts +10 -0
- package/dist/managers/serverMemberManager.js +53 -0
- package/dist/managers/serverMemberManager.js.map +1 -0
- package/dist/managers/userManager.cjs +1103 -0
- package/dist/managers/userManager.cjs.map +1 -0
- package/dist/managers/userManager.d.cts +10 -0
- package/dist/managers/userManager.d.ts +10 -0
- package/dist/managers/userManager.js +53 -0
- package/dist/managers/userManager.js.map +1 -0
- package/dist/rest/CDNClient.cjs +608 -0
- package/dist/rest/CDNClient.cjs.map +1 -0
- package/dist/rest/CDNClient.d.cts +10 -0
- package/dist/rest/CDNClient.d.ts +10 -0
- package/dist/rest/CDNClient.js +16 -0
- package/dist/rest/CDNClient.js.map +1 -0
- package/dist/rest/restClient.cjs +652 -0
- package/dist/rest/restClient.cjs.map +1 -0
- package/dist/rest/restClient.d.cts +10 -0
- package/dist/rest/restClient.d.ts +10 -0
- package/dist/rest/restClient.js +16 -0
- package/dist/rest/restClient.js.map +1 -0
- package/dist/rest/restUtils/rateLimitQueue.cjs +138 -0
- package/dist/rest/restUtils/rateLimitQueue.cjs.map +1 -0
- package/dist/rest/restUtils/rateLimitQueue.d.cts +13 -0
- package/dist/rest/restUtils/rateLimitQueue.d.ts +13 -0
- package/dist/rest/restUtils/rateLimitQueue.js +8 -0
- package/dist/rest/restUtils/rateLimitQueue.js.map +1 -0
- package/dist/struct/attachment.cjs +263 -0
- package/dist/struct/attachment.cjs.map +1 -0
- package/dist/struct/attachment.d.cts +10 -0
- package/dist/struct/attachment.d.ts +10 -0
- package/dist/struct/attachment.js +10 -0
- package/dist/struct/attachment.js.map +1 -0
- package/dist/struct/base.cjs +234 -0
- package/dist/struct/base.cjs.map +1 -0
- package/dist/struct/base.d.cts +10 -0
- package/dist/struct/base.d.ts +10 -0
- package/dist/struct/base.js +9 -0
- package/dist/struct/base.js.map +1 -0
- package/dist/struct/category.cjs +532 -0
- package/dist/struct/category.cjs.map +1 -0
- package/dist/struct/category.d.cts +10 -0
- package/dist/struct/category.d.ts +10 -0
- package/dist/struct/category.js +53 -0
- package/dist/struct/category.js.map +1 -0
- package/dist/struct/channel.cjs +539 -0
- package/dist/struct/channel.cjs.map +1 -0
- package/dist/struct/channel.d.cts +10 -0
- package/dist/struct/channel.d.ts +10 -0
- package/dist/struct/channel.js +15 -0
- package/dist/struct/channel.js.map +1 -0
- package/dist/struct/clientUser.cjs +741 -0
- package/dist/struct/clientUser.cjs.map +1 -0
- package/dist/struct/clientUser.d.cts +10 -0
- package/dist/struct/clientUser.d.ts +10 -0
- package/dist/struct/clientUser.js +53 -0
- package/dist/struct/clientUser.js.map +1 -0
- package/dist/struct/dmChannel.cjs +1320 -0
- package/dist/struct/dmChannel.cjs.map +1 -0
- package/dist/struct/dmChannel.d.cts +10 -0
- package/dist/struct/dmChannel.d.ts +10 -0
- package/dist/struct/dmChannel.js +53 -0
- package/dist/struct/dmChannel.js.map +1 -0
- package/dist/struct/emoji.cjs +273 -0
- package/dist/struct/emoji.cjs.map +1 -0
- package/dist/struct/emoji.d.cts +10 -0
- package/dist/struct/emoji.d.ts +10 -0
- package/dist/struct/emoji.js +10 -0
- package/dist/struct/emoji.js.map +1 -0
- package/dist/struct/groupChannel.cjs +1519 -0
- package/dist/struct/groupChannel.cjs.map +1 -0
- package/dist/struct/groupChannel.d.cts +10 -0
- package/dist/struct/groupChannel.d.ts +10 -0
- package/dist/struct/groupChannel.js +53 -0
- package/dist/struct/groupChannel.js.map +1 -0
- package/dist/struct/index.cjs +2970 -0
- package/dist/struct/index.cjs.map +1 -0
- package/dist/struct/index.d.cts +10 -0
- package/dist/struct/index.d.ts +10 -0
- package/dist/struct/index.js +101 -0
- package/dist/struct/index.js.map +1 -0
- package/dist/struct/interfaces/baseChannel.cjs +19 -0
- package/dist/struct/interfaces/baseChannel.cjs.map +1 -0
- package/dist/struct/interfaces/baseChannel.d.cts +10 -0
- package/dist/struct/interfaces/baseChannel.d.ts +10 -0
- package/dist/struct/interfaces/baseChannel.js +1 -0
- package/dist/struct/interfaces/baseChannel.js.map +1 -0
- package/dist/struct/invite.cjs +293 -0
- package/dist/struct/invite.cjs.map +1 -0
- package/dist/struct/invite.d.cts +10 -0
- package/dist/struct/invite.d.ts +10 -0
- package/dist/struct/invite.js +10 -0
- package/dist/struct/invite.js.map +1 -0
- package/dist/struct/mentions.cjs +104 -0
- package/dist/struct/mentions.cjs.map +1 -0
- package/dist/struct/mentions.d.cts +10 -0
- package/dist/struct/mentions.d.ts +10 -0
- package/dist/struct/mentions.js +8 -0
- package/dist/struct/mentions.js.map +1 -0
- package/dist/struct/message.cjs +817 -0
- package/dist/struct/message.cjs.map +1 -0
- package/dist/struct/message.d.cts +10 -0
- package/dist/struct/message.d.ts +10 -0
- package/dist/struct/message.js +53 -0
- package/dist/struct/message.js.map +1 -0
- package/dist/struct/messageEmbed.cjs +205 -0
- package/dist/struct/messageEmbed.cjs.map +1 -0
- package/dist/struct/messageEmbed.d.cts +10 -0
- package/dist/struct/messageEmbed.d.ts +10 -0
- package/dist/struct/messageEmbed.js +8 -0
- package/dist/struct/messageEmbed.js.map +1 -0
- package/dist/struct/notesChannel.cjs +1327 -0
- package/dist/struct/notesChannel.cjs.map +1 -0
- package/dist/struct/notesChannel.d.cts +10 -0
- package/dist/struct/notesChannel.d.ts +10 -0
- package/dist/struct/notesChannel.js +53 -0
- package/dist/struct/notesChannel.js.map +1 -0
- package/dist/struct/presence.cjs +254 -0
- package/dist/struct/presence.cjs.map +1 -0
- package/dist/struct/presence.d.cts +10 -0
- package/dist/struct/presence.d.ts +10 -0
- package/dist/struct/presence.js +12 -0
- package/dist/struct/presence.js.map +1 -0
- package/dist/struct/role.cjs +572 -0
- package/dist/struct/role.cjs.map +1 -0
- package/dist/struct/role.d.cts +10 -0
- package/dist/struct/role.d.ts +10 -0
- package/dist/struct/role.js +53 -0
- package/dist/struct/role.js.map +1 -0
- package/dist/struct/server.cjs +2454 -0
- package/dist/struct/server.cjs.map +1 -0
- package/dist/struct/server.d.cts +10 -0
- package/dist/struct/server.d.ts +10 -0
- package/dist/struct/server.js +53 -0
- package/dist/struct/server.js.map +1 -0
- package/dist/struct/serverChannel.cjs +776 -0
- package/dist/struct/serverChannel.cjs.map +1 -0
- package/dist/struct/serverChannel.d.cts +10 -0
- package/dist/struct/serverChannel.d.ts +10 -0
- package/dist/struct/serverChannel.js +53 -0
- package/dist/struct/serverChannel.js.map +1 -0
- package/dist/struct/serverMember.cjs +711 -0
- package/dist/struct/serverMember.cjs.map +1 -0
- package/dist/struct/serverMember.d.cts +10 -0
- package/dist/struct/serverMember.d.ts +10 -0
- package/dist/struct/serverMember.js +53 -0
- package/dist/struct/serverMember.js.map +1 -0
- package/dist/struct/textChannel.cjs +1502 -0
- package/dist/struct/textChannel.cjs.map +1 -0
- package/dist/struct/textChannel.d.cts +10 -0
- package/dist/struct/textChannel.d.ts +10 -0
- package/dist/struct/textChannel.js +53 -0
- package/dist/struct/textChannel.js.map +1 -0
- package/dist/struct/user.cjs +690 -0
- package/dist/struct/user.cjs.map +1 -0
- package/dist/struct/user.d.cts +10 -0
- package/dist/struct/user.d.ts +10 -0
- package/dist/struct/user.js +53 -0
- package/dist/struct/user.js.map +1 -0
- package/dist/struct/voiceChannels.cjs +820 -0
- package/dist/struct/voiceChannels.cjs.map +1 -0
- package/dist/struct/voiceChannels.d.cts +10 -0
- package/dist/struct/voiceChannels.d.ts +10 -0
- package/dist/struct/voiceChannels.js +53 -0
- package/dist/struct/voiceChannels.js.map +1 -0
- package/dist/utils/UUID.cjs +75 -0
- package/dist/utils/UUID.cjs.map +1 -0
- package/dist/utils/UUID.d.cts +14 -0
- package/dist/utils/UUID.d.ts +14 -0
- package/dist/utils/UUID.js +8 -0
- package/dist/utils/UUID.js.map +1 -0
- package/dist/utils/badges.cjs +181 -0
- package/dist/utils/badges.cjs.map +1 -0
- package/dist/utils/badges.d.cts +25 -0
- package/dist/utils/badges.d.ts +25 -0
- package/dist/utils/badges.js +9 -0
- package/dist/utils/badges.js.map +1 -0
- package/dist/utils/bitField.cjs +161 -0
- package/dist/utils/bitField.cjs.map +1 -0
- package/dist/utils/bitField.d.cts +51 -0
- package/dist/utils/bitField.d.ts +51 -0
- package/dist/utils/bitField.js +8 -0
- package/dist/utils/bitField.js.map +1 -0
- package/dist/utils/constants.cjs +179 -0
- package/dist/utils/constants.cjs.map +1 -0
- package/dist/utils/constants.d.cts +10 -0
- package/dist/utils/constants.d.ts +10 -0
- package/dist/utils/constants.js +23 -0
- package/dist/utils/constants.js.map +1 -0
- package/dist/utils/index.cjs +489 -0
- package/dist/utils/index.cjs.map +1 -0
- package/dist/utils/index.d.cts +11 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.js +47 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/permissions.cjs +314 -0
- package/dist/utils/permissions.cjs.map +1 -0
- package/dist/utils/permissions.d.cts +110 -0
- package/dist/utils/permissions.d.ts +110 -0
- package/dist/utils/permissions.js +17 -0
- package/dist/utils/permissions.js.map +1 -0
- package/dist/utils/types.cjs +19 -0
- package/dist/utils/types.cjs.map +1 -0
- package/dist/utils/types.d.cts +60 -0
- package/dist/utils/types.d.ts +60 -0
- package/dist/utils/types.js +1 -0
- package/dist/utils/types.js.map +1 -0
- package/package.json +16 -5
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/managers/channelManager.ts","../../src/managers/baseManager.ts","../../src/utils/bitField.ts","../../src/struct/base.ts","../../src/utils/UUID.ts","../../src/utils/constants.ts","../../src/utils/permissions.ts","../../src/utils/badges.ts","../../src/struct/message.ts","../../src/struct/attachment.ts","../../src/managers/messageManager.ts","../../src/struct/channel.ts","../../src/client/baseClient.ts","../../src/rest/restClient.ts","../../src/rest/restUtils/rateLimitQueue.ts","../../src/rest/CDNClient.ts","../../src/struct/dmChannel.ts","../../src/struct/groupChannel.ts","../../src/struct/invite.ts","../../src/struct/mentions.ts","../../src/struct/messageEmbed.ts","../../src/struct/notesChannel.ts","../../src/struct/serverChannel.ts","../../src/struct/textChannel.ts","../../src/struct/voiceChannels.ts","../../src/struct/emoji.ts"],"sourcesContent":["import type { Channel as APIChannel } from \"revolt-api\";\r\nimport { BaseManager } from \"./baseManager\";\r\nimport {\r\n Channel,\r\n DMChannel,\r\n GroupChannel,\r\n NotesChannel,\r\n TextChannel,\r\n VoiceChannel,\r\n} from \"../struct/index\";\r\n\r\nexport type ChannelResolvable = Channel | APIChannel | string;\r\n\r\nexport class ChannelManager extends BaseManager<Channel, APIChannel> {\r\n holds = null;\r\n\r\n _add(data: APIChannel): Channel {\r\n let channel: Channel;\r\n\r\n switch (data.channel_type) {\r\n case \"TextChannel\":\r\n channel = new TextChannel(this.client, data);\r\n break;\r\n case \"VoiceChannel\":\r\n channel = new VoiceChannel(this.client, data);\r\n break;\r\n case \"DirectMessage\":\r\n channel = new DMChannel(this.client, data);\r\n break;\r\n case \"Group\":\r\n channel = new GroupChannel(this.client, data);\r\n break;\r\n case \"SavedMessages\":\r\n channel = new NotesChannel(this.client, data);\r\n if (this.client.user) this.client.user.notes = channel as NotesChannel;\r\n break;\r\n default:\r\n throw new Error(`Unknown Channel Type: ${data}`);\r\n }\r\n\r\n this.cache.set(channel.id, channel);\r\n\r\n return channel;\r\n }\r\n\r\n _remove(id: string): void {\r\n const channel = this.cache.get(id);\r\n\r\n if (channel?.inServer()) {\r\n channel.server?.channels.cache.delete(id);\r\n }\r\n\r\n super._remove(id);\r\n }\r\n\r\n /**\r\n * used to delete a channel\r\n *\r\n * @param channel The channel to delete\r\n * @returns A promise that resolves when the channel is deleted\r\n */\r\n async delete(channel: ChannelResolvable): Promise<void> {\r\n const id = this.resolveId(channel);\r\n if (!id) {\r\n throw new TypeError(\"INVALID_TYPE\");\r\n }\r\n await this.client.api.delete(`/channels/${id}`);\r\n }\r\n\r\n /**\r\n * used to fetch a channel\r\n *\r\n * @param channel The channel to fetch\r\n * @param force Whether to force fetch the channel using the api or return it form cache if able\r\n * @returns A promise that resolves with the fetched channel\r\n */\r\n async fetch(\r\n channel: ChannelResolvable,\r\n { force = true } = {},\r\n ): Promise<Channel> {\r\n const id = this.resolveId(channel);\r\n\r\n if (!id) {\r\n throw new TypeError(\"INVALID_TYPE\");\r\n }\r\n\r\n if (!force) {\r\n const channel = this.cache.get(id);\r\n if (channel) return channel;\r\n }\r\n\r\n const data = (await this.client.api.get(`/channels/${id}`)) as APIChannel;\r\n\r\n return this._add(data);\r\n }\r\n\r\n /**\r\n * resolves a channel from a string or a channel object\r\n * @param channel The channel to resolve\r\n * @returns the resolved channel or null if not found\r\n */\r\n resolve(channel: ChannelResolvable): Channel | null {\r\n if (channel instanceof Channel) return channel;\r\n return super.resolve(channel);\r\n }\r\n\r\n /**\r\n * resolves a channel id from a string or a channel object\r\n * @param channel The channel to resolve\r\n * @returns the resolved channel id or null if not found\r\n */\r\n resolveId(channel: ChannelResolvable): string | null {\r\n if (channel instanceof Channel) return channel.id;\r\n return super.resolveId(channel);\r\n }\r\n}\r\n","import type { client } from \"../client/client\";\r\n\r\nexport abstract class BaseManager<Holds extends { id: string }, R = unknown> {\r\n readonly cache = new Map<string, Holds>();\r\n Holds: any;\r\n\r\n constructor(protected readonly client: client) {}\r\n\r\n _add(raw: R): Holds {\r\n if (!this.holds) throw new Error(\"Holds is not defined\");\r\n const obj = new this.holds(this.client, raw);\r\n this.cache.set(obj.id, obj);\r\n return obj;\r\n }\r\n\r\n _remove(id: string): void {\r\n this.cache.delete(id);\r\n }\r\n\r\n abstract readonly holds: (new (...args: any[]) => Holds) | null;\r\n\r\n resolve(resolvable: Holds): Holds | null;\r\n resolve(resolvable: string | R): Holds | null;\r\n resolve(resolvable: string | R | Holds): Holds | null;\r\n resolve(resolvable: string | R | Holds): Holds | null {\r\n const id = this.resolveId(resolvable);\r\n if (id) return this.cache.get(id) ?? null;\r\n return null;\r\n }\r\n\r\n resolveId(resolvable: string | Holds | R): string | null {\r\n if (resolvable == null) return null;\r\n if (typeof resolvable === \"string\") return resolvable;\r\n if (this.holds && resolvable instanceof this.holds) return resolvable.id;\r\n const raw = resolvable as unknown as { _id: string };\r\n if (typeof raw === \"object\" && \"_id\" in raw) raw._id ?? null;\r\n return null;\r\n }\r\n\r\n valueOf(): this[\"cache\"] {\r\n return this.cache;\r\n }\r\n}\r\n","const DEFAULT_BIT = 0;\r\n\r\nexport type BitFieldResolvable =\r\n | BitField\r\n | number\r\n | string\r\n | BitFieldResolvable[];\r\n\r\n/**\r\n * Represents a bitfield that can be used to manage flags or permissions.\r\n */\r\nexport class BitField {\r\n static FLAGS: Record<string, number> = {};\r\n bitfield = DEFAULT_BIT;\r\n constructor(bits: BitFieldResolvable = DEFAULT_BIT) {\r\n this.bitfield = this.self.resolve(bits);\r\n }\r\n\r\n /**\r\n * Resolves a bitfield or an array of bitfields into a single number.\r\n * @param bit The bitfield or array of bitfields to resolve.\r\n * @returns The resolved bitfield as a number.\r\n */\r\n static resolve(bit: BitFieldResolvable): number {\r\n if (bit instanceof BitField) return bit.bitfield;\r\n if (typeof bit === \"number\" && bit >= DEFAULT_BIT) return bit;\r\n if (Array.isArray(bit)) {\r\n return bit\r\n .map((p) => this.resolve(p))\r\n .reduce((prev, p) => prev | p, DEFAULT_BIT);\r\n }\r\n if (typeof this.FLAGS[bit] !== \"undefined\") return this.FLAGS[bit];\r\n throw new Error(\"BITFIELD_INVALID\");\r\n }\r\n /**\r\n * Returns the class that this instance belongs to.\r\n * @returns The class of the bitfield.\r\n */\r\n get self(): {\r\n FLAGS: Record<string, number>;\r\n resolve(bit: BitFieldResolvable): number;\r\n new (bits?: BitFieldResolvable): BitField;\r\n } {\r\n return this.constructor as unknown as {\r\n FLAGS: Record<string, number>;\r\n resolve(bit: BitFieldResolvable): number;\r\n new (bits?: BitFieldResolvable): BitField;\r\n };\r\n }\r\n\r\n /**\r\n * Checks if any of the bits in the bitfield are set.\r\n * @param bit The bitfield or array of bitfields to check.\r\n * @returns True if any bits are set, false otherwise.\r\n */\r\n any(bit: BitFieldResolvable): boolean {\r\n bit = this.self.resolve(bit);\r\n return (this.bitfield & bit) !== DEFAULT_BIT;\r\n }\r\n\r\n /**\r\n * checks if a specific permission is set.\r\n */\r\n has(bit: BitFieldResolvable): boolean {\r\n bit = this.self.resolve(bit);\r\n return (this.bitfield & bit) === bit;\r\n }\r\n\r\n /**\r\n * Returns an array of all the Permissions that are set in the bitfield.\r\n * @returns An array of flag names.\r\n */\r\n toArray(): string[] {\r\n return Object.keys(this.self.FLAGS).filter((bit) => this.has(bit));\r\n }\r\n\r\n add(...bits: BitFieldResolvable[]): this {\r\n let total = 0;\r\n\r\n for (const bit of bits) {\r\n total |= this.self.resolve(bit);\r\n }\r\n\r\n if (Object.isFrozen(this)) {\r\n return new this.self(this.bitfield | total) as this;\r\n }\r\n\r\n this.bitfield |= total;\r\n\r\n return this;\r\n }\r\n\r\n remove(...bits: BitFieldResolvable[]): this {\r\n let total = 0;\r\n\r\n for (const bit of bits) {\r\n total |= this.self.resolve(bit);\r\n }\r\n\r\n if (Object.isFrozen(this)) {\r\n return new this.self(this.bitfield & ~total) as this;\r\n }\r\n\r\n this.bitfield &= ~total;\r\n\r\n return this;\r\n }\r\n\r\n freeze(): Readonly<this> {\r\n return Object.freeze(this);\r\n }\r\n\r\n valueOf(): number {\r\n return this.bitfield;\r\n }\r\n\r\n /**\r\n *\r\n * @returns A record of all flags and their boolean values indicating whether they are set.\r\n */\r\n serialize(): Record<string, boolean> {\r\n const serialized: Record<string, boolean> = {};\r\n for (const [flag, bit] of Object.entries(this.self.FLAGS)) {\r\n serialized[flag] = this.has(bit);\r\n }\r\n return serialized;\r\n }\r\n\r\n *[Symbol.iterator](): Iterable<string> {\r\n yield* this.toArray();\r\n }\r\n}\r\n","import { client } from \"../client/client\";\r\nimport { BitField } from \"../utils/bitField\";\r\n\r\ntype PartialObject = Partial<\r\n { _id: string } | { id: string } | { _id: { user: string } }\r\n>;\r\n\r\n/**\r\n * Represents the base structure for all objects in the client.\r\n * Provides common functionality such as equality checks, cloning, and patching data.\r\n */\r\nexport abstract class Base {\r\n /** The unique identifier for the object. */\r\n id!: string;\r\n\r\n /**\r\n * Creates a new Base instance.\r\n *\r\n * @param {client} client - The client instance.\r\n */\r\n constructor(public readonly client: client) {}\r\n\r\n /**\r\n * Compares this object with another to determine if they are equal.\r\n *\r\n * @param {this | null} [obj] - The object to compare with.\r\n * @returns {boolean} `true` if the objects are equal, otherwise `false`.\r\n */\r\n equals(obj?: this | null): boolean {\r\n if (!obj) return false;\r\n\r\n for (const key in obj) {\r\n const a = obj[key],\r\n b = this[key];\r\n if (a instanceof Base && !a.equals(b as typeof a)) return false;\r\n if (\r\n a instanceof BitField &&\r\n a.bitfield !== (b as unknown as BitField).bitfield\r\n )\r\n return false;\r\n\r\n if (typeof a === \"object\" && a !== null) continue;\r\n if (a !== b) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Updates the object with new data and returns a clone of the object.\r\n *\r\n * @param {PartialObject} data - The data to update the object with.\r\n * @param {string[]} [clear] - Fields to clear in the object.\r\n * @returns {this} A clone of the updated object.\r\n */\r\n _update(data: PartialObject, clear?: string[]): this {\r\n const clone = this._clone();\r\n this._patch(data, clear);\r\n return clone;\r\n }\r\n\r\n /**\r\n * Patches the object with new data.\r\n *\r\n * @param {PartialObject} data - The data to patch the object with.\r\n * @param {string[]} [_clear] - Fields to clear in the object.\r\n * @returns {this} The updated object.\r\n * @protected\r\n */\r\n protected _patch(data: PartialObject, _clear?: string[]): this {\r\n if (\"id\" in data) this.id = data.id!;\r\n if (\"_id\" in data) {\r\n if (typeof data._id === \"string\") this.id = data._id;\r\n if (typeof data._id === \"object\") this.id = data._id.user;\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Creates a deep clone of the object.\r\n *\r\n * @returns {this} A clone of the object.\r\n */\r\n _clone(): this {\r\n const clone = Object.assign(Object.create(this), this);\r\n\r\n for (const key in clone) {\r\n const prop = clone[key];\r\n if (prop instanceof Base) clone[key] = prop._clone();\r\n }\r\n\r\n return clone;\r\n }\r\n}\r\n","import { randomBytes } from \"crypto\";\r\n\r\nexport class UUID extends null {\r\n static readonly ENCODING = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\r\n static readonly ENCODING_LENGTH = UUID.ENCODING.length;\r\n static readonly RANDOM_LENGTH = 16;\r\n static readonly TIME_LENGTH = 10;\r\n static readonly TIME_MAX = Math.pow(2, 48) - 1;\r\n static get PROG(): number {\r\n return randomBytes(1).readUInt8() / 0xff;\r\n }\r\n\r\n private static time(now = Date.now()): string {\r\n let mod: number,\r\n result = \"\";\r\n\r\n for (let i = this.TIME_LENGTH; i > 0; i--) {\r\n mod = now % this.ENCODING_LENGTH;\r\n result = this.ENCODING.charAt(mod) + result;\r\n now = (now - mod) / this.ENCODING_LENGTH;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private static hash(): string {\r\n let result = \"\";\r\n\r\n for (let i = this.RANDOM_LENGTH; i > 0; i--) {\r\n let random = Math.floor(this.PROG * this.ENCODING_LENGTH);\r\n\r\n if (random === this.ENCODING_LENGTH) {\r\n random = this.ENCODING_LENGTH - 1;\r\n }\r\n\r\n result = this.ENCODING.charAt(random) + result;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n static generate(timestamp = Date.now()): string {\r\n return this.time(timestamp) + this.hash();\r\n }\r\n\r\n static timestampOf(id: string): Date {\r\n const timestamp = id\r\n .slice(0, this.TIME_LENGTH)\r\n .split(\"\")\r\n .reverse()\r\n .reduce((carry, char, index) => {\r\n const encodingIndex = this.ENCODING.indexOf(char);\r\n\r\n if (encodingIndex === -1) {\r\n throw new Error(\"invalid character found: \" + char);\r\n }\r\n\r\n return (carry += encodingIndex * Math.pow(this.ENCODING_LENGTH, index));\r\n }, 0);\r\n\r\n return new Date(timestamp);\r\n }\r\n}\r\n","import { clientOptions } from \"../client/baseClient\";\r\nimport { UUID } from \"./UUID\";\r\n\r\n/**\r\n * Enum representing the client events that can be emitted.\r\n */\r\nexport enum Events {\r\n CHANNEL_CREATE = \"channelCreate\",\r\n CHANNEL_DELETE = \"channelDelete\",\r\n CHANNEL_UPDATE = \"channelUpdate\",\r\n DEBUG = \"debug\",\r\n ERROR = \"error\",\r\n GROUP_JOIN = \"groupJoin\",\r\n GROUP_LEAVE = \"groupLeave\",\r\n MESSAGE = \"message\",\r\n MESSAGE_DELETE = \"messageDelete\",\r\n MESSAGE_DELETE_BULK = \"messageDeleteBulk\",\r\n MESSAGE_UPDATE = \"messageUpdate\",\r\n MESSAGE_REACT = \"messageReact\",\r\n MESSAGE_REACT_REMOVE = \"messageUnreact\",\r\n RAW = \"raw\",\r\n READY = \"ready\",\r\n ROLE_CREATE = \"roleCreate\",\r\n ROLE_DELETE = \"roleDelete\",\r\n ROLE_UPDATE = \"roleUpdate\",\r\n SERVER_CREATE = \"serverCreate\",\r\n SERVER_DELETE = \"serverDelete\",\r\n SERVER_MEMBER_JOIN = \"serverMemberJoin\",\r\n SERVER_MEMBER_LEAVE = \"serverMemberLeave\",\r\n SERVER_MEMBER_UPDATE = \"serverMemberUpdate\",\r\n SERVER_UPDATE = \"serverUpdate\",\r\n TYPING_START = \"typingStart\",\r\n TYPING_STOP = \"typingStop\",\r\n USER_UPDATE = \"userUpdate\",\r\n}\r\n\r\n/**\r\n * Enum representing the WebSocket events used for communication.\r\n */\r\nexport enum WSEvents {\r\n AUTHENTICATE = \"Authenticate\",\r\n AUTHENTICATED = \"Authenticated\",\r\n BEGIN_TYPING = \"BeginTyping\",\r\n BULK = \"Bulk\",\r\n CHANNEL_ACK = \"ChannelAck\",\r\n CHANNEL_CREATE = \"ChannelCreate\",\r\n CHANNEL_DELETE = \"ChannelDelete\",\r\n CHANNEL_GROUP_JOIN = \"ChannelGroupJoin\",\r\n CHANNEL_GROUP_LEAVE = \"ChannelGroupLeave\",\r\n CHANNEL_START_TYPING = \"ChannelStartTyping\",\r\n CHANNEL_STOP_TYPING = \"ChannelStopTyping\",\r\n CHANNEL_UPDATE = \"ChannelUpdate\",\r\n END_TYPING = \"EndTyping\",\r\n ERROR = \"Error\",\r\n MESSAGE = \"Message\",\r\n MESSAGE_BULK_DELETE = \"BulkMessageDelete\",\r\n MESSAGE_DELETE = \"MessageDelete\",\r\n MESSAGE_UPDATE = \"MessageUpdate\",\r\n PING = \"Ping\",\r\n PONG = \"Pong\",\r\n READY = \"Ready\",\r\n SERVER_DELETE = \"ServerDelete\",\r\n SERVER_MEMBER_JOIN = \"ServerMemberJoin\",\r\n SERVER_MEMBER_LEAVE = \"ServerMemberLeave\",\r\n SERVER_MEMBER_UPDATE = \"ServerMemberUpdate\",\r\n SERVER_ROLE_DELETE = \"ServerRoleDelete\",\r\n SERVER_ROLE_UPDATE = \"ServerRoleUpdate\",\r\n SERVER_UPDATE = \"ServerUpdate\",\r\n USER_RELATIONSHIP = \"UserRelationship\",\r\n USER_UPDATE = \"UserUpdate\",\r\n}\r\n\r\n/**\r\n * Enum representing the types of channels supported by the client.\r\n */\r\nexport enum ChannelTypes {\r\n DM = \"DM\",\r\n GROUP = \"GROUP\",\r\n TEXT = \"TEXT\",\r\n VOICE = \"VOICE\",\r\n NOTES = \"NOTES\",\r\n}\r\n\r\n/**\r\n * The default options for configuring the client.\r\n */\r\nexport const DEFAULT_CLIENT_OPTIONS: clientOptions = {\r\n fetchMembers: true,\r\n rest: {\r\n timeout: 15000,\r\n retries: 3,\r\n },\r\n ws: {\r\n heartbeatInterval: 30000,\r\n reconnect: true,\r\n },\r\n};\r\n\r\n/** The WebSocket URL for connecting to the Revolt API. */\r\nexport const wsUrl = \"wss://ws.revolt.chat?version=1&format=json\";\r\n\r\n/** The base API URL for interacting with the Revolt API. */\r\nexport const apiUrl = \"https://api.revolt.chat\";\r\n\r\n/** The base URL for the Revolt CDN, used for serving static assets. */\r\nexport const cdnUrl = \"https://cdn.revoltusercontent.com\";\r\n\r\n/** The system user ID used for identifying system messages. */\r\nexport const SYSTEM_USER_ID = \"0\".repeat(UUID.TIME_LENGTH + UUID.RANDOM_LENGTH);\r\n","import { BitField } from \"./bitField\";\r\n\r\nexport type ChannelPermissionsString = keyof typeof ChannelPermissions.FLAGS;\r\nexport type UserPermissionsString = keyof typeof UserPermissions.FLAGS;\r\nexport type ServerPermissionsString = keyof typeof ServerPermissions.FLAGS;\r\nexport type ChannelPermissionsResolvable =\r\n | number\r\n | ChannelPermissionsString\r\n | ChannelPermissions\r\n | ChannelPermissionsResolvable[];\r\nexport type UserPermissionsResolvable =\r\n | number\r\n | UserPermissionsString\r\n | UserPermissions\r\n | UserPermissionsResolvable[];\r\nexport type ServerPermissionsResolvable =\r\n | number\r\n | ServerPermissionsString\r\n | ServerPermissions\r\n | ServerPermissionsResolvable[];\r\n\r\nexport declare interface ServerPermissions {\r\n serialize(): Record<ServerPermissionsString, boolean>;\r\n any(bit: ServerPermissionsResolvable): boolean;\r\n add(...bits: ServerPermissionsResolvable[]): this;\r\n remove(...bits: ServerPermissionsResolvable[]): this;\r\n has(bit: ServerPermissionsResolvable): boolean;\r\n}\r\n\r\nexport declare interface ChannelPermissions {\r\n serialize(): Record<ChannelPermissionsString, boolean>;\r\n any(bit: ChannelPermissionsResolvable): boolean;\r\n add(...bits: ChannelPermissionsResolvable[]): this;\r\n remove(...bits: ChannelPermissionsResolvable[]): this;\r\n has(bit: ChannelPermissionsResolvable): boolean;\r\n}\r\n\r\nexport declare interface UserPermissions {\r\n serialize(): Record<UserPermissionsString, boolean>;\r\n any(bit: UserPermissionsResolvable): boolean;\r\n add(...bits: UserPermissionsResolvable[]): this;\r\n remove(...bits: UserPermissionsResolvable[]): this;\r\n has(bit: UserPermissionsResolvable): boolean;\r\n}\r\n\r\nexport class ChannelPermissions extends BitField {\r\n static readonly FLAGS = {\r\n VIEW_CHANNEL: 1 ** 0,\r\n SEND_MESSAGE: 1 ** 22,\r\n MANAGE_MESSAGE: 1 ** 2,\r\n MANAGE_CHANNEL: 1 ** 3,\r\n VOICE_CALL: 1 ** 4,\r\n INVITE_OTHERS: 1 ** 5,\r\n EMBED_LINKS: 1 ** 6,\r\n UPLOAD_FILES: 1 ** 7,\r\n } as const;\r\n\r\n constructor(bits?: ChannelPermissionsResolvable) {\r\n super(bits);\r\n }\r\n\r\n static resolve(bit: ChannelPermissionsResolvable): number {\r\n return super.resolve(bit);\r\n }\r\n}\r\n\r\nexport class UserPermissions extends BitField {\r\n static readonly FLAGS = {\r\n ACCESS: 1 ** 0,\r\n VIEW_PROFILE: 1 ** 1,\r\n SEND_MESSAGES: 1 ** 2,\r\n INVITE: 1 ** 3,\r\n } as const;\r\n\r\n constructor(bits?: UserPermissionsResolvable) {\r\n super(bits);\r\n }\r\n\r\n static resolve(bit: UserPermissionsResolvable): number {\r\n return super.resolve(bit);\r\n }\r\n}\r\n\r\nexport class ServerPermissions extends BitField {\r\n static readonly FLAGS = {\r\n VIEW_SERVER: 1 ** 0,\r\n MANAGE_ROLES: 1 ** 1,\r\n MANAGE_CHANNELS: 1 ** 2,\r\n MANAGE_SERVER: 1 ** 3,\r\n KICK_MEMBERS: 1 ** 4,\r\n BAN_MEMBERS: 1 ** 5,\r\n CHANGE_NICKNAME: 1 ** 12,\r\n MANAGE_NICKNAMES: 1 ** 13,\r\n CHANGE_AVATAR: 1 ** 14,\r\n REMOVE_AVATARS: 1 ** 15,\r\n } as const;\r\n\r\n constructor(bits?: ServerPermissionsResolvable) {\r\n super(bits);\r\n }\r\n\r\n static resolve(bit: ServerPermissionsResolvable): number {\r\n return super.resolve(bit);\r\n }\r\n}\r\n\r\nexport class FullPermissions extends BitField {\r\n static readonly FLAGS = {\r\n // * Generic permissions\r\n /// Manage the channel or channels on the server\r\n ManageChannel: 2 ** 0,\r\n /// Manage the server\r\n ManageServer: 2 ** 1,\r\n /// Manage permissions on servers or channels\r\n ManagePermissions: 2 ** 2,\r\n /// Manage roles on server\r\n ManageRole: 2 ** 3,\r\n /// Manage server customisation (includes emoji)\r\n ManageCustomisation: 2 ** 4,\r\n\r\n // * Member permissions\r\n /// Kick other members below their ranking\r\n KickMembers: 2 ** 6,\r\n /// Ban other members below their ranking\r\n BanMembers: 2 ** 7,\r\n /// Timeout other members below their ranking\r\n TimeoutMembers: 2 ** 8,\r\n /// Assign roles to members below their ranking\r\n AssignRoles: 2 ** 9,\r\n /// Change own nickname\r\n ChangeNickname: 2 ** 10,\r\n /// Change or remove other's nicknames below their ranking\r\n ManageNicknames: 2 ** 11,\r\n /// Change own avatar\r\n ChangeAvatar: 2 ** 12,\r\n /// Remove other's avatars below their ranking\r\n RemoveAvatars: 2 ** 13,\r\n\r\n // * Channel permissions\r\n /// View a channel\r\n ViewChannel: 2 ** 20,\r\n /// Read a channel's past message history\r\n ReadMessageHistory: 2 ** 21,\r\n /// Send a message in a channel\r\n SendMessage: 2 ** 22,\r\n /// Delete messages in a channel\r\n ManageMessages: 2 ** 23,\r\n /// Manage webhook entries on a channel\r\n ManageWebhooks: 2 ** 24,\r\n /// Create invites to this channel\r\n InviteOthers: 2 ** 25,\r\n /// Send embedded content in this channel\r\n SendEmbeds: 2 ** 26,\r\n /// Send attachments and media in this channel\r\n UploadFiles: 2 ** 27,\r\n /// Masquerade messages using custom nickname and avatar\r\n Masquerade: 2 ** 28,\r\n /// React to messages with emoji\r\n React: 2 ** 29,\r\n\r\n // * Voice permissions\r\n /// Connect to a voice channel\r\n Connect: 2 ** 30,\r\n /// Speak in a voice call\r\n Speak: 2 ** 31,\r\n /// Share video in a voice call\r\n Video: 2 ** 32,\r\n /// Mute other members with lower ranking in a voice call\r\n MuteMembers: 2 ** 33,\r\n /// Deafen other members with lower ranking in a voice call\r\n DeafenMembers: 2 ** 34,\r\n /// Move members between voice channels\r\n MoveMembers: 2 ** 35,\r\n\r\n // * Mention permissions\r\n /// Mention @everyone or @online\r\n MentionEveryone: 2 ** 37,\r\n /// Mention a role\r\n MentionRoles: 2 ** 38,\r\n\r\n // * Grant all permissions\r\n /// Safely grant all permissions\r\n GrantAll: 0x000f_ffff_ffff_ffff,\r\n } as const;\r\n\r\n constructor(\r\n bits?:\r\n | number\r\n | string\r\n | FullPermissions\r\n | Array<number | string | FullPermissions>,\r\n ) {\r\n super(bits);\r\n }\r\n\r\n static resolve(bit: number | string | FullPermissions): number {\r\n return super.resolve(bit);\r\n }\r\n}\r\n\r\nexport const DEFAULT_PERMISSION_DM = new ChannelPermissions([\r\n \"VIEW_CHANNEL\",\r\n \"VIEW_CHANNEL\",\r\n \"MANAGE_CHANNEL\",\r\n \"VOICE_CALL\",\r\n \"EMBED_LINKS\",\r\n \"UPLOAD_FILES\",\r\n]).freeze();\r\n","import { BitField } from \"./bitField\";\r\n\r\nexport type BadgeString = keyof typeof Badges.FLAGS;\r\nexport type BadgesResolvable =\r\n | number\r\n | BadgeString\r\n | Badges\r\n | BadgesResolvable[];\r\n\r\nexport declare interface Badges {\r\n serialize(): Record<BadgeString, boolean>;\r\n any(bit: BadgesResolvable): boolean;\r\n add(...bits: BadgesResolvable[]): this;\r\n remove(...bits: BadgesResolvable[]): this;\r\n has(bit: BadgesResolvable): boolean;\r\n}\r\n\r\nexport class Badges extends BitField {\r\n static readonly FLAGS = {\r\n DEVELOPER: 1 << 0,\r\n TRANSLATOR: 1 << 1,\r\n SUPPORTER: 1 << 2,\r\n RESPONSIBLE_DISCLOSURE: 1 << 3,\r\n REVOLT_TEAM: 1 << 4,\r\n EARLY_ADOPTER: 1 << 8,\r\n } as const;\r\n\r\n constructor(bits?: BadgesResolvable) {\r\n super(bits);\r\n }\r\n\r\n static resolve(bit: BadgesResolvable): number {\r\n return super.resolve(bit);\r\n }\r\n}\r\n","import type { File, Message as APIMessage, SystemMessage } from \"revolt-api\";\r\nimport type { client } from \"../client/client\";\r\nimport type { MessageEditOptions, MessageOptions } from \"../managers/index\";\r\nimport {\r\n Base,\r\n DMChannel,\r\n Embed,\r\n GroupChannel,\r\n Mentions,\r\n Server,\r\n ServerMember,\r\n TextChannel,\r\n User,\r\n} from \"./index\";\r\nimport { UUID } from \"../utils/index\";\r\n\r\n/**\r\n * Represents a message in a channel.\r\n *\r\n * @extends Base\r\n */\r\nexport class Message extends Base {\r\n /** The type of the message (e.g., TEXT, SYSTEM). */\r\n type: Uppercase<SystemMessage[\"type\"]> = \"TEXT\";\r\n\r\n /** The content of the message. */\r\n content = \"\";\r\n\r\n /** The ID of the channel where the message was sent. */\r\n channelId = \"\";\r\n\r\n /** The ID of the user who authored the message. */\r\n authorId = \"\";\r\n\r\n /** An array of embeds included in the message. */\r\n embeds: Embed[] = [];\r\n\r\n /** An array of file attachments included in the message. */\r\n attachments: File[] = [];\r\n\r\n /** Mentions included in the message. */\r\n mentions = new Mentions(this, []);\r\n\r\n /** The timestamp of when the message was last edited, or `null` if not edited. */\r\n editedTimestamp: number | null = null;\r\n\r\n /** the reactions and count on a message */\r\n reactions: Map<string, string[]> = new Map();\r\n\r\n /**\r\n * Creates a new Message instance.\r\n *\r\n * @param {client} client - The client instance.\r\n * @param {APIMessage} data - The raw data for the message from the API.\r\n */\r\n constructor(client: client, data: APIMessage) {\r\n super(client);\r\n this._patch(data);\r\n }\r\n\r\n /**\r\n * Updates the message instance with new data from the API.\r\n *\r\n * @param {APIMessage} data - The raw data for the message from the API.\r\n * @returns {this} The updated message instance.\r\n * @protected\r\n */\r\n protected _patch(data: APIMessage): this {\r\n super._patch(data);\r\n\r\n if (Array.isArray(data.embeds)) {\r\n this.embeds = data.embeds;\r\n }\r\n\r\n if (Array.isArray(data.attachments)) {\r\n this.attachments = data.attachments;\r\n }\r\n\r\n if (Array.isArray(data.mentions)) {\r\n this.mentions = new Mentions(this, data.mentions);\r\n }\r\n\r\n if (data.author) {\r\n this.authorId = data.author;\r\n }\r\n\r\n if (data.channel) {\r\n this.channelId = data.channel;\r\n }\r\n\r\n if (typeof data.content === \"string\") {\r\n this.content = data.content;\r\n }\r\n\r\n if (data.system) {\r\n this.type = data.system.type.toUpperCase() as Uppercase<\r\n SystemMessage[\"type\"]\r\n >;\r\n }\r\n\r\n if (data.edited) {\r\n this.editedTimestamp = Date.parse(data.edited);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Gets the creation date of the message.\r\n *\r\n * @returns {Date} The date when the message was created.\r\n */\r\n get createdAt(): Date {\r\n return UUID.timestampOf(this.id);\r\n }\r\n\r\n /**\r\n * Gets the creation timestamp of the message in milliseconds.\r\n *\r\n * @returns {number} The timestamp of when the message was created.\r\n */\r\n get createdTimestamp(): number {\r\n return this.createdAt.getTime();\r\n }\r\n\r\n /**\r\n * Gets the date when the message was last edited.\r\n *\r\n * @returns {Date | null} The date of the last edit, or `null` if not edited.\r\n */\r\n get editedAt(): Date | null {\r\n return this.editedTimestamp ? new Date(this.editedTimestamp) : null;\r\n }\r\n\r\n /**\r\n * Checks if the message is a system message.\r\n *\r\n * @returns {boolean} `true` if the message is a system message, otherwise `false`.\r\n */\r\n get system(): boolean {\r\n return this.type !== \"TEXT\";\r\n }\r\n\r\n /**\r\n * Retrieves the author of the message.\r\n *\r\n * @returns {User | null} The user who authored the message, or `null` if not found.\r\n */\r\n get author(): User | null {\r\n return this.client.users.cache.get(this.authorId) ?? null;\r\n }\r\n\r\n /**\r\n * Retrieves the channel where the message was sent.\r\n *\r\n * @returns {TextChannel | DMChannel | GroupChannel} The channel instance.\r\n */\r\n get channel(): TextChannel | DMChannel | GroupChannel {\r\n return this.client.channels.cache.get(this.channelId) as TextChannel;\r\n }\r\n\r\n /**\r\n * Retrieves the server ID associated with the message, if any.\r\n *\r\n * @returns {string | null} The server ID, or `null` if the message is not in a server.\r\n */\r\n get serverId(): string | null {\r\n const channel = this.channel;\r\n return channel.inServer() ? channel.serverId : null;\r\n }\r\n\r\n /**\r\n * Retrieves the server associated with the message, if any.\r\n *\r\n * @returns {Server | null} The server instance, or `null` if not found.\r\n */\r\n get server(): Server | null {\r\n return this.client.servers.cache.get(this.serverId as string) ?? null;\r\n }\r\n\r\n /**\r\n * Retrieves the server member who authored the message, if any.\r\n *\r\n * @returns {ServerMember | null} The server member instance, or `null` if not found.\r\n */\r\n get member(): ServerMember | null {\r\n return this.server?.members.cache.get(this.authorId) ?? null;\r\n }\r\n\r\n /**\r\n * Gets the URL of the message.\r\n *\r\n * @returns {string} The URL of the message.\r\n */\r\n get url(): string {\r\n return `https://app.revolt.chat/${\r\n this.serverId ? `server/${this.serverId}` : \"\"\r\n }/channel/${this.channelId}/${this.id}`;\r\n }\r\n\r\n /**\r\n * Acknowledges the message.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the message is acknowledged.\r\n */\r\n ack(): Promise<void> {\r\n return this.channel.messages.ack(this);\r\n }\r\n\r\n /**\r\n * Deletes the message.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the message is deleted.\r\n */\r\n delete(): Promise<void> {\r\n return this.channel.messages.delete(this);\r\n }\r\n\r\n /**\r\n * Replies to the message.\r\n *\r\n * @param {string} content - The content of the reply.\r\n * @param {boolean} [mention=true] - Whether to mention the original message author.\r\n * @returns {Promise<Message>} A promise that resolves with the sent reply message.\r\n */\r\n reply(\r\n content: MessageOptions | string,\r\n mention: boolean = true,\r\n ): Promise<Message> {\r\n return this.channel.messages.send({\r\n ...(typeof content === \"object\" ? content : { content }),\r\n replies: [{ id: this.id, mention }],\r\n });\r\n }\r\n\r\n /**\r\n * Edits the message.\r\n *\r\n * @param {MessageEditOptions | string} options - The new content or edit options.\r\n * @returns {Promise<void>} A promise that resolves when the message is edited.\r\n */\r\n edit(options: MessageEditOptions | string): Promise<void> {\r\n return this.channel.messages.edit(this, options);\r\n }\r\n\r\n /**\r\n * Fetches the latest data for the message.\r\n *\r\n * @returns {Promise<Message>} A promise that resolves with the updated message instance.\r\n */\r\n fetch(): Promise<Message> {\r\n return this.channel.messages.fetch(this.id);\r\n }\r\n\r\n /**\r\n * Adds a reaction to the message.\r\n *\r\n * @param {string} emoji - The emoji to react with.\r\n * @returns {Promise<void>} A promise that resolves when the reaction is added.\r\n */\r\n addReaction(emoji: string): Promise<void> {\r\n return this.channel.messages.addReaction(this, emoji);\r\n }\r\n\r\n /**\r\n * Removes a reaction from the message.\r\n *\r\n * @param {string} emoji - The emoji to remove the reaction for.\r\n * @param {object} [options] - Options for removing the reaction.\r\n * @param {string} [options.user_id] - The user ID to remove the reaction for. If not provided, removes the reaction for the current user.\r\n * @param {boolean} [options.remove_all=false] - Whether to remove all of the specified reaction for the message.\r\n * @returns {Promise<void>} A promise that resolves when the reaction is removed.\r\n */\r\n removeReaction(\r\n emoji: string,\r\n options?: { user_id?: string; remove_all?: boolean },\r\n ): Promise<void> {\r\n return this.channel.messages.removeReaction(\r\n this,\r\n emoji,\r\n options?.user_id ?? undefined,\r\n options?.remove_all ?? false,\r\n );\r\n }\r\n\r\n /**\r\n * Removes all reactions from the message.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when all reactions are removed.\r\n */\r\n removeAllReactions(): Promise<void> {\r\n return this.channel.messages.removeAllReactions(this);\r\n }\r\n\r\n /**\r\n * Checks if the message is in a server.\r\n *\r\n * @returns {boolean} `true` if the message is in a server, otherwise `false`.\r\n */\r\n inServer(): this is this & {\r\n serverId: string;\r\n server: Server;\r\n channel: TextChannel;\r\n } {\r\n return this.channel.inServer();\r\n }\r\n\r\n /**\r\n * Converts the message to a string representation.\r\n *\r\n * @returns {string} The content of the message.\r\n */\r\n toString(): string {\r\n return this.content;\r\n }\r\n}\r\n","import { Base } from \"./base\";\r\nimport type { File } from \"revolt-api\";\r\nimport type { client } from \"../client/client\";\r\n\r\n/**\r\n * Represents an attachment, such as a file or image, in a message or channel.\r\n *\r\n * @extends Base\r\n */\r\nexport class Attachment extends Base {\r\n /** The filename of the attachment. */\r\n filename!: string;\r\n\r\n /** The MIME type of the attachment (e.g., `image/png`, `application/pdf`). */\r\n type!: string;\r\n\r\n /** The size of the attachment in bytes. */\r\n size!: number;\r\n\r\n /** Metadata associated with the attachment (e.g., dimensions for images). */\r\n metadata!: File[\"metadata\"];\r\n\r\n /**\r\n * Creates a new Attachment instance.\r\n *\r\n * @param {client} client - The client instance.\r\n * @param {File} data - The raw data for the attachment from the API.\r\n */\r\n constructor(client: client, data: File) {\r\n super(client);\r\n this._patch(data);\r\n }\r\n\r\n /**\r\n * Updates the attachment instance with new data from the API.\r\n *\r\n * @param {File} data - The raw data for the attachment from the API.\r\n * @returns {this} The updated attachment instance.\r\n * @protected\r\n */\r\n protected _patch(data: File): this {\r\n super._patch(data);\r\n if (data.filename) this.filename = data.filename;\r\n if (data.content_type) this.type = data.content_type;\r\n if (typeof data.size === \"number\") this.size = data.size;\r\n if (data.metadata) this.metadata = data.metadata;\r\n return this;\r\n }\r\n}\r\n","import type {\r\n Message as APIMessage,\r\n MessageSort,\r\n SendableEmbed,\r\n} from \"revolt-api\";\r\nimport { File } from \"node:buffer\";\r\nimport { Readable } from \"stream\";\r\nimport FormData from \"form-data\";\r\nimport axios from \"axios\";\r\nimport { BaseManager } from \"./baseManager\";\r\nimport { Channel, Emoji, Message, MessageEmbed } from \"../struct/index\";\r\nimport { UUID } from \"../utils/index\";\r\nimport { CDNAttachmentResponse } from \"../utils/types\";\r\n\r\nexport type MessageResolvable = Message | APIMessage | string;\r\n\r\nexport interface MessageReply {\r\n id: string;\r\n mention: boolean;\r\n}\r\n\r\nexport interface MessageOptions {\r\n content?: string;\r\n replies?: MessageReply[];\r\n attachments?: Readable[] | string[] | File[];\r\n embeds?: MessageEmbed[];\r\n}\r\n\r\nexport interface MessageEditOptions {\r\n content?: string;\r\n attachments?: string[];\r\n embeds?: MessageEmbed[];\r\n}\r\n\r\nexport interface MessageSearchOptions {\r\n query: string;\r\n limit?: number;\r\n before?: string;\r\n after?: string;\r\n sort?: MessageSort;\r\n}\r\n\r\nexport interface MessageQueryOptions {\r\n limit?: number;\r\n before?: string;\r\n after?: string;\r\n sort?: MessageSort;\r\n nearby?: string;\r\n}\r\n\r\nexport class MessageManager extends BaseManager<Message, APIMessage> {\r\n holds = Message;\r\n constructor(protected readonly channel: Channel) {\r\n super(channel.client);\r\n }\r\n\r\n /**\r\n *\r\n * @param content The content to send. Can be a string or an object with the following properties:\r\n * - content: The content of the message\r\n * - replies: An array of message IDs to reply to\r\n * - attachments: An array of attachment URLs, Files, or ReadStreams\r\n * - embeds: An array of MessageEmbed objects\r\n * @returns Promise that resolves to the sent message\r\n */\r\n async send(content: MessageOptions | string): Promise<Message> {\r\n if (typeof content === \"string\") content = { content };\r\n let attachments: string[] = [];\r\n let embeds: SendableEmbed[] = [];\r\n\r\n if (Array.isArray(content.attachments)) {\r\n const promises = content.attachments.map(async (att) => {\r\n const data = new FormData();\r\n if (typeof att === \"string\") {\r\n const readableStream = (await axios.get(att, {\r\n responseType: \"stream\",\r\n })) as { data: Readable };\r\n data.append(\"file\", readableStream.data, {\r\n filename: att.split(\"/\").pop(),\r\n });\r\n }\r\n\r\n if (att instanceof Readable) {\r\n data.append(\"file\", att);\r\n }\r\n\r\n if (att instanceof File) {\r\n const buffer = Buffer.from(await att.arrayBuffer());\r\n data.append(\"file\", buffer, { filename: att.name });\r\n }\r\n\r\n await this.client.cdn.post(\"/attachments\", data).then((attachment) => {\r\n const { id } = attachment as CDNAttachmentResponse;\r\n attachments.push(id);\r\n });\r\n });\r\n await Promise.all(promises);\r\n }\r\n\r\n if (Array.isArray(content.embeds)) {\r\n const promises = content.embeds.map(async (embed) => {\r\n const json = await embed.toJSONWithMedia(this.client);\r\n embeds.push(json);\r\n });\r\n await Promise.all(promises);\r\n }\r\n\r\n const resp = (await this.client.api.post(\r\n `/channels/${this.channel.id}/messages`,\r\n {\r\n body: { ...content, attachments, embeds, nonce: UUID.generate() },\r\n },\r\n )) as APIMessage;\r\n return this._add(resp);\r\n }\r\n\r\n /**\r\n * acknowledge a message to mark it as read (not important for bots)\r\n * @param message The message to acknowledge\r\n * @returns Promise that resolves when the message is acknowledged\r\n */\r\n async ack(message: MessageResolvable): Promise<void> {\r\n const id = this.resolveId(message);\r\n if (!id) {\r\n throw new TypeError(\"INVALID_TYPE\");\r\n }\r\n await this.client.api.put(`/channels/${this.channel.id}/ack/${id}`);\r\n }\r\n\r\n /**\r\n * bulk delete messages from the channel\r\n * @param messages The messages to delete. Can be an array of message IDs or a Map of message IDs to Message objects.\r\n * @returns Promise that resolves when the messages are deleted\r\n */\r\n async bulkDelete(\r\n messages: MessageResolvable[] | number | Map<string, Message>,\r\n ): Promise<void> {\r\n let ids: string[] = [];\r\n\r\n if (typeof messages === \"number\") {\r\n messages = await this.fetch(messages);\r\n ids = messages instanceof Map ? [...messages.keys()] : [];\r\n } else if (messages instanceof Map) {\r\n ids = [...messages.keys()];\r\n } else {\r\n ids = messages.map((m) => this.resolveId(m)!).filter(Boolean);\r\n }\r\n\r\n await this.client.api.delete(`/channels/${this.channel.id}/messages/bulk`, {\r\n body: JSON.stringify({ ids }),\r\n });\r\n }\r\n\r\n /**\r\n * delete a message from the channel\r\n * @param message The message to delete. Can be a Message object or a message ID.\r\n * @returns Promise that resolves when the message is deleted\r\n */\r\n async delete(message: MessageResolvable): Promise<void> {\r\n const id = this.resolveId(message);\r\n if (!id) {\r\n throw new TypeError(\"INVALID_TYPE\");\r\n }\r\n await this.client.api.delete(`/channels/${this.channel.id}/messages/${id}`);\r\n }\r\n\r\n /**\r\n * edit a message in the channel\r\n * @param message The message to edit. Can be a Message object or a message ID.\r\n * @param options The options to edit the message with. Can be a string or an object with the following properties:\r\n * - content: The new content of the message\r\n * - attachments: An array of attachment URLs\r\n * - embeds: An array of MessageEmbed objects\r\n * @returns Promise that resolves when the message is edited\r\n */\r\n async edit(\r\n message: MessageResolvable,\r\n options: MessageEditOptions | string,\r\n ): Promise<void> {\r\n const id = this.resolveId(message);\r\n\r\n if (!id) {\r\n throw new TypeError(\"INVALID_TYPE\");\r\n }\r\n\r\n if (typeof options === \"string\") options = { content: options };\r\n\r\n await this.client.api.patch(`/channels/${this.channel.id}/messages/${id}`, {\r\n body: options,\r\n });\r\n }\r\n\r\n /**\r\n * search for messages in the channel\r\n * @param query The query to search for. Can be a string or an object with the following properties:\r\n * - query: The query to search for\r\n * - limit: The maximum number of messages to return\r\n * - before: The message ID to start searching from (exclusive)\r\n * - after: The message ID to stop searching at (exclusive)\r\n * - sort: The sort order of the results (asc or desc)\r\n * @returns Promise that resolves to a Map of message IDs to Message objects\r\n */\r\n async search(\r\n query: MessageSearchOptions | string,\r\n ): Promise<Map<string, Message>> {\r\n if (typeof query === \"string\") query = { query };\r\n\r\n const response = (await this.client.api.post(\r\n `/channels/${this.channel.id}/search`,\r\n {\r\n query: query as Required<MessageSearchOptions>,\r\n },\r\n )) as APIMessage[];\r\n\r\n return response.reduce((coll, cur) => {\r\n const msg = this._add(cur);\r\n coll.set(msg.id, msg);\r\n return coll;\r\n }, new Map<string, Message>());\r\n }\r\n\r\n /**\r\n * fetch a message from the channel\r\n * @param message The message to fetch. Can be a Message object, a message ID, or an object with the following properties:\r\n * - limit: The maximum number of messages to return\r\n * - before: The message ID to start fetching from (exclusive)\r\n * - after: The message ID to stop fetching at (exclusive)\r\n * @returns Promise that resolves to a Message object or a Map of message IDs to Message objects\r\n */\r\n fetch(message: MessageResolvable): Promise<Message>;\r\n fetch(query?: MessageQueryOptions): Promise<Map<string, Message>>;\r\n fetch(limit: number): Promise<Map<string, Message>>;\r\n async fetch(\r\n query?: MessageResolvable | MessageQueryOptions | number,\r\n ): Promise<Map<string, Message> | Message> {\r\n const id = this.resolveId(query as string);\r\n\r\n if (id) {\r\n const data = (await this.client.api.get(\r\n `/channels/${this.channel.id}/messages/${id}`,\r\n )) as APIMessage;\r\n return this._add(data);\r\n }\r\n\r\n if (typeof query === \"number\") query = { limit: query };\r\n else if (typeof query === \"undefined\") query = { limit: 100 };\r\n\r\n const messages = await this.client.api.get(\r\n `/channels/${this.channel.id}/messages`,\r\n { query: JSON.stringify(query as Required<MessageQueryOptions>) },\r\n );\r\n\r\n return (messages as APIMessage[]).reduce((coll, cur) => {\r\n const msg = this._add(cur);\r\n coll.set(msg.id, msg);\r\n return coll;\r\n }, new Map<string, Message>());\r\n }\r\n\r\n /**\r\n * add a reaction to a message\r\n * @param message The message to react to. Can be a Message object or a message ID.\r\n * @param emoji emoji to react with. Can be a string or an Emoji object.\r\n * @returns Promise that resolves when the reaction is added\r\n */\r\n async addReaction(\r\n message: MessageResolvable | string,\r\n emoji: string | Emoji,\r\n ): Promise<void> {\r\n const id = this.resolveId(message);\r\n if (!id) {\r\n throw new TypeError(\"INVALID_TYPE\");\r\n }\r\n if (emoji instanceof Emoji) emoji = emoji.id;\r\n else if (typeof emoji !== \"string\") {\r\n throw new TypeError(\"INVALID_TYPE\");\r\n }\r\n await this.client.api.put(\r\n `/channels/${this.channel.id}/messages/${id}/reactions/${emoji}`,\r\n );\r\n }\r\n\r\n /**\r\n *\r\n * @param message The message to unreact. Can be a Message object or a message ID.\r\n * @param emoji the emoji to unreact with. Can be a string or an Emoji object.\r\n * @param user_id The user ID to remove the reaction for. If not provided, removes the reaction for the current user.\r\n * @param remove_all Whether to remove all of the specified reaction for the message. Defaults to false.\r\n * @returns Promise that resolves when the reaction is removed\r\n */\r\n async removeReaction(\r\n message: MessageResolvable | string,\r\n emoji: string | Emoji,\r\n user_id?: string,\r\n remove_all = false,\r\n ): Promise<void> {\r\n const id = this.resolveId(message);\r\n if (!id) {\r\n throw new TypeError(\"INVALID_TYPE\");\r\n }\r\n if (emoji instanceof Emoji) emoji = emoji.id;\r\n else if (typeof emoji !== \"string\") {\r\n throw new TypeError(\"INVALID_TYPE\");\r\n }\r\n const queryString = user_id\r\n ? `?user_id=${user_id}&remove_all=${remove_all}`\r\n : `?remove_all=${remove_all}`;\r\n await this.client.api.delete(\r\n `/channels/${this.channel.id}/messages/${id}/reactions/${emoji}${queryString}`,\r\n );\r\n }\r\n\r\n /**\r\n * remove all reactions from a message\r\n * @param message The message to remove reactions from. Can be a Message object or a message ID.\r\n * @returns Promise that resolves when the reactions are removed\r\n */\r\n async removeAllReactions(message: MessageResolvable | string): Promise<void> {\r\n const id = this.resolveId(message);\r\n if (!id) {\r\n throw new TypeError(\"INVALID_TYPE\");\r\n }\r\n await this.client.api.delete(\r\n `/channels/${this.channel.id}/messages/${id}/reactions`,\r\n );\r\n }\r\n}\r\n","import { Base } from \"./base\";\r\nimport type {\r\n DMChannel,\r\n GroupChannel,\r\n ServerChannel,\r\n TextChannel,\r\n VoiceChannel,\r\n} from \"./index\";\r\nimport { ChannelTypes, UUID } from \"../utils/index\";\r\n\r\n/**\r\n * Represents a generic communication channel in the client.\r\n * This abstract class provides a base structure and common functionality\r\n * for all types of channels, such as text, voice, group, and server channels.\r\n *\r\n * @abstract\r\n * @extends Base\r\n *\r\n * @property {ChannelTypes | \"UNKNOWN\"} type - The type of the channel. Defaults to \"UNKNOWN\".\r\n * @property {number} createdTimestamp - The timestamp (in milliseconds) when the channel was created.\r\n * @property {Date} createdAt - The date and time when the channel was created.\r\n */\r\nexport abstract class Channel extends Base {\r\n type: ChannelTypes | \"UNKNOWN\" = \"UNKNOWN\";\r\n\r\n /**\r\n * Gets the timestamp (in milliseconds) when the channel was created.\r\n *\r\n * @returns {number} The timestamp of the channel's creation.\r\n */\r\n get createdTimestamp(): number {\r\n return this.createdAt.getTime();\r\n }\r\n\r\n /**\r\n * Gets the date and time when the channel was created.\r\n *\r\n * @returns {Date} The creation date of the channel.\r\n */\r\n get createdAt(): Date {\r\n return UUID.timestampOf(this.id);\r\n }\r\n\r\n /**\r\n * Deletes the current channel instance from the client's channel collection.\r\n *\r\n * This method interacts with the client's channel management system to remove\r\n * the channel. Once deleted, the channel will no longer be accessible through\r\n * the client.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the channel has been successfully deleted.\r\n *\r\n * @example\r\n * ```typescript\r\n * const channel = client.channels.get('1234567890');\r\n * if (channel) {\r\n * await channel.delete();\r\n * console.log('Channel deleted successfully.');\r\n * }\r\n * ```\r\n */\r\n delete(): Promise<void> {\r\n return this.client.channels.delete(this);\r\n }\r\n\r\n /**\r\n * Checks if the channel is a text-based channel.\r\n *\r\n * @returns {boolean} True if the channel is a text-based channel, otherwise false.\r\n */\r\n isText(): this is TextChannel | GroupChannel | DMChannel {\r\n return \"messages\" in this;\r\n }\r\n\r\n /**\r\n * Checks if the channel is a voice channel.\r\n *\r\n * @returns {boolean} True if the channel is a voice channel, otherwise false.\r\n */\r\n isVoice(): this is VoiceChannel {\r\n return this.type === ChannelTypes.VOICE;\r\n }\r\n\r\n /**\r\n * Checks if the channel is a group channel.\r\n *\r\n * @returns {boolean} True if the channel is a group channel, otherwise false.\r\n */\r\n isGroup(): this is GroupChannel {\r\n return this.type === ChannelTypes.GROUP;\r\n }\r\n\r\n /**\r\n * Checks if the channel is part of a server.\r\n *\r\n * @returns {boolean} True if the channel is a server channel, otherwise false.\r\n */\r\n inServer(): this is ServerChannel {\r\n return \"serverId\" in this;\r\n }\r\n\r\n /**\r\n * Converts the channel to a string representation.\r\n *\r\n * @returns {string} A string representation of the channel in the format `<#channelId>`.\r\n */\r\n toString(): string {\r\n return `<#${this.id}>`;\r\n }\r\n\r\n /**\r\n * Fetches the latest data for the channel from the client's channel collection.\r\n *\r\n * @param {boolean} [force=true] - Whether to force a fetch even if the channel is cached.\r\n * @returns {Promise<Channel>} A promise that resolves with the updated channel instance.\r\n */\r\n fetch(force = true): Promise<Channel> {\r\n return this.client.channels.fetch(this, { force });\r\n }\r\n}\r\n","import type {\r\n Channel,\r\n Role,\r\n Server,\r\n ServerMember,\r\n User,\r\n} from \"../struct/index\";\r\nimport { EventEmitter } from \"node:events\";\r\nimport { DEFAULT_CLIENT_OPTIONS, Events } from \"../utils/constants\";\r\nimport { RestClient } from \"../rest/restClient\";\r\nimport { Message } from \"../struct/index\";\r\nimport { client } from \"./client\";\r\nimport { CDNClient } from \"../rest/CDNClient\";\r\n\r\n/**\r\n * Represents the base client that provides core functionality for interacting with the API.\r\n *\r\n * @extends EventEmitter\r\n */\r\nexport declare interface BaseClient {\r\n on<K extends keyof ClientEvents>(\r\n event: K,\r\n listener: (...args: ClientEvents[K]) => Awaited<void>,\r\n ): this;\r\n on<S extends string | symbol>(\r\n event: Exclude<S, keyof ClientEvents>,\r\n listener: (...args: any[]) => Awaited<void>,\r\n ): this;\r\n once<K extends keyof ClientEvents>(\r\n event: K,\r\n listener: (...args: ClientEvents[K]) => Awaited<void>,\r\n ): this;\r\n once<S extends string | symbol>(\r\n event: Exclude<S, keyof ClientEvents>,\r\n listener: (...args: any[]) => Awaited<void>,\r\n ): this;\r\n emit<K extends keyof ClientEvents>(\r\n event: K,\r\n ...args: ClientEvents[K]\r\n ): boolean;\r\n emit<S extends string | symbol>(\r\n event: Exclude<S, keyof ClientEvents>,\r\n ...args: unknown[]\r\n ): boolean;\r\n off<K extends keyof ClientEvents>(\r\n event: K,\r\n listener: (...args: ClientEvents[K]) => Awaited<void>,\r\n ): this;\r\n off<S extends string | symbol>(\r\n event: Exclude<S, keyof ClientEvents>,\r\n listener: (...args: any[]) => Awaited<void>,\r\n ): this;\r\n removeAllListeners<K extends keyof ClientEvents>(event?: K): this;\r\n removeAllListeners<S extends string | symbol>(\r\n event?: Exclude<S, keyof ClientEvents>,\r\n ): this;\r\n}\r\n\r\n/**\r\n * Represents the events that the client can emit.\r\n */\r\nexport interface ClientEvents {\r\n /** Emitted when a debug message is logged. */\r\n [Events.DEBUG]: [unknown];\r\n /** Emitted when a message is received. */\r\n [Events.MESSAGE]: [Message];\r\n /** Emitted when a message is deleted. */\r\n [Events.MESSAGE_DELETE]: [Message];\r\n /** Emitted when a message is updated. */\r\n [Events.MESSAGE_UPDATE]: [Message, Message];\r\n /** Emitted when a reaction is added to a message. */\r\n [Events.MESSAGE_REACT]: [Message];\r\n /** Emitted when a reaction is removed from a message. */\r\n [Events.MESSAGE_REACT_REMOVE]: [Message];\r\n /** Emitted when a message is bulk deleted. */\r\n [Events.MESSAGE_DELETE_BULK]: [string[]];\r\n /** Emitted when a channel is created. */\r\n [Events.CHANNEL_CREATE]: [Channel];\r\n /** Emitted when a channel is deleted. */\r\n [Events.CHANNEL_DELETE]: [Channel];\r\n /** Emitted when a channel is updated. */\r\n [Events.CHANNEL_UPDATE]: [Channel, Channel];\r\n /** Emitted when a server is created. */\r\n [Events.SERVER_CREATE]: [Server];\r\n /** Emitted when a server is deleted. */\r\n [Events.SERVER_DELETE]: [Server];\r\n /** Emitted when a server is updated. */\r\n [Events.SERVER_UPDATE]: [Server, Server];\r\n /** Emitted when a server member joins. */\r\n [Events.SERVER_MEMBER_JOIN]: [ServerMember];\r\n /** Emitted when a server member leaves. */\r\n [Events.SERVER_MEMBER_LEAVE]: [ServerMember];\r\n /** Emitted when a server member is updated. */\r\n [Events.SERVER_MEMBER_UPDATE]: [ServerMember, ServerMember];\r\n /** Emitted when a user is updated. */\r\n [Events.USER_UPDATE]: [User, User];\r\n /** Emitted when a user is typing. */\r\n [Events.TYPING_START]: [Channel, User];\r\n /** Emitted when a user stops typing. */\r\n [Events.TYPING_STOP]: [Channel, User];\r\n /** Emitted when a group member joins. */\r\n [Events.GROUP_JOIN]: [Channel, User];\r\n /** Emitted when a group member leaves. */\r\n [Events.GROUP_LEAVE]: [Channel, User];\r\n /** Emitted when the client is ready. */\r\n [Events.READY]: [client];\r\n /** Emitted when an error occurs. */\r\n [Events.ERROR]: [unknown];\r\n /** Emitted when a raw event is received. */\r\n [Events.RAW]: [unknown];\r\n /** emitted when a role is created */\r\n [Events.ROLE_CREATE]: [Role];\r\n /** emitted when a role is deleted */\r\n [Events.ROLE_DELETE]: [Role];\r\n /** emitted when a role is updated */\r\n [Events.ROLE_UPDATE]: [Role, Role];\r\n}\r\n\r\n/**\r\n * Represents the options for configuring the client.\r\n */\r\nexport interface clientOptions {\r\n /** Whether to fetch all members of a server. */\r\n fetchMembers?: boolean;\r\n\r\n /** wether to use X-Session-Token or X-Bot-Token*/\r\n isBot?: boolean;\r\n\r\n /** Configuration for REST API requests. */\r\n rest?: {\r\n /** The timeout for REST requests in milliseconds. */\r\n timeout: number;\r\n /** The number of retries for failed REST requests. */\r\n retries: number;\r\n };\r\n\r\n /** Configuration for WebSocket connections. */\r\n ws?: {\r\n /** The interval for sending heartbeats in milliseconds. */\r\n heartbeatInterval?: number;\r\n /** Whether to automatically reconnect on disconnection. */\r\n reconnect?: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Represents the base client that provides core functionality for interacting with the API.\r\n *\r\n * @extends EventEmitter\r\n */\r\nexport abstract class BaseClient extends EventEmitter {\r\n /** The REST client for making API requests. */\r\n readonly api: RestClient;\r\n\r\n /** The CDN client for accessing media resources. */\r\n readonly cdn: CDNClient;\r\n\r\n /** The authentication token for the client. */\r\n #token: string | null = null;\r\n\r\n /** The options for configuring the client. */\r\n options: clientOptions;\r\n\r\n /** Whether the client is a bot. */\r\n bot = true;\r\n\r\n /**\r\n * Creates a new BaseClient instance.\r\n *\r\n * @param {clientOptions} [options={}] - The options for configuring the client.\r\n */\r\n constructor(options: clientOptions = {}) {\r\n super();\r\n this.options = {\r\n ...DEFAULT_CLIENT_OPTIONS,\r\n ...options,\r\n };\r\n this.bot = this.options.isBot ?? true;\r\n this.api = new RestClient(this);\r\n this.cdn = new CDNClient(this);\r\n }\r\n\r\n /**\r\n * Emits a debug message.\r\n *\r\n * @param {unknown} msg - The debug message to emit.\r\n */\r\n debug(msg: unknown): void {\r\n this.emit(Events.DEBUG, msg);\r\n }\r\n\r\n /**\r\n * Sets the authentication token for the client.\r\n *\r\n * @param {string | null} token - The authentication token.\r\n */\r\n set token(token: string | null) {\r\n this.#token = token;\r\n }\r\n\r\n /**\r\n * Gets the authentication token for the client.\r\n *\r\n * @returns {string | null} The authentication token, or `null` if not set.\r\n */\r\n get token(): string | null {\r\n return this.#token;\r\n }\r\n}\r\n","import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from \"axios\";\r\nimport { BaseClient } from \"../client/baseClient\";\r\nimport { apiUrl, DEFAULT_CLIENT_OPTIONS } from \"../utils\";\r\nimport { version } from \"../../package.json\";\r\nimport { RateLimitQueue } from \"./restUtils/rateLimitQueue\";\r\n\r\nexport class RestClient {\r\n private rateLimitQueue = new RateLimitQueue();\r\n constructor(private readonly client: BaseClient) {}\r\n\r\n /**\r\n * Helper function to handle API requests.\r\n * @param method The HTTP method (GET, POST, PATCH, PUT, DELETE).\r\n * @param url The URL for the request.\r\n * @param body The request body (if applicable).\r\n * @param query Query parameters (if applicable).\r\n * @returns The API response.\r\n */\r\n private async request<T>(\r\n method: \"GET\" | \"POST\" | \"PATCH\" | \"PUT\" | \"DELETE\",\r\n url: string,\r\n body?: any,\r\n query?: Record<string, string | number>,\r\n retry?: boolean,\r\n ): Promise<T> {\r\n try {\r\n if (!this.client.token) throw new Error(\"Token is required\");\r\n\r\n const authHeader = this.client.bot ? \"X-Bot-Token\" : \"X-Session-Token\";\r\n const config: AxiosRequestConfig & { url: string } = {\r\n ...{\r\n method,\r\n url: `${apiUrl}${url}`,\r\n params: query,\r\n data: body?.body,\r\n headers: {\r\n [authHeader]: this.client.token,\r\n \"User-Agent\": `RevBot.js/${version}`,\r\n },\r\n },\r\n url: `${apiUrl}${url}`,\r\n };\r\n\r\n // Use the rate limit queue for all requests\r\n const response: AxiosResponse<T> =\r\n await this.rateLimitQueue.request<T>(config);\r\n return response.data;\r\n } catch (error) {\r\n if (retry) throw typeof error;\r\n if (error instanceof AxiosError) {\r\n if (error.status && (error.status === 429 || error.status >= 500)) {\r\n return this.retryRequest<T>(0, method, url, body, query);\r\n }\r\n if (error.status) {\r\n throw new Error(\r\n `API call failed with status ${error.status}: ${error.response?.statusText}`,\r\n );\r\n }\r\n }\r\n throw new Error(\r\n `API call failed: ${error instanceof Error ? error.message : error}`,\r\n );\r\n }\r\n }\r\n\r\n private async retryRequest<T>(\r\n attempt: number = 0,\r\n method: \"GET\" | \"POST\" | \"PATCH\" | \"PUT\" | \"DELETE\",\r\n url: string,\r\n body?: any,\r\n query?: Record<string, string | number>,\r\n ): Promise<T> {\r\n if (attempt >= (this.client.options.rest?.retries ?? 3)) {\r\n throw new Error(\"Max retries reached\");\r\n }\r\n\r\n try {\r\n return await this.request<T>(method, url, body, query, true);\r\n } catch (error) {\r\n console.warn(`Attempt ${attempt + 1} failed:`, error);\r\n await new Promise((resolve) =>\r\n setTimeout(\r\n resolve,\r\n this.client.options.rest?.timeout ??\r\n DEFAULT_CLIENT_OPTIONS.rest?.timeout,\r\n ),\r\n );\r\n return this.retryRequest<T>(attempt + 1, method, url, body, query);\r\n }\r\n }\r\n\r\n /**\r\n * GET request.\r\n * @param url The URL for the request.\r\n * @param query Query parameters (if applicable).\r\n * @returns The API response.\r\n */\r\n async get<T>(\r\n url: string,\r\n query?: Record<string, string | number>,\r\n ): Promise<T> {\r\n return this.request<T>(\"GET\", url, undefined, query);\r\n }\r\n\r\n /**\r\n * POST request.\r\n * @param url The URL for the request.\r\n * @param body The request body.\r\n * @param query Query parameters (if applicable).\r\n * @returns The API response.\r\n */\r\n async post<T>(\r\n url: string,\r\n body: any,\r\n query?: Record<string, string | number>,\r\n ): Promise<T> {\r\n return this.request<T>(\"POST\", url, body, query);\r\n }\r\n\r\n /**\r\n * PATCH request.\r\n * @param url The URL for the request.\r\n * @param body The request body.\r\n * @param query Query parameters (if applicable).\r\n * @returns The API response.\r\n */\r\n async patch<T>(\r\n url: string,\r\n body: any,\r\n query?: Record<string, string | number>,\r\n ): Promise<T> {\r\n return this.request<T>(\"PATCH\", url, body, query);\r\n }\r\n\r\n /**\r\n * PUT request.\r\n * @param url The URL for the request.\r\n * @param body The request body.\r\n * @param query Query parameters (if applicable).\r\n * @returns The API response.\r\n */\r\n async put<T>(\r\n url: string,\r\n body?: any,\r\n query?: Record<string, string | number>,\r\n ): Promise<T> {\r\n return this.request<T>(\"PUT\", url, body, query);\r\n }\r\n\r\n /**\r\n * DELETE request.\r\n * @param url The URL for the request.\r\n * @param query Query parameters (if applicable).\r\n * @returns The API response.\r\n */\r\n async delete<T>(\r\n url: string,\r\n body?: any,\r\n query?: Record<string, string | number>,\r\n ): Promise<T> {\r\n return this.request<T>(\"DELETE\", url, body, query);\r\n }\r\n}\r\n","import axios, { AxiosRequestConfig, AxiosResponse } from \"axios\";\r\n\r\ninterface RateLimitInfo {\r\n limit: number;\r\n remaining: number;\r\n resetAfter: number; // epoch ms\r\n bucket: string;\r\n resetIn: number; // ms until reset\r\n}\r\n\r\ninterface BucketState extends RateLimitInfo {\r\n queue: Array<() => void>;\r\n resetTimeout?: NodeJS.Timeout;\r\n lastPath: string;\r\n}\r\n\r\nexport class RateLimitQueue {\r\n private bucketMap: Map<string, BucketState> = new Map();\r\n private pathToBucket: Map<string, string> = new Map();\r\n\r\n async request<T = any>(\r\n config: AxiosRequestConfig & { url: string },\r\n ): Promise<AxiosResponse<T>> {\r\n const path = config.url!;\r\n const bucketId = this.pathToBucket.get(path);\r\n let bucket = bucketId ? this.bucketMap.get(bucketId) : undefined;\r\n\r\n if (bucket && bucket.remaining <= 0 && Date.now() < bucket.resetAfter) {\r\n // Rate limited, queue the request\r\n return new Promise<AxiosResponse<T>>((resolve, reject) => {\r\n bucket!.queue.push(async () => {\r\n try {\r\n const res = await this._doRequest<T>(config, path);\r\n resolve(res);\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n });\r\n } else {\r\n // Not rate limited, do the request\r\n return this._doRequest<T>(config, path);\r\n }\r\n }\r\n\r\n private async _doRequest<T>(\r\n config: AxiosRequestConfig,\r\n path: string,\r\n ): Promise<AxiosResponse<T>> {\r\n const response = await axios(config);\r\n this._updateRateLimit(path, response);\r\n return response;\r\n }\r\n\r\n private _updateRateLimit(path: string, response: AxiosResponse) {\r\n const headers = response.headers;\r\n const limit = parseInt(headers[\"x-ratelimit-limit\"]);\r\n const remaining = parseInt(headers[\"x-ratelimit-remaining\"]);\r\n const resetAfter =\r\n parseFloat(headers[\"x-ratelimit-reset-after\"]) * 1000 + Date.now();\r\n const bucket = headers[\"x-ratelimit-bucket\"];\r\n const resetIn = parseInt(headers[\"x-ratelimit-reset-after\"]);\r\n\r\n if (!bucket) return;\r\n this.pathToBucket.set(path, bucket);\r\n let state = this.bucketMap.get(bucket);\r\n if (!state) {\r\n state = {\r\n limit,\r\n remaining,\r\n resetAfter,\r\n bucket,\r\n resetIn,\r\n queue: [],\r\n lastPath: path,\r\n };\r\n this.bucketMap.set(bucket, state);\r\n } else {\r\n state.limit = limit;\r\n state.remaining = remaining;\r\n state.resetAfter = resetAfter;\r\n state.lastPath = path;\r\n }\r\n\r\n if (remaining <= 0) {\r\n if (state.resetTimeout) clearTimeout(state.resetTimeout);\r\n const delay = resetIn;\r\n state.resetTimeout = setTimeout(() => {\r\n state.remaining = state.limit;\r\n state.resetTimeout = undefined;\r\n // Process queued requests\r\n while (state.queue.length > 0 && state.remaining > 0) {\r\n const fn = state.queue.shift();\r\n if (fn) {\r\n state.remaining--;\r\n fn();\r\n }\r\n }\r\n }, delay);\r\n }\r\n }\r\n}\r\n","import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from \"axios\";\r\nimport { BaseClient } from \"../client/baseClient\";\r\nimport { cdnUrl, DEFAULT_CLIENT_OPTIONS } from \"../utils\";\r\nimport { version } from \"../../package.json\";\r\nimport FormData from \"form-data\";\r\nimport { RateLimitQueue } from \"./restUtils/rateLimitQueue\";\r\nexport class CDNClient {\r\n private rateLimitQueue = new RateLimitQueue();\r\n constructor(private readonly client: BaseClient) {}\r\n\r\n /**\r\n * Helper function to handle API requests.\r\n * @param method The HTTP method (GET, POST, PATCH, PUT, DELETE).\r\n * @param url The URL for the request.\r\n * @param body The request body (if applicable).\r\n * @param query Query parameters (if applicable).\r\n * @returns The API response.\r\n */\r\n private async request<T>(\r\n method: \"GET\" | \"POST\" | \"PATCH\" | \"PUT\" | \"DELETE\",\r\n url: string,\r\n data: FormData,\r\n query?: Record<string, string | number>,\r\n retry?: boolean,\r\n ): Promise<T> {\r\n try {\r\n if (!this.client.token) throw new Error(\"Token is required\");\r\n\r\n const authHeader = this.client.bot ? \"X-Bot-Token\" : \"X-Session-Token\";\r\n const config: AxiosRequestConfig & { url: string } = {\r\n ...{\r\n method,\r\n url: `${cdnUrl}${url}`,\r\n params: query,\r\n data,\r\n maxBodyLength: Infinity,\r\n headers: {\r\n [authHeader]: this.client.token,\r\n \"Content-Type\": \"multipart/form-data\",\r\n \"User-Agent\": `RevBot.js/${version}`,\r\n ...data.getHeaders(),\r\n },\r\n },\r\n url: `${cdnUrl}${url}`,\r\n };\r\n\r\n // Use the rate limit queue for all requests\r\n const response: AxiosResponse<T> =\r\n await this.rateLimitQueue.request<T>(config);\r\n return response.data;\r\n } catch (error) {\r\n if (retry) throw typeof error;\r\n if (error instanceof AxiosError) {\r\n if (error.status && (error.status === 429 || error.status >= 500)) {\r\n return this.retryRequest<T>(0, method, url, data, query);\r\n }\r\n if (error.status) {\r\n console.error(`API call failed with status ${error.status}:`, error);\r\n throw new Error(\r\n `API call failed with status ${error.status}: ${error.message}`,\r\n );\r\n }\r\n }\r\n throw new Error(\r\n `API call failed: ${error instanceof Error ? error.message : error}`,\r\n );\r\n }\r\n }\r\n\r\n private async retryRequest<T>(\r\n attempt: number = 0,\r\n method: \"GET\" | \"POST\" | \"PATCH\" | \"PUT\" | \"DELETE\",\r\n url: string,\r\n body?: any,\r\n query?: Record<string, string | number>,\r\n ): Promise<T> {\r\n if (attempt >= (this.client.options.rest?.retries ?? 3)) {\r\n throw new Error(\"Max retries reached\");\r\n }\r\n\r\n try {\r\n return await this.request<T>(method, url, body, query, true);\r\n } catch (error) {\r\n console.warn(`Attempt ${attempt + 1} failed:`, error);\r\n await new Promise((resolve) =>\r\n setTimeout(\r\n resolve,\r\n this.client.options.rest?.timeout ??\r\n DEFAULT_CLIENT_OPTIONS.rest?.timeout,\r\n ),\r\n );\r\n return this.retryRequest<T>(attempt + 1, method, url, body, query);\r\n }\r\n }\r\n /**\r\n * POST request.\r\n * @param url The URL for the request.\r\n * @param data The request body.\r\n * @param query Query parameters (if applicable).\r\n * @returns The API response.\r\n */\r\n async post<T>(url: string, data: FormData): Promise<T> {\r\n return this.request<T>(\"POST\", url, data);\r\n }\r\n}\r\n","import type { Channel as APIChannel } from \"revolt-api\";\r\nimport { Channel, Message } from \"./index\";\r\nimport { TextBasedChannel } from \"./interfaces/baseChannel\";\r\nimport {\r\n client,\r\n MessageManager,\r\n MessageOptions,\r\n MessageResolvable,\r\n} from \"../index\";\r\nimport { ChannelTypes, DEFAULT_PERMISSION_DM } from \"../utils/index\";\r\n\r\ntype APIDirectChannel = Extract<APIChannel, { channel_type: \"DirectMessage\" }>;\r\n\r\n/**\r\n * Represents a direct message (DM) channel between users.\r\n *\r\n * @extends Channel\r\n */\r\nexport class DMChannel extends Channel implements TextBasedChannel {\r\n /** The type of the channel, which is always `DM` for direct message channels. */\r\n readonly type = ChannelTypes.DM;\r\n\r\n /** Whether the DM channel is currently active. */\r\n active!: boolean;\r\n\r\n /** The default permissions for the DM channel. */\r\n permissions = DEFAULT_PERMISSION_DM;\r\n\r\n /** Manages the messages in this DM channel. */\r\n messages = new MessageManager(this);\r\n\r\n /** The ID of the last message sent in this DM channel, if any. */\r\n lastMessageId: string | null = null;\r\n\r\n /**\r\n * Creates a new DMChannel instance.\r\n *\r\n * @param {client} client - The client instance.\r\n * @param {APIDirectChannel} data - The raw data for the DM channel from the API.\r\n */\r\n constructor(client: client, data: APIDirectChannel) {\r\n super(client);\r\n this._patch(data);\r\n }\r\n\r\n /**\r\n * Updates the DM channel instance with new data from the API.\r\n *\r\n * @param {APIDirectChannel} data - The raw data for the DM channel from the API.\r\n * @returns {this} The updated DM channel instance.\r\n * @protected\r\n */\r\n protected _patch(data: APIDirectChannel): this {\r\n super._patch(data);\r\n\r\n if (typeof data.active === \"boolean\") this.active = data.active;\r\n if (data.last_message_id) this.lastMessageId = data.last_message_id;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Retrieves the last message sent in this DM channel.\r\n *\r\n * @returns {Message | null} The last message, or `null` if no message exists.\r\n */\r\n get lastMessage(): Message | null {\r\n if (!this.lastMessageId) return null;\r\n return this.messages.cache.get(this.lastMessageId) ?? null;\r\n }\r\n\r\n /**\r\n * Deletes multiple messages from this DM channel.\r\n *\r\n * @param {MessageResolvable[] | Map<string, Message> | number} messages - The messages to delete. This can be an array of message resolvables, a map of messages, or a number indicating how many recent messages to delete.\r\n * @returns {Promise<void>} A promise that resolves when the messages have been successfully deleted.\r\n *\r\n * @example\r\n * ```typescript\r\n * await dmChannel.bulkDelete(10); // Deletes the last 10 messages.\r\n * ```\r\n */\r\n bulkDelete(\r\n messages: MessageResolvable[] | Map<string, Message> | number,\r\n ): Promise<void> {\r\n return this.messages.bulkDelete(messages);\r\n }\r\n\r\n /**\r\n * Sends a message to this DM channel.\r\n *\r\n * @param {MessageOptions | string} options - The message content or options for the message.\r\n * @returns {Promise<Message>} A promise that resolves with the sent message.\r\n *\r\n * @example\r\n * ```typescript\r\n * await dmChannel.send(\"Hello, world!\");\r\n * ```\r\n */\r\n send(options: MessageOptions | string): Promise<Message> {\r\n return this.messages.send(options);\r\n }\r\n}\r\n","import type { Channel as APIChannel } from \"revolt-api\";\r\nimport { Attachment, Channel, Invite, Message, User } from \"./index\";\r\nimport type { TextBasedChannel } from \"./interfaces/baseChannel\";\r\nimport type { client } from \"../client/client\";\r\nimport {\r\n MessageManager,\r\n MessageOptions,\r\n MessageResolvable,\r\n UserResolvable,\r\n} from \"../managers/index.js\";\r\nimport { ChannelPermissions, ChannelTypes } from \"../utils/index\";\r\n\r\ntype APIGroupChannel = Extract<APIChannel, { channel_type: \"Group\" }>;\r\n\r\n/**\r\n * Represents a group channel, which allows multiple users to communicate.\r\n *\r\n * @extends Channel\r\n */\r\nexport class GroupChannel extends Channel implements TextBasedChannel {\r\n /** The type of the channel, which is always `GROUP` for group channels. */\r\n readonly type = ChannelTypes.GROUP;\r\n\r\n /** The name of the group channel. */\r\n name!: string;\r\n\r\n /** The description of the group channel, if any. */\r\n description: string | null = null;\r\n\r\n /** The ID of the user who owns the group channel. */\r\n ownerId!: string;\r\n\r\n /** The permissions for the group channel. */\r\n permissions!: Readonly<ChannelPermissions>;\r\n\r\n /** The icon of the group channel, if any. */\r\n icon: Attachment | null = null;\r\n\r\n /** Manages the messages in this group channel. */\r\n messages = new MessageManager(this);\r\n\r\n /** The ID of the last message sent in this group channel, if any. */\r\n lastMessageId: string | null = null;\r\n\r\n /** A map of user IDs to their corresponding `User` instances in the group channel. */\r\n users = new Map<string, User>();\r\n\r\n /** Whether the group channel is marked as NSFW (Not Safe For Work). */\r\n nsfw = false;\r\n\r\n /**\r\n * Creates a new GroupChannel instance.\r\n *\r\n * @param {client} client - The client instance.\r\n * @param {APIGroupChannel} data - The raw data for the group channel from the API.\r\n */\r\n constructor(client: client, data: APIGroupChannel) {\r\n super(client);\r\n this._patch(data);\r\n }\r\n\r\n /**\r\n * Updates the group channel instance with new data from the API.\r\n *\r\n * @param {APIGroupChannel} data - The raw data for the group channel from the API.\r\n * @returns {this} The updated group channel instance.\r\n * @protected\r\n */\r\n protected _patch(data: APIGroupChannel): this {\r\n super._patch(data);\r\n\r\n if (\"description\" in data) {\r\n this.description = data.description ?? null;\r\n }\r\n\r\n if (Array.isArray(data.recipients)) {\r\n this.users.clear();\r\n for (const userId of data.recipients) {\r\n const user = this.client.users.cache.get(userId);\r\n if (user) this.users.set(user.id, user);\r\n }\r\n }\r\n\r\n if (typeof data.permissions === \"number\") {\r\n this.permissions = new ChannelPermissions(data.permissions).freeze();\r\n }\r\n\r\n if (data.owner) {\r\n this.ownerId = data.owner;\r\n }\r\n\r\n if (data.icon) {\r\n this.icon = new Attachment(this.client, data.icon);\r\n }\r\n\r\n if (data.name) {\r\n this.name = data.name;\r\n }\r\n\r\n if (data.last_message_id) this.lastMessageId = data.last_message_id;\r\n\r\n if (typeof data.nsfw === \"boolean\") this.nsfw = data.nsfw;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Retrieves the last message sent in this group channel.\r\n *\r\n * @returns {Message | null} The last message, or `null` if no message exists.\r\n */\r\n get lastMessage(): Message | null {\r\n if (!this.lastMessageId) return null;\r\n return this.messages.cache.get(this.lastMessageId) ?? null;\r\n }\r\n\r\n /**\r\n * Retrieves the owner of the group channel.\r\n *\r\n * @returns {User | null} The owner of the group channel, or `null` if not found.\r\n */\r\n get owner(): User | null {\r\n return this.client.users.cache.get(this.ownerId) ?? null;\r\n }\r\n\r\n /**\r\n * Deletes multiple messages from this group channel.\r\n *\r\n * @param {MessageResolvable[] | Map<string, Message> | number} messages - The messages to delete. This can be an array of message resolvables, a map of messages, or a number indicating how many recent messages to delete.\r\n * @returns {Promise<void>} A promise that resolves when the messages have been successfully deleted.\r\n *\r\n * @example\r\n * ```typescript\r\n * await groupChannel.bulkDelete(10); // Deletes the last 10 messages.\r\n * ```\r\n */\r\n bulkDelete(\r\n messages: MessageResolvable[] | Map<string, Message> | number,\r\n ): Promise<void> {\r\n return this.messages.bulkDelete(messages);\r\n }\r\n\r\n /**\r\n * Creates an invite for the group channel.\r\n *\r\n * @returns {Promise<Invite>} A promise that resolves with the created invite.\r\n *\r\n * @example\r\n * ```typescript\r\n * const invite = await groupChannel.createInvite();\r\n * console.log(`Invite created: ${invite}`);\r\n * ```\r\n */\r\n async createInvite(): Promise<Invite> {\r\n const data = await this.client.api.post(`/channels/${this.id}/invites`, {});\r\n return new Invite(\r\n this.client,\r\n data as { type: \"Group\"; _id: string; creator: string; channel: string },\r\n );\r\n }\r\n\r\n /**\r\n * Adds a user to the group channel.\r\n *\r\n * @param {UserResolvable} user - The user to add to the group channel.\r\n * @returns {Promise<void>} A promise that resolves when the user has been successfully added.\r\n *\r\n * @example\r\n * ```typescript\r\n * await groupChannel.add(user);\r\n * ```\r\n */\r\n async add(user: UserResolvable): Promise<void> {\r\n const id = this.client.users.resolveId(user);\r\n if (!id) throw new TypeError(\"INVALID_TYPE\");\r\n await this.client.api.put(`/channels/${this.id}/recipients/${id}`);\r\n }\r\n\r\n /**\r\n * Removes a user from the group channel.\r\n *\r\n * @param {UserResolvable} user - The user to remove from the group channel.\r\n * @returns {Promise<void>} A promise that resolves when the user has been successfully removed.\r\n *\r\n * @example\r\n * ```typescript\r\n * await groupChannel.remove(user);\r\n * ```\r\n */\r\n async remove(user: UserResolvable): Promise<void> {\r\n const id = this.client.users.resolveId(user);\r\n if (!id) throw new TypeError(\"INVALID_TYPE\");\r\n await this.client.api.delete(`/channels/${this.id}/recipients/${id}`);\r\n }\r\n\r\n /**\r\n * Leaves the group channel.\r\n *\r\n * @returns {Promise<void>} A promise that resolves when the group channel has been successfully left.\r\n *\r\n * @example\r\n * ```typescript\r\n * await groupChannel.leave();\r\n * ```\r\n */\r\n leave(): Promise<void> {\r\n return super.delete();\r\n }\r\n\r\n /**\r\n * Sends a message to this group channel.\r\n *\r\n * @param {MessageOptions | string} options - The message content or options for the message.\r\n * @returns {Promise<Message>} A promise that resolves with the sent message.\r\n *\r\n * @example\r\n * ```typescript\r\n * await groupChannel.send(\"Hello, group!\");\r\n * ```\r\n */\r\n send(options: MessageOptions | string): Promise<Message> {\r\n return this.messages.send(options);\r\n }\r\n\r\n // iconURL(options?: { size: number }): string | null {\r\n // if (!this.icon) return null;\r\n // return this.client.api.cdn.icon(this.icon.id, options?.size);\r\n // }\r\n}\r\n","import { Base } from \"./base\";\r\nimport type { Invite as APIInvite } from \"revolt-api\";\r\nimport type { Server, User } from \"./index\";\r\nimport type { client } from \"../client/client\";\r\n\r\n/**\r\n * Represents an invite to a server or channel.\r\n *\r\n * @extends Base\r\n */\r\nexport class Invite extends Base {\r\n /** The ID of the server associated with the invite, if any. */\r\n serverId: string | null = null;\r\n\r\n /** The ID of the user who created the invite. */\r\n inviterId!: string;\r\n\r\n /** The ID of the channel associated with the invite. */\r\n channelId!: string;\r\n\r\n /**\r\n * Creates a new Invite instance.\r\n *\r\n * @param {client} client - The client instance.\r\n * @param {APIInvite} data - The raw data for the invite from the API.\r\n */\r\n constructor(client: client, data: APIInvite) {\r\n super(client);\r\n this._patch(data);\r\n }\r\n\r\n /**\r\n * Updates the invite instance with new data from the API.\r\n *\r\n * @param {APIInvite} data - The raw data for the invite from the API.\r\n * @returns {this} The updated invite instance.\r\n * @protected\r\n */\r\n protected _patch(data: APIInvite): this {\r\n super._patch(data);\r\n\r\n if (data.channel) this.channelId = data.channel;\r\n if (data.creator) this.inviterId = data.channel;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Retrieves the server associated with the invite.\r\n *\r\n * @returns {Server | null} The server associated with the invite, or `null` if not found.\r\n */\r\n get server(): Server | null {\r\n return this.client.servers.cache.get(this.serverId!) ?? null;\r\n }\r\n\r\n /**\r\n * Retrieves the channel associated with the invite.\r\n *\r\n * @returns {Channel | null} The channel associated with the invite, or `null` if not found.\r\n */\r\n get channel() {\r\n return this.client.channels.cache.get(this.channelId) ?? null;\r\n }\r\n\r\n /**\r\n * Retrieves the user who created the invite.\r\n *\r\n * @returns {User | null} The user who created the invite, or `null` if not found.\r\n */\r\n get inviter(): User | null {\r\n return this.client.users.cache.get(this.inviterId) ?? null;\r\n }\r\n\r\n // toString(): string {\r\n // return this.client.api.cdn.invite(this.id);\r\n // }\r\n}\r\n","import { Message, ServerMember, User } from \"./index\";\r\nimport { client } from \"../client/client\";\r\nimport { UserResolvable } from \"../managers/index\";\r\n\r\n/**\r\n * Represents the mentions in a message, including users and server members.\r\n */\r\nexport class Mentions {\r\n /** The client instance. */\r\n public readonly client: client;\r\n\r\n /**\r\n * Creates a new Mentions instance.\r\n *\r\n * @param {Message} message - The message associated with the mentions.\r\n * @param {string[]} _users - An array of user IDs mentioned in the message.\r\n */\r\n constructor(\r\n public readonly message: Message,\r\n protected _users: string[],\r\n ) {\r\n this.client = message.client;\r\n }\r\n\r\n /**\r\n * Checks if a specific user is mentioned in the message.\r\n *\r\n * @param {UserResolvable} user - The user to check.\r\n * @returns {boolean} `true` if the user is mentioned, otherwise `false`.\r\n * @throws {TypeError} Throws an error if the user cannot be resolved.\r\n *\r\n * @example\r\n * ```typescript\r\n * if (mentions.has(someUser)) {\r\n * console.log(\"User is mentioned!\");\r\n * }\r\n * ```\r\n */\r\n has(user: UserResolvable): boolean {\r\n const id = this.client.users.resolveId(user);\r\n if (!id) throw new TypeError(\"INVALID_TYPE\");\r\n return this._users.includes(id);\r\n }\r\n\r\n /**\r\n * Retrieves the server members mentioned in the message.\r\n *\r\n * @returns {Map<string, ServerMember> | null} A map of user IDs to `ServerMember` instances, or `null` if the message is not in a server.\r\n *\r\n * @example\r\n * ```typescript\r\n * const members = mentions.members;\r\n * if (members) {\r\n * members.forEach(member => console.log(member.displayName));\r\n * }\r\n * ```\r\n */\r\n get members(): Map<string, ServerMember> | null {\r\n const server = this.message.server;\r\n\r\n if (!server) return null;\r\n\r\n const members = new Map<string, ServerMember>();\r\n\r\n for (const userId of this._users) {\r\n const member = server.members.cache.get(userId);\r\n if (member) members.set(member.id, member);\r\n }\r\n\r\n return members;\r\n }\r\n\r\n /**\r\n * Retrieves the users mentioned in the message.\r\n *\r\n * @returns {Map<string, User>} A map of user IDs to `User` instances.\r\n *\r\n * @example\r\n * ```typescript\r\n * const users = mentions.users;\r\n * users.forEach(user => console.log(user.username));\r\n * ```\r\n */\r\n get users(): Map<string, User> {\r\n const users = new Map<string, User>();\r\n\r\n for (const userId of this._users) {\r\n const user = this.client.users.cache.get(userId);\r\n if (user) users.set(user.id, user);\r\n }\r\n\r\n return users;\r\n }\r\n}\r\n","import type { Embed as APIEmbed, Special, SendableEmbed } from \"revolt-api\";\r\nimport { client } from \"../client/client\";\r\nimport { Readable } from \"stream\";\r\nimport axios from \"axios\";\r\nimport FormData from \"form-data\";\r\nimport { File } from \"node:buffer\";\r\nimport { CDNAttachmentResponse } from \"../utils/types\";\r\n\r\nexport type Embed = APIEmbed;\r\nexport type EmbedImage = Extract<Embed, { type: \"Image\" }>;\r\nexport type EmbedVideo = Extract<Embed, { type: \"Video\" }>;\r\nexport type EmbedSpecial = Special;\r\n\r\n/**\r\n * Represents a message embed, which can include rich content such as titles, descriptions, URLs, and media.\r\n */\r\nexport class MessageEmbed {\r\n #url?: string;\r\n #title?: string;\r\n #description?: string;\r\n #icon_url?: string;\r\n #color?: string;\r\n #media?: Readable | string | File;\r\n\r\n /**\r\n * Sets the title of the embed.\r\n *\r\n * @param {string} title - The title to set.\r\n * @returns {this} The updated `MessageEmbed` instance.\r\n */\r\n setTitle(title: string): this {\r\n this.#title = title;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the icon URL of the embed.\r\n *\r\n * @param {string} iconURL - The URL of the icon to set.\r\n * @returns {this} The updated `MessageEmbed` instance.\r\n */\r\n setIcon(iconURL: string): this {\r\n this.#icon_url = iconURL;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the color of the embed.\r\n *\r\n * @param {string} color - The color to set (e.g., a hex code).\r\n * @returns {this} The updated `MessageEmbed` instance.\r\n */\r\n setColor(color: string): this {\r\n this.#color = color;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the description of the embed.\r\n *\r\n * @param {string} description - The description to set.\r\n * @returns {this} The updated `MessageEmbed` instance.\r\n */\r\n setDescription(description: string): this {\r\n this.#description = description;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the URL of the embed.\r\n *\r\n * @param {string} url - The URL to set.\r\n * @returns {this} The updated `MessageEmbed` instance.\r\n */\r\n setURL(url: string): this {\r\n this.#url = url;\r\n return this;\r\n }\r\n\r\n /**\r\n * Sets the media (e.g., image or video) of the embed.\r\n *\r\n * @param {Readable | string | File} media - The media URL, File or Stream to set.\r\n * @returns {this} The updated `MessageEmbed` instance.\r\n */\r\n setMedia(media: Readable | string | File): this {\r\n this.#media = media;\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param client The client instance used to send the embed.\r\n * @returns SendableEmbed\r\n * Converts the embed to a JSON object that can be sent to the API, including media handling.\r\n */\r\n async toJSONWithMedia(client: client): Promise<SendableEmbed> {\r\n const embed: SendableEmbed = {\r\n title: this.#title,\r\n icon_url: this.#icon_url,\r\n colour: this.#color,\r\n description: this.#description,\r\n url: this.#url,\r\n };\r\n\r\n if (this.#media) {\r\n let att = this.#media;\r\n const data = new FormData();\r\n if (typeof att === \"string\") {\r\n const readableStream = (await axios.get(att, {\r\n responseType: \"stream\",\r\n })) as { data: Readable };\r\n data.append(\"file\", readableStream.data, {\r\n filename: att.split(\"/\").pop(),\r\n });\r\n }\r\n\r\n if (att instanceof Readable) {\r\n data.append(\"file\", att);\r\n }\r\n\r\n if (att instanceof File) {\r\n const buffer = Buffer.from(await att.arrayBuffer());\r\n data.append(\"file\", buffer, { filename: att.name });\r\n }\r\n\r\n await client.cdn.post(\"/attachments\", data).then((attachment) => {\r\n const { id } = attachment as CDNAttachmentResponse;\r\n embed.media = id;\r\n });\r\n }\r\n\r\n return embed;\r\n }\r\n\r\n /**\r\n * Converts the embed to a JSON object that can be sent to the API.\r\n *\r\n * @returns {SendableEmbed} The JSON representation of the embed.\r\n */\r\n toJSON(): SendableEmbed {\r\n return {\r\n title: this.#title,\r\n icon_url: this.#icon_url,\r\n colour: this.#color,\r\n description: this.#description,\r\n url: this.#url,\r\n media: this.#media?.toString(),\r\n };\r\n }\r\n}\r\n","import type { Channel as APIChannel } from \"revolt-api\";\r\nimport { Channel, Message, User } from \"./index\";\r\nimport { TextBasedChannel } from \"./interfaces/baseChannel\";\r\nimport { client } from \"../client/client\";\r\nimport {\r\n MessageManager,\r\n MessageOptions,\r\n MessageResolvable,\r\n} from \"../managers/index\";\r\nimport { ChannelTypes } from \"../utils/index\";\r\n\r\ntype APINotesChannel = Extract<APIChannel, { channel_type: \"SavedMessages\" }>;\r\n\r\n/**\r\n * Represents a notes channel, which is used for saving personal messages.\r\n *\r\n * @extends Channel\r\n */\r\nexport class NotesChannel extends Channel implements TextBasedChannel {\r\n /** The type of the channel, which is always `NOTES` for notes channels. */\r\n readonly type = ChannelTypes.NOTES;\r\n\r\n /** The ID of the user associated with the notes channel. */\r\n userId!: string;\r\n\r\n /** The ID of the last message sent in this notes channel, if any. */\r\n lastMessageId: string | null = null;\r\n\r\n /** Manages the messages in this notes channel. */\r\n messages = new MessageManager(this);\r\n\r\n /**\r\n * Creates a new NotesChannel instance.\r\n *\r\n * @param {client} client - The client instance.\r\n * @param {APINotesChannel} data - The raw data for the notes channel from the API.\r\n */\r\n constructor(client: client, data: APINotesChannel) {\r\n super(client);\r\n this._patch(data);\r\n }\r\n\r\n /**\r\n * Updates the notes channel instance with new data from the API.\r\n *\r\n * @param {APINotesChannel} data - The raw data for the notes channel from the API.\r\n * @returns {this} The updated notes channel instance.\r\n * @protected\r\n */\r\n protected _patch(data: APINotesChannel): this {\r\n super._patch(data);\r\n\r\n if (data.user) {\r\n this.userId = data.user;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Sends a message to this notes channel.\r\n *\r\n * @param {MessageOptions | string} options - The message content or options for the message.\r\n * @returns {Promise<Message>} A promise that resolves with the sent message.\r\n *\r\n * @example\r\n * ```typescript\r\n * await notesChannel.send(\"This is a saved message.\");\r\n * ```\r\n */\r\n send(options: MessageOptions | string): Promise<Message> {\r\n return this.messages.send(options);\r\n }\r\n\r\n /**\r\n * Deletes multiple messages from this notes channel.\r\n *\r\n * @param {MessageResolvable[] | Map<string, Message> | number} messages - The messages to delete. This can be an array of message resolvables, a map of messages, or a number indicating how many recent messages to delete.\r\n * @returns {Promise<void>} A promise that resolves when the messages have been successfully deleted.\r\n *\r\n * @example\r\n * ```typescript\r\n * await notesChannel.bulkDelete(5); // Deletes the last 5 messages.\r\n * ```\r\n */\r\n bulkDelete(\r\n messages: MessageResolvable[] | Map<string, Message> | number,\r\n ): Promise<void> {\r\n return this.messages.bulkDelete(messages);\r\n }\r\n\r\n /**\r\n * Retrieves the last message sent in this notes channel.\r\n *\r\n * @returns {Message | null} The last message, or `null` if no message exists.\r\n */\r\n get lastMessage(): Message | null {\r\n if (!this.lastMessageId) return null;\r\n return this.messages.cache.get(this.lastMessageId) ?? null;\r\n }\r\n\r\n /**\r\n * Retrieves the user associated with this notes channel.\r\n *\r\n * @returns {User} The user associated with the notes channel.\r\n */\r\n get user(): User {\r\n return this.client.user!;\r\n }\r\n}\r\n","import type { Channel as APIChannel, FieldsChannel } from \"revolt-api\";\r\nimport { Attachment, Category, Channel, Invite, Server } from \"./index\";\r\nimport { client } from \"../client/client\";\r\nimport { ChannelPermissions, FullPermissions } from \"../utils/index\";\r\n\r\ntype APIServerChannel = Extract<\r\n APIChannel,\r\n { channel_type: \"TextChannel\" | \"VoiceChannel\" }\r\n>;\r\n\r\nexport interface Overwrite {\r\n allow: FullPermissions;\r\n deny: FullPermissions;\r\n}\r\n\r\n/**\r\n * Represents a server channel, which can be a text or voice channel.\r\n *\r\n * @extends Channel\r\n */\r\nexport class ServerChannel extends Channel {\r\n /** The name of the channel. */\r\n name!: string;\r\n\r\n /** The ID of the server this channel belongs to. */\r\n serverId!: string;\r\n\r\n /** The description of the channel, or `null` if none is set. */\r\n description: string | null = null;\r\n\r\n /** The icon of the channel, or `null` if none is set. */\r\n icon: Attachment | null = null;\r\n\r\n /** The permission overwrites for the channel. */\r\n overwrites = new Map<string, Overwrite>();\r\n\r\n /** Whether the channel is marked as NSFW (Not Safe For Work). */\r\n nsfw = false;\r\n\r\n /**\r\n * Creates a new ServerChannel instance.\r\n *\r\n * @param {client} client - The client instance.\r\n * @param {APIServerChannel} data - The raw data for the server channel from the API.\r\n */\r\n constructor(client: client, data: APIServerChannel) {\r\n super(client);\r\n this._patch(data);\r\n }\r\n\r\n /**\r\n * Updates the server channel instance with new data from the API.\r\n *\r\n * @param {APIServerChannel} data - The raw data for the server channel from the API.\r\n * @param {FieldsChannel[]} [clear=[]] - Fields to clear in the channel.\r\n * @returns {this} The updated server channel instance.\r\n * @protected\r\n */\r\n protected _patch(data: APIServerChannel, clear: FieldsChannel[] = []): this {\r\n super._patch(data);\r\n\r\n if (data.name) this.name = data.name;\r\n\r\n if (data.server) this.serverId = data.server;\r\n\r\n if (\"description\" in data) this.description = data.description ?? null;\r\n\r\n if (data.icon) this.icon = new Attachment(this.client, data.icon);\r\n\r\n if (typeof data.nsfw === \"boolean\") this.nsfw = data.nsfw;\r\n\r\n if (data.role_permissions) {\r\n this.overwrites.clear();\r\n for (const [id, { a, d }] of Object.entries(data.role_permissions)) {\r\n this.overwrites.set(id, {\r\n allow: new FullPermissions(a),\r\n deny: new FullPermissions(d),\r\n });\r\n }\r\n }\r\n\r\n for (const field of clear) {\r\n if (field === \"Icon\") this.icon = null;\r\n if (field === \"Description\") this.description = null;\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Creates an invite for the server channel.\r\n *\r\n * @returns {Promise<Invite>} A promise that resolves with the created invite.\r\n *\r\n * @example\r\n * ```typescript\r\n * const invite = await serverChannel.createInvite();\r\n * console.log(`Invite created: ${invite}`);\r\n * ```\r\n */\r\n async createInvite(): Promise<Invite> {\r\n const data = await this.client.api.post(`/channels/${this.id}/invites`, {});\r\n return new Invite(\r\n this.client,\r\n data as\r\n | {\r\n type: \"Server\";\r\n _id: string;\r\n server: string;\r\n creator: string;\r\n channel: string;\r\n }\r\n | { type: \"Group\"; _id: string; creator: string; channel: string },\r\n );\r\n }\r\n\r\n // iconURL(options?: { size: number }): string | null {\r\n // return this.icon\r\n // ? this.client.api.cdn.icon(this.icon.id, options?.size)\r\n // : null;\r\n // }\r\n\r\n /**\r\n * Retrieves the server this channel belongs to.\r\n *\r\n * @returns {Server} The server instance.\r\n */\r\n get server(): Server {\r\n return this.client.servers.cache.get(this.serverId)!;\r\n }\r\n\r\n /**\r\n * Retrieves the category this channel belongs to, if any.\r\n *\r\n * @returns {Category | null} The category instance, or `null` if the channel is not in a category.\r\n */\r\n get category(): Category | null {\r\n return (\r\n Array.from(this.server.categories.values()).find((cat) =>\r\n cat.children.has(this.id),\r\n ) ?? null\r\n );\r\n }\r\n}\r\n","import type { Channel } from \"revolt-api\";\r\nimport { Message, ServerChannel } from \"./index\";\r\nimport { TextBasedChannel } from \"./interfaces/baseChannel\";\r\nimport { client } from \"../client/client\";\r\nimport {\r\n MessageManager,\r\n MessageOptions,\r\n MessageResolvable,\r\n} from \"../managers/index\";\r\nimport { ChannelTypes } from \"../utils/index\";\r\n\r\ntype APITextChannel = Extract<Channel, { channel_type: \"TextChannel\" }>;\r\n\r\n/**\r\n * Represents a text channel in a server.\r\n *\r\n * @extends ServerChannel\r\n */\r\nexport class TextChannel extends ServerChannel implements TextBasedChannel {\r\n /** The ID of the last message sent in this text channel, if any. */\r\n lastMessageId: string | null = null;\r\n\r\n /** Manages the messages in this text channel. */\r\n messages = new MessageManager(this);\r\n\r\n /** The type of the channel, which is always `TEXT` for text channels. */\r\n readonly type = ChannelTypes.TEXT;\r\n\r\n /**\r\n * Creates a new TextChannel instance.\r\n *\r\n * @param {client} client - The client instance.\r\n * @param {APITextChannel} data - The raw data for the text channel from the API.\r\n */\r\n constructor(client: client, data: APITextChannel) {\r\n super(client, data);\r\n this._patch(data);\r\n }\r\n\r\n /**\r\n * Updates the text channel instance with new data from the API.\r\n *\r\n * @param {APITextChannel} data - The raw data for the text channel from the API.\r\n * @returns {this} The updated text channel instance.\r\n * @protected\r\n */\r\n protected _patch(data: APITextChannel): this {\r\n super._patch(data);\r\n\r\n if (data.last_message_id) this.lastMessageId = data.last_message_id;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Retrieves the last message sent in this text channel.\r\n *\r\n * @returns {Message | null} The last message, or `null` if no message exists.\r\n */\r\n get lastMessage(): Message | null {\r\n if (!this.lastMessageId) return null;\r\n return this.messages.cache.get(this.lastMessageId) ?? null;\r\n }\r\n\r\n /**\r\n * Sends a message to this text channel.\r\n *\r\n * @param {MessageOptions | string} options - The message content or options for the message.\r\n * @returns {Promise<Message>} A promise that resolves with the sent message.\r\n *\r\n * @example\r\n * ```typescript\r\n * await textChannel.send(\"Hello, world!\");\r\n * ```\r\n */\r\n send(options: MessageOptions | string): Promise<Message> {\r\n return this.messages.send(options);\r\n }\r\n\r\n /**\r\n * Deletes multiple messages from this text channel.\r\n *\r\n * @param {MessageResolvable[] | Map<string, Message> | number} messages - The messages to delete. This can be an array of message resolvables, a map of messages, or a number indicating how many recent messages to delete.\r\n * @returns {Promise<void>} A promise that resolves when the messages have been successfully deleted.\r\n *\r\n * @example\r\n * ```typescript\r\n * await textChannel.bulkDelete(10); // Deletes the last 10 messages.\r\n * ```\r\n */\r\n bulkDelete(\r\n messages: MessageResolvable[] | Map<string, Message> | number,\r\n ): Promise<void> {\r\n return this.messages.bulkDelete(messages);\r\n }\r\n}\r\n","import type { Channel } from \"revolt-api\";\r\nimport { ServerChannel } from \"./index\";\r\nimport { client } from \"../client/client\";\r\nimport { ChannelTypes } from \"../utils/index\";\r\n\r\ntype APIVoiceChannel = Extract<Channel, { channel_type: \"VoiceChannel\" }>;\r\n\r\n/**\r\n * Represents a voice channel in a server.\r\n *\r\n * @extends ServerChannel\r\n */\r\nexport class VoiceChannel extends ServerChannel {\r\n /** The type of the channel, which is always `VOICE` for voice channels. */\r\n readonly type = ChannelTypes.VOICE;\r\n\r\n /**\r\n * Creates a new VoiceChannel instance.\r\n *\r\n * @param {client} client - The client instance.\r\n * @param {APIVoiceChannel} data - The raw data for the voice channel from the API.\r\n */\r\n constructor(client: client, data: APIVoiceChannel) {\r\n super(client, data);\r\n this._patch(data);\r\n }\r\n\r\n /**\r\n * Updates the voice channel instance with new data from the API.\r\n *\r\n * @param {APIVoiceChannel} data - The raw data for the voice channel from the API.\r\n * @returns {this} The updated voice channel instance.\r\n * @protected\r\n */\r\n protected _patch(data: APIVoiceChannel): this {\r\n super._patch(data);\r\n return this;\r\n }\r\n\r\n /**\r\n * Acknowledges the voice channel.\r\n *\r\n * @throws {TypeError} Throws an error because voice channels cannot be acknowledged.\r\n *\r\n * @example\r\n * ```typescript\r\n * try {\r\n * await voiceChannel.ack();\r\n * } catch (error) {\r\n * console.error(error.message); // \"Cannot ack voice channel\"\r\n * }\r\n * ```\r\n */\r\n ack(): Promise<void> {\r\n throw new TypeError(\"Cannot ack voice channel\");\r\n }\r\n}\r\n","import { Base } from \"./base\";\r\nimport { client } from \"../client/client\";\r\n\r\n/**\r\n * Represents an emoji in the client.\r\n *\r\n * @extends Base\r\n */\r\nexport class Emoji extends Base {\r\n /** The parent object of the emoji, which can be a server or other entity. */\r\n parent?: { type: string; id: string } | null = null;\r\n\r\n /** The ID of the user who created the emoji, or `null` if not available. */\r\n creator_id?: string | null = null;\r\n\r\n /** The name of the emoji, or `null` if not set. */\r\n name?: string | null = null;\r\n\r\n /**\r\n * Creates a new Emoji instance.\r\n *\r\n * @param {client} client - The client instance.\r\n * @param {Emoji} data - The raw data for the emoji.\r\n */\r\n constructor(client: client, data: Emoji) {\r\n super(client);\r\n this._patch(data);\r\n }\r\n\r\n /**\r\n * Retrieves the user who created the emoji.\r\n *\r\n * @returns {User | null} The creator of the emoji, or `null` if not found.\r\n */\r\n get creator() {\r\n return this.client.users.cache.get(this.creator_id!) ?? null;\r\n }\r\n\r\n /**\r\n * Retrieves the server associated with the emoji, if any.\r\n *\r\n * @returns {Server | null} The server instance, or `null` if the emoji is not associated with a server.\r\n */\r\n get server() {\r\n if (!this.parent) return null;\r\n return this.client.servers.cache.get(this.parent.id) ?? null;\r\n }\r\n}\r\n"],"mappings":"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","names":["client","client","client","client","FormData","axios","Channel","import_axios","import_axios","import_axios","DMChannel","Channel","client","GroupChannel","Channel","client","client","import_axios","import_form_data","import_node_buffer","NotesChannel","Channel","client","Channel","client","TextChannel","client","client","client","TextChannel","DMChannel","GroupChannel","NotesChannel","channel","Channel"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import 'revolt-api';
|
|
2
|
+
export { e as ChannelManager, d as ChannelResolvable } from '../index-XkxTx7UU.cjs';
|
|
3
|
+
import '../utils/badges.cjs';
|
|
4
|
+
import '../utils/bitField.cjs';
|
|
5
|
+
import '../utils/permissions.cjs';
|
|
6
|
+
import '../utils/types.cjs';
|
|
7
|
+
import 'node:buffer';
|
|
8
|
+
import 'stream';
|
|
9
|
+
import 'node:events';
|
|
10
|
+
import 'form-data';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import 'revolt-api';
|
|
2
|
+
export { e as ChannelManager, d as ChannelResolvable } from '../index-D44PqKGb.js';
|
|
3
|
+
import '../utils/badges.js';
|
|
4
|
+
import '../utils/bitField.js';
|
|
5
|
+
import '../utils/permissions.js';
|
|
6
|
+
import '../utils/types.js';
|
|
7
|
+
import 'node:buffer';
|
|
8
|
+
import 'stream';
|
|
9
|
+
import 'node:events';
|
|
10
|
+
import 'form-data';
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ChannelManager
|
|
3
|
+
} from "../chunk-XQEYCTYC.js";
|
|
4
|
+
import "../chunk-XMS4UTPG.js";
|
|
5
|
+
import "../chunk-55PAATU6.js";
|
|
6
|
+
import "../chunk-H4SZEZP2.js";
|
|
7
|
+
import "../chunk-3ANNOYXY.js";
|
|
8
|
+
import "../chunk-6V6HPZ33.js";
|
|
9
|
+
import "../chunk-6WJXGICC.js";
|
|
10
|
+
import "../chunk-VELIOWTX.js";
|
|
11
|
+
import "../chunk-OETI5C5L.js";
|
|
12
|
+
import "../chunk-AOKM5TCP.js";
|
|
13
|
+
import "../chunk-X7VEORVS.js";
|
|
14
|
+
import "../chunk-O2IN5OZI.js";
|
|
15
|
+
import "../chunk-43CUB3NP.js";
|
|
16
|
+
import "../chunk-SYXHGCHU.js";
|
|
17
|
+
import "../chunk-G7DLVJKH.js";
|
|
18
|
+
import "../chunk-GCIV7PRI.js";
|
|
19
|
+
import "../chunk-MSJCRRXO.js";
|
|
20
|
+
import "../chunk-RMACMP4R.js";
|
|
21
|
+
import "../chunk-WMWOEYVA.js";
|
|
22
|
+
import "../chunk-35BYGFDX.js";
|
|
23
|
+
import "../chunk-OK227BBS.js";
|
|
24
|
+
import "../chunk-FKNQEJE7.js";
|
|
25
|
+
import "../chunk-E2P4PIDH.js";
|
|
26
|
+
import "../chunk-LQUZ7Q7D.js";
|
|
27
|
+
import "../chunk-W4XDXSOK.js";
|
|
28
|
+
import "../chunk-K4VAG5ZU.js";
|
|
29
|
+
import "../chunk-EOZ7QHOH.js";
|
|
30
|
+
import "../chunk-YXX4DJB3.js";
|
|
31
|
+
import "../chunk-J2RF7D67.js";
|
|
32
|
+
import "../chunk-5RK7FEID.js";
|
|
33
|
+
import "../chunk-R2PF552K.js";
|
|
34
|
+
import "../chunk-BQS6ZLNY.js";
|
|
35
|
+
import "../chunk-VU3XNPDE.js";
|
|
36
|
+
import "../chunk-YLSAAPO4.js";
|
|
37
|
+
import "../chunk-MLKHJGSQ.js";
|
|
38
|
+
import "../chunk-HKLTWZSB.js";
|
|
39
|
+
import "../chunk-DSM44DGO.js";
|
|
40
|
+
import "../chunk-HETUKFLM.js";
|
|
41
|
+
import "../chunk-GNQQG7EP.js";
|
|
42
|
+
import "../chunk-7XUN3OQT.js";
|
|
43
|
+
import "../chunk-7PA5MDKS.js";
|
|
44
|
+
import "../chunk-LY7OFI25.js";
|
|
45
|
+
import "../chunk-LUDTY3LL.js";
|
|
46
|
+
import "../chunk-CQ4AJZQD.js";
|
|
47
|
+
import "../chunk-LAL23AQK.js";
|
|
48
|
+
import "../chunk-3GLQHMWL.js";
|
|
49
|
+
import "../chunk-ICANLKGX.js";
|
|
50
|
+
export {
|
|
51
|
+
ChannelManager
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=channelManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|