@fluxerjs/core 1.1.7 → 1.1.9
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/Channel-2WNJ445K.mjs +17 -0
- package/dist/Channel-3TAZVAC5.mjs +21 -0
- package/dist/Channel-4WVFDOCG.mjs +22 -0
- package/dist/Channel-ADRBK5JN.mjs +19 -0
- package/dist/Channel-AMX4IOLY.mjs +20 -0
- package/dist/Channel-BEZOW4VC.mjs +17 -0
- package/dist/Channel-BLJMK4T5.mjs +19 -0
- package/dist/Channel-DPLLHL7Y.mjs +19 -0
- package/dist/Channel-DTJWTA4N.mjs +20 -0
- package/dist/Channel-ELXWZIY4.mjs +20 -0
- package/dist/Channel-EYNPKHH2.mjs +20 -0
- package/dist/Channel-EZAKOCLZ.mjs +19 -0
- package/dist/Channel-EZSBZJTJ.mjs +20 -0
- package/dist/Channel-HBKXUNL5.mjs +22 -0
- package/dist/Channel-HK7VT35N.mjs +22 -0
- package/dist/Channel-HM2UY4DN.mjs +17 -0
- package/dist/Channel-ICWNKXBR.mjs +19 -0
- package/dist/Channel-IESEJJGP.mjs +22 -0
- package/dist/Channel-IGCIDQB3.mjs +19 -0
- package/dist/Channel-IKL3SJXN.mjs +17 -0
- package/dist/Channel-JFQXR7SZ.mjs +22 -0
- package/dist/Channel-KILNV5V3.mjs +17 -0
- package/dist/Channel-KOTARBSF.mjs +17 -0
- package/dist/Channel-LPAK4B5K.mjs +20 -0
- package/dist/Channel-LXEGJ3BH.mjs +20 -0
- package/dist/Channel-MGABB7NZ.mjs +19 -0
- package/dist/Channel-MS2XLT5H.mjs +19 -0
- package/dist/Channel-MXKULRP2.mjs +19 -0
- package/dist/Channel-NBJUUPIA.mjs +22 -0
- package/dist/Channel-NFVAR3VH.mjs +19 -0
- package/dist/Channel-NKQB7NPD.mjs +20 -0
- package/dist/Channel-ON7O3D3M.mjs +17 -0
- package/dist/Channel-OSOB6ELO.mjs +19 -0
- package/dist/Channel-PCUCLDOG.mjs +22 -0
- package/dist/Channel-QEJBBSOB.mjs +20 -0
- package/dist/Channel-RB4X65FA.mjs +19 -0
- package/dist/Channel-SM7NMKEO.mjs +19 -0
- package/dist/Channel-TOAQGSRX.mjs +17 -0
- package/dist/Channel-UHN4IOM5.mjs +19 -0
- package/dist/Channel-UNCURQZU.mjs +19 -0
- package/dist/Channel-VENHOL7S.mjs +17 -0
- package/dist/Channel-VFCLGG5D.mjs +22 -0
- package/dist/Channel-WDHLDQJC.mjs +22 -0
- package/dist/Channel-WJZZSNML.mjs +21 -0
- package/dist/Channel-XUJNTC3R.mjs +21 -0
- package/dist/Channel-YB3LWDHZ.mjs +22 -0
- package/dist/Channel-YVGPVOVB.mjs +17 -0
- package/dist/Channel-ZABU3K5W.mjs +19 -0
- package/dist/Channel-ZNYZSC7R.mjs +20 -0
- package/dist/ClientUser-2OHUFUV5.mjs +9 -0
- package/dist/ClientUser-35IVTH2S.mjs +8 -0
- package/dist/ClientUser-4MC4EFLT.mjs +8 -0
- package/dist/ClientUser-4TYNCHEP.mjs +7 -0
- package/dist/ClientUser-576UGSIO.mjs +8 -0
- package/dist/ClientUser-5DS73MJV.mjs +8 -0
- package/dist/ClientUser-5KQNQHUB.mjs +8 -0
- package/dist/ClientUser-5NZXMF6I.mjs +8 -0
- package/dist/ClientUser-6HBAPU6H.mjs +8 -0
- package/dist/ClientUser-76LLHLHL.mjs +8 -0
- package/dist/ClientUser-7CQO74QQ.mjs +8 -0
- package/dist/ClientUser-A73AHVOW.mjs +8 -0
- package/dist/ClientUser-AJLODDUV.mjs +8 -0
- package/dist/ClientUser-ALGC4FNY.mjs +8 -0
- package/dist/ClientUser-BKDGVNAY.mjs +8 -0
- package/dist/ClientUser-CDU2QEMV.mjs +8 -0
- package/dist/ClientUser-D3ZNDAJU.mjs +8 -0
- package/dist/ClientUser-DJO2FS7P.mjs +8 -0
- package/dist/ClientUser-GBD34QB5.mjs +9 -0
- package/dist/ClientUser-GISPHEM6.mjs +8 -0
- package/dist/ClientUser-ISZ3MTSZ.mjs +8 -0
- package/dist/ClientUser-J6HQVSDJ.mjs +9 -0
- package/dist/ClientUser-JG4EX6F4.mjs +8 -0
- package/dist/ClientUser-K2T5J3YS.mjs +8 -0
- package/dist/ClientUser-KWOQRQPD.mjs +8 -0
- package/dist/ClientUser-LBK6K4YD.mjs +8 -0
- package/dist/ClientUser-LLL6WX35.mjs +8 -0
- package/dist/ClientUser-MOMS7WLQ.mjs +8 -0
- package/dist/ClientUser-N7ZXYAQ3.mjs +8 -0
- package/dist/ClientUser-OGDA7D77.mjs +8 -0
- package/dist/ClientUser-PXAAKR2P.mjs +8 -0
- package/dist/ClientUser-QBJLDW5Y.mjs +8 -0
- package/dist/ClientUser-QQXLZ5WP.mjs +8 -0
- package/dist/ClientUser-RDGNVUVQ.mjs +8 -0
- package/dist/ClientUser-RNDKHQ3Z.mjs +9 -0
- package/dist/ClientUser-RXOB6K6C.mjs +8 -0
- package/dist/ClientUser-TN2LZ6NT.mjs +8 -0
- package/dist/ClientUser-TRA2WERQ.mjs +8 -0
- package/dist/ClientUser-U5TR5GIT.mjs +8 -0
- package/dist/ClientUser-UKG5K744.mjs +8 -0
- package/dist/ClientUser-V43WRWTN.mjs +8 -0
- package/dist/ClientUser-VZ2JS6RD.mjs +8 -0
- package/dist/ClientUser-WFID4IXD.mjs +8 -0
- package/dist/ClientUser-WWXUMO5O.mjs +8 -0
- package/dist/ClientUser-XX2PE3TB.mjs +8 -0
- package/dist/ClientUser-YEZNAK3W.mjs +8 -0
- package/dist/ClientUser-YQXVRO2A.mjs +8 -0
- package/dist/ClientUser-ZDE7A36W.mjs +8 -0
- package/dist/Guild-2LUH7U7B.mjs +10 -0
- package/dist/Guild-2OVJTJYO.mjs +10 -0
- package/dist/Guild-2P77HBQM.mjs +11 -0
- package/dist/Guild-36EGAAEW.mjs +8 -0
- package/dist/Guild-3ETPHHF5.mjs +12 -0
- package/dist/Guild-3PLQFT2I.mjs +12 -0
- package/dist/Guild-5UBZNIGD.mjs +9 -0
- package/dist/Guild-63VQBPKF.mjs +11 -0
- package/dist/Guild-AA7WOQRM.mjs +12 -0
- package/dist/Guild-AJNEG7LH.mjs +10 -0
- package/dist/Guild-ARMAVVJK.mjs +10 -0
- package/dist/Guild-AYHGH54T.mjs +10 -0
- package/dist/Guild-BRYNE2LO.mjs +11 -0
- package/dist/Guild-CA3W6DOD.mjs +8 -0
- package/dist/Guild-EATTLGFJ.mjs +11 -0
- package/dist/Guild-F6JU3UR6.mjs +11 -0
- package/dist/Guild-FE3A7REJ.mjs +9 -0
- package/dist/Guild-FMBCTAV4.mjs +12 -0
- package/dist/Guild-FSGTZATW.mjs +12 -0
- package/dist/Guild-FSIEY6C5.mjs +11 -0
- package/dist/Guild-FTMIT5T5.mjs +10 -0
- package/dist/Guild-GIXJJBFM.mjs +9 -0
- package/dist/Guild-GOQZ7XP4.mjs +8 -0
- package/dist/Guild-H7AUG7DI.mjs +10 -0
- package/dist/Guild-I4O63HEY.mjs +12 -0
- package/dist/Guild-IRBC63IR.mjs +12 -0
- package/dist/Guild-ITSZV3DE.mjs +9 -0
- package/dist/Guild-K5AJM2C7.mjs +12 -0
- package/dist/Guild-KKIQCGCV.mjs +11 -0
- package/dist/Guild-L6OWKAO6.mjs +11 -0
- package/dist/Guild-MDW7KF33.mjs +12 -0
- package/dist/Guild-NAD5F5DP.mjs +12 -0
- package/dist/Guild-NHNQ5TIA.mjs +8 -0
- package/dist/Guild-NNMSFIA6.mjs +12 -0
- package/dist/Guild-OKTDQS5K.mjs +12 -0
- package/dist/Guild-PO5D3NEA.mjs +10 -0
- package/dist/Guild-PS2BCXNB.mjs +11 -0
- package/dist/Guild-RPQGTXB7.mjs +12 -0
- package/dist/Guild-RSNXYHFM.mjs +10 -0
- package/dist/Guild-S3AOK72T.mjs +9 -0
- package/dist/Guild-S3YWFZTC.mjs +11 -0
- package/dist/Guild-S436SLOP.mjs +9 -0
- package/dist/Guild-TM6YGJWB.mjs +10 -0
- package/dist/Guild-TZOCAXXV.mjs +9 -0
- package/dist/Guild-WAFXK2EX.mjs +9 -0
- package/dist/Guild-WGZEW2AP.mjs +10 -0
- package/dist/Guild-WNPS7DBT.mjs +11 -0
- package/dist/Guild-WQA4CPDE.mjs +10 -0
- package/dist/Guild-XPOMHZZG.mjs +9 -0
- package/dist/Guild-ZOFF5LFR.mjs +8 -0
- package/dist/GuildBan-M4PA3HAA.mjs +7 -0
- package/dist/GuildEmoji-LP55RVIV.mjs +7 -0
- package/dist/GuildEmoji-OCXBPS6I.mjs +8 -0
- package/dist/GuildMember-3PC5QAU4.mjs +8 -0
- package/dist/GuildMember-43B5E5CH.mjs +9 -0
- package/dist/GuildMember-B7IFPCWC.mjs +9 -0
- package/dist/GuildMember-BJJNCL6W.mjs +8 -0
- package/dist/GuildMember-DW2N6ITI.mjs +7 -0
- package/dist/GuildMember-E72JU6JE.mjs +9 -0
- package/dist/GuildMember-FSGDPKUU.mjs +9 -0
- package/dist/GuildMember-FX2JAWES.mjs +8 -0
- package/dist/GuildMember-GS72FCQD.mjs +9 -0
- package/dist/GuildMember-H7CP2HMW.mjs +9 -0
- package/dist/GuildMember-K5FLBNHV.mjs +8 -0
- package/dist/GuildMember-L35WIMIH.mjs +9 -0
- package/dist/GuildMember-OXTGJ3MF.mjs +9 -0
- package/dist/GuildMember-RGVPVUAG.mjs +9 -0
- package/dist/GuildMember-RZWZ3OCG.mjs +7 -0
- package/dist/GuildMember-UBNHZBCO.mjs +8 -0
- package/dist/GuildMember-UU26WJGN.mjs +8 -0
- package/dist/GuildMember-XF7K2R45.mjs +9 -0
- package/dist/GuildMember-YWXA2FVO.mjs +8 -0
- package/dist/GuildSticker-B7AZADJR.mjs +8 -0
- package/dist/GuildSticker-STHUU6RM.mjs +7 -0
- package/dist/Invite-4WSFNMH4.mjs +7 -0
- package/dist/Message-23Z3RPCZ.mjs +9 -0
- package/dist/Message-2MPW7ZWA.mjs +7 -0
- package/dist/Message-33APPS76.mjs +9 -0
- package/dist/Message-3XJH5D7I.mjs +7 -0
- package/dist/Message-43PACCS7.mjs +8 -0
- package/dist/Message-5RFJTHNU.mjs +7 -0
- package/dist/Message-6IYEYSV6.mjs +7 -0
- package/dist/Message-6RSAGIRP.mjs +8 -0
- package/dist/Message-6YRGUZSW.mjs +9 -0
- package/dist/Message-AKOXO3LZ.mjs +7 -0
- package/dist/Message-C4A23STA.mjs +9 -0
- package/dist/Message-DXBXIQIJ.mjs +9 -0
- package/dist/Message-E3WU3J2Q.mjs +8 -0
- package/dist/Message-EMJ3JUVX.mjs +8 -0
- package/dist/Message-F3K5GNIB.mjs +8 -0
- package/dist/Message-F4SCFNF5.mjs +8 -0
- package/dist/Message-G4KR7O2J.mjs +7 -0
- package/dist/Message-O4CXWR57.mjs +7 -0
- package/dist/Message-OFIVTTAZ.mjs +9 -0
- package/dist/Message-ONWLVMU7.mjs +8 -0
- package/dist/Message-OXTQHFCF.mjs +8 -0
- package/dist/Message-PZUU7ZFR.mjs +9 -0
- package/dist/Message-QSDAA2HG.mjs +9 -0
- package/dist/Message-QXPHQOVC.mjs +8 -0
- package/dist/Message-R7GZYIQQ.mjs +8 -0
- package/dist/Message-SHUOVKB5.mjs +7 -0
- package/dist/Message-U3UPCS7C.mjs +7 -0
- package/dist/Message-W624MHJF.mjs +8 -0
- package/dist/Message-XB5WNMHL.mjs +9 -0
- package/dist/Message-ZCS7IGJX.mjs +8 -0
- package/dist/Message-ZL2PJPQA.mjs +8 -0
- package/dist/MessageReaction-AYSOCOMX.mjs +8 -0
- package/dist/MessageReaction-FSX3HHRZ.mjs +7 -0
- package/dist/MessageReaction-GNM5YJ4V.mjs +8 -0
- package/dist/MessageReaction-ME5KGEG4.mjs +8 -0
- package/dist/MessageReaction-MUBQ6GIN.mjs +8 -0
- package/dist/MessageReaction-NIAHV3EM.mjs +8 -0
- package/dist/MessageReaction-PZ53DNAW.mjs +8 -0
- package/dist/MessageReaction-TQFIS53C.mjs +8 -0
- package/dist/MessageReaction-V4UZ7OXE.mjs +7 -0
- package/dist/MessageReaction-XRPYZDSC.mjs +7 -0
- package/dist/Role-5MWSGL66.mjs +7 -0
- package/dist/Role-DWZ2YDFB.mjs +7 -0
- package/dist/Role-J7ENREP6.mjs +7 -0
- package/dist/Role-N2ZEMRUQ.mjs +7 -0
- package/dist/Role-SVLWIAMN.mjs +7 -0
- package/dist/Webhook-2MQESB7Z.mjs +7 -0
- package/dist/Webhook-2RHBXH7R.mjs +7 -0
- package/dist/Webhook-32VJD4AL.mjs +7 -0
- package/dist/Webhook-6BCEHBZ6.mjs +8 -0
- package/dist/Webhook-A5KZ4S4N.mjs +10 -0
- package/dist/Webhook-AG6QFM2I.mjs +7 -0
- package/dist/Webhook-EARQN5EG.mjs +10 -0
- package/dist/Webhook-GB77DXAF.mjs +10 -0
- package/dist/Webhook-H4IMADRQ.mjs +10 -0
- package/dist/Webhook-H7VKDOJX.mjs +7 -0
- package/dist/Webhook-IHLGW7NL.mjs +8 -0
- package/dist/Webhook-L2D43K5N.mjs +7 -0
- package/dist/Webhook-LEYRYH23.mjs +7 -0
- package/dist/Webhook-NPIXOCEH.mjs +10 -0
- package/dist/Webhook-NUQCJAWZ.mjs +7 -0
- package/dist/Webhook-OXXVFNNU.mjs +9 -0
- package/dist/Webhook-RWDDYW2Q.mjs +10 -0
- package/dist/Webhook-SNLT45PN.mjs +7 -0
- package/dist/Webhook-TGAZZRQQ.mjs +7 -0
- package/dist/Webhook-WIF6OGPA.mjs +10 -0
- package/dist/Webhook-YL3NNZDI.mjs +8 -0
- package/dist/Webhook-ZL7A4766.mjs +10 -0
- package/dist/chunk-226TVUXE.mjs +136 -0
- package/dist/chunk-23KVLHIZ.mjs +147 -0
- package/dist/chunk-24E6OQID.mjs +193 -0
- package/dist/chunk-25Q2GMSK.mjs +137 -0
- package/dist/chunk-26GCIGHL.mjs +52 -0
- package/dist/chunk-2CIZJCEO.mjs +132 -0
- package/dist/chunk-2FIZRRSO.mjs +88 -0
- package/dist/chunk-2GXOBRSF.mjs +184 -0
- package/dist/chunk-2HH5NZT3.mjs +137 -0
- package/dist/chunk-2QU3TS4S.mjs +496 -0
- package/dist/chunk-367NAOYQ.mjs +127 -0
- package/dist/chunk-3BJ4OOCQ.mjs +86 -0
- package/dist/chunk-3CNUPFDI.mjs +59 -0
- package/dist/chunk-3KOM5WYW.mjs +502 -0
- package/dist/chunk-3UJYRWDI.mjs +132 -0
- package/dist/chunk-4DBGMFOQ.mjs +14 -0
- package/dist/chunk-4F765HVV.mjs +137 -0
- package/dist/chunk-4OQ4XACY.mjs +190 -0
- package/dist/chunk-4PLHVYRY.mjs +579 -0
- package/dist/chunk-4QKSUNTV.mjs +263 -0
- package/dist/chunk-4S42USSG.mjs +137 -0
- package/dist/chunk-4SWR3ZEZ.mjs +579 -0
- package/dist/chunk-4XJIM6SC.mjs +315 -0
- package/dist/chunk-52L544OS.mjs +259 -0
- package/dist/chunk-53Y37KRG.mjs +111 -0
- package/dist/chunk-5APVDWQU.mjs +184 -0
- package/dist/chunk-5HQRX3KJ.mjs +70 -0
- package/dist/chunk-5I54OXBG.mjs +111 -0
- package/dist/chunk-5MPQG6OV.mjs +120 -0
- package/dist/chunk-5RCTNYPY.mjs +151 -0
- package/dist/chunk-5VIV7EPG.mjs +180 -0
- package/dist/chunk-62S4AB2S.mjs +54 -0
- package/dist/chunk-6C3LYAUX.mjs +496 -0
- package/dist/chunk-6CEFV56Z.mjs +142 -0
- package/dist/chunk-6CEMF2LO.mjs +14 -0
- package/dist/chunk-6EBNOON4.mjs +86 -0
- package/dist/chunk-6GF5H3JH.mjs +137 -0
- package/dist/chunk-6IGR45JC.mjs +137 -0
- package/dist/chunk-6LREQZXU.mjs +259 -0
- package/dist/chunk-6S3BDHBI.mjs +28 -0
- package/dist/chunk-6VWXGTX2.mjs +585 -0
- package/dist/chunk-72OY7B3D.mjs +72 -0
- package/dist/chunk-737R7BFN.mjs +112 -0
- package/dist/chunk-7EPDZMZS.mjs +264 -0
- package/dist/chunk-7FYM4D2E.mjs +50 -0
- package/dist/chunk-7GZN6JXT.mjs +50 -0
- package/dist/chunk-7H3TKJUT.mjs +53 -0
- package/dist/chunk-7K35BCCD.mjs +263 -0
- package/dist/chunk-7SIS5CUA.mjs +14 -0
- package/dist/chunk-ABGLEIZG.mjs +191 -0
- package/dist/chunk-AC7PFILS.mjs +107 -0
- package/dist/chunk-AI5E6LS5.mjs +361 -0
- package/dist/chunk-AK6Q62VE.mjs +109 -0
- package/dist/chunk-AKJZBSCE.mjs +155 -0
- package/dist/chunk-BAZBIWMG.mjs +209 -0
- package/dist/chunk-BF7OCTE6.mjs +142 -0
- package/dist/chunk-BFSGXVZ7.mjs +148 -0
- package/dist/chunk-BGJSL6JI.mjs +14 -0
- package/dist/chunk-BI2MRKB7.mjs +150 -0
- package/dist/chunk-BKPVGBOT.mjs +8 -0
- package/dist/chunk-BMAFJS7T.mjs +575 -0
- package/dist/chunk-BUEXP5SZ.mjs +70 -0
- package/dist/chunk-BUIHWKTK.mjs +132 -0
- package/dist/chunk-BYTAODAO.mjs +70 -0
- package/dist/chunk-CEABHTAF.mjs +43 -0
- package/dist/chunk-CJLJBBFO.mjs +54 -0
- package/dist/chunk-CJVQNARM.mjs +145 -0
- package/dist/chunk-CNCPVNXS.mjs +160 -0
- package/dist/chunk-CNXK6SYW.mjs +220 -0
- package/dist/chunk-CQ5ZVTLX.mjs +71 -0
- package/dist/chunk-CQ7MDBHD.mjs +199 -0
- package/dist/chunk-CREI4MOS.mjs +406 -0
- package/dist/chunk-DJBCSVZX.mjs +102 -0
- package/dist/chunk-DJQXAQLR.mjs +496 -0
- package/dist/chunk-DLROMCIJ.mjs +50 -0
- package/dist/chunk-DLVBAJTE.mjs +52 -0
- package/dist/chunk-DNDCNIN2.mjs +263 -0
- package/dist/chunk-DO7MLFT6.mjs +579 -0
- package/dist/chunk-DPZHAYCK.mjs +71 -0
- package/dist/chunk-DQ4TNBPG.mjs +63 -0
- package/dist/chunk-DSPSRPHF.mjs +200 -0
- package/dist/chunk-DUQAD7F6.mjs +173 -0
- package/dist/chunk-E27LKSSS.mjs +142 -0
- package/dist/chunk-E6SU3TR5.mjs +64 -0
- package/dist/chunk-E75ZVY3I.mjs +14 -0
- package/dist/chunk-EC4ES5VH.mjs +171 -0
- package/dist/chunk-EF32ILJL.mjs +102 -0
- package/dist/chunk-EI2LRVWJ.mjs +207 -0
- package/dist/chunk-F2EEQP5O.mjs +86 -0
- package/dist/chunk-F3JU2ZCE.mjs +575 -0
- package/dist/chunk-FGFWZMUQ.mjs +64 -0
- package/dist/chunk-FH6ICLNP.mjs +142 -0
- package/dist/chunk-FHFXUKFP.mjs +147 -0
- package/dist/chunk-FJS5FBXO.mjs +233 -0
- package/dist/chunk-FK5X6HFL.mjs +111 -0
- package/dist/chunk-FNFID6QB.mjs +45 -0
- package/dist/chunk-FRVZ7D6D.mjs +293 -0
- package/dist/chunk-FSXTONUR.mjs +147 -0
- package/dist/chunk-FVZY7IZ4.mjs +575 -0
- package/dist/chunk-G2YVDCRB.mjs +137 -0
- package/dist/chunk-G4L7WAJS.mjs +64 -0
- package/dist/chunk-G6F6VL4O.mjs +54 -0
- package/dist/chunk-GCIJYVRC.mjs +86 -0
- package/dist/chunk-GEPISSKR.mjs +263 -0
- package/dist/chunk-GFUJVQ7L.mjs +64 -0
- package/dist/chunk-GIIJQKAV.mjs +164 -0
- package/dist/chunk-GUNWHOQO.mjs +42 -0
- package/dist/chunk-GWSLXZES.mjs +263 -0
- package/dist/chunk-H5KYMLLB.mjs +14 -0
- package/dist/chunk-HAUQAFOF.mjs +97 -0
- package/dist/chunk-HBF5QEDH.mjs +42 -0
- package/dist/chunk-I2MHQEEZ.mjs +575 -0
- package/dist/chunk-IE3V5VLN.mjs +64 -0
- package/dist/chunk-IHXSHE2Z.mjs +56 -0
- package/dist/chunk-IPHFDI2L.mjs +68 -0
- package/dist/chunk-J3EIGOXQ.mjs +72 -0
- package/dist/chunk-JHNKZIHY.mjs +137 -0
- package/dist/chunk-JJHZBWZM.mjs +118 -0
- package/dist/chunk-JOUNLDB6.mjs +225 -0
- package/dist/chunk-JS55BGBM.mjs +157 -0
- package/dist/chunk-JTL3CVFU.mjs +114 -0
- package/dist/chunk-JVEOQFUX.mjs +52 -0
- package/dist/chunk-JW4BRX5E.mjs +140 -0
- package/dist/chunk-K2ZJWUV6.mjs +86 -0
- package/dist/chunk-K6NLD6SB.mjs +64 -0
- package/dist/chunk-KALJBR6Z.mjs +142 -0
- package/dist/chunk-KBXXX7L4.mjs +209 -0
- package/dist/chunk-KHE3G7SG.mjs +184 -0
- package/dist/chunk-KOTF4TTZ.mjs +403 -0
- package/dist/chunk-KQNLUUBZ.mjs +137 -0
- package/dist/chunk-KQXR3GN2.mjs +140 -0
- package/dist/chunk-KR26CBFE.mjs +58 -0
- package/dist/chunk-KWA5TKXS.mjs +574 -0
- package/dist/chunk-KXI2IOJM.mjs +97 -0
- package/dist/chunk-KXJLNURI.mjs +153 -0
- package/dist/chunk-KXY2PTDQ.mjs +263 -0
- package/dist/chunk-L25ON7WB.mjs +52 -0
- package/dist/chunk-LBBIQOSH.mjs +53 -0
- package/dist/chunk-LD7ATCWW.mjs +97 -0
- package/dist/chunk-LDR7MZLX.mjs +227 -0
- package/dist/chunk-LRMB4VBU.mjs +112 -0
- package/dist/chunk-LTO3TVUW.mjs +71 -0
- package/dist/chunk-LU2SNC5G.mjs +392 -0
- package/dist/chunk-LVMFPATK.mjs +54 -0
- package/dist/chunk-MILMGDQ2.mjs +15 -0
- package/dist/chunk-MKEHOFA2.mjs +43 -0
- package/dist/chunk-MSMABD52.mjs +72 -0
- package/dist/chunk-MTGPR7WY.mjs +142 -0
- package/dist/chunk-MTMKXMB3.mjs +496 -0
- package/dist/chunk-MWRADLNP.mjs +86 -0
- package/dist/chunk-N65TF5SP.mjs +184 -0
- package/dist/chunk-NCBAWY7A.mjs +139 -0
- package/dist/chunk-ND223BOF.mjs +256 -0
- package/dist/chunk-NGJKJ4R2.mjs +184 -0
- package/dist/chunk-NISGA2YZ.mjs +55 -0
- package/dist/chunk-NM6PHRGO.mjs +263 -0
- package/dist/chunk-NMMHN5LB.mjs +579 -0
- package/dist/chunk-NNKU4OZY.mjs +147 -0
- package/dist/chunk-NNZUZLG3.mjs +416 -0
- package/dist/chunk-NOLYW3V4.mjs +140 -0
- package/dist/chunk-NYEWIYVQ.mjs +86 -0
- package/dist/chunk-NZJJ7FRK.mjs +339 -0
- package/dist/chunk-O77KTDMH.mjs +44 -0
- package/dist/chunk-OALSL7C2.mjs +212 -0
- package/dist/chunk-OGJSTE4A.mjs +86 -0
- package/dist/chunk-OHIHIQAS.mjs +102 -0
- package/dist/chunk-OJJADMUB.mjs +71 -0
- package/dist/chunk-OMFDQURC.mjs +84 -0
- package/dist/chunk-ORRPH43K.mjs +127 -0
- package/dist/chunk-OXO3HVCT.mjs +124 -0
- package/dist/chunk-P4IRDGB4.mjs +43 -0
- package/dist/chunk-PD42OYFT.mjs +150 -0
- package/dist/chunk-PJ62NB7Z.mjs +319 -0
- package/dist/chunk-PL26CDZN.mjs +97 -0
- package/dist/chunk-PM2IUGNR.mjs +29 -0
- package/dist/chunk-PO5JZQVN.mjs +111 -0
- package/dist/chunk-PQR6WIIY.mjs +348 -0
- package/dist/chunk-PS6PZL5W.mjs +86 -0
- package/dist/chunk-PTBV5DCB.mjs +97 -0
- package/dist/chunk-PXZCOEZ6.mjs +184 -0
- package/dist/chunk-PYYXC7US.mjs +76 -0
- package/dist/chunk-Q4W4ODBP.mjs +319 -0
- package/dist/chunk-QAJ4C5RT.mjs +263 -0
- package/dist/chunk-QDCFQF6J.mjs +36 -0
- package/dist/chunk-QDNFJVVE.mjs +70 -0
- package/dist/chunk-QG7OB5MD.mjs +86 -0
- package/dist/chunk-QM7TE5C3.mjs +97 -0
- package/dist/chunk-QRQG2BI2.mjs +67 -0
- package/dist/chunk-QXJNV5EJ.mjs +110 -0
- package/dist/chunk-QYAZXDXI.mjs +142 -0
- package/dist/chunk-RCP27MRC.mjs +33 -0
- package/dist/chunk-RGLEJWLU.mjs +173 -0
- package/dist/chunk-RIXU6NZ2.mjs +122 -0
- package/dist/chunk-RNDHAIPS.mjs +64 -0
- package/dist/chunk-RTSLRXJC.mjs +122 -0
- package/dist/chunk-RWFKZ3DF.mjs +413 -0
- package/dist/chunk-RWZ3ORIM.mjs +136 -0
- package/dist/chunk-RXHJYGSJ.mjs +53 -0
- package/dist/chunk-SCOVKXZ7.mjs +223 -0
- package/dist/chunk-SGIJ36LI.mjs +259 -0
- package/dist/chunk-SHYMRCLT.mjs +221 -0
- package/dist/chunk-SQVCCSNN.mjs +41 -0
- package/dist/chunk-SU26BEIK.mjs +86 -0
- package/dist/chunk-SW6KNICI.mjs +52 -0
- package/dist/chunk-SY6DVJKB.mjs +184 -0
- package/dist/chunk-T23OBCRC.mjs +295 -0
- package/dist/chunk-T2NSVWBH.mjs +77 -0
- package/dist/chunk-T3PPEX64.mjs +164 -0
- package/dist/chunk-TDQUAKUL.mjs +64 -0
- package/dist/chunk-TE5IC7IP.mjs +36 -0
- package/dist/chunk-TKASBGF7.mjs +62 -0
- package/dist/chunk-TMDZALIN.mjs +110 -0
- package/dist/chunk-TU4VVM34.mjs +23 -0
- package/dist/chunk-U2WETRQJ.mjs +86 -0
- package/dist/chunk-U3RZV7XO.mjs +58 -0
- package/dist/chunk-USHLLE7C.mjs +137 -0
- package/dist/chunk-UU6LVKA3.mjs +112 -0
- package/dist/chunk-UXODHQZH.mjs +41 -0
- package/dist/chunk-V37YOE4P.mjs +184 -0
- package/dist/chunk-V6QVJWJR.mjs +86 -0
- package/dist/chunk-V6T5VMWD.mjs +26 -0
- package/dist/chunk-V72EJZDX.mjs +137 -0
- package/dist/chunk-V7LPVPGH.mjs +305 -0
- package/dist/chunk-VESIRBN4.mjs +263 -0
- package/dist/chunk-VGKL2ALO.mjs +184 -0
- package/dist/chunk-VPZEDAAB.mjs +184 -0
- package/dist/chunk-VQHHSD7C.mjs +97 -0
- package/dist/chunk-VZPN7FNH.mjs +308 -0
- package/dist/chunk-WB5BPM5Q.mjs +55 -0
- package/dist/chunk-WFONGZGK.mjs +42 -0
- package/dist/chunk-WKZ2ZIPO.mjs +112 -0
- package/dist/chunk-WVRHFGGB.mjs +97 -0
- package/dist/chunk-WYSHH4LR.mjs +141 -0
- package/dist/chunk-WZVY7DA6.mjs +44 -0
- package/dist/chunk-X3GPLJGD.mjs +152 -0
- package/dist/chunk-X77DFNE3.mjs +136 -0
- package/dist/chunk-XRLFLKHG.mjs +14 -0
- package/dist/chunk-XTDZQD4A.mjs +110 -0
- package/dist/chunk-XTFNK6PX.mjs +220 -0
- package/dist/chunk-XXCBJJZE.mjs +88 -0
- package/dist/chunk-Y3PX242G.mjs +225 -0
- package/dist/chunk-Y57QWXS4.mjs +122 -0
- package/dist/chunk-YKP7JHV2.mjs +102 -0
- package/dist/chunk-YRCBBEPB.mjs +142 -0
- package/dist/chunk-YSKZR66G.mjs +102 -0
- package/dist/chunk-YUDOACNS.mjs +184 -0
- package/dist/chunk-YVNZMBZ6.mjs +501 -0
- package/dist/chunk-YWE5AILJ.mjs +137 -0
- package/dist/chunk-YYER5QOG.mjs +44 -0
- package/dist/chunk-Z6LVSACJ.mjs +86 -0
- package/dist/chunk-ZFLKX6WD.mjs +97 -0
- package/dist/chunk-ZGMM6IPQ.mjs +79 -0
- package/dist/chunk-ZHNFS3MK.mjs +56 -0
- package/dist/chunk-ZHRQQZ4X.mjs +102 -0
- package/dist/chunk-ZJCAKCMN.mjs +89 -0
- package/dist/chunk-ZKKBIQBA.mjs +413 -0
- package/dist/chunk-ZMIMAMO2.mjs +14 -0
- package/dist/chunk-ZR53XY37.mjs +499 -0
- package/dist/chunk-ZR6MFTT7.mjs +142 -0
- package/dist/chunk-ZVFZIZM2.mjs +150 -0
- package/dist/index.d.mts +22 -4
- package/dist/index.d.ts +22 -4
- package/dist/index.js +46 -10
- package/dist/index.mjs +70 -32
- package/package.json +7 -7
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ErrorCodes,
|
|
3
|
+
FluxerError
|
|
4
|
+
} from "./chunk-PU73YRKJ.mjs";
|
|
5
|
+
import {
|
|
6
|
+
Events
|
|
7
|
+
} from "./chunk-AH7KYH2Z.mjs";
|
|
8
|
+
import {
|
|
9
|
+
buildSendBody,
|
|
10
|
+
resolveMessageFiles
|
|
11
|
+
} from "./chunk-VJDH54HJ.mjs";
|
|
12
|
+
import {
|
|
13
|
+
Base
|
|
14
|
+
} from "./chunk-XNS4O6QJ.mjs";
|
|
15
|
+
|
|
16
|
+
// src/client/MessageManager.ts
|
|
17
|
+
import { Routes } from "@fluxerjs/types";
|
|
18
|
+
import { FluxerAPIError, RateLimitError } from "@fluxerjs/rest";
|
|
19
|
+
var MessageManager = class {
|
|
20
|
+
constructor(client, channelId) {
|
|
21
|
+
this.client = client;
|
|
22
|
+
this.channelId = channelId;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Fetch a message by ID from this channel.
|
|
26
|
+
* @param messageId - Snowflake of the message
|
|
27
|
+
* @returns The message
|
|
28
|
+
* @throws FluxerError with MESSAGE_NOT_FOUND if the message does not exist
|
|
29
|
+
*/
|
|
30
|
+
async fetch(messageId) {
|
|
31
|
+
try {
|
|
32
|
+
const { Message } = await import("./Message-QNWAPT55.mjs");
|
|
33
|
+
const data = await this.client.rest.get(
|
|
34
|
+
Routes.channelMessage(this.channelId, messageId)
|
|
35
|
+
);
|
|
36
|
+
return new Message(this.client, data);
|
|
37
|
+
} catch (err) {
|
|
38
|
+
if (err instanceof RateLimitError) throw err;
|
|
39
|
+
if (err instanceof FluxerAPIError && err.statusCode === 404) {
|
|
40
|
+
throw new FluxerError(`Message ${messageId} not found in channel ${this.channelId}`, {
|
|
41
|
+
code: ErrorCodes.MessageNotFound,
|
|
42
|
+
cause: err
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
throw err instanceof FluxerError ? err : new FluxerError(String(err), { cause: err });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// src/util/MessageCollector.ts
|
|
51
|
+
import { EventEmitter } from "events";
|
|
52
|
+
import { Collection } from "@fluxerjs/collection";
|
|
53
|
+
var MessageCollector = class extends EventEmitter {
|
|
54
|
+
client;
|
|
55
|
+
channelId;
|
|
56
|
+
options;
|
|
57
|
+
collected = new Collection();
|
|
58
|
+
_timeout = null;
|
|
59
|
+
_ended = false;
|
|
60
|
+
_listener;
|
|
61
|
+
constructor(client, channelId, options = {}) {
|
|
62
|
+
super();
|
|
63
|
+
this.client = client;
|
|
64
|
+
this.channelId = channelId;
|
|
65
|
+
this.options = {
|
|
66
|
+
filter: options.filter ?? (() => true),
|
|
67
|
+
time: options.time ?? 0,
|
|
68
|
+
max: options.max ?? 0
|
|
69
|
+
};
|
|
70
|
+
this._listener = (message) => {
|
|
71
|
+
if (this._ended || message.channelId !== this.channelId) return;
|
|
72
|
+
if (!this.options.filter(message)) return;
|
|
73
|
+
this.collected.set(message.id, message);
|
|
74
|
+
this.emit("collect", message);
|
|
75
|
+
if (this.options.max > 0 && this.collected.size >= this.options.max) {
|
|
76
|
+
this.stop("limit");
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
this.client.on(Events.MessageCreate, this._listener);
|
|
80
|
+
if (this.options.time > 0) {
|
|
81
|
+
this._timeout = setTimeout(() => this.stop("time"), this.options.time);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
stop(reason = "user") {
|
|
85
|
+
if (this._ended) return;
|
|
86
|
+
this._ended = true;
|
|
87
|
+
this.client.off(Events.MessageCreate, this._listener);
|
|
88
|
+
if (this._timeout) {
|
|
89
|
+
clearTimeout(this._timeout);
|
|
90
|
+
this._timeout = null;
|
|
91
|
+
}
|
|
92
|
+
this.emit("end", this.collected, reason);
|
|
93
|
+
}
|
|
94
|
+
on(event, listener) {
|
|
95
|
+
return super.on(event, listener);
|
|
96
|
+
}
|
|
97
|
+
emit(event, ...args) {
|
|
98
|
+
return super.emit(event, ...args);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
// src/structures/Channel.ts
|
|
103
|
+
import { ChannelType, Routes as Routes2 } from "@fluxerjs/types";
|
|
104
|
+
import { emitDeprecationWarning } from "@fluxerjs/util";
|
|
105
|
+
var Channel = class _Channel extends Base {
|
|
106
|
+
/** Whether this channel has a send method (TextChannel, DMChannel). */
|
|
107
|
+
isSendable() {
|
|
108
|
+
return "send" in this;
|
|
109
|
+
}
|
|
110
|
+
/** Whether this channel is a DM or Group DM. */
|
|
111
|
+
isDM() {
|
|
112
|
+
return this.type === ChannelType.DM || this.type === ChannelType.GroupDM;
|
|
113
|
+
}
|
|
114
|
+
/** Whether this channel is voice-based (VoiceChannel). */
|
|
115
|
+
isVoice() {
|
|
116
|
+
return "bitrate" in this;
|
|
117
|
+
}
|
|
118
|
+
/** Create a DM channel from API data (type DM or GroupDM). */
|
|
119
|
+
static createDM(client, data) {
|
|
120
|
+
return new DMChannel(client, data);
|
|
121
|
+
}
|
|
122
|
+
client;
|
|
123
|
+
id;
|
|
124
|
+
type;
|
|
125
|
+
/** Channel name. Guild channels and Group DMs have names; 1:1 DMs are typically null. */
|
|
126
|
+
name;
|
|
127
|
+
/** Channel icon hash (Group DMs). Null if none. */
|
|
128
|
+
icon;
|
|
129
|
+
/** ISO timestamp when the last message was pinned. Null if never pinned. */
|
|
130
|
+
lastPinTimestamp;
|
|
131
|
+
/** @param data - API channel from GET /channels/{id} or GET /guilds/{id}/channels */
|
|
132
|
+
constructor(client, data) {
|
|
133
|
+
super();
|
|
134
|
+
this.client = client;
|
|
135
|
+
this.id = data.id;
|
|
136
|
+
this.type = data.type;
|
|
137
|
+
this.name = data.name ?? null;
|
|
138
|
+
this.icon = data.icon ?? null;
|
|
139
|
+
this.lastPinTimestamp = data.last_pin_timestamp ?? null;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Create the appropriate channel subclass from API data.
|
|
143
|
+
* @param client - The client instance
|
|
144
|
+
* @param data - Channel data from the API
|
|
145
|
+
*/
|
|
146
|
+
static from(client, data) {
|
|
147
|
+
const type = data.type ?? 0;
|
|
148
|
+
if (type === ChannelType.GuildText) return new TextChannel(client, data);
|
|
149
|
+
if (type === ChannelType.GuildCategory) return new CategoryChannel(client, data);
|
|
150
|
+
if (type === ChannelType.GuildVoice) return new VoiceChannel(client, data);
|
|
151
|
+
if (type === ChannelType.GuildLink || type === ChannelType.GuildLinkExtended)
|
|
152
|
+
return new LinkChannel(client, data);
|
|
153
|
+
return new GuildChannel(client, data);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Create a channel from API data, including DM and GroupDM.
|
|
157
|
+
* Used by ChannelManager.fetch() for GET /channels/{id}.
|
|
158
|
+
*/
|
|
159
|
+
static fromOrCreate(client, data) {
|
|
160
|
+
const type = data.type ?? 0;
|
|
161
|
+
if (type === ChannelType.DM || type === ChannelType.GroupDM)
|
|
162
|
+
return _Channel.createDM(client, data);
|
|
163
|
+
return _Channel.from(client, data);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Bulk delete messages. Requires Manage Messages permission.
|
|
167
|
+
* @param messageIds - Array of message IDs to delete (2–100)
|
|
168
|
+
*/
|
|
169
|
+
async bulkDeleteMessages(messageIds) {
|
|
170
|
+
await this.client.rest.post(Routes2.channelBulkDelete(this.id), {
|
|
171
|
+
body: { message_ids: messageIds },
|
|
172
|
+
auth: true
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Send a typing indicator to the channel. Lasts ~10 seconds.
|
|
177
|
+
*/
|
|
178
|
+
async sendTyping() {
|
|
179
|
+
await this.client.rest.post(Routes2.channelTyping(this.id), { auth: true });
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
var GuildChannel = class extends Channel {
|
|
183
|
+
guildId;
|
|
184
|
+
name;
|
|
185
|
+
position;
|
|
186
|
+
parentId;
|
|
187
|
+
/** Permission overwrites for roles and members. */
|
|
188
|
+
permissionOverwrites;
|
|
189
|
+
constructor(client, data) {
|
|
190
|
+
super(client, data);
|
|
191
|
+
this.guildId = data.guild_id ?? "";
|
|
192
|
+
this.name = data.name ?? null;
|
|
193
|
+
this.position = data.position;
|
|
194
|
+
this.parentId = data.parent_id ?? null;
|
|
195
|
+
this.permissionOverwrites = data.permission_overwrites ?? [];
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Create a webhook in this channel.
|
|
199
|
+
* @param options - Webhook name and optional avatar URL
|
|
200
|
+
* @returns The webhook with token (required for send()). Requires Manage Webhooks permission.
|
|
201
|
+
*/
|
|
202
|
+
async createWebhook(options) {
|
|
203
|
+
const { Webhook } = await import("./Webhook-EARQN5EG.mjs");
|
|
204
|
+
const data = await this.client.rest.post(Routes2.channelWebhooks(this.id), {
|
|
205
|
+
body: options,
|
|
206
|
+
auth: true
|
|
207
|
+
});
|
|
208
|
+
return new Webhook(this.client, data);
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Fetch all webhooks in this channel.
|
|
212
|
+
* @returns Webhooks (includes token when listing from channel; can send via send())
|
|
213
|
+
*/
|
|
214
|
+
async fetchWebhooks() {
|
|
215
|
+
const { Webhook } = await import("./Webhook-EARQN5EG.mjs");
|
|
216
|
+
const data = await this.client.rest.get(Routes2.channelWebhooks(this.id));
|
|
217
|
+
const list = Array.isArray(data) ? data : Object.values(data ?? {});
|
|
218
|
+
return list.map((w) => new Webhook(this.client, w));
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Create an invite for this channel.
|
|
222
|
+
* @param options - max_uses (0–100), max_age (0–604800 seconds), unique, temporary
|
|
223
|
+
* Requires Create Instant Invite permission.
|
|
224
|
+
*/
|
|
225
|
+
async createInvite(options) {
|
|
226
|
+
const { Invite } = await import("./Invite-UM5BU5A6.mjs");
|
|
227
|
+
const body = {};
|
|
228
|
+
if (options?.max_uses != null) body.max_uses = options.max_uses;
|
|
229
|
+
if (options?.max_age != null) body.max_age = options.max_age;
|
|
230
|
+
if (options?.unique != null) body.unique = options.unique;
|
|
231
|
+
if (options?.temporary != null) body.temporary = options.temporary;
|
|
232
|
+
const data = await this.client.rest.post(Routes2.channelInvites(this.id), {
|
|
233
|
+
body: Object.keys(body).length ? body : void 0,
|
|
234
|
+
auth: true
|
|
235
|
+
});
|
|
236
|
+
return new Invite(this.client, data);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Fetch invites for this channel.
|
|
240
|
+
* Requires Manage Channel permission.
|
|
241
|
+
*/
|
|
242
|
+
async fetchInvites() {
|
|
243
|
+
const { Invite } = await import("./Invite-UM5BU5A6.mjs");
|
|
244
|
+
const data = await this.client.rest.get(Routes2.channelInvites(this.id));
|
|
245
|
+
const list = Array.isArray(data) ? data : Object.values(data ?? {});
|
|
246
|
+
return list.map((i) => new Invite(this.client, i));
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Set or update a permission overwrite. PUT /channels/{id}/permissions/{overwriteId}.
|
|
250
|
+
* @param overwriteId - Role or member ID
|
|
251
|
+
* @param options - type (0=role, 1=member), allow, deny (permission bitfields)
|
|
252
|
+
*/
|
|
253
|
+
async editPermission(overwriteId, options) {
|
|
254
|
+
await this.client.rest.put(Routes2.channelPermission(this.id, overwriteId), {
|
|
255
|
+
body: options,
|
|
256
|
+
auth: true
|
|
257
|
+
});
|
|
258
|
+
const idx = this.permissionOverwrites.findIndex((o) => o.id === overwriteId);
|
|
259
|
+
const entry = {
|
|
260
|
+
id: overwriteId,
|
|
261
|
+
type: options.type,
|
|
262
|
+
allow: options.allow ?? "0",
|
|
263
|
+
deny: options.deny ?? "0"
|
|
264
|
+
};
|
|
265
|
+
if (idx >= 0) this.permissionOverwrites[idx] = entry;
|
|
266
|
+
else this.permissionOverwrites.push(entry);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Remove a permission overwrite. DELETE /channels/{id}/permissions/{overwriteId}.
|
|
270
|
+
*/
|
|
271
|
+
async deletePermission(overwriteId) {
|
|
272
|
+
await this.client.rest.delete(Routes2.channelPermission(this.id, overwriteId), { auth: true });
|
|
273
|
+
const idx = this.permissionOverwrites.findIndex((o) => o.id === overwriteId);
|
|
274
|
+
if (idx >= 0) this.permissionOverwrites.splice(idx, 1);
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Edit this channel. PATCH /channels/{id}.
|
|
278
|
+
* Requires Manage Channel permission.
|
|
279
|
+
*/
|
|
280
|
+
async edit(options) {
|
|
281
|
+
const data = await this.client.rest.patch(Routes2.channel(this.id), {
|
|
282
|
+
body: options,
|
|
283
|
+
auth: true
|
|
284
|
+
});
|
|
285
|
+
this.name = data.name ?? this.name;
|
|
286
|
+
this.parentId = data.parent_id ?? this.parentId;
|
|
287
|
+
this.permissionOverwrites = data.permission_overwrites ?? this.permissionOverwrites;
|
|
288
|
+
const self = this;
|
|
289
|
+
if ("topic" in self && "topic" in data) self.topic = data.topic ?? null;
|
|
290
|
+
if ("nsfw" in self && "nsfw" in data) self.nsfw = data.nsfw ?? false;
|
|
291
|
+
if ("rate_limit_per_user" in data) self.rateLimitPerUser = data.rate_limit_per_user ?? 0;
|
|
292
|
+
if ("bitrate" in self && "bitrate" in data) self.bitrate = data.bitrate ?? null;
|
|
293
|
+
if ("user_limit" in data) self.userLimit = data.user_limit ?? null;
|
|
294
|
+
if ("rtc_region" in data) self.rtcRegion = data.rtc_region ?? null;
|
|
295
|
+
return this;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Delete this channel. Requires Manage Channel permission.
|
|
299
|
+
* @param options - silent: if true, does not send a system message (default false)
|
|
300
|
+
*/
|
|
301
|
+
async delete(options) {
|
|
302
|
+
const url = Routes2.channel(this.id) + (options?.silent ? "?silent=true" : "");
|
|
303
|
+
await this.client.rest.delete(url, { auth: true });
|
|
304
|
+
this.client.channels.delete(this.id);
|
|
305
|
+
const guild = this.client.guilds.get(this.guildId);
|
|
306
|
+
if (guild) guild.channels.delete(this.id);
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
var TextChannel = class extends GuildChannel {
|
|
310
|
+
topic;
|
|
311
|
+
nsfw;
|
|
312
|
+
rateLimitPerUser;
|
|
313
|
+
lastMessageId;
|
|
314
|
+
constructor(client, data) {
|
|
315
|
+
super(client, data);
|
|
316
|
+
this.topic = data.topic ?? null;
|
|
317
|
+
this.nsfw = data.nsfw ?? false;
|
|
318
|
+
this.rateLimitPerUser = data.rate_limit_per_user ?? 0;
|
|
319
|
+
this.lastMessageId = data.last_message_id ?? null;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Send a message to this channel.
|
|
323
|
+
* @param options - Text content or object with content, embeds, and/or files
|
|
324
|
+
*/
|
|
325
|
+
async send(options) {
|
|
326
|
+
const opts = typeof options === "string" ? { content: options } : options;
|
|
327
|
+
const body = buildSendBody(options);
|
|
328
|
+
const { Message } = await import("./Message-QNWAPT55.mjs");
|
|
329
|
+
const files = opts.files?.length ? await resolveMessageFiles(opts.files) : void 0;
|
|
330
|
+
const postOptions = files?.length ? { body, files } : { body };
|
|
331
|
+
const data = await this.client.rest.post(Routes2.channelMessages(this.id), postOptions);
|
|
332
|
+
return new Message(this.client, data);
|
|
333
|
+
}
|
|
334
|
+
/** Message manager for this channel. Use channel.messages.fetch(messageId). */
|
|
335
|
+
get messages() {
|
|
336
|
+
return new MessageManager(this.client, this.id);
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Create a message collector for this channel.
|
|
340
|
+
* Collects messages matching the filter until time expires or max is reached.
|
|
341
|
+
* @param options - Filter, time (ms), and max count
|
|
342
|
+
* @example
|
|
343
|
+
* const collector = channel.createMessageCollector({ filter: m => m.author.id === userId, time: 10000 });
|
|
344
|
+
* collector.on('collect', m => console.log(m.content));
|
|
345
|
+
* collector.on('end', (collected, reason) => { ... });
|
|
346
|
+
*/
|
|
347
|
+
createMessageCollector(options) {
|
|
348
|
+
return new MessageCollector(this.client, this.id, options);
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Fetch pinned messages in this channel.
|
|
352
|
+
* @returns Pinned messages
|
|
353
|
+
*/
|
|
354
|
+
async fetchPinnedMessages() {
|
|
355
|
+
const { Message } = await import("./Message-QNWAPT55.mjs");
|
|
356
|
+
const data = await this.client.rest.get(Routes2.channelPins(this.id));
|
|
357
|
+
const list = Array.isArray(data) ? data : data?.items ?? [];
|
|
358
|
+
return list.map((item) => {
|
|
359
|
+
const msg = typeof item === "object" && item && "message" in item ? item.message : item;
|
|
360
|
+
return new Message(this.client, msg);
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Fetch a message by ID from this channel.
|
|
365
|
+
* @param messageId - Snowflake of the message
|
|
366
|
+
* @returns The message, or null if not found
|
|
367
|
+
* @deprecated Use channel.messages.fetch(messageId) instead.
|
|
368
|
+
*/
|
|
369
|
+
async fetchMessage(messageId) {
|
|
370
|
+
emitDeprecationWarning(
|
|
371
|
+
"Channel.fetchMessage()",
|
|
372
|
+
"Use channel.messages.fetch(messageId) instead."
|
|
373
|
+
);
|
|
374
|
+
return this.client.channels.fetchMessage(this.id, messageId);
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
var CategoryChannel = class extends GuildChannel {
|
|
378
|
+
};
|
|
379
|
+
var VoiceChannel = class extends GuildChannel {
|
|
380
|
+
bitrate;
|
|
381
|
+
userLimit;
|
|
382
|
+
rtcRegion;
|
|
383
|
+
constructor(client, data) {
|
|
384
|
+
super(client, data);
|
|
385
|
+
this.bitrate = data.bitrate ?? null;
|
|
386
|
+
this.userLimit = data.user_limit ?? null;
|
|
387
|
+
this.rtcRegion = data.rtc_region ?? null;
|
|
388
|
+
}
|
|
389
|
+
};
|
|
390
|
+
var LinkChannel = class extends GuildChannel {
|
|
391
|
+
url;
|
|
392
|
+
constructor(client, data) {
|
|
393
|
+
super(client, data);
|
|
394
|
+
this.url = data.url ?? null;
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
var DMChannel = class extends Channel {
|
|
398
|
+
lastMessageId;
|
|
399
|
+
/** Group DM creator ID. Null for 1:1 DMs. */
|
|
400
|
+
ownerId;
|
|
401
|
+
/** Group DM recipients as User objects. Empty for 1:1 DMs. */
|
|
402
|
+
recipients;
|
|
403
|
+
/** Group DM member display names (userId -> nickname). */
|
|
404
|
+
nicks;
|
|
405
|
+
constructor(client, data) {
|
|
406
|
+
super(client, data);
|
|
407
|
+
this.lastMessageId = data.last_message_id ?? null;
|
|
408
|
+
this.ownerId = data.owner_id ?? null;
|
|
409
|
+
this.recipients = (data.recipients ?? []).map(
|
|
410
|
+
(u) => client.getOrCreateUser(u)
|
|
411
|
+
);
|
|
412
|
+
this.nicks = data.nicks ?? {};
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Send a message to this DM channel.
|
|
416
|
+
* @param options - Text content or object with content, embeds, and/or files
|
|
417
|
+
*/
|
|
418
|
+
async send(options) {
|
|
419
|
+
const opts = typeof options === "string" ? { content: options } : options;
|
|
420
|
+
const body = buildSendBody(options);
|
|
421
|
+
const { Message } = await import("./Message-QNWAPT55.mjs");
|
|
422
|
+
const files = opts.files?.length ? await resolveMessageFiles(opts.files) : void 0;
|
|
423
|
+
const postOptions = files?.length ? { body, files } : { body };
|
|
424
|
+
const data = await this.client.rest.post(Routes2.channelMessages(this.id), postOptions);
|
|
425
|
+
return new Message(this.client, data);
|
|
426
|
+
}
|
|
427
|
+
/** Message manager for this channel. Use channel.messages.fetch(messageId). */
|
|
428
|
+
get messages() {
|
|
429
|
+
return new MessageManager(this.client, this.id);
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Create a message collector for this DM channel.
|
|
433
|
+
* @param options - Filter, time (ms), and max count
|
|
434
|
+
*/
|
|
435
|
+
createMessageCollector(options) {
|
|
436
|
+
return new MessageCollector(this.client, this.id, options);
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Fetch pinned messages in this DM channel.
|
|
440
|
+
* @returns Pinned messages
|
|
441
|
+
*/
|
|
442
|
+
async fetchPinnedMessages() {
|
|
443
|
+
const { Message } = await import("./Message-QNWAPT55.mjs");
|
|
444
|
+
const data = await this.client.rest.get(Routes2.channelPins(this.id));
|
|
445
|
+
const list = Array.isArray(data) ? data : data?.items ?? [];
|
|
446
|
+
return list.map((item) => {
|
|
447
|
+
const msg = typeof item === "object" && item && "message" in item ? item.message : item;
|
|
448
|
+
return new Message(this.client, msg);
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Fetch a message by ID from this DM channel.
|
|
453
|
+
* @param messageId - Snowflake of the message
|
|
454
|
+
* @returns The message, or null if not found
|
|
455
|
+
* @deprecated Use channel.messages.fetch(messageId) instead.
|
|
456
|
+
*/
|
|
457
|
+
async fetchMessage(messageId) {
|
|
458
|
+
emitDeprecationWarning(
|
|
459
|
+
"Channel.fetchMessage()",
|
|
460
|
+
"Use channel.messages.fetch(messageId) instead."
|
|
461
|
+
);
|
|
462
|
+
return this.client.channels.fetchMessage(this.id, messageId);
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Add a recipient to this Group DM. Requires Group DM (type GroupDM).
|
|
466
|
+
* PUT /channels/{id}/recipients/{userId}.
|
|
467
|
+
*/
|
|
468
|
+
async addRecipient(userId) {
|
|
469
|
+
await this.client.rest.put(Routes2.channelRecipient(this.id, userId), { auth: true });
|
|
470
|
+
const user = this.client.users.get(userId) ?? await this.client.users.fetch(userId);
|
|
471
|
+
if (user) this.recipients.push(user);
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Remove a recipient from this Group DM. Requires Group DM (type GroupDM).
|
|
475
|
+
* DELETE /channels/{id}/recipients/{userId}.
|
|
476
|
+
* @param options - silent: if true, does not send a system message (default false)
|
|
477
|
+
*/
|
|
478
|
+
async removeRecipient(userId, options) {
|
|
479
|
+
const url = Routes2.channelRecipient(this.id, userId) + (options?.silent ? "?silent=true" : "");
|
|
480
|
+
await this.client.rest.delete(url, { auth: true });
|
|
481
|
+
const idx = this.recipients.findIndex((u) => u.id === userId);
|
|
482
|
+
if (idx >= 0) this.recipients.splice(idx, 1);
|
|
483
|
+
}
|
|
484
|
+
};
|
|
485
|
+
|
|
486
|
+
export {
|
|
487
|
+
MessageManager,
|
|
488
|
+
MessageCollector,
|
|
489
|
+
Channel,
|
|
490
|
+
GuildChannel,
|
|
491
|
+
TextChannel,
|
|
492
|
+
CategoryChannel,
|
|
493
|
+
VoiceChannel,
|
|
494
|
+
LinkChannel,
|
|
495
|
+
DMChannel
|
|
496
|
+
};
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Base
|
|
3
|
+
} from "./chunk-XNS4O6QJ.mjs";
|
|
4
|
+
|
|
5
|
+
// src/structures/Message.ts
|
|
6
|
+
import { Collection } from "@fluxerjs/collection";
|
|
7
|
+
import { Routes } from "@fluxerjs/types";
|
|
8
|
+
import { EmbedBuilder } from "@fluxerjs/builders";
|
|
9
|
+
var Message = class _Message extends Base {
|
|
10
|
+
client;
|
|
11
|
+
id;
|
|
12
|
+
channelId;
|
|
13
|
+
guildId;
|
|
14
|
+
author;
|
|
15
|
+
content;
|
|
16
|
+
createdAt;
|
|
17
|
+
editedAt;
|
|
18
|
+
pinned;
|
|
19
|
+
attachments;
|
|
20
|
+
channel;
|
|
21
|
+
/** @param data - API message from POST/PATCH /channels/{id}/messages or gateway MESSAGE_CREATE */
|
|
22
|
+
constructor(client, data) {
|
|
23
|
+
super();
|
|
24
|
+
this.client = client;
|
|
25
|
+
this.id = data.id;
|
|
26
|
+
this.channelId = data.channel_id;
|
|
27
|
+
this.guildId = data.guild_id ?? null;
|
|
28
|
+
this.author = client.getOrCreateUser(data.author);
|
|
29
|
+
this.content = data.content;
|
|
30
|
+
this.createdAt = new Date(data.timestamp);
|
|
31
|
+
this.editedAt = data.edited_timestamp ? new Date(data.edited_timestamp) : null;
|
|
32
|
+
this.pinned = data.pinned;
|
|
33
|
+
this.attachments = new Collection();
|
|
34
|
+
for (const a of data.attachments ?? []) this.attachments.set(a.id, a);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Reply to this message.
|
|
38
|
+
* @param options - Text content or object with content and/or embeds
|
|
39
|
+
*/
|
|
40
|
+
async reply(options) {
|
|
41
|
+
const body = typeof options === "string" ? {
|
|
42
|
+
content: options,
|
|
43
|
+
message_reference: {
|
|
44
|
+
channel_id: this.channelId,
|
|
45
|
+
message_id: this.id,
|
|
46
|
+
guild_id: this.guildId ?? void 0
|
|
47
|
+
}
|
|
48
|
+
} : {
|
|
49
|
+
...options,
|
|
50
|
+
message_reference: {
|
|
51
|
+
channel_id: this.channelId,
|
|
52
|
+
message_id: this.id,
|
|
53
|
+
guild_id: this.guildId ?? void 0
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const data = await this.client.rest.post(Routes.channelMessages(this.channelId), { body });
|
|
57
|
+
return new _Message(this.client, data);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Edit this message. Only the author (or admins) can edit.
|
|
61
|
+
* @param options - New content and/or embeds
|
|
62
|
+
*/
|
|
63
|
+
async edit(options) {
|
|
64
|
+
const body = {};
|
|
65
|
+
if (options.content !== void 0) body.content = options.content;
|
|
66
|
+
if (options.embeds?.length) {
|
|
67
|
+
body.embeds = options.embeds.map((e) => e instanceof EmbedBuilder ? e.toJSON() : e);
|
|
68
|
+
}
|
|
69
|
+
const data = await this.client.rest.patch(Routes.channelMessage(this.channelId, this.id), {
|
|
70
|
+
body
|
|
71
|
+
});
|
|
72
|
+
return new _Message(this.client, data);
|
|
73
|
+
}
|
|
74
|
+
/** Delete this message. */
|
|
75
|
+
async delete() {
|
|
76
|
+
await this.client.rest.delete(Routes.channelMessage(this.channelId, this.id));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Format emoji for reaction API: unicode string or "name:id" for custom.
|
|
80
|
+
* For string resolution (e.g. :name:), use client.resolveEmoji; Message methods resolve automatically when guildId is available.
|
|
81
|
+
*/
|
|
82
|
+
static formatEmoji(emoji) {
|
|
83
|
+
if (typeof emoji === "string") return emoji;
|
|
84
|
+
return `${emoji.name}:${emoji.id}`;
|
|
85
|
+
}
|
|
86
|
+
resolveEmojiForReaction(emoji) {
|
|
87
|
+
return this.client.resolveEmoji(emoji, this.guildId);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Add a reaction to this message (as the bot).
|
|
91
|
+
* @param emoji - Unicode emoji, custom `{ name, id }`, `:name:`, `name:id`, or `<:name:id>`
|
|
92
|
+
*/
|
|
93
|
+
async react(emoji) {
|
|
94
|
+
const emojiStr = await this.resolveEmojiForReaction(emoji);
|
|
95
|
+
const route = `${Routes.channelMessageReaction(this.channelId, this.id, emojiStr)}/@me`;
|
|
96
|
+
await this.client.rest.put(route);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Remove the bot's reaction, or a specific user's reaction if userId is provided.
|
|
100
|
+
* @param emoji - Unicode emoji, custom `{ name, id }`, `:name:`, `name:id`, or `<:name:id>`
|
|
101
|
+
* @param userId - If provided, removes that user's reaction (requires moderator permissions)
|
|
102
|
+
*/
|
|
103
|
+
async removeReaction(emoji, userId) {
|
|
104
|
+
const emojiStr = await this.resolveEmojiForReaction(emoji);
|
|
105
|
+
const route = `${Routes.channelMessageReaction(this.channelId, this.id, emojiStr)}/${userId ?? "@me"}`;
|
|
106
|
+
await this.client.rest.delete(route);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Remove all reactions from this message.
|
|
110
|
+
* Requires moderator permissions.
|
|
111
|
+
*/
|
|
112
|
+
async removeAllReactions() {
|
|
113
|
+
await this.client.rest.delete(Routes.channelMessageReactions(this.channelId, this.id));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Remove all reactions of a specific emoji from this message.
|
|
117
|
+
* @param emoji - Unicode emoji, custom `{ name, id }`, `:name:`, `name:id`, or `<:name:id>`. Requires moderator permissions.
|
|
118
|
+
*/
|
|
119
|
+
async removeReactionEmoji(emoji) {
|
|
120
|
+
const emojiStr = await this.resolveEmojiForReaction(emoji);
|
|
121
|
+
await this.client.rest.delete(Routes.channelMessageReaction(this.channelId, this.id, emojiStr));
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
export {
|
|
126
|
+
Message
|
|
127
|
+
};
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CDN_URL
|
|
3
|
+
} from "./chunk-HQMYRYMY.mjs";
|
|
4
|
+
import {
|
|
5
|
+
Base
|
|
6
|
+
} from "./chunk-XNS4O6QJ.mjs";
|
|
7
|
+
|
|
8
|
+
// src/structures/User.ts
|
|
9
|
+
import { Routes } from "@fluxerjs/types";
|
|
10
|
+
var User = class extends Base {
|
|
11
|
+
client;
|
|
12
|
+
id;
|
|
13
|
+
username;
|
|
14
|
+
discriminator;
|
|
15
|
+
globalName;
|
|
16
|
+
avatar;
|
|
17
|
+
bot;
|
|
18
|
+
/** @param data - API user from message author, GET /users/{id}, or GET /users/@me */
|
|
19
|
+
constructor(client, data) {
|
|
20
|
+
super();
|
|
21
|
+
this.client = client;
|
|
22
|
+
this.id = data.id;
|
|
23
|
+
this.username = data.username;
|
|
24
|
+
this.discriminator = data.discriminator;
|
|
25
|
+
this.globalName = data.global_name ?? null;
|
|
26
|
+
this.avatar = data.avatar ?? null;
|
|
27
|
+
this.bot = !!data.bot;
|
|
28
|
+
}
|
|
29
|
+
/** Update mutable fields from fresh API data. Used by getOrCreateUser cache. */
|
|
30
|
+
_patch(data) {
|
|
31
|
+
this.username = data.username;
|
|
32
|
+
this.discriminator = data.discriminator;
|
|
33
|
+
this.globalName = data.global_name ?? null;
|
|
34
|
+
this.avatar = data.avatar ?? null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the URL for this user's avatar.
|
|
38
|
+
* @param options - Optional `size` and `extension` (default: `png`)
|
|
39
|
+
*/
|
|
40
|
+
avatarURL(options) {
|
|
41
|
+
if (!this.avatar) return null;
|
|
42
|
+
const ext = options?.extension ?? "png";
|
|
43
|
+
const size = options?.size ? `?size=${options.size}` : "";
|
|
44
|
+
return `${CDN_URL}/avatars/${this.id}/${this.avatar}.${ext}${size}`;
|
|
45
|
+
}
|
|
46
|
+
/** Get the avatar URL, or the default avatar if none set. */
|
|
47
|
+
displayAvatarURL(options) {
|
|
48
|
+
return this.avatarURL(options) ?? `${CDN_URL}/avatars/0/0.png`;
|
|
49
|
+
}
|
|
50
|
+
/** Returns a mention string (e.g. `<@123456>`). */
|
|
51
|
+
toString() {
|
|
52
|
+
return `<@${this.id}>`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create or get a DM channel with this user.
|
|
56
|
+
* Returns the DM channel; use {@link DMChannel.send} to send messages.
|
|
57
|
+
*/
|
|
58
|
+
async createDM() {
|
|
59
|
+
const { DMChannel: DMChannelClass } = await import("./Channel-MS2XLT5H.mjs");
|
|
60
|
+
const data = await this.client.rest.post(Routes.userMeChannels(), {
|
|
61
|
+
body: { recipient_id: this.id },
|
|
62
|
+
auth: true
|
|
63
|
+
});
|
|
64
|
+
return new DMChannelClass(this.client, data);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Send a DM to this user.
|
|
68
|
+
* Convenience method that creates the DM channel and sends the message.
|
|
69
|
+
*/
|
|
70
|
+
async send(options) {
|
|
71
|
+
const dm = await this.createDM();
|
|
72
|
+
return dm.send(options);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// src/client/ClientUser.ts
|
|
77
|
+
var ClientUser = class extends User {
|
|
78
|
+
constructor(client, data) {
|
|
79
|
+
super(client, { ...data });
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
export {
|
|
84
|
+
User,
|
|
85
|
+
ClientUser
|
|
86
|
+
};
|