{"_id":"telegraf-721","_rev":"74-2ded40944b2e9bee5a59f5a403d6694f","name":"telegraf-721","dist-tags":{"latest":"1.0.45"},"versions":{"1.0.30":{"name":"telegraf-721","version":"1.0.30","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.30","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"faf06beffb64d877a1ccc0c0a9936e3889605868","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.30.tgz","fileCount":6,"integrity":"sha512-akEJwfc/B7bb/cD9zCMYeS7Kdgq3pZdPJtkaHprY1WlIYK2JIfU/rNACbkUyU0BfvNlqzx2FV2LoaZJqwPAB3A==","signatures":[{"sig":"MEUCIDTaNxjUoVFnnXWu0kucpJjV1M6BCTwdV+yQVV0wo5w+AiEA2Gw6KIsnfMsYXrXCyGUHXAVJN43H0CRklSBpD8v+Zs4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":328081},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"b004bc456639c74e9fd327cbd47130d434b2a636","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.30_1726561877558_0.7550820002257472","host":"s3://npm-registry-packages"}},"1.0.31":{"name":"telegraf-721","version":"1.0.31","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.31","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"c786cb685d8971901bd24fb0201019fd2d285e67","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.31.tgz","fileCount":6,"integrity":"sha512-hYM8GUyd330MSSIKumTXdxeSuBgo6rSRK29NOaNC0cqwXDeysPDV66jynSAWASdO8XmNLu+JT4pbcBI+E1olIg==","signatures":[{"sig":"MEQCIAs7msqESveKf0fOrcLEbGewUeVwqloL2aNL6yZX37JwAiA6qCs50Xe3MsOzP8ozWyXwk+RwyE+ZPu5H2jlSBBzC9A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":337983},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"35e0e4d341e8848698d773099964e590d970d5e6","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.31_1726581105506_0.9224736714121691","host":"s3://npm-registry-packages"}},"1.0.32":{"name":"telegraf-721","version":"1.0.32","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.32","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"ed8ea5515b345a246331144e3d8d7211372bfcba","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.32.tgz","fileCount":6,"integrity":"sha512-nGJX2vbDK9u4QZL2LfUmzeFAxbynKonfvmdCQwuD4AZVVEPX3DZa6oh3EVO11XDdJtATyaGJMvqAvtM0mk0Q3w==","signatures":[{"sig":"MEYCIQDx1ocfpcXPtn+X49oK++4E88tMAvytlc9MVASG25Pn1AIhAMUHaJeXVdCGOGQGk4YpCTpK3ixqt7f640SDyoWkgnqj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":345091},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"35e0e4d341e8848698d773099964e590d970d5e6","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.32_1726644155259_0.1754828893165834","host":"s3://npm-registry-packages"}},"1.0.33":{"name":"telegraf-721","version":"1.0.33","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.33","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"15cbb5af561e0e0234646a27711e29044e110be0","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.33.tgz","fileCount":6,"integrity":"sha512-/zt8S12CtTezrcejcARgeKpJhYS9NC46yR8Et8P2mL2Nt6SDvnV8QLHscGMnT06HLluQqfKlIF+I5rA5S6r3XQ==","signatures":[{"sig":"MEUCIECOuPbnsqfcCFrHHmWdE7P+xPW2Au53wwZD649WjvLsAiEA1MwZwKsLSePo8kZCPZqVQBz3Kxlf6679mPWMSOTpijU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":345093},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"35e0e4d341e8848698d773099964e590d970d5e6","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.33_1726644319392_0.9353442542522277","host":"s3://npm-registry-packages"}},"1.0.34":{"name":"telegraf-721","version":"1.0.34","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.34","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"dfc29c48223f68b76e3f349c0dd3753533af11a7","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.34.tgz","fileCount":6,"integrity":"sha512-g+J2MQ7DNuZ8K2FsB7kXq9cRW2br3++Gz5ADeydg1ErOoxb4FsngW1c0Z3+e9VbJebRb3dilXU/Yvd32XOXaoQ==","signatures":[{"sig":"MEUCIEFCBI49cpbwBI2iqj7p8u/5xFw8RPep0M0HhMDncYLLAiEAnectUea9KFZ8QVcb0+MEcCSNtAmYixYXbyoroE3lYzo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":345103},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"35e0e4d341e8848698d773099964e590d970d5e6","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.34_1726644475996_0.9675068224230854","host":"s3://npm-registry-packages"}},"1.0.35":{"name":"telegraf-721","version":"1.0.35","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.35","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"3a3e1db400db4005bf0e9656798ad5e128bcf7e9","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.35.tgz","fileCount":6,"integrity":"sha512-4ML2+AXT+d6z7wT9RKAwNQkZwmJBh7PK+IxovPBFRsGdBPJgbNrI3uT5JcaYqqQuZmNP8+MixAWvGLpWxNW0ZA==","signatures":[{"sig":"MEUCIQCAn50uuoyVh8qmwQFYCPPbbxAmgg8dRwALGGB8W1jXPQIgZfqtavZ/eri57/RLQjx1HB4S3bDtBGq7w5vLGrGFHRc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":345105},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"35e0e4d341e8848698d773099964e590d970d5e6","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.35_1726644537071_0.6078506026452428","host":"s3://npm-registry-packages"}},"1.0.36":{"name":"telegraf-721","version":"1.0.36","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.36","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"36506830580ce1272a3871efa2939af544b9e4fe","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.36.tgz","fileCount":6,"integrity":"sha512-YrWQ8Ou7kjW0GLSK9I1mNF76dN+bplKfjNt3yQpBV8gluNIYljVcvQImYd6iCTfiluw0gX+MnpYUXWtb0ZclZg==","signatures":[{"sig":"MEUCICG705Gb1ldF6VSAGdsYgvMdP0mqs1GJIaw3/sCINjMeAiEA5Tb8qTKp1xWmYDDq03qV1mQXJWp0LL6HQ1GVG2VU6TA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":345265},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"35e0e4d341e8848698d773099964e590d970d5e6","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.36_1726645616077_0.15872565830514462","host":"s3://npm-registry-packages"}},"1.0.37":{"name":"telegraf-721","version":"1.0.37","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.37","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"96690610e18b6efab192c06b32227702563f8d4d","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.37.tgz","fileCount":6,"integrity":"sha512-DPXi8qmFJjLeIAu6dMPLe8ZMkwE2aWfCsqBejLFExNU+9+ERX/UkSKA9FxBNBe+Egwxka+KrNjoujRGaq/M14A==","signatures":[{"sig":"MEYCIQCt/U0EtxaHeVoKwcwToou97ii+mC39UawH+VGkD2fVYwIhAObY0t6aFjgToN/8bM8ot97lxzNeCIuwZsI/3XpU3EPe","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":345651},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"35ff62141e46e66ada011cf7ce8eb18d9578b035","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.37_1726646359771_0.4460747210076985","host":"s3://npm-registry-packages"}},"1.0.38":{"name":"telegraf-721","version":"1.0.38","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.38","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"718d0862cc037a7b40a65200c3660cd4ec3dce27","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.38.tgz","fileCount":6,"integrity":"sha512-6KJ9EjuBci84QGyyvr8xGdUd+L8mDIZtV+V01dZ/+tzeGN2FMWunBumIH47a8sH6xBGQrs7doXxUKIC04gVbtQ==","signatures":[{"sig":"MEYCIQDbz4JR4+EQaB/aUCdtMBlaCD06kAje32Etu1DQjqOC9AIhAIx8sD/r/QPYlI2LTrkv7GXz1eDInRXYqmYEOWdkJd0C","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":345265},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"35ff62141e46e66ada011cf7ce8eb18d9578b035","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.38_1726646687007_0.29215048912066033","host":"s3://npm-registry-packages"}},"1.0.39":{"name":"telegraf-721","version":"1.0.39","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.39","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"7fe74b87189cda3792e7194c6682c73dfe32eac2","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.39.tgz","fileCount":6,"integrity":"sha512-6BNfFhM6KeF4pn9LOj3H2+jUCMzqBUZdcPrDcQsbdF9CAMOf/n6tClZpj3Ca2BDxOIqwp+/7spOBWszwH0CH4Q==","signatures":[{"sig":"MEUCIQCVUcdUairqlhhbiTrLNuYkdcDZ16DMb2veb7wcVNNt/AIgAltuPGrSN2EfKiltLcNUldMvBCHZz1dEPX9Kmba5gSk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":339575},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"d902be514736f3e8767ee7cf626994a4e90f07c7","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.39_1727257036296_0.5193934108890086","host":"s3://npm-registry-packages"}},"1.0.40":{"name":"telegraf-721","version":"1.0.40","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.40","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"ed155c834170c0d7bc6459a42baf0d22ecc03fb8","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.40.tgz","fileCount":6,"integrity":"sha512-LAhClTd4uqMijq42doOAINsmd2VKGyt5dRRvzhSl3GwkMCzk5HSvU0AnNSAuTxpGSaF5zKZoad9gN6dEuKiPMw==","signatures":[{"sig":"MEUCICitqh3B8XMwyoT6QWpE5wvuZjZQFK63nxXgy4XpS1XsAiEA4HfhDciaBB5eFbxUZ4n9okUYVyvQZRFWTeH50LnLNtQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":339575},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"d902be514736f3e8767ee7cf626994a4e90f07c7","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.40_1727257374443_0.2390038131257335","host":"s3://npm-registry-packages"}},"1.0.41":{"name":"telegraf-721","version":"1.0.41","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.41","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"fbe161f67939de35ac4a95d25a036ad07ff1bd22","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.41.tgz","fileCount":6,"integrity":"sha512-GPSyWbiUoH2YwLCnQ6Zn5eGhHsHZ5ZDmNpbqOGyZvBZpq9bM+yeIBPKpdUo9gIyTcwf10I1bQP+GWQPxcvIbaA==","signatures":[{"sig":"MEUCIBeo8tN5Mq7oB23E9j0RjEr7ZW6yV4PRMNE4rG/UYNXLAiEAkIrDcwQ8mMCHzynJmWgo3GXzWd0v+JEeAQUcXJVC380=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":340499},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"d902be514736f3e8767ee7cf626994a4e90f07c7","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.41_1727257464734_0.977928288398489","host":"s3://npm-registry-packages"}},"1.0.42":{"name":"telegraf-721","version":"1.0.42","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.42","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"d79fd2f0bb0352f8236887cf67a9f4bc540a1dc6","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.42.tgz","fileCount":6,"integrity":"sha512-2I5uPXXq//U5BYed5lkasedyTtpz5x6tmil47eFuuKbcJcYpf9rSQuy1T48ecjE7KP6Bater+dm60OqaBXkx7w==","signatures":[{"sig":"MEUCIQCrblZVIopgp91tk0RHOIqVfD6PiUa4q7J+JFMO5YsA5QIgG0q/sErNCf70xsbUd3COOeRxYPuNn/+NqgQRKqPPxAY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":340917},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"d902be514736f3e8767ee7cf626994a4e90f07c7","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.42_1727259474409_0.5221887167047279","host":"s3://npm-registry-packages"}},"1.0.43":{"name":"telegraf-721","version":"1.0.43","keywords":["telegraf","telegram","bot"],"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","_id":"telegraf-721@1.0.43","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"dist":{"shasum":"70e28345694b23f04c8b84e747d77dc71f9c9ed2","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.43.tgz","fileCount":6,"integrity":"sha512-dEROd/XW0bvzvygt83t7+hAnNcDqwsELTPqv7Juoq9nvbzCAhHmFQfc6K4lp59gIEzQTN2pjZkkM0G+rGtEHww==","signatures":[{"sig":"MEQCIChvResK3tRLlqGwhJUOQyqFg8RbRqggsu2MQDC31rveAiBNqqmQf98G22Wx0RwIPHXKEVQmKlhXqBEJALj4kd6lCQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":340573},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":"^20.10.0"},"gitHead":"5dc7527a9bccd86a3f12c3885ddf4b10829ad1b1","scripts":{"dev":"nodemon dist/main.js","tsup":"tsup","build":"tsc","start":"node dist/main.js","watch":"tsc -w"},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"repository":{"url":"git+https://github.com/Mikiyas721/telegraf_721.git","type":"git"},"_npmVersion":"10.1.0","description":"Improvement to the telegraf library with functional programming, error handling, ...","directories":{},"_nodeVersion":"20.9.0","dependencies":{"tsup":"^8.2.4","dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.5","@types/node":"^22.5.5"},"_npmOperationalInternal":{"tmp":"tmp/telegraf-721_1.0.43_1727260416453_0.8773377729325282","host":"s3://npm-registry-packages"}},"1.0.45":{"name":"telegraf-721","version":"1.0.45","description":"Improvement to the telegraf library with functional programming, error handling, ...","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","scripts":{"watch":"tsc -w","dev":"nodemon dist/main.js","build":"tsc","start":"node dist/main.js","tsup":"tsup"},"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","repository":{"type":"git","url":"git+https://github.com/Mikiyas721/telegraf_721.git"},"dependencies":{"dotenv":"^16.4.5","telegraf":"^4.16.3","telegraf-i18n":"^6.6.0","ts-util-721":"^0.0.1","tsup":"^8.2.4"},"devDependencies":{"@types/node":"^22.5.5","typescript":"^5.4.5"},"engines":{"node":"^20.10.0"},"keywords":["telegraf","telegram","bot"],"_id":"telegraf-721@1.0.45","gitHead":"3c41265af428b48b08cb21c944bf49d3f55b9188","bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"homepage":"https://github.com/Mikiyas721/telegraf_721#readme","_nodeVersion":"20.9.0","_npmVersion":"10.1.0","dist":{"integrity":"sha512-AtGBVGMYZLUxXZsNLauBUl1AXLSWJW9YcE4LbOvUxsM330kabUmRQpedQouXM8BI+Y7JN8UxFAnj3dpyq53wRw==","shasum":"dbb1f9ee453bafc25bb8a9c11b7755b06d289b25","tarball":"https://registry.npmjs.org/telegraf-721/-/telegraf-721-1.0.45.tgz","fileCount":6,"unpackedSize":322559,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC4gPH8wF76JMdYZhzm8akwB/Ea9TTJur8XeJ7Y3nHEfAiAsnYLPuVB4VmZDf3+68r7F5md+K9zATd15O0ZWwvECyQ=="}]},"_npmUser":{"name":"mikiyas721","email":"Mikiyas721@gmail.com"},"directories":{},"maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/telegraf-721_1.0.45_1727291323636_0.04203089104747204"},"_hasShrinkwrap":false}},"time":{"created":"2024-09-14T20:34:36.245Z","modified":"2024-09-25T19:08:44.019Z","1.0.0":"2024-09-14T20:34:36.449Z","1.0.1":"2024-09-14T20:53:12.697Z","1.0.2":"2024-09-14T21:02:37.523Z","1.0.3":"2024-09-14T21:45:03.477Z","1.0.4":"2024-09-15T18:56:32.746Z","1.0.5":"2024-09-15T19:38:16.650Z","1.0.6":"2024-09-15T19:46:32.194Z","1.0.7":"2024-09-15T20:08:10.006Z","1.0.8":"2024-09-15T20:20:27.553Z","1.0.9":"2024-09-15T20:23:21.011Z","1.0.10":"2024-09-16T08:14:56.097Z","1.0.11":"2024-09-16T08:17:35.703Z","1.0.12":"2024-09-16T08:19:35.719Z","1.0.13":"2024-09-16T08:22:54.894Z","1.0.14":"2024-09-16T09:38:49.680Z","1.0.15":"2024-09-16T09:45:54.971Z","1.0.16":"2024-09-16T10:16:28.868Z","1.0.17":"2024-09-16T10:27:26.550Z","1.0.18":"2024-09-16T11:33:10.463Z","1.0.19":"2024-09-16T11:49:11.333Z","1.0.20":"2024-09-16T12:00:49.263Z","1.0.21":"2024-09-16T12:17:21.527Z","1.0.22":"2024-09-16T12:23:54.371Z","1.0.23":"2024-09-16T12:31:03.935Z","1.0.24":"2024-09-17T07:00:43.350Z","1.0.25":"2024-09-17T07:04:16.757Z","1.0.26":"2024-09-17T07:24:45.599Z","1.0.27":"2024-09-17T07:28:49.066Z","1.0.28":"2024-09-17T08:00:57.344Z","1.0.29":"2024-09-17T08:13:31.160Z","1.0.30":"2024-09-17T08:31:17.726Z","1.0.31":"2024-09-17T13:51:45.709Z","1.0.32":"2024-09-18T07:22:35.400Z","1.0.33":"2024-09-18T07:25:19.572Z","1.0.34":"2024-09-18T07:27:56.185Z","1.0.35":"2024-09-18T07:28:57.257Z","1.0.36":"2024-09-18T07:46:56.253Z","1.0.37":"2024-09-18T07:59:19.939Z","1.0.38":"2024-09-18T08:04:47.254Z","1.0.39":"2024-09-25T09:37:16.515Z","1.0.40":"2024-09-25T09:42:54.685Z","1.0.41":"2024-09-25T09:44:24.966Z","1.0.42":"2024-09-25T10:17:54.647Z","1.0.43":"2024-09-25T10:33:36.659Z","1.0.45":"2024-09-25T19:08:43.852Z"},"bugs":{"url":"https://github.com/Mikiyas721/telegraf_721/issues"},"author":{"name":"Mikiyas721@gmail.com"},"license":"ISC","homepage":"https://github.com/Mikiyas721/telegraf_721#readme","keywords":["telegraf","telegram","bot"],"repository":{"type":"git","url":"git+https://github.com/Mikiyas721/telegraf_721.git"},"description":"Improvement to the telegraf library with functional programming, error handling, ...","maintainers":[{"name":"mikiyas721","email":"Mikiyas721@gmail.com"}],"readme":"# telegraf-721\r\nBased on [telegraf](https://www.npmjs.com/package/telegraf) and [telegraf-i18n](https://www.npmjs.com/package/telegraf-i18n)  \r\nIt has the following additions to improve the telegraf library usage:\r\n\r\n1. ## Functional Programming\r\n   1. ### Either\r\n      Use *left(l: L)* or *right(r: R)* static functions in **Either** class to create Either for erroneous and valid values correspondingly.\r\n      ```\r\n      export class HttpsError{\r\n        constructor(private message: string) {\r\n        }\r\n      \r\n        get getError(){\r\n            return this.message\r\n        }\r\n      }  \r\n      ```\r\n      ```\r\n      export class HttpsResponse{\r\n        constructor(public response: any) {\r\n        }\r\n      }  \r\n      ```\r\n      \r\n      ```\r\n      import axios from \"axios\";\r\n      import {Either} from \"telegraf-721\";\r\n      export class AxiosDatasource{\r\n            ...\r\n        async get(): Promise<Either<RestResponseFailure, RestResponse>> {\r\n            try{\r\n                const response = awiat this.axios.get(this.url)\r\n                return Either.right(new HttpsResponse(response))\r\n            }catch(error){\r\n                return Either.left(new HttpsError(error.message))\r\n            }\r\n        }  \r\n      }\r\n      ```\r\n      The result of the above function(Either type) can be consumed using functions of the Either instance; *fold*, *foldLeft*, *foldRight*, *getOrElse*, *getLeft* or *getRight*.\r\n      ```\r\n      import {AxiosDatasource} from \"./axios_datasource\"\r\n      \r\n      const someFunction = () => {\r\n         const response = await new AxiosDatasource().get()\r\n         response.fold(async l => {\r\n            // Display or log error using l.getError\r\n         }, async r => {\r\n            // Consume valid value using r.response\r\n         })        \r\n      ```\r\n   2. ### Option\r\n      You can use option similar to the Either  \r\n      You can use *Option.none()* and *Option.some()* to create Option object.   \r\n      Similar functions to consume the value of an Option is also present here.\r\n   \r\n2. ## Dependency Injection\r\n   You can register all your instances globally using the **DependencyProvider** class. You can register both singletons and lazy singletons.\r\n   The provider class is a singleton on its own. It has a *getInstance* static function for instantiation, \r\n   but you won't have to use it because it is instantiated internally. You just need to import that.\r\n   ```\r\n   import {provider} from \"telegraf-721\"\r\n   \r\n   provider.registerSingleton(\r\n        \"unique indentifier\",\r\n         new AxiosDatasource()\r\n   )\r\n   \r\n   provider.registerLazySingleton(\r\n        \"unique indentifier\",\r\n        () => new AxiosDatasource()\r\n   )   \r\n   ```\r\n   The first usage is better suited for instances that are more likely to be used or are necessary during instantiation.\r\n   The second usage is better for instances that may not be needed during the lifecycle of the application or are not need during instantiation.\r\n   You can fetch the instance using the *get* function.\r\n   ```\r\n   import {provider} from \"telegraf-721\"\r\n   \r\n   const axiosDatasource = provider.get<AxiosDatasource>(\"unique indentifier\")\r\n   ```\r\n   You should specify the type of the instance you are fetching if you read values of the instance since it can't induce the type of the instance automatically.\r\n\r\n3. ## Bot Helpers\r\n   So far, we have only added basic thing to write clean code. In this section we move to telegraf specific things.\r\n   1. ### MyCommand\r\n      This class is used to define a [command](https://core.telegram.org/bots/features#commands) in telegram.\r\n      Simple usage with the dependency provider\r\n      ```\r\n      import {provider, MyCommand} from \"telegraf-721\";\r\n      import {CommonCommandHandlers} from \"../somewhere\";\r\n      \r\n      provider.registerLazySingleton(\r\n        \"startCommand\",\r\n        () => new MyCommand(\r\n            \"start\",\r\n            CommonCommandHandlers.start\r\n        )\r\n      )\r\n      ```      \r\n   2. ### MyInlineKeyboard\r\n      This is a parent class to different classes that define an [inline keyboard](https://core.telegram.org/bots/features#inline-keyboards) in telegram.\r\n      This library has the following extensions:\r\n         - **MyUrlInlineKeyboard**: An [inline keyboard](https://core.telegram.org/bots/api#inlinekeyboardmarkup) with *url* property set.\r\n         ```\r\n         import {MyUrlInlineKeyboard} from \"telegraf-721\";\r\n      \r\n         new MyUrlInlineKeyboard(\r\n           \"bot.urlbutton.label\",\r\n           \"www.mywebsite.com\"\r\n         )\r\n         ``` \r\n         - **MyWebAppInlineKeyboard**: An [inline keyboard](https://core.telegram.org/bots/api#inlinekeyboardmarkup) with *web_app.url* property set.\r\n         ```\r\n         import {MyWebAppInlineKeyboard} from \"telegraf-721\";\r\n      \r\n         new MyWebAppInlineKeyboard(\r\n           \"bot.webappbutton.label\",\r\n           \"www.myminiapp.com\"\r\n         )\r\n         ```\r\n         - **MyCallbackInlineKeyboard**: Parent to the classes below\r\n         - **MyCoreCallbackInlineKeyboard**: An [inline keyboard](https://core.telegram.org/bots/api#inlinekeyboardmarkup) with *callback_data* property set.\r\n           The *callback_data* will be the coreCallback or a regExp with the coreCallback and the dataPattern you provide.  \r\n           The regExp looks like *^${this.coreCallback}\\|${this.dataPattern}$*  \r\n         Usage with only a coreCallback\r\n         ```\r\n         import {MyCoreCallbackInlineKeyboard} from \"telegraf-721\";\r\n         import {InlineKeyboardHandlers} from \"../somewhere\";\r\n      \r\n         new MyCoreCallbackInlineKeyboard(\r\n            \"bot.continueButton.label\",\r\n            \"continue\",\r\n            InlineKeyboardHandlers.continue\r\n         )\r\n         ```\r\n         Usage with both *coreCallback* and *dataPattern*\r\n         ```\r\n         import {MyCoreCallbackInlineKeyboard} from \"telegraf-721\";\r\n         import {InlineKeyboardHandlers} from \"../somewhere\";\r\n         import {itemNumberPattern} from \"../somewhere\";\r\n      \r\n         new MyCoreCallbackInlineKeyboard(\r\n            \"bot.continueButton.label\",\r\n            \"itemNumber\",\r\n            InlineKeyboardHandlers.onItemSelected,\r\n            itemNumberPattern\r\n         )\r\n         ```\r\n         The above InlineKeyboard can be used to show a list of inline keyboards with different number values. See example under MyMarkup below.\r\n         - **MyDataPatternInlineKeyboard**: An [inline keyboard](https://core.telegram.org/bots/api#inlinekeyboardmarkup) with *callback_data* property set.\r\n           This one is similar to *MyCoreCallbackInlineKeyboard* except for the coreCallback\r\n         ```\r\n         import {MyDataPatternInlineKeyboard} from \"telegraf-721\";\r\n         import {InlineKeyboardHandlers} from \"../somewhere\";\r\n      \r\n         new MyDataPatternInlineKeyboard(\r\n            \"NOT DEFINED\",\r\n            '.+',\r\n            InlineKeyboardHandlers.matchAny\r\n         )\r\n         ```\r\n   3. ### MyKeyboard\r\n      Just like *MyInlineKeyboard*, this is a parent class for the different forms of [keyboards](https://core.telegram.org/bots/features#keyboards)\r\n         - **HandledKeyboard**: Parent class for keyboards with handlers.\r\n         - **MyLabelPatternKeyboard**: A keyboard for matching a range of values with regExp like the *MyDataPatternInlineKeyboard*.\r\n         ```\r\n         import {MyLabelPatternKeyboard} from \"telegraf-721\";\r\n         import {KeyboardHandlers} from \"../somewhere\";\r\n      \r\n         new MyLabelPatternKeyboard(\r\n            \".+\",\r\n            KeyboardHandlers.matchAny\r\n         )\r\n         ```\r\n         - **MyLabelKeyboard**: A [keyboard](https://core.telegram.org/bots/api#keyboardbutton) only *text* set.\r\n         ```\r\n         import {MyLabelPatternKeyboard} from \"telegraf-721\";\r\n         import {KeyboardHandlers} from \"../somewhere\";\r\n      \r\n         new MyLabelKeyboard(\r\n            \"common.buttonLabels.back\",\r\n            KeyboardHandlers.back\r\n         )\r\n         ```\r\n         - **MyLabeledOnlyKeyboard**: Similar to the above keyboard, but no handler function is attached. The result of tapping such button invokes a scene or bot handler function instead\r\n         - **MyExtraFunctionKeyboard**: A [keyboard](https://core.telegram.org/bots/api#keyboardbutton) with *request_contact* or *request_location* set.\r\n         ```\r\n         import {MyExtraFunctionKeyboard} from \"telegraf-721\";\r\n      \r\n         new MyExtraFunctionKeyboard(\r\n            \"user.buttonLabels.shareContact\",\r\n            {\r\n                requestContact: true\r\n            }\r\n         )\r\n         ```\r\n   4. ### MyMarkup\r\n      This class is used to create a *reply_markup* attribute for [sendMessage](https://core.telegram.org/bots/api#sendmessage) and other functions that accept this attribute.\r\n      It has four basic functions: \r\n         - **getInlineKeyboardMarkup**: Used to create [InlineKeyboardMarkup](https://core.telegram.org/bots/api#inlinekeyboardmarkup)\r\n            Previous Definition:\r\n            ```\r\n            import {MyCoreCallbackInlineKeyboard} from \"telegraf-721\";\r\n            import {InlineKeyboardHandlers} from \"../somewhere\";\r\n            import {itemNumberPattern} from \"../somewhere\";\r\n         \r\n            provider.registerLazySingleton(\r\n              \"numberedButton\",\r\n              new MyCoreCallbackInlineKeyboard(\r\n                 \"bot.continueButton.label\",\r\n                 \"itemNumber\",\r\n                 InlineKeyboardHandlers.onItemSelected,\r\n                 itemNumberPattern\r\n              )\r\n            )\r\n            ```\r\n            reply_markup creation \r\n            ```\r\n            import {MyMarkup, MyCoreCallbackInlineKeyboard} from \"telegraf-721\";\r\n         \r\n            const array = Array.from({ length: 8 }, (_, i) => i + 1);\r\n            array.forEach(item => {\r\n                keyboards.push(\r\n                    provider.get<MyCoreCallbackInlineKeyboard>(numberedButton).mutateAndGet({\r\n                        localizationKey: item.toString(),\r\n                        data: item,\r\n                        createNewInstance: true,\r\n                        translated: true\r\n                    })\r\n                )\r\n            })\r\n           \r\n            MyMarkup.getInlineKeyboardMarkup(ctx, keyboards)\r\n            ```\r\n            This function takes a third parameter *layout* with type *ButtonLayout*\r\n            ```\r\n            export interface ButtonLayout {\r\n              countInRow?: number,\r\n              actual?: number[]\r\n            }\r\n            ```\r\n            By default, countInRow is set to 2\r\n            actual is an array of numbers, where each number indicates the number of column in the nth(array index) row. It is given priority over countInRow if both are passed\r\n         -  **getKeyboardMarkup**: Used to create [ReplyKeyboardMarkup](https://core.telegram.org/bots/api#replykeyboardmarkup)\r\n            ```\r\n            import {MyMarkup} from \"telegraf-721\";\r\n         \r\n            MyMarkup.getKeyboardMarkup(ctx, [\r\n                   provider.get(\"keyboard1\"),\r\n                   provider.get(\"keyboard2\"),\r\n               ]\r\n            )\r\n            ```\r\n            This also has similar third parameter.\r\n         - **getRemoveKeyboardMarkup**: Used to create [ReplyKeyboardRemove](https://core.telegram.org/bots/api#replykeyboardremove)\r\n         - **getForceReplyMarkup**: Used to create [ForceReply](https://core.telegram.org/bots/api#forcereply) \r\n   5. ### MyScene\r\n      A child class of the [WizardScene](https://telegraf.js.org/classes/Scenes.WizardScene.html) of telegraf.  \r\n      The code below shows the registration of a *MyScene* instance on the provider.\r\n      ```\r\n      import {provider, MyScene} from \"telegraf-721\";\r\n      import {UserRegistrationSceneHandlers} from \"../somewhere\";\r\n      \r\n      provider.registerLazySingleton(\r\n        \"userRegistrationScene\",\r\n        () => new MyScene(\r\n            \"userRegistration\",\r\n            {\r\n                enter: UserRegistrationSceneHandlers.enter,\r\n                steps: [\r\n                    UserRegistrationSceneHandlers.phoneNumber,\r\n                    UserRegistrationSceneHandlers.firstName,\r\n                    UserRegistrationSceneHandlers.lastName,\r\n                    UserRegistrationSceneHandlers.password,\r\n                ],\r\n                leave: UserRegistrationSceneHandlers.leave\r\n            }, {\r\n                keyboards: [\r\n                     provider.get(\"keyboard1\"),\r\n                     provider.get(\"keyboard2\")\r\n                ],\r\n                inlineKeyboards: [\r\n                     provider.get(\"registrationBackKeyboard\"),\r\n                     provider.get(\"inlineKeyboard2\")\r\n                ],  \r\n                commands: [\r\n                    provider.get(\"startCommand\")\r\n                ]\r\n            }\r\n        )\r\n      )\r\n      ```\r\n      You can see that it takes three parameters:  \r\n         - *id*: unique identifier of the scene\r\n         - *handlers*: different functions that are invoked during the entry, stay and leaving of the scene.  \r\n           You can move from one step of the scene to the next or back like so: \r\n           ```\r\n           export class UserRegistrationSceneHandlers{\r\n           \r\n               static async phoneNumber(ctx: TelegrafContext) {\r\n                  // logic to check input\r\n                  if(logicPass) {\r\n                    return ctx.wizard.next() \r\n                  }\r\n               }\r\n           }\r\n           \r\n           export class UserRegistrationKeyboardHandlers{           \r\n               static async back(ctx: TelegrafContext) {\r\n                  switch (ctx.wizard.cursor) {\r\n                    case 2:\r\n                      return ctx.wizard.back() \r\n                    }\r\n                  }\r\n               }\r\n           }\r\n           ```\r\n           you can also use *ctx.wizard.selectStep(5)* to jump to a specific step.\r\n         - *interactors*: different interactive elements you want to be invoked while you are in that scene.    \r\n           You can collect your scenes in a stage and attach them to your bot.\r\n           ```\r\n           import {provider} from \"telegraf-721\"\r\n           \r\n           provider.registerSingleton(\"mainStage\", new Scenes.Stage(\r\n             [\r\n                provider.get(\"userRegistrationScene\"),\r\n                provider.get(\"anotherScene1\"),\r\n                provider.get(\"anotherScene2\"),\r\n             ]\r\n           ))\r\n           ```\r\n   6. ### MyBot\r\n      Contains the **telegraf** instance and other interactive elements that the telegraf instance should respond to  \r\n      Typical usage: \r\n      ```\r\n      import {provider, MyBot} from \"telegraf-721\"\r\n      const botConfig = provider.get<Config>(\"botConfig\")\r\n      \r\n      const bot = new MyBot(\r\n        \"botToken\",\r\n        {\r\n            middlewares: [\r\n                provider.get<Scenes.Stage<any>>(\"mainStage\").middleware(),\r\n            ],\r\n            interactors: {\r\n                keyboards: [\r\n                    provider.get(\"botKeyboard1\")\r\n                ],\r\n                inlineKeyboards: [\r\n                    provider.get(\"botInlineKeyboard1\")\r\n                ],\r\n                commands: [\r\n                    provider.get(\"startCommand\")\r\n                ]\r\n            },\r\n            translatorMiddleware: new I18n({\r\n               directory: path.join(process.cwd(), '/assets/locales'),\r\n               defaultLanguage: 'en',\r\n               sessionName: 'session',\r\n               useSession: true,\r\n               allowMissing: true,\r\n               defaultLanguageOnMissing: true,\r\n            }).middleware(),\r\n            session: botConfig.redisUrl ? new RedisSession({\r\n                store: {\r\n                    url: botConfig.redisUrl!,\r\n                    host: '127.0.0.1',\r\n                    port: 6379,\r\n                    ...(botConfig.redisUrl?.startsWith('rediss') ? {tls: {}} : {})\r\n                },\r\n                getSessionKey: (ctx) => {\r\n                    if (!ctx.from || !ctx.chat) {\r\n                        return\r\n                    }\r\n                    return `MyBot|${ctx.from.id}:${ctx.chat.id}`\r\n                }\r\n            }) : session(),\r\n            testEnv: botConfig.testEnv\r\n        }\r\n      );   \r\n      ```\r\n      The bots core function that makes a request to the api has been updated.  \r\n      This was done to enforce a better *error handling*. The function looks like the following:  \r\n      ```\r\n      async function mutateTelegrafAPICallFunction(tg: Telegram) {\r\n         const oldCallApi: typeof tg.callApi = tg.callApi.bind(tg);\r\n         tg.callApi = async function newCallApi(method, payload, signal) {\r\n            return oldCallApi(method, payload, signal)\r\n               .then((value) => {\r\n                  return Either.right(new Success(value))\r\n               })\r\n               .catch((e) => {\r\n                  console.log(\"Error caught in callApi\\n\", e)\r\n                  return Either.left(new SimpleFailure(e.message))\r\n               }) as any;\r\n         };\r\n      }\r\n      ```\r\n      As you can see from the function, any call to the telegram API responds with an *Either*.  \r\n      This forces the consumer to handle both error and valid value cases, if the consumer plans to work with the API call response.   \r\n      If not at least the error will be caught and logged to the console, preventing the whole application from crashing.  \r\n      This is why the return type of all functions in the *TelegrafContext* has been altered from the original type.    \r\n      Example: \r\n      ```\r\n      ...\r\n      \r\n      reply(text: string, extra?: tt.ExtraReplyMessage): Promise<Either<Failure, Success<tt.Message>>>\r\n      \r\n      ...\r\n      ```\r\n","readmeFilename":"README.md"}