{"_id":"@spatulox/discord-module","_rev":"31-caad0cdf96815949ea784e6dcdb351e5","name":"@spatulox/discord-module","dist-tags":{"latest":"0.11.1"},"versions":{"0.1.0":{"name":"@spatulox/discord-module","version":"0.1.0","keywords":["discordjs","discord","framwork","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.1.0","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"dist":{"shasum":"977628a84282b4ad80c2a4bf2861c793cc56c918","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.1.0.tgz","fileCount":6,"integrity":"sha512-5pt2BgWXad6NQRfEJ78NNVre+wcqIa+IKB4mxr0HsPIyOH5hzTYr1iOXq31LsDjPDuERSeECEtW5jjXOnCanWg==","signatures":[{"sig":"MEUCIESrwK2PrzYsjgxte15G0LXexsUL62rKOXbAgJc9rua+AiEA9DiA+vdLYRDw3rpdJN2WiGxhZW6BQQlGsoqrcwYydho=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26960},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"d91e982a70ea375e236b31509848d972622055f9","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","dependencies":{"discord.js":"^14.25.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.1.0_1773842827684_0.500032863009551","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@spatulox/discord-module","version":"0.2.0","keywords":["discordjs","discord","framwork","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.2.0","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"dist":{"shasum":"06f451f58f426b6a7b07dde3884de18b752c1df6","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.2.0.tgz","fileCount":6,"integrity":"sha512-duGWQrJtSresLZfoy1+epj923tj2o2yHsb+7JfCCj89XxCaQ3ZqS56tjRYp5SsuMcOkGq8biJ4XmQdUH2U9b3A==","signatures":[{"sig":"MEUCIQC7J3qMpGUjjI8HgX70g7PKfdVsNUEmwpXroZ5LzFyVaQIgHYMc/EWVUVsXrgWP+VxfszzCMSSOja4umXhpbQdDhkE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26868},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"a4c399e366d3b8a5959d9513aeb4d937c41179b6","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","dependencies":{"discord.js":"^14.25.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.2.0_1775641431565_0.40911627598376943","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@spatulox/discord-module","version":"0.2.1","keywords":["discordjs","discord","framwork","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.2.1","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"dist":{"shasum":"2154a34952b8e55290f4c01afc100a50091bfb56","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.2.1.tgz","fileCount":6,"integrity":"sha512-tGFV/vPjMIOq//PPc6O+jeNJSy5ord5IWblqctIQRilRo8/tKmh3BlobskIqE1JPOWXjx7JJZ02GKKjIy502Yw==","signatures":[{"sig":"MEQCID9kWKSQncjhAK6j0YyljumKJW+Z+YyYRJYrEmNhHZSWAiBnAvumyzFoiDjeCre4RJLbwQAbZEhElTxO55cy6bAXSA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39866},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"2a020847e1b67e4624d9629534ef618a615f333e","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","dependencies":{"discord.js":"^14.25.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.2.1_1775657101794_0.5854032195285828","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@spatulox/discord-module","version":"0.2.2","keywords":["discordjs","discord","framwork","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.2.2","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"dist":{"shasum":"6a5e341b967ac79a3d00b57737f729f9fd0f1594","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.2.2.tgz","fileCount":6,"integrity":"sha512-4WIGSwrCFWeyTXxgqsa5dBr2c4wL9MugbsCEWhEzrJKhy5z7xT8FEGij3shDGkLS6JcUsCdujkxpQ0T3HTl0Pg==","signatures":[{"sig":"MEQCIAL01A952zyjtZL0+IftPtuyOSYIPhsx0lhVVUXCwUzEAiBRIusEPJ6WK5T9g0Vd66gyNc94hD+YyYbZAKacf/ygZw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40104},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"29aa41b25d219cecacc8c004bf031fbd82169035","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","dependencies":{"discord.js":"^14.25.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.2.2_1775657712913_0.5873701916305536","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@spatulox/discord-module","version":"0.3.0","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.3.0","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"dist":{"shasum":"d7b89a48e425ed6495c38edca14e204a573a3cf6","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.3.0.tgz","fileCount":7,"integrity":"sha512-FV77reckGwbTwAq/YRy24oWZU6DMu2bwR+v7CbrPqWHRJcXu+qsKHzn8JICh+C7c8puotICfu9+GPKqOmN/cTQ==","signatures":[{"sig":"MEYCIQDTmbhAkaEvwFjkxnLXH0R1VrjyhHegE/gVWxm3674NUgIhAI4OqtTLDymzz4eSSe4KhcNHOfdNvvMaFOcQ2C3EkpDl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44630},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"18f1644b821b0be5301ce851e81326ee887c3b78","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","dependencies":{"discord.js":"^14.25.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.3.0_1776072955202_0.4127014430556062","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@spatulox/discord-module","version":"0.3.1","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.3.1","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"dist":{"shasum":"47d7d19631db56f14048d6048beedc30d3973b6b","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.3.1.tgz","fileCount":7,"integrity":"sha512-LIKBiyOWqw40+nuOmF7KkyI5DmauuGezpQH1bUHH8JL7aCHBpFozoACm6LY4ExvkSlWjX1DTKAvJTTLhHNvVUQ==","signatures":[{"sig":"MEQCICjzqxanrYuoxAfPPYb6R4DsrM8UJ0J+R4xGHsIhRZ8BAiBdUIyRQ6o3R1x5BPn43n/mfbQP1NqF0X93IFXfFfDVjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45665},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"1a2c6e8a54ba69669ace2cc171b24aaa778ff599","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","dependencies":{"discord.js":"^14.25.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.3.1_1776075017094_0.8262328461306723","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@spatulox/discord-module","version":"0.4.0","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.4.0","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"dist":{"shasum":"3c90b5d4e0e99c4a9d780ebce0e2670310ce2df7","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.4.0.tgz","fileCount":7,"integrity":"sha512-KvbdkAhoidjT3MT8KNLf893g+YuCwy827LVM4pnCNe75bmXTZLIbR5idMb6Cs+wf88ElWQ3wjCs92gu2qrW9Zg==","signatures":[{"sig":"MEUCIQCX9j7lA1W83zofN2EhwaJzyTiZb0mGMPZacuCBKLiRoQIgDZwA4hndOUrjrCP1Q/qdayvQR0WQB/YGwkz2YasnK3w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47757},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"bb5d3586fb2d7773a543f2c7c798695cf2e121c7","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.4.0_1776089479172_0.20056895942491515","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@spatulox/discord-module","version":"0.4.1","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.4.1","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"dist":{"shasum":"adcea1d30bd908abf90f7f3b841a01a5d9a34e6a","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.4.1.tgz","fileCount":7,"integrity":"sha512-2j+0EWumJqe8RJ7dZvZRSbMFTvDNjrAjTWaZTVFz3euQ3IwRLvb/2voXEfTdF2uuNeh4Nf0LOuITYYPBuF6oOg==","signatures":[{"sig":"MEUCICOS5JFyyVLtN0OzVP6oatgk6fq+3Pf+5VWClWKzuSG9AiEAiE7lOu6an1shFDGisvLdB+tBZ3xiAnaVhstF02LuiIU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48590},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"40fadc48a29f4b77c206f48ebaf8919828e7576c","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.4.1_1776168075508_0.5365146919383685","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@spatulox/discord-module","version":"0.5.0","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.5.0","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"dist":{"shasum":"99929e53038ffbd4649425cb1341be9607848d86","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.5.0.tgz","fileCount":8,"integrity":"sha512-19aJhwXQzh17tXbXhSfRD5X8Bzlwrm9BaIDrsV7y1dTvezJMzjlDgmz3FvYoUWhB6vB/+6wrW8/U8AJGmzJl1g==","signatures":[{"sig":"MEYCIQDYVeXjVGK6vYV5+dIcWfOpXR5UliygYQzTdrxzvmreCQIhAL+Fjvdr+ttTmykh+OcmSMfLrAlYltlJQlF9CH8Rkq1T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42437},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"fd48b99575d1ee4b28a013d6cf28fc6007302516","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"deprecated":"ModuleUI not exported","_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.5.0_1776171556526_0.07514924288594771","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@spatulox/discord-module","version":"0.5.1","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.5.1","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"dist":{"shasum":"e6bd9caafb3190283b120cf12a403f38daabc740","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.5.1.tgz","fileCount":8,"integrity":"sha512-ulJ31BK/j5OeE3DNtrh4SxzU9ONtJ4+t+VxuD6m4hk48rTMqwqRPyh4VT9zK+dHYwU1Ribx8XGPDSL8c/+6USQ==","signatures":[{"sig":"MEUCIQCgqzwQ99QOw5o8sMabn1UQu6fkRzuO7NVFGCH8SLYjFwIgDZkbAKMwICWMikr7aEOz2kHI0srOOkR8Y6k668ZjCbk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67247},"main":"dist/index.js","types":"./dist/index.d.ts","gitHead":"98e007ead5e780becb45bda5e824a7c8035d22bc","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.5.1_1776171819078_0.12142495443029522","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@spatulox/discord-module","version":"0.5.2","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.5.2","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"dist":{"shasum":"ef294426f30bdb55bf1395406ff285885b41f047","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.5.2.tgz","fileCount":8,"integrity":"sha512-s8H8QXwRjR1vm1tmA7LtPSYYTGLu2L30GGVK6JHhiIGwTvADyIBlU2yBza5tJKOYqhWV0KTiwpp5sfzgAWyIMw==","signatures":[{"sig":"MEUCIQCfTqA1L1Nm/I/v7EsvVT5kvs3Kp/x9LW69KtOr8eHSrwIgXd83e2qDM0+j37vvYB8WyKaE8oBMpPul/xUJ8vJSoP0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67495},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"00be4a604e637c2008105276f54695da733a744d","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.5.2_1776347381295_0.6078349246045793","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@spatulox/discord-module","version":"0.5.3","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.5.3","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"6019ea4a8b969949fd39ba789e55b7107aa9f0a7","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.5.3.tgz","fileCount":8,"integrity":"sha512-vBNXDWcSjYQKECSFztxqza4LdrWyxA+lD+9eMhVH9zUekGRARN7n6AeBmZJW1m2q/Tzq11neH2PXFcRTCUbAlA==","signatures":[{"sig":"MEUCIQDW2/efTrT2LSA4P8ZNAEjJ7QMtaC3IWO013gw5l9yNpAIgIYfB0b7n80qzT73diTJLV6M6nYf7N6r/pJBVSaN4O1A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67956},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"2aad9d13309268316231f18358739ade7baef517","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.5.3_1777363518528_0.33325567972320136","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@spatulox/discord-module","version":"0.6.0","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.6.0","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"cefff062bbcfd995117a93edbaad7e6b68684cc7","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.6.0.tgz","fileCount":8,"integrity":"sha512-62wl8iFjQWbhkxdUrP0jOSFWsOZT9xAik7VkGnzSfoMSUuRTAQ4MQ5dNgw7uZrJzDvaI1rAh1TfYeAzbn/BtPg==","signatures":[{"sig":"MEUCIESz8jJ45L7FFGJjvkaV1Hd6fol8eM1yc5K78E1NgSGGAiEAv1m/qORedgRiJsTR3L2D30yV7cVtuOtbRbwLZpj62Tk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67007},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"dc319437f25b15e31ce49270203f60ff2f938b65","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","dependencies":{"@spatulox/utils":"^0.1.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.6.0_1777377320461_0.562796781979835","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"@spatulox/discord-module","version":"0.6.1","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.6.1","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"cc5ba18a0fe26d8791f91333fb7bbb7bfa713b67","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.6.1.tgz","fileCount":7,"integrity":"sha512-5LDuW6nhzVC7nFnb9akuNYwkIiI3hPyFmcA9zxrpRpQbC+cPrADrlhIywyghSiAjAWbZ8T0cpICQQbXijdhZgw==","signatures":[{"sig":"MEUCIQDsab6Bu92+hFr2eymNSZP8equsCLmnxcBYS5WaHr2HMwIgBZpiDiZvToHpaPHn7UDJUXxtJy99Bdev9N6tzp/lWCg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66903},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"069119279a9c519dcc65fe60c25864807d6d5a55","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"10.9.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.6.1_1778952011491_0.31680151999814754","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@spatulox/discord-module","version":"0.7.0","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.7.0","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"4aa3e408f57093572bc8dc6c6d5bfe5a217a3161","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.7.0.tgz","fileCount":8,"integrity":"sha512-RQswiyNgTx7CFxUSxVCUu2r1lOqD34uFx9rm5fsCtArylNHJL5Q/zxnhlusi/hfDqhooOxoOLEAE1HQRvDx6NA==","signatures":[{"sig":"MEYCIQDCYjhFEXOtFtapi/tzPHo6G/obtHZc0NcvUv5xYQKJWQIhAJ3OpCFe1xmk5FZ4DUILtdYjC3KvAHkLoKkttjRnXqGh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":68849},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"989f496387bb3620d807ef95e6a84010c1c64436","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"10.9.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"23.10.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.7.0_1779283194519_0.7266832689749401","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@spatulox/discord-module","version":"0.8.0","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.8.0","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"cc67305bf747be33f3f23a067713de35fa62d23f","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.8.0.tgz","fileCount":9,"integrity":"sha512-rq06h6ozUAXLyYqSsvFZmuD0XU5qJ1UzTBjtdmPN72/8ZfImS3JsOuH6TyPD2d6rEnAzkVxHcAoWYYzW9L9EqQ==","signatures":[{"sig":"MEYCIQCTgp5VctpAfELRuYrEyxvLD0Qgdoq2ENGjXVvL8kM1BQIhANdBHTKi1V79y1lH45qDDdT2BWlo/hG6CuW0mqpN0ANa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76735},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"060ee9dec99f2c05c7b11123e32dae0db0e3671b","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.8.0_1779787913777_0.6925321759365379","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@spatulox/discord-module","version":"0.8.1","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.8.1","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"1e5abf3c410cc17ffaef41d279263bc5abcb8094","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.8.1.tgz","fileCount":9,"integrity":"sha512-sOLuQrlYbMXqqe8PemH7Rdx5xggEr2Gciqxmfbqkp6oIg5LbNjLy8/sm4D2VTDr7T7QKCi0flsrm+fvI+38WBg==","signatures":[{"sig":"MEYCIQDYMz/YILMg29lsEJId/QlPurXASYfqZTwbd4K7s10WrAIhAOBoJou7j/Uv88t23T4n1klPKbn4voazla+XnO7xghhC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77133},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"df009261dd2db53d20cf9edb9792830d92552730","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.8.1_1779788770102_0.43871105563299007","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"@spatulox/discord-module","version":"0.8.2","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.8.2","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"e17823de3247fd131d115385cb900d5a5c1164a4","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.8.2.tgz","fileCount":11,"integrity":"sha512-/HgTFRe0U91CWMhJB+yz9mftp1T1jZi12YM3VUR06FdMNal54LkMfjKZD1e2nMyR35v5Nv/APz4Gqxx5LQ3/BA==","signatures":[{"sig":"MEUCIQCFZauHYkIKeO/iwBi+Xaa+6S2f3aAFb/iVum6bCjeIbQIgX/nxCdeR78XlDdwhHOoDzmgw5wopLwEf5yszJhJP0Xw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77721},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"5f203442d44899f2853f7d86438b1a207769b7c5","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.8.2_1779792635240_0.3274468701052069","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@spatulox/discord-module","version":"0.9.0","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.9.0","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"6d7c0a32af79bd27d17673cda1a94e4b7222e9e9","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.9.0.tgz","fileCount":11,"integrity":"sha512-l5xG4TZthB+sdev30ege8UVkj/3aHpaQF4QhQEx0PhTZU+rfEm0M5jEiFY4HZ+riDBKWeJQed2bFaZQTgWn0YQ==","signatures":[{"sig":"MEUCIGoUvCpxeBfFEXp0u/cPCbZKJV5MwaQiXw4datrVyvkUAiEAmLGUpWyciCoX9naH9c/mSp2ShHTAwuGfW09BqVTN0rY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83773},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"8f5116850b39dfa7733ad5513092c68b9407e528","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"deprecated":"Broken version*","repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.9.0_1779880635345_0.6999139943810404","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@spatulox/discord-module","version":"0.9.1","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.9.1","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"fc15d2ee68d586a9b5ab86c3a49b02a55109b23d","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.9.1.tgz","fileCount":11,"integrity":"sha512-7yzK+Oi7X+HcmgVh+xGgRGR7kxc3V8bK6ABhK8JqFADxjHNzau/fi8cwNKpPQWrGEYXxwkuHGraJ1DlMxQB9qg==","signatures":[{"sig":"MEQCIHtfgaB9XOf1Sjob0h5D4z/Objl360XR8PJ57l5KKYOfAiBOKCvpt/19Js6E9TXWAknLZZCtUy0HDCSMJ5WfqT2HzA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81239},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"aa42cafb7f6c49db1d8305fca082248552c86f09","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"deprecated":"broken","repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.9.1_1779882021021_0.5064291093183038","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"@spatulox/discord-module","version":"0.9.2","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.9.2","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"ff1840c9743d4f7915c233cc8a766cd96baa2563","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.9.2.tgz","fileCount":11,"integrity":"sha512-E4EAGxi+TwKhBV+NX5yzFGRWsqgW6/PRfzN+wP4KtlZDiMiG+vV0kuD7x4K0OWAu+FfI8ajz0m9e7CCGx4rBfw==","signatures":[{"sig":"MEUCIF4Bf9dkO2I5PnVmbo+XdG6e5SkYHw6yFkGe+YlXb8/cAiEAhrnzY2ktVrBgHm1QFWxvDUI8csrzwmr579PLYrHLvzs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81517},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"9e7d641af5a67ead1c4f86e40295b9e8d0416f4a","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"deprecated":"broken","repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.9.2_1779882822869_0.019446145378760882","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"@spatulox/discord-module","version":"0.9.3","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.9.3","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"316ae0053220972cb542715e6187298ded624777","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.9.3.tgz","fileCount":11,"integrity":"sha512-2y37WMzOzr6H3MBvmxyIIYLZ69z40MQ6u3wCySj/AvWDYreX60/FidlL4NNZbJ70TsFOmxS3Sg+4653ngW8OjQ==","signatures":[{"sig":"MEYCIQCBf+z+AX54zQA816yC8ITYrns0dhUqXN5hTZ4FgMslbwIhAOXr2pzQOXuyPP1DrFDNEgXpFONu1s3oA2n8v0Ww5pol","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81617},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"ec7dce38afec87c08b37faf9d6418c160242c7ab","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.9.3_1779883059461_0.15227424631035835","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@spatulox/discord-module","version":"0.10.0","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.10.0","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"d2391fc1c5356bb78966ccda633e27ce5b2ebf0a","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.10.0.tgz","fileCount":11,"integrity":"sha512-TiAWKrriIUV2XXRLBVuwpBxZEriKOTHADLaxFPdP+Skvk8dqcMvOk+0pUd61c+M0PRsYafORMzAO6j5XFAAEEw==","signatures":[{"sig":"MEUCIQDMJpeV/fnn20qb5R8Q56JYObaHyS74E8+EP3aqFpl2bQIgamBzliqZ+h6KH3ZwKYnMSf8NfN5Vt/7XLHoAQGe1k98=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83622},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"84fd8feea65e98fd4672efb108de3042f614e711","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.10.0_1780563470099_0.6148934551102834","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@spatulox/discord-module","version":"0.10.1","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.10.1","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"ccc485be09a631961d5e3514ba3f045bb4c9c9b5","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.10.1.tgz","fileCount":11,"integrity":"sha512-BRil/ykO50knI+bZVBxyhgQABK/ahzskM6DLYH0s+iHG8v94Lt7atmkHndyERoigOo7wO4J24Lm/gtjwlAgFCQ==","signatures":[{"sig":"MEQCIDiDVqO4/N14ab4r15ZZ916n9EERu0+rLPHnf3z08ClVAiBqS9Hv68Qbd/E/iqqjI7ohhIvUpYkZe5I6lR91bXOHKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":83272},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"339b70a39334b4124a571891bf4a85f6565a5c7a","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.10.1_1780564312256_0.31610766815848135","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"@spatulox/discord-module","version":"0.10.2","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.10.2","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"96501f4c84a4aa415b2c2614f9518a25a15eefa1","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.10.2.tgz","fileCount":11,"integrity":"sha512-lw3Hz/oZaTjlceOYXzG9k80+O0hBSikppTSjeoOZW9QDKaOwXkJy1OCPTxRwwCjiuy7gFFJMSp+SbKjqvVxsvQ==","signatures":[{"sig":"MEYCIQC0Inxd8fZdg9jFrl1XyMlb9TFt5tkUmtGh0bqgw4MBKAIhALy+lSNzGZOyCbzgzX68gypvz1vSFJcNbZNnEyf9IGnX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":86861},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"d8d8b05ebace8214d4828eb8e7f427d2435f48af","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.10.2_1788351042955_0.896108035445961","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@spatulox/discord-module","version":"0.11.0","keywords":["discordjs","discord","framework","modules"],"author":{"name":"Spatulox"},"license":"MIT","_id":"@spatulox/discord-module@0.11.0","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"homepage":"https://github.com/spatulox-discord/discord-module#readme","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"1951ae68f5da7a64e9bfc34bf5c1b50f2f237191","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.11.0.tgz","fileCount":12,"integrity":"sha512-GsN4gnM93DG0MvH4k0AHmBIbRPef1N6RcUSHPbuGXCEK1f+6ehtP9WUDBmStIHKNQisCil/IWr+c16o8k1v6Zg==","signatures":[{"sig":"MEUCIANeXhcRWHUFaZeMWHoEpaKM/iiRdxwsNZdYIZt3fRf1AiEAgN5ac78nZMYKKQSoK/ZLoJEFd3SjFsI/RehFuG78b+A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGuSgBI+AKnBHEz5MaJNIPaJh9QiMUxmCpj3Cd92IDRcAiAdqbwVj2QuL1x6IByhkQXYSWdSM5HvRS1pBFa249uUmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":97607},"types":"./dist/index.d.ts","exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"f45dce28394ef6ab911b795327f5198ddbdb7686","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"tmp":"tmp/discord-module_0.11.0_1789988190160_0.42219566661023555","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"_id":"@spatulox/discord-module@0.11.1","bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"dist":{"shasum":"046fff614d811763d3ab60d3da1b675c427a2a00","tarball":"https://registry.npmjs.org/@spatulox/discord-module/-/discord-module-0.11.1.tgz","fileCount":12,"integrity":"sha512-e5YXHsdKglX6JAQfStMTuZROLmmCKB7WC4+oiheh9LtHs2DFbVQpw+HBE2MKQ4ktjbvupsrmaMgRcktSA5mIeA==","signatures":[{"sig":"MEQCIAkbbxDg39CftfIb8tswOb1isT+BZWX5k2FTWb/wJHb2AiBARSaKjnaOKaceLyLIF86CrZ1pXJpkWJkx9dF6E74Q6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBTKGDf5M7b96xkrBRS9qcODnQjYXOG5qI5GOG+dKJCJAiEAowwcjNxT1bg4kuIPTgqsi461JEl876KDQkp50hNgFQE="}],"unpackedSize":112657},"name":"@spatulox/discord-module","types":"./dist/index.d.ts","author":{"name":"Spatulox"},"exports":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"gitHead":"6daa20dc64ba7d7c658d5de5c33089316aa3a334","license":"MIT","scripts":{"dev":"npm run type-check && tsx  watch src/test/index.ts","build":"npm run type-check && rm -rf ./dist/ && tsup","major":"npm run build && npm version major","minor":"npm run build && npm version minor","patch":"npm run build && npm version patch","pub:major":"npm run major && npm publish --access public","pub:minor":"npm run minor && npm publish --access public","pub:patch":"npm run patch && npm publish --access public","type-check":"tsc --noEmit"},"version":"0.11.1","_npmUser":{"name":"spatulox","email":"M78stormtrooper@laposte.net"},"homepage":"https://github.com/spatulox-discord/discord-module#readme","keywords":["discordjs","discord","framework","modules"],"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"_npmVersion":"11.6.2","description":"Automatic Module Manager for Discordjs","directories":{},"maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"_nodeVersion":"25.1.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","dotenv":"^17.3.1","typescript":"^5.5.3","@types/node":"^25.3.0"},"peerDependencies":{"discord.js":"^14.26.0","@spatulox/utils":"^0.2.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/discord-module_0.11.1_1789989888663_0.16143820046433022"}}},"time":{"created":"2026-03-18T14:07:07.563Z","modified":"2026-09-21T11:24:48.896Z","0.1.0":"2026-03-18T14:07:07.822Z","0.2.0":"2026-04-08T09:43:51.707Z","0.2.1":"2026-04-08T14:05:01.981Z","0.2.2":"2026-04-08T14:15:13.101Z","0.3.0":"2026-04-13T09:35:55.338Z","0.3.1":"2026-04-13T10:10:17.244Z","0.4.0":"2026-04-13T14:11:19.300Z","0.4.1":"2026-04-14T12:01:15.675Z","0.5.0":"2026-04-14T12:59:16.657Z","0.5.1":"2026-04-14T13:03:39.232Z","0.5.2":"2026-04-16T13:49:41.442Z","0.5.3":"2026-04-28T08:05:18.661Z","0.6.0":"2026-04-28T11:55:20.612Z","0.6.1":"2026-05-16T17:20:11.654Z","0.7.0":"2026-05-20T13:19:54.660Z","0.8.0":"2026-05-26T09:31:53.927Z","0.8.1":"2026-05-26T09:46:10.238Z","0.8.2":"2026-05-26T10:50:35.383Z","0.9.0":"2026-05-27T11:17:15.550Z","0.9.1":"2026-05-27T11:40:21.167Z","0.9.2":"2026-05-27T11:53:43.038Z","0.9.3":"2026-05-27T11:57:39.612Z","0.10.0":"2026-06-04T08:57:50.274Z","0.10.1":"2026-06-04T09:11:52.393Z","0.10.2":"2026-09-02T12:10:43.098Z","0.11.0":"2026-09-21T10:56:30.254Z","0.11.1":"2026-09-21T11:24:48.744Z"},"bugs":{"url":"https://github.com/spatulox-discord/discord-module/issues"},"author":{"name":"Spatulox"},"license":"MIT","homepage":"https://github.com/spatulox-discord/discord-module#readme","keywords":["discordjs","discord","framework","modules"],"repository":{"url":"git+https://github.com/spatulox-discord/discord-module.git","type":"git"},"description":"Automatic Module Manager for Discordjs","maintainers":[{"name":"spatulox","email":"M78stormtrooper@laposte.net"}],"readme":"# @spatulox/discord-module\n\n[![npm version](https://img.shields.io/npm/v/@spatulox/discord-module.svg)](https://www.npmjs.com/package/@spatulox/discord-module)\n[![npm downloads](https://img.shields.io/npm/dm/@spatulox/discord-module.svg)](https://www.npmjs.com/package/@spatulox/discord-module)\n[![license](https://img.shields.io/npm/l/@spatulox/discord-module.svg)](#license)\n[![discord.js](https://img.shields.io/badge/discord.js-%5E14.26.0-5865F2.svg)](https://discord.js.org/)\n\nA type-safe module system for [discord.js](https://discord.js.org/) that turns a bot into a set of\nindependent features you can enable or disable at runtime, from a Discord message, without a restart.\n\nInstead of scattering `client.on(...)` calls across your codebase, each feature becomes a `Module` that\ndeclares the events it listens to. The library binds them, groups them, gives each one a place in a\ngenerated control panel, and optionally persists its state to disk.\n\n| | Plain discord.js | With this library |\n|---|---|---|\n| `client.on` calls scattered around the codebase | ❌ | ✅ Declared per module |\n| Toggle a feature live | ❌ Needs a restart | ✅ One click |\n| Feature grouping / nesting | ❌ | ✅ `MultiModule` |\n| Interaction routing (buttons, slash, modals…) | ❌ Manual `if/else` dispatch | ✅ Automatic name → handler binding |\n| Per-module settings page | ❌ | ✅ `openSettings()` |\n| Persistent module state | ❌ | ✅ `ModuleWithCache` |\n\n---\n\n## Table of contents\n\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [Quick start](#quick-start)\n- [How it works](#how-it-works)\n- [API reference](#api-reference)\n  - [`Module`](#module)\n  - [`MultiModule`](#multimodule)\n  - [`ModuleWithCache<T>`](#modulewithcachet)\n  - [`ModuleWithStaticCache`](#modulewithstaticcache)\n  - [`ModuleWithCachedMessage`](#modulewithcachedmessage)\n  - [`ModuleManager`](#modulemanager)\n  - [`ModuleRegistry`](#moduleregistry)\n  - [`InteractionsManager`](#interactionsmanager)\n  - [`ModuleUI`](#moduleui)\n- [Per-module settings pages](#per-module-settings-pages)\n- [Gotchas](#gotchas)\n- [Changelog](#changelog)\n- [Contributing](#contributing)\n- [License](#license)\n\n---\n\n## Requirements\n\n| | Version | Notes |\n|---|---|---|\n| Node.js | 18+ | |\n| `discord.js` | `^14.26.0` | Hard floor: the UI uses Components V2 (`SectionBuilder`, `ContainerBuilder`, `MessageFlags.IsComponentsV2`) |\n| `@spatulox/utils` | `^0.2.0` | Not optional, used for cache persistence, mutexes and logging |\n\nBoth are **peer dependencies**, so you install them yourself.\n\n## Installation\n\n```bash\nnpm install @spatulox/discord-module discord.js @spatulox/utils\n```\n\n## Quick start\n\n**1. Write a module**\n\n```ts\nimport { Events, Message, ChatInputCommandInteraction } from \"discord.js\";\nimport { Module, ModuleEventsMap } from \"@spatulox/discord-module\";\n\nexport class PongModule extends Module {\n    public name: string = \"Pong Module\";\n    public description: string = \"Replies to !ping\";\n\n    public get events(): ModuleEventsMap {\n        return {\n            // One handler per event...\n            [Events.MessageCreate]: this.handleMessage.bind(this),\n            // ...or several\n            [Events.MessageUpdate]: [this.onEdit.bind(this), this.logEdit.bind(this)],\n        };\n    }\n\n    private async handleMessage(message: Message) {\n        if (message.content === \"!ping\") {\n            await message.reply(\"Pong !\");\n        }\n    }\n\n    private async onEdit(message: Message) { /* ... */ }\n    private async logEdit(message: Message) { /* ... */ }\n\n    // Interaction handlers are registered separately, see InteractionsManager\n    static async pingCommand(interaction: ChatInputCommandInteraction) {\n        await interaction.reply(\"Pong !\");\n    }\n}\n```\n\n**2. Wire it up**\n\n```ts\nimport { Client, Events, GatewayIntentBits } from \"discord.js\";\nimport { ModuleManager, InteractionsManager, ModuleUI, InteractionMatchType } from \"@spatulox/discord-module\";\nimport { PongModule } from \"./PongModule\";\n\nconst client = new Client({\n    intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent],\n});\n\nclient.once(Events.ClientReady, () => {\n    // 1. Managers first (both are singletons)\n    const manager = ModuleManager.createOrGetInstance(client);\n    const interactions = InteractionsManager.createOrGetInstance(client);\n\n    // 2. Register your modules\n    manager.register(new PongModule());\n\n    // 3. Modules are DISABLED by default\n    manager.enableAll();\n\n    // 4. Optional: post the control panel in a channel\n    new ModuleUI(client, \"YOUR_CHANNEL_ID\");\n\n    // 5. Register your interactions\n    interactions.registerSlash(\"ping\", PongModule.pingCommand);\n    interactions.registerButton(\"btn_\", async (interaction) => {\n        await interaction.reply(\"Clicked !\");\n    }, InteractionMatchType.START_WITH);\n});\n\nclient.login(process.env.DISCORD_BOT_TOKEN);\n```\n\n> [!IMPORTANT]\n> **Order matters.** `ModuleManager.createOrGetInstance()` must run *before* any `MultiModule` is\n> constructed. A `MultiModule` constructor throws `Module Manager Instance is null` otherwise.\n> And modules start **disabled**, so call `enableAll()` (or enable them from the UI) or nothing happens.\n\n## How it works\n\n`register()` binds every handler declared in `events` to the client **once**, wrapping each one in an\n`if (module.enabled)` guard. Enabling or disabling a module just flips that boolean, and no listener is\never added or removed at runtime. That is why toggling is instant, free, and safe to do from a\nbutton while the bot is live.\n\nThe consequence worth knowing: the `events` getter is read **once**, at `register()` time. Building the\nmap dynamically afterwards has no effect.\n\n---\n\n## API reference\n\nEverything below is exported from the package root:\n\n```ts\nimport {\n    Module, ModuleEventsMap, MultiModule,\n    ModuleWithCache, ModuleWithStaticCache, ModuleWithCachedMessage,\n    ModuleManager, ModuleRegistry, ModuleUI,\n    InteractionsManager, InteractionType, InteractionMatchType,\n} from \"@spatulox/discord-module\";\n```\n\n### `Module`\n\nThe base class. Abstract, takes **no constructor argument**.\n\n**You must implement:**\n\n```ts\npublic abstract name: string;                   // unique, used as the UI label and custom id\npublic abstract description: string;            // shown under the name in the UI\npublic abstract get events(): ModuleEventsMap;  // {} if the module listens to nothing\n```\n\n**Useful members:**\n\n| Member | Description |\n|---|---|\n| `enabled: boolean` | Read-only state |\n| `enable()` / `disable()` / `toggle()` | Change the state |\n| `parent: string` | Name of the owning `MultiModule`, or `\"root\"` |\n| `instance: Module \\| undefined` | Resolves this module through the registry |\n| `hasSettings: boolean` | `true` when `openSettings()` is overridden |\n| `openSettings(interaction)` | Override it to get a settings page, see [below](#per-module-settings-pages) |\n| `createModuleUI(): SectionBuilder` | Override to customise how the module renders in the UI |\n\n**`ModuleEventsMap`** maps any discord.js event name to one handler or an array of handlers:\n\n```ts\ntype ModuleEventsMap = Partial<Record<keyof ClientEvents, Handler | Handler[]>>;\n```\n\n### `MultiModule`\n\nGroups several modules under one entry in the UI. Extends `Module`, so `name` and `description` are still\nrequired, but `events` is already implemented, so you can omit it.\n\n**You must implement:**\n\n```ts\npublic abstract readonly subModules: Module[];\n```\n\n```ts\nimport { MultiModule, Module } from \"@spatulox/discord-module\";\n\nexport class MusicPack extends MultiModule {\n    public name: string = \"Music\";\n    public description: string = \"🎵 Everything music-related\";\n\n    public readonly subModules: Module[] = [\n        new PlayModule(),\n        new VolumeModule(),\n        new AnotherMultiModule(), // nesting is supported\n    ];\n}\n```\n\nSubmodules are registered automatically, so pass only the `MultiModule` to `manager.register()`.\n\n| Member | Description |\n|---|---|\n| `enableAll()` / `disableAll()` | Apply to every submodule, recursively |\n| `isAnyEnabled(): boolean` | `true` if at least one submodule is on |\n| `enable(interaction?)` / `disable(interaction?)` | Passing the interaction re-renders the UI in place |\n\n### `ModuleWithCache<T>`\n\nA `Module` with typed state persisted to disk, guarded by a shared mutex.\n\n**You must implement**, on top of the `Module` members:\n\n```ts\nprotected abstract cacheKey: string;   // the cache file name\nprotected abstract initData(): T;      // default value, used when no file exists yet\n```\n\n> [!WARNING]\n> `loadCache()` is **not** called for you. Call it from your constructor, or the module runs on\n> `initData()` defaults and never reads what is on disk.\n\n```ts\nimport { ModuleWithCache, ModuleEventsMap } from \"@spatulox/discord-module\";\n\ninterface VolumeCache { volume: number }\n\nexport class VolumeModule extends ModuleWithCache<VolumeCache> {\n    public name: string = \"Volume\";\n    public description: string = \"Controls the volume\";\n    protected cacheKey: string = \"volume_module\";\n\n    protected initData(): VolumeCache {\n        return { volume: 50 };\n    }\n\n    constructor() {\n        super();\n        this.loadCache(); // required\n    }\n\n    public get events(): ModuleEventsMap { return {} }\n\n    public async setVolume(volume: number) {\n        await this.syncCache({ ...this.cache, volume });\n    }\n}\n```\n\n| Member | Description |\n|---|---|\n| `cache: T` | Current in-memory data |\n| `key: string` | The resolved cache key |\n| `loadCache(): Promise<void>` | Read from disk, merged over `initData()` |\n| `syncCache(data: T): Promise<void>` | Replace, write to disk, re-read |\n| `writeCache()` / `readCache()` | Lower-level, mutex-guarded |\n\nStored data is merged **over** the defaults, so adding a new key to `initData()` in a later version gives\nexisting installs the default instead of `undefined`.\n\nStatic helpers are available for one-off use without an instance:\n\n```ts\nawait ModuleWithCache.initCache(\"my_key\", { count: 0 });\nawait ModuleWithCache.readCache(\"my_key\");\nawait ModuleWithCache.writeCache(\"my_key\", { count: 42 });\n```\n\n### `ModuleWithStaticCache`\n\nSame idea, but the state lives on the class instead of an instance. Use it when other parts of your bot\nmust read or mutate the state without holding a module instance.\n\n```ts\nimport { ModuleWithStaticCache, ModuleEventsMap } from \"@spatulox/discord-module\";\n\ninterface StatsCache { autoBanCount: number }\n\nexport class StatsModule extends ModuleWithStaticCache {\n    public name: string = \"Stats\";\n    public description: string = \"Counts moderation actions\";\n\n    static override cacheKey: string = \"misc_stats\";\n    static override cacheData: StatsCache = { autoBanCount: 0 };\n\n    // The base class types cacheData as `object`, so getCache() is untyped.\n    // Add a typed accessor once instead of casting at every call site.\n    static get cache(): StatsCache { return StatsModule.cacheData }\n\n    public get events(): ModuleEventsMap { return {} }\n\n    static async incrementAutoBan() {\n        StatsModule.cache.autoBanCount++;\n        await StatsModule.writeCache();\n    }\n}\n\nawait StatsModule.loadCache(); // on startup\n```\n\n**Which one do I pick?** `ModuleWithCache<T>` when the state belongs to one module instance and is fully\ntyped through the generic. `ModuleWithStaticCache` when the state is global and touched from outside the\nmodule, at the cost of a `cacheData` typed as `object` on the base, hence the `static get cache()`\naccessor above.\n\n### `ModuleWithCachedMessage`\n\nA `ModuleWithCache` whose state is one persistent Discord message: it is sent the first time and edited on\nevery subsequent run, surviving restarts. Its cache type is fixed to `{ channel_id, message_id }`.\n\n**You must implement:**\n\n```ts\nabstract getChannel(): Promise<GuildBasedChannel | null>;\nabstract buildMessage(): string | MessageCreateOptions;  // first send\nabstract editMessage(): string | MessageEditOptions;     // later edits\n```\n\nCall `loadCache()` in your constructor: it resolves the stored message and decides between sending and\nediting. Call `triggerUpdateMessage()` whenever the content should refresh. If the message was deleted in\nthe meantime (Discord error `10008`), a new one is sent and the cache updated.\n\n### `ModuleManager`\n\nSingleton owning the module tree and the event binding.\n\n```ts\nstatic createOrGetInstance(client: Client): ModuleManager  // the factory\nstatic getInstance(): ModuleManager | null\n```\n\n| Member | Description |\n|---|---|\n| `register(module)` | Registers a `Module` or `MultiModule` (recursively). Throws on a duplicate name |\n| `enableAll()` / `disableAll()` | Applies to every registered module |\n| `getModule(name): Module \\| undefined` | Case-insensitive lookup |\n| `getRoot(): Module[] \\| undefined` | Top-level modules |\n| `enabledCount: number` | How many modules are currently on |\n| `modules` | The full `parent → Module[]` map |\n\n### `ModuleRegistry`\n\nStatic accessors over the manager, usable from anywhere without passing the manager around.\n\n```ts\nconst module = ModuleRegistry.getModule(\"Volume\");\nif (module?.enabled) { /* ... */ }\n\nModuleRegistry.getModules();\nModuleRegistry.getRoot();\n```\n\n> [!CAUTION]\n> Never call `ModuleRegistry.setModuleManager()` yourself, `ModuleManager` does it on creation.\n\n### `InteractionsManager`\n\nRoutes every `InteractionCreate` to a handler registered by name (slash command name or component custom\nid). Note the plural in the class name.\n\n```ts\nstatic createOrGetInstance(client: Client): InteractionsManager\n```\n\nEight typed helpers, all sharing the same signature:\n\n```ts\nregisterSlash(name, func, matchType?)\nregisterButton(name, func, matchType?)\nregisterSelectMenu(name, func, matchType?)\nregisterModal(name, func, matchType?)\nregisterAutocomplete(name, func, matchType?)\nregisterUserContextMenus(name, func, matchType?)\nregisterMessageContextMenus(name, func, matchType?)\nregisterPrimaryEntryPoint(name, func, matchType?)\n```\n\nThey are sugar over the generic form:\n\n```ts\ninteractions.register(InteractionType.BUTTON, { name, func, matchType });\n```\n\n**`InteractionMatchType`** controls how `name` is matched. The default is `EXACT`:\n\n| Value | Matches |\n|---|---|\n| `EXACT` | `\"confirm_delete\"` → exactly that custom id |\n| `START_WITH` | `\"confirm_\"` → `confirm_123`, `confirm_delete`, … |\n| `END_WITH` | `\"_cancel\"` → `modal_cancel`, `btn_cancel`, … *(fixed in 0.11.1)* |\n\n```ts\ninteractions.registerButton(\"confirm_\", async (interaction) => {\n    await interaction.update({ content: \"Confirmed!\" });\n}, InteractionMatchType.START_WITH);\n```\n\nDispatch tries `EXACT` first, then `START_WITH`, then `END_WITH`.\n\n> [!WARNING]\n> An interaction whose id matches nothing **throws**. Register a `START_WITH` catch-all if your bot emits\n> component ids that are not all declared here.\n\n### `ModuleUI`\n\nThe generated control panel, and the only concrete, directly instantiable class in the library.\n\n```ts\nnew ModuleUI(client, \"CHANNEL_ID\");\n```\n\nConstruct it **once**, after registering your modules, and discard the reference: it sends or edits its\nown message, registers its own buttons, and keeps its message id in the cache across restarts.\n\n- Paginates automatically past 40 components.\n- Returns to the root page after 2 minutes of inactivity.\n- The target channel must be a **guild** text channel the bot can view and post in.\n\n> [!CAUTION]\n> Never pass `ModuleUI` to `manager.register()`. It is self-managing, and its `events` getter throws by\n> design. It also cannot be disabled.\n\n---\n\n## Per-module settings pages\n\n*Since 0.11.0.*\n\nAny module can own a settings page by overriding `openSettings()`. Nothing to register: the override is\ndetected automatically, and the UI adapts:\n\n- in the module list, the module gets a **Show Module** button instead of the enable/disable one;\n- on its own page, a ⚙️ button appears next to the enable/disable one.\n\nYour module fully owns the interaction and **must answer it**, with an ephemeral reply, a modal, or whatever\nfits.\n\n```ts\nimport { ButtonInteraction, MessageFlags } from \"discord.js\";\nimport { ModuleWithCache, ModuleEventsMap } from \"@spatulox/discord-module\";\n\ninterface VolumeCache { volume: number }\n\nexport class VolumeModule extends ModuleWithCache<VolumeCache> {\n    public name: string = \"Volume\";\n    public description: string = \"Controls the volume\";\n    protected cacheKey: string = \"volume_module\";\n\n    protected initData(): VolumeCache { return { volume: 50 } }\n\n    constructor() {\n        super();\n        this.loadCache();\n    }\n\n    public get events(): ModuleEventsMap { return {} }\n\n    // Overriding this is enough, the ⚙️ button shows up on its own\n    override async openSettings(interaction: ButtonInteraction): Promise<void> {\n        await interaction.reply({\n            content: `Current volume : ${this.cache.volume}`,\n            flags: MessageFlags.Ephemeral,\n        });\n    }\n}\n```\n\nThis works on a `MultiModule` too: its page then shows ⚙️ **and** the enable/disable button **and** the\nsubmodule list.\n\n---\n\n## Gotchas\n\n**Handlers are called unbound.** Everything you put in `events`, and every interaction handler, is invoked\nwithout a receiver. If it touches `this`, bind it:\n\n```ts\n// ✅\n[Events.MessageCreate]: this.handleMessage.bind(this)\n\n// ❌ `this` is undefined inside handleMessage\n[Events.MessageCreate]: this.handleMessage\n```\n\nSame for interaction handlers registered from a class instance:\n\n```ts\nconst instance = new MyHandler();\n\n// ✅ bind, or wrap in an arrow\ninteractions.registerButton(\"btn_a\", instance.handle.bind(instance));\ninteractions.registerButton(\"btn_b\", (i) => instance.handle(i));\n\n// ❌ loses the instance\ninteractions.registerButton(\"btn_c\", new MyHandler().handle);\n```\n\n**Reserved custom ids.** `ModuleUI` claims `dm_prev`, `dm_next`, `dm_go_back`, `dm_page`, and the prefixes\n`toggle_`, `show_` and `settings_`. Do not use them for your own components.\n\n**Module names must be unique and reasonably short.** They are turned into custom ids, which Discord caps\nat 100 characters, so keep names under ~90.\n\n**Cache files** are written to `.utilscache/` relative to `process.cwd()`, one JSON per key (the key is\nsanitised, so `discord-modules.cache` becomes `discord-modules_cache.json`). Add it to your `.gitignore`\nand make sure the directory is writable in production.\n\n---\n\n## Changelog\n\nSee [CHANGELOG.md](./CHANGELOG.md) for the full history.\n\nRecent highlights:\n\n- **0.11.1**: `InteractionMatchType.END_WITH` now works\n- **0.11.0**: per-module settings pages via `openSettings()`\n- **0.10.0**: `initData()` for default cache values\n- **0.9.x**: `ModuleWithCachedMessage`\n- **0.8.0**: `ModuleWithCache` and `ModuleWithStaticCache`\n- **0.5.1**: UI pagination and nested `MultiModule`\n- **0.2.0**: `InteractionsManager`\n\n## Contributing\n\nBug reports and feature requests are welcome on the\n[issue tracker](https://github.com/spatulox-discord/discord-module/issues).\nMore detailed documentation lives in the\n[wiki](https://github.com/spatulox-discord/discord-module/wiki), and there is a\n[Discord server](https://discord.gg/bAAZebKKYS) if you have questions.\n\n## License\n\n[MIT](https://opensource.org/licenses/MIT) © Spatulox\n","readmeFilename":"README.md"}