diff --git a/.gitignore b/.gitignore index ba81622..fcf4aa2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ node_modules .env -build \ No newline at end of file +# The build folder stores the compiled files and will not be pushed to the repository +build +# The storage folder stores log-in credentials and should not be pushed to the repository +storage \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..288bc17 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2076 @@ +{ + "name": "flerekommunik", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "flerekommunik", + "version": "1.0.0", + "license": "DBAJ", + "dependencies": { + "@nodegui/nodegui": "^0.70.0", + "dotenv": "^16.4.6", + "jsonc": "^2.0.0", + "tdl": "^8.0.1", + "telegram": "^2.26.8", + "typescript": "^5.7.2" + }, + "devDependencies": { + "@types/node": "^22.10.1" + } + }, + "node_modules/@cryptography/aes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@cryptography/aes/-/aes-0.1.1.tgz", + "integrity": "sha512-PcYz4FDGblO6tM2kSC+VzhhK62vml6k6/YAkiWtyPvrgJVfnDRoHGDtKn5UiaRRUrvUTTocBpvc2rRgTCqxjsg==", + "license": "GPL-3.0-or-later" + }, + "node_modules/@nodegui/artifact-installer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nodegui/artifact-installer/-/artifact-installer-1.1.0.tgz", + "integrity": "sha512-x/rIewhjnLhf2b3lAy5ZIPSTS39LRpwMTKeEg6sn4RwvWwyNmreGzpvGi6Gkbl6FUpftn70nfOBOpaeO3hO8PQ==", + "license": "ISC", + "dependencies": { + "7zip-min": "^1.1.1", + "env-paths": "^2.2.0", + "make-dir": "^3.0.0", + "node-fetch": "^2.6.0", + "progress": "^2.0.3" + } + }, + "node_modules/@nodegui/nodegui": { + "version": "0.70.0", + "resolved": "https://registry.npmjs.org/@nodegui/nodegui/-/nodegui-0.70.0.tgz", + "integrity": "sha512-36ijo9kEaQzO5Hla4m2n6XNJ1xIPTR/WZwuoeaJ4vPRGm6zJhgMaV+KvAYq+cv66k0C91GchovMnmGrQg6ZEeQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nodegui/artifact-installer": "^1.1.0", + "@nodegui/qode": "^18.12.1", + "cmake-js": "^6.2.1", + "cross-env": "^7.0.3", + "cuid": "^2.1.8", + "manage-path": "^2.0.0", + "memoize-one": "^5.2.1", + "node-addon-api": "^4.0.0", + "postcss": "^7.0.17", + "postcss-nodegui-autoprefixer": "0.0.7", + "tar": "^6.0.1" + }, + "bin": { + "qode": "scripts/qode.js" + }, + "engines": { + "node": ">=14.x.x" + }, + "funding": { + "url": "https://github.com/sponsors/a7ul" + } + }, + "node_modules/@nodegui/qode": { + "version": "18.12.1", + "resolved": "https://registry.npmjs.org/@nodegui/qode/-/qode-18.12.1.tgz", + "integrity": "sha512-iJdNwMPif+NkbZeXQPek6IfKmmHt04Iy1dlRGVFaICU5nSpNDsSmzGxHrVdllQWGGzqvre82BOV3CgMxclGZtQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.1", + "progress": "^2.0.3", + "tar": "^6.1.6" + } + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/7zip-bin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "license": "MIT" + }, + "node_modules/7zip-min": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/7zip-min/-/7zip-min-1.4.5.tgz", + "integrity": "sha512-S+FzNwJFKF5LgQYs+hPQo+qeffdi+259Ak63rWEfkHP9arsU8gbe5K+4HscuWN1ih1lP1gTjDNPddbU0qhPtHQ==", + "license": "MIT", + "dependencies": { + "7zip-bin": "5.1.1" + } + }, + "node_modules/ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==", + "license": "MIT" + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/are-we-there-yet": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz", + "integrity": "sha512-Zfw6bteqM9gQXZ1BIWOgM8xEwMrUGoyL8nW13+O+OOgNX3YhuDN1GDgg1NzdTlmm3j+9sHy7uBZ12r+z9lXnZQ==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.0 || ^1.1.13" + } + }, + "node_modules/are-we-there-yet/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/async-mutex": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.3.2.tgz", + "integrity": "sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha512-Zy8ZXMyxIT6RMTeY7OP/bDndfj6bwCan7SS98CEndS6deHwWPpseeHlwarNcBim+etXnF9HBc1non5JgDaJU1g==", + "license": "MIT" + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/cmake-js": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-6.3.2.tgz", + "integrity": "sha512-7MfiQ/ijzeE2kO+WFB9bv4QP5Dn2yVaAP2acFJr4NIFy2hT4w6O4EpOTLNcohR5IPX7M4wNf/5taIqMj7UA9ug==", + "license": "MIT", + "dependencies": { + "axios": "^0.21.1", + "bluebird": "^3", + "debug": "^4", + "fs-extra": "^5.0.0", + "is-iojs": "^1.0.1", + "lodash": "^4", + "memory-stream": "0", + "npmlog": "^1.2.0", + "rc": "^1.2.7", + "semver": "^5.0.3", + "splitargs": "0", + "tar": "^4", + "unzipper": "^0.8.13", + "url-join": "0", + "which": "^1.0.9", + "yargs": "^3.6.0" + }, + "bin": { + "cmake-js": "bin/cmake-js" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/cmake-js/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/cmake-js/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/cmake-js/node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "license": "ISC", + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/cmake-js/node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "license": "ISC", + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/cmake-js/node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "license": "MIT", + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/cmake-js/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/cmake-js/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/cmake-js/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/cmake-js/node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "license": "ISC", + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/cmake-js/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC" + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cuid": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/cuid/-/cuid-2.1.8.tgz", + "integrity": "sha512-xiEMER6E7TlTPnDxrM4eRiC6TRgjNX9xzEZ5U/Se2YJKr7Mq4pJn/2XEHjl3STcSh96GmkHPcBXLES8M29wyyg==", + "deprecated": "Cuid and other k-sortable and non-cryptographic ids (Ulid, ObjectId, KSUID, all UUIDs) are all insecure. Use @paralleldrive/cuid2 instead.", + "license": "MIT" + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT" + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "16.4.6", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.6.tgz", + "integrity": "sha512-JhcR/+KIjkkjiU8yEpaB/USlzVi3i5whwOjpIRNGi9svKEXZSe+Qp6IWAjFjv+2GViAoDRCUv/QLNziQxsLqDg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/fstream/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC" + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-iojs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-iojs/-/is-iojs-1.1.0.tgz", + "integrity": "sha512-tLn1j3wYSL6DkvEI+V/j0pKohpa5jk+ER74v6S4SgCXnjS0WA+DoZbwZBrrhgwksMvtuwndyGeG5F8YMsoBzSA==", + "license": "MIT" + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "license": "MIT" + }, + "node_modules/jsonc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jsonc/-/jsonc-2.0.0.tgz", + "integrity": "sha512-B281bLCT2TRMQa+AQUQY5AGcqSOXBOKaYGP4wDzoA/+QswUfN8sODektbPEs9Baq7LGKun5jQbNFpzwGuVYKhw==", + "license": "MIT", + "dependencies": { + "fast-safe-stringify": "^2.0.6", + "graceful-fs": "^4.1.15", + "mkdirp": "^0.5.1", + "parse-json": "^4.0.0", + "strip-bom": "^4.0.0", + "strip-json-comments": "^3.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jsonc/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/jsonc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", + "license": "MIT", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "license": "ISC" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.pad": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", + "integrity": "sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==", + "license": "MIT" + }, + "node_modules/lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==", + "license": "MIT" + }, + "node_modules/lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==", + "license": "MIT" + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/manage-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/manage-path/-/manage-path-2.0.0.tgz", + "integrity": "sha512-NJhyB+PJYTpxhxZJ3lecIGgh4kwIY2RAh44XvAz9UlqthlQwtPBf62uBVR8XaD8CRuSjQ6TnZH2lNJkbLPZM2A==", + "license": "MIT" + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT" + }, + "node_modules/memory-stream": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-0.0.3.tgz", + "integrity": "sha512-q0D3m846qY6ZkIt+19ZemU5vH56lpOZZwoJc3AICARKh/menBuayQUjAGPrqtHQQMUYERSdOrej92J9kz7LgYA==", + "license": "MMIT", + "dependencies": { + "readable-stream": "~1.0.26-2" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-localstorage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-localstorage/-/node-localstorage-2.2.1.tgz", + "integrity": "sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw==", + "license": "MIT", + "dependencies": { + "write-file-atomic": "^1.1.4" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/npmlog": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz", + "integrity": "sha512-1J5KqSRvESP6XbjPaXt2H6qDzgizLTM7x0y1cXIjP2PpvdCqyNC7TO3cPRKsuYlElbi/DwkzRRdG2zpmE0IktQ==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "ansi": "~0.3.0", + "are-we-there-yet": "~1.0.0", + "gauge": "~1.2.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", + "license": "MIT", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)" + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "license": "ISC" + }, + "node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-nodegui-autoprefixer": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/postcss-nodegui-autoprefixer/-/postcss-nodegui-autoprefixer-0.0.7.tgz", + "integrity": "sha512-cPNAIz9siY+ssc3ecdPaeflfdc2HRS6tgQGu59YKLiiaZT3iMw578l1LTFfmEnJtv1RvNEQUNn/YjHyySXla2Q==", + "license": "MIT", + "dependencies": { + "postcss": "^7.0.17" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/real-cancellable-promise": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/real-cancellable-promise/-/real-cancellable-promise-1.2.0.tgz", + "integrity": "sha512-FYhmx1FVSgoPRjneoTjh+EKZcNb8ijl/dyatTzase5eujYhVrLNDOiIY6AgQq7GU1kOoLgEd9jLVbhFg8k8dOQ==", + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", + "license": "ISC", + "engines": { + "node": "*" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/splitargs": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz", + "integrity": "sha512-UUFYD2oWbNwULH6WoVtLUOw8ch586B+HUqcsAjjjeoBQAM1bD4wZRXu01koaxyd8UeYpybWqW4h+lO1Okv40Tg==", + "license": "ISC" + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause" + }, + "node_modules/store2": { + "version": "2.14.3", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.3.tgz", + "integrity": "sha512-4QcZ+yx7nzEFiV4BMLnr/pRa5HYzNITX2ri0Zh6sT9EyQHbBHacC6YigllUPU9X3D0f/22QCgfokpKs52YRrUg==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "license": "MIT" + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tdl": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/tdl/-/tdl-8.0.1.tgz", + "integrity": "sha512-DzwZ96tXZfTC4YueQWXuJUJt4YLIMBSZY7JydxQpRU8X/My+tYY7t8OnG0zZBG468UroEhjTAlTk/y4hcFvkyQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "node-addon-api": "^7.1.0", + "node-gyp-build": "^4.8.1" + }, + "engines": { + "node": ">=16.14.0" + } + }, + "node_modules/tdl/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/tdl/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/tdl/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, + "node_modules/telegram": { + "version": "2.26.8", + "resolved": "https://registry.npmjs.org/telegram/-/telegram-2.26.8.tgz", + "integrity": "sha512-5sIb43Fd7HxjXQZqKWMhNTmdMOlG3QkuhR2xPleUA5B8BxOZl9IwrDwFdiC7aezGVTcD6oJ1d4cloUySjmCX/A==", + "license": "MIT", + "dependencies": { + "@cryptography/aes": "^0.1.1", + "async-mutex": "^0.3.0", + "big-integer": "^1.6.48", + "buffer": "^6.0.3", + "htmlparser2": "^6.1.0", + "mime": "^3.0.0", + "node-localstorage": "^2.2.1", + "pako": "^2.0.3", + "path-browserify": "^1.0.1", + "real-cancellable-promise": "^1.1.1", + "socks": "^2.6.2", + "store2": "^2.13.0", + "ts-custom-error": "^3.2.0", + "websocket": "^1.0.34" + }, + "optionalDependencies": { + "bufferutil": "^4.0.3", + "utf-8-validate": "^5.0.5" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "engines": { + "node": "*" + } + }, + "node_modules/ts-custom-error": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/ts-custom-error/-/ts-custom-error-3.3.1.tgz", + "integrity": "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unzipper": { + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz", + "integrity": "sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w==", + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "~1.0.10", + "listenercount": "~1.0.1", + "readable-stream": "~2.1.5", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, + "node_modules/unzipper/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/unzipper/node_modules/process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==", + "license": "MIT" + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "integrity": "sha512-NkXT2AER7VKXeXtJNSaWLpWIhmtSE3K2PguaLEeWr4JILghcIKqoLt1A3wHrnpDC5+ekf8gfk1GKWkFXe4odMw==", + "license": "MIT", + "dependencies": { + "buffer-shims": "^1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/url-join": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", + "integrity": "sha512-H6dnQ/yPAAVzMQRvEvyz01hhfQL5qRWSEt7BX8t9DqnPw9BjMb64fjIRq76Uvf1hkHp+mTZvEVJ5guXOT0Xqaw==", + "license": "MIT" + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/websocket": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", + "license": "Apache-2.0", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==", + "license": "MIT", + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "license": "MIT", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", + "integrity": "sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw==", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "slide": "^1.1.5" + } + }, + "node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "license": "ISC" + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "license": "MIT", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha512-ONJZiimStfZzhKamYvR/xvmgW3uEkAUFSP91y2caTEPhzF6uP2JfPiVZcq66b/YR0C3uitxSV7+T1x8p5bkmMg==", + "license": "MIT", + "dependencies": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + } + } + } +} diff --git a/package.json b/package.json index 2769c95..718036c 100644 --- a/package.json +++ b/package.json @@ -2,10 +2,24 @@ "name": "flerekommunik", "version": "1.0.0", "description": "FlereKommunik is a project that aims to remove the need to install an app for each communication service you use. It does this by providing a simple, easy to use interface that allows you to access all of your accounts in one, simple place.", - "main": "index.js", + "main": "./build/index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc", + "run": "node .", + "build-run": "tsc && node ." }, - "author": "", - "license": "ISC" + "author": "StellaraUmbrix", + "license": "DBAJ", + "dependencies": { + "@nodegui/nodegui": "^0.70.0", + "dotenv": "^16.4.6", + "jsonc": "^2.0.0", + "tdl": "^8.0.1", + "telegram": "^2.26.8", + "typescript": "^5.7.2" + }, + "devDependencies": { + "@types/node": "^22.10.1" + } } diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/telegram/telegram.ts b/src/telegram/telegram.ts new file mode 100644 index 0000000..1426225 --- /dev/null +++ b/src/telegram/telegram.ts @@ -0,0 +1,110 @@ +import * as tdl from 'tdl'; +import dotenv from 'dotenv'; +import { jsonc } from 'jsonc'; +import fs from 'fs'; +import { getTdjson } from 'prebuilt-tdlib'; +tdl.configure({ tdjson: getTdjson() }); + +/** Creates a Client instance to use to communicate with the Telegram API. + * @param appid The app id of the Telegram app. + * @param apphash The app hash of the Telegram app. + * @returns A tuple containing a boolean and the client instance if successful, or a boolean and an error message if unsuccessful. +*/ +function _createClient(appid? : number, apphash? : string) { + // Check if the app(id/hash) are either in the dotenv, the jsonc file or the arguments + if (!appid || !apphash) { + dotenv.config(); + const jsoncFile = jsonc.parse(fs.readFileSync('config.jsonc', 'utf-8')); + appid = appid || process.env.APP_ID || jsoncFile.APP_ID; + apphash = apphash || process.env.APP_HASH || jsoncFile.APP_HASH; + } + // If the app(id/hash) are not found, throw an error + if (!appid || !apphash) { + return [false, 'AppHashOrIDNotFound']; + } + // Create the client + const client = tdl.createClient({ + apiId: appid, + apiHash: apphash, + tdlibParameters: { + // TODO: Change parameters to allow secret chats and device info. + // at the moment, trying to pass anything throws an error. + } + + }).on('error', (err) => { // Just in case an invalid app(id/hash) is provided or Telegram's servers are on fire + return [false, err]; + }); + return [true, client]; +} + +/** + * Logs in to the Telegram API. + * @returns A tuple containing a boolean and the client instance if successful, or a boolean and an error message if unsuccessful. + */ +module.exports._login = async function () { + const [success, client] = _createClient(); + if (!success || typeof client !== 'object') { + return [false, client]; + } + await client.login(); // Temp: Prompt the terminal for the phone number and the code + const me = await client.invoke({_: 'getMe' }); + console.log('Logged in as ', me); + return [true, client]; +}; + +/** + * Logs out of the Telegram API. This also closes the client instance. + * @param client The client instance to log out of. + * @returns A boolean indicating whether the logout was successful, or an error message if unsuccessful. + */ +module.exports._destroy = async function (client : tdl.Client) { + try { + await client.close(); + return true; + } catch (err) { + return err; + } +}; + +// Helper functions + +/** Returns the logged in user's information. + * @param client The client instance to get the information from. + * @returns An object containing the user's information, or an error message if unsuccessful. +*/ +module.exports.getMe = async function (client : tdl.Client) { + try { + const me = await client.invoke({_: 'getMe' }); + return me; + } catch (err) { + return err; + } +}; + +/** Returns the user's information based on the user id. + * @param client The client instance to get the information from. + * @param userId The id of the user to get the information of. + * @returns An object containing the user's information, or an error message if unsuccessful. +*/ +module.exports.getUser = async function (client : tdl.Client, userId : number) { + try { + const user = await client.invoke({_: 'getUser', user_id:userId }); + return user; + } catch (err) { + return err; + } +}; + +/** Returns the chat's information based on the chat id. + * @param client The client instance to get the information from. + * @param chatId The id of the chat to get the information of. + * @returns An object containing the chat's information, or an error message if unsuccessful. +*/ +module.exports.getChat = async function (client : tdl.Client, chatId : number) { + try { + const chat = await client.invoke({_: 'getChat', chat_id:chatId }); + return chat; + } catch (err) { + return err; + } +}; \ No newline at end of file diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..f3988c2 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,4 @@ +interface Message { + platform: string; + +} \ No newline at end of file diff --git a/tdlib-types.d.ts b/tdlib-types.d.ts new file mode 100644 index 0000000..4eb3c42 --- /dev/null +++ b/tdlib-types.d.ts @@ -0,0 +1,21196 @@ +// Types for TDLib v1.8.0 +// Generated using tdl-install-types v0.3.0 +declare module 'tdlib-types' { + export type error = { + /** + * An object of this type can be returned on every function call, in case of an + * error + */ + _: 'error', + /** + * Error code; subject to future changes. If the error code is 406, the error message + * must not be processed in any way and must not be displayed to the user + */ + code: number, + /** Error message; subject to future changes */ + message: string, + } + + export type error$Input = { + /** + * An object of this type can be returned on every function call, in case of an + * error + */ + readonly _: 'error', + /** + * Error code; subject to future changes. If the error code is 406, the error message + * must not be processed in any way and must not be displayed to the user + */ + readonly code?: number, + /** Error message; subject to future changes */ + readonly message?: string, + } + + export type ok = { + /** + * An object of this type is returned on a successful function call for certain + * functions + */ + _: 'ok', + } + + export type tdlibParameters$Input = { + /** Contains parameters for TDLib initialization */ + readonly _: 'tdlibParameters', + /** + * If set to true, the Telegram test environment will be used instead of the production + * environment + */ + readonly use_test_dc?: boolean, + /** + * The path to the directory for the persistent database; if empty, the current + * working directory will be used + */ + readonly database_directory?: string, + /** + * The path to the directory for storing files; if empty, database_directory will + * be used + */ + readonly files_directory?: string, + /** + * If set to true, information about downloaded and uploaded files will be saved + * between application restarts + */ + readonly use_file_database?: boolean, + /** + * If set to true, the library will maintain a cache of users, basic groups, supergroups, + * channels and secret chats. Implies use_file_database + */ + readonly use_chat_info_database?: boolean, + /** + * If set to true, the library will maintain a cache of chats and messages. Implies + * use_chat_info_database + */ + readonly use_message_database?: boolean, + /** If set to true, support for secret chats will be enabled */ + readonly use_secret_chats?: boolean, + /** Application identifier for Telegram API access, which can be obtained at https://my.telegram.org */ + readonly api_id?: number, + /** + * Application identifier hash for Telegram API access, which can be obtained at + * https://my.telegram.org + */ + readonly api_hash?: string, + /** IETF language tag of the user's operating system language; must be non-empty */ + readonly system_language_code?: string, + /** Model of the device the application is being run on; must be non-empty */ + readonly device_model?: string, + /** + * Version of the operating system the application is being run on. If empty, the + * version is automatically detected by TDLib + */ + readonly system_version?: string, + /** Application version; must be non-empty */ + readonly application_version?: string, + /** If set to true, old files will automatically be deleted */ + readonly enable_storage_optimizer?: boolean, + /** + * If set to true, original file names will be ignored. Otherwise, downloaded files + * will be saved under names as close as possible to the original name + */ + readonly ignore_file_names?: boolean, + } + + export type authenticationCodeTypeTelegramMessage = { + /** + * An authentication code is delivered via a private Telegram message, which can + * be viewed from another active session + */ + _: 'authenticationCodeTypeTelegramMessage', + /** Length of the code */ + length: number, + } + + export type authenticationCodeTypeSms = { + /** + * An authentication code is delivered via an SMS message to the specified phone + * number + */ + _: 'authenticationCodeTypeSms', + /** Length of the code */ + length: number, + } + + export type authenticationCodeTypeCall = { + /** + * An authentication code is delivered via a phone call to the specified phone + * number + */ + _: 'authenticationCodeTypeCall', + /** Length of the code */ + length: number, + } + + export type authenticationCodeTypeFlashCall = { + /** + * An authentication code is delivered by an immediately canceled call to the specified + * phone number. The phone number that calls is the code that must be entered automatically + */ + _: 'authenticationCodeTypeFlashCall', + /** Pattern of the phone number from which the call will be made */ + pattern: string, + } + + export type authenticationCodeTypeMissedCall = { + /** + * An authentication code is delivered by an immediately canceled call to the specified + * phone number. The last digits of the phone number that calls are the code that + * must be entered manually by the user + */ + _: 'authenticationCodeTypeMissedCall', + /** Prefix of the phone number from which the call will be made */ + phone_number_prefix: string, + /** Number of digits in the code, excluding the prefix */ + length: number, + } + + export type authenticationCodeInfo = { + /** Information about the authentication code that was sent */ + _: 'authenticationCodeInfo', + /** A phone number that is being authenticated */ + phone_number: string, + /** The way the code was sent to the user */ + type: AuthenticationCodeType, + /** The way the next code will be sent to the user; may be null */ + next_type?: AuthenticationCodeType, + /** Timeout before the code can be re-sent, in seconds */ + timeout: number, + } + + export type emailAddressAuthenticationCodeInfo = { + /** Information about the email address authentication code that was sent */ + _: 'emailAddressAuthenticationCodeInfo', + /** Pattern of the email address to which an authentication code was sent */ + email_address_pattern: string, + /** Length of the code; 0 if unknown */ + length: number, + } + + export type textEntity = { + /** Represents a part of the text that needs to be formatted in some unusual way */ + _: 'textEntity', + /** Offset of the entity, in UTF-16 code units */ + offset: number, + /** Length of the entity, in UTF-16 code units */ + length: number, + /** Type of the entity */ + type: TextEntityType, + } + + export type textEntity$Input = { + /** Represents a part of the text that needs to be formatted in some unusual way */ + readonly _: 'textEntity', + /** Offset of the entity, in UTF-16 code units */ + readonly offset?: number, + /** Length of the entity, in UTF-16 code units */ + readonly length?: number, + /** Type of the entity */ + readonly type?: TextEntityType$Input, + } + + export type textEntities = { + /** Contains a list of text entities */ + _: 'textEntities', + /** List of text entities */ + entities: Array, + } + + export type formattedText = { + /** A text with some entities */ + _: 'formattedText', + /** The text */ + text: string, + /** + * Entities contained in the text. Entities can be nested, but must not mutually + * intersect with each other. Pre, Code and PreCode entities can't contain other + * entities. Bold, Italic, Underline and Strikethrough entities can contain and + * to be contained in all other entities. All other entities can't contain each + * other + */ + entities: Array, + } + + export type formattedText$Input = { + /** A text with some entities */ + readonly _: 'formattedText', + /** The text */ + readonly text?: string, + /** + * Entities contained in the text. Entities can be nested, but must not mutually + * intersect with each other. Pre, Code and PreCode entities can't contain other + * entities. Bold, Italic, Underline and Strikethrough entities can contain and + * to be contained in all other entities. All other entities can't contain each + * other + */ + readonly entities?: ReadonlyArray, + } + + export type termsOfService = { + /** Contains Telegram terms of service */ + _: 'termsOfService', + /** Text of the terms of service */ + text: formattedText, + /** The minimum age of a user to be able to accept the terms; 0 if any */ + min_user_age: number, + /** True, if a blocking popup with terms of service must be shown to the user */ + show_popup: boolean, + } + + export type authorizationStateWaitTdlibParameters = { + /** TDLib needs TdlibParameters for initialization */ + _: 'authorizationStateWaitTdlibParameters', + } + + export type authorizationStateWaitEncryptionKey = { + /** TDLib needs an encryption key to decrypt the local database */ + _: 'authorizationStateWaitEncryptionKey', + /** True, if the database is currently encrypted */ + is_encrypted: boolean, + } + + export type authorizationStateWaitPhoneNumber = { + /** + * TDLib needs the user's phone number to authorize. Call `setAuthenticationPhoneNumber` + * to provide the phone number, or use `requestQrCodeAuthentication`, or `checkAuthenticationBotToken` + * for other authentication options + */ + _: 'authorizationStateWaitPhoneNumber', + } + + export type authorizationStateWaitCode = { + /** TDLib needs the user's authentication code to authorize */ + _: 'authorizationStateWaitCode', + /** Information about the authorization code that was sent */ + code_info: authenticationCodeInfo, + } + + export type authorizationStateWaitOtherDeviceConfirmation = { + /** + * The user needs to confirm authorization on another logged in device by scanning + * a QR code with the provided link + */ + _: 'authorizationStateWaitOtherDeviceConfirmation', + /** A tg:// URL for the QR code. The link will be updated frequently */ + link: string, + } + + export type authorizationStateWaitRegistration = { + /** + * The user is unregistered and need to accept terms of service and enter their + * first name and last name to finish registration + */ + _: 'authorizationStateWaitRegistration', + /** Telegram terms of service */ + terms_of_service: termsOfService, + } + + export type authorizationStateWaitPassword = { + /** + * The user has been authorized, but needs to enter a password to start using the + * application + */ + _: 'authorizationStateWaitPassword', + /** Hint for the password; may be empty */ + password_hint: string, + /** True, if a recovery email address has been set up */ + has_recovery_email_address: boolean, + /** + * Pattern of the email address to which the recovery email was sent; empty until + * a recovery email has been sent + */ + recovery_email_address_pattern: string, + } + + export type authorizationStateReady = { + /** The user has been successfully authorized. TDLib is now ready to answer queries */ + _: 'authorizationStateReady', + } + + export type authorizationStateLoggingOut = { + /** The user is currently logging out */ + _: 'authorizationStateLoggingOut', + } + + export type authorizationStateClosing = { + /** + * TDLib is closing, all subsequent queries will be answered with the error 500. + * Note that closing TDLib can take a while. All resources will be freed only after + * authorizationStateClosed has been received + */ + _: 'authorizationStateClosing', + } + + export type authorizationStateClosed = { + /** + * TDLib client is in its final state. All databases are closed and all resources + * are released. No other updates will be received after this. All queries will + * be responded to with error code 500. To continue working, one must create a + * new instance of the TDLib client + */ + _: 'authorizationStateClosed', + } + + export type passwordState = { + /** Represents the current state of 2-step verification */ + _: 'passwordState', + /** True, if a 2-step verification password is set */ + has_password: boolean, + /** Hint for the password; may be empty */ + password_hint: string, + /** True, if a recovery email is set */ + has_recovery_email_address: boolean, + /** True, if some Telegram Passport elements were saved */ + has_passport_data: boolean, + /** + * Information about the recovery email address to which the confirmation email + * was sent; may be null + */ + recovery_email_address_code_info?: emailAddressAuthenticationCodeInfo, + /** + * If not 0, point in time (Unix timestamp) after which the password can be reset + * immediately using resetPassword + */ + pending_reset_date: number, + } + + export type recoveryEmailAddress = { + /** Contains information about the current recovery email address */ + _: 'recoveryEmailAddress', + /** Recovery email address */ + recovery_email_address: string, + } + + export type temporaryPasswordState = { + /** + * Returns information about the availability of a temporary password, which can + * be used for payments + */ + _: 'temporaryPasswordState', + /** True, if a temporary password is available */ + has_password: boolean, + /** Time left before the temporary password expires, in seconds */ + valid_for: number, + } + + export type localFile = { + /** Represents a local file */ + _: 'localFile', + /** Local path to the locally available file part; may be empty */ + path: string, + /** True, if it is possible to download or generate the file */ + can_be_downloaded: boolean, + /** True, if the file can be deleted */ + can_be_deleted: boolean, + /** + * True, if the file is currently being downloaded (or a local copy is being generated + * by some other means) + */ + is_downloading_active: boolean, + /** True, if the local copy is fully available */ + is_downloading_completed: boolean, + /** + * Download will be started from this offset. downloaded_prefix_size is calculated + * from this offset + */ + download_offset: number, + /** + * If is_downloading_completed is false, then only some prefix of the file starting + * from download_offset is ready to be read. downloaded_prefix_size is the size + * of that prefix in bytes + */ + downloaded_prefix_size: number, + /** + * Total downloaded file size, in bytes. Can be used only for calculating download + * progress. The actual file size may be bigger, and some parts of it may contain + * garbage + */ + downloaded_size: number, + } + + export type remoteFile = { + /** Represents a remote file */ + _: 'remoteFile', + /** + * Remote file identifier; may be empty. Can be used by the current user across + * application restarts or even from other devices. Uniquely identifies a file, + * but a file can have a lot of different valid identifiers. If the ID starts with + * "http://" or "https://", it represents the HTTP URL of the file. TDLib is currently + * unable to download files if only their URL is known. If downloadFile is called + * on such a file or if it is sent to a secret chat, TDLib starts a file generation + * process by sending updateFileGenerationStart to the application with the HTTP + * URL in the original_path and "#url#" as the conversion string. Application must + * generate the file by downloading it to the specified location + */ + id: string, + /** + * Unique file identifier; may be empty if unknown. The unique file identifier + * which is the same for the same file even for different users and is persistent + * over time + */ + unique_id: string, + /** + * True, if the file is currently being uploaded (or a remote copy is being generated + * by some other means) + */ + is_uploading_active: boolean, + /** True, if a remote copy is fully available */ + is_uploading_completed: boolean, + /** Size of the remote available part of the file, in bytes; 0 if unknown */ + uploaded_size: number, + } + + export type file = { + /** Represents a file */ + _: 'file', + /** Unique file identifier */ + id: number, + /** File size, in bytes; 0 if unknown */ + size: number, + /** + * Approximate file size in bytes in case the exact file size is unknown. Can be + * used to show download/upload progress + */ + expected_size: number, + /** Information about the local copy of the file */ + local: localFile, + /** Information about the remote copy of the file */ + remote: remoteFile, + } + + export type inputFileId = { + /** A file defined by its unique ID */ + _: 'inputFileId', + /** Unique file identifier */ + id: number, + } + + export type inputFileId$Input = { + /** A file defined by its unique ID */ + readonly _: 'inputFileId', + /** Unique file identifier */ + readonly id?: number, + } + + export type inputFileRemote = { + /** + * A file defined by its remote ID. The remote ID is guaranteed to be usable only + * if the corresponding file is still accessible to the user and known to TDLib. + * For example, if the file is from a message, then the message must be not deleted + * and accessible to the user. If the file database is disabled, then the corresponding + * object with the file must be preloaded by the application + */ + _: 'inputFileRemote', + /** Remote file identifier */ + id: string, + } + + export type inputFileRemote$Input = { + /** + * A file defined by its remote ID. The remote ID is guaranteed to be usable only + * if the corresponding file is still accessible to the user and known to TDLib. + * For example, if the file is from a message, then the message must be not deleted + * and accessible to the user. If the file database is disabled, then the corresponding + * object with the file must be preloaded by the application + */ + readonly _: 'inputFileRemote', + /** Remote file identifier */ + readonly id?: string, + } + + export type inputFileLocal = { + /** A file defined by a local path */ + _: 'inputFileLocal', + /** Local path to the file */ + path: string, + } + + export type inputFileLocal$Input = { + /** A file defined by a local path */ + readonly _: 'inputFileLocal', + /** Local path to the file */ + readonly path?: string, + } + + export type inputFileGenerated = { + /** A file generated by the application */ + _: 'inputFileGenerated', + /** + * Local path to a file from which the file is generated; may be empty if there + * is no such file + */ + original_path: string, + /** + * String specifying the conversion applied to the original file; must be persistent + * across application restarts. Conversions beginning with '#' are reserved for + * internal TDLib usage + */ + conversion: string, + /** Expected size of the generated file, in bytes; 0 if unknown */ + expected_size: number, + } + + export type inputFileGenerated$Input = { + /** A file generated by the application */ + readonly _: 'inputFileGenerated', + /** + * Local path to a file from which the file is generated; may be empty if there + * is no such file + */ + readonly original_path?: string, + /** + * String specifying the conversion applied to the original file; must be persistent + * across application restarts. Conversions beginning with '#' are reserved for + * internal TDLib usage + */ + readonly conversion?: string, + /** Expected size of the generated file, in bytes; 0 if unknown */ + readonly expected_size?: number, + } + + export type photoSize = { + /** Describes an image in JPEG format */ + _: 'photoSize', + /** Image type (see https://core.telegram.org/constructor/photoSize) */ + type: string, + /** Information about the image file */ + photo: file, + /** Image width */ + width: number, + /** Image height */ + height: number, + /** + * Sizes of progressive JPEG file prefixes, which can be used to preliminarily + * show the image; in bytes + */ + progressive_sizes: Array, + } + + export type minithumbnail = { + /** Thumbnail image of a very poor quality and low resolution */ + _: 'minithumbnail', + /** Thumbnail width, usually doesn't exceed 40 */ + width: number, + /** Thumbnail height, usually doesn't exceed 40 */ + height: number, + /** The thumbnail in JPEG format */ + data: string /* base64 */, + } + + export type thumbnailFormatJpeg = { + /** The thumbnail is in JPEG format */ + _: 'thumbnailFormatJpeg', + } + + export type thumbnailFormatPng = { + /** The thumbnail is in PNG format. It will be used only for background patterns */ + _: 'thumbnailFormatPng', + } + + export type thumbnailFormatWebp = { + /** The thumbnail is in WEBP format. It will be used only for some stickers */ + _: 'thumbnailFormatWebp', + } + + export type thumbnailFormatGif = { + /** + * The thumbnail is in static GIF format. It will be used only for some bot inline + * results + */ + _: 'thumbnailFormatGif', + } + + export type thumbnailFormatTgs = { + /** The thumbnail is in TGS format. It will be used only for animated sticker sets */ + _: 'thumbnailFormatTgs', + } + + export type thumbnailFormatMpeg4 = { + /** + * The thumbnail is in MPEG4 format. It will be used only for some animations and + * videos + */ + _: 'thumbnailFormatMpeg4', + } + + export type thumbnail = { + /** Represents a thumbnail */ + _: 'thumbnail', + /** Thumbnail format */ + format: ThumbnailFormat, + /** Thumbnail width */ + width: number, + /** Thumbnail height */ + height: number, + /** The thumbnail */ + file: file, + } + + export type maskPointForehead = { + /** The mask is placed relatively to the forehead */ + _: 'maskPointForehead', + } + + export type maskPointForehead$Input = { + /** The mask is placed relatively to the forehead */ + readonly _: 'maskPointForehead', + } + + export type maskPointEyes = { + /** The mask is placed relatively to the eyes */ + _: 'maskPointEyes', + } + + export type maskPointEyes$Input = { + /** The mask is placed relatively to the eyes */ + readonly _: 'maskPointEyes', + } + + export type maskPointMouth = { + /** The mask is placed relatively to the mouth */ + _: 'maskPointMouth', + } + + export type maskPointMouth$Input = { + /** The mask is placed relatively to the mouth */ + readonly _: 'maskPointMouth', + } + + export type maskPointChin = { + /** The mask is placed relatively to the chin */ + _: 'maskPointChin', + } + + export type maskPointChin$Input = { + /** The mask is placed relatively to the chin */ + readonly _: 'maskPointChin', + } + + export type maskPosition = { + /** Position on a photo where a mask is placed */ + _: 'maskPosition', + /** Part of the face, relative to which the mask is placed */ + point: MaskPoint, + /** + * Shift by X-axis measured in widths of the mask scaled to the face size, from + * left to right. (For example, -1.0 will place the mask just to the left of the + * default mask position) + */ + x_shift: number, + /** + * Shift by Y-axis measured in heights of the mask scaled to the face size, from + * top to bottom. (For example, 1.0 will place the mask just below the default + * mask position) + */ + y_shift: number, + /** Mask scaling coefficient. (For example, 2.0 means a doubled size) */ + scale: number, + } + + export type maskPosition$Input = { + /** Position on a photo where a mask is placed */ + readonly _: 'maskPosition', + /** Part of the face, relative to which the mask is placed */ + readonly point?: MaskPoint$Input, + /** + * Shift by X-axis measured in widths of the mask scaled to the face size, from + * left to right. (For example, -1.0 will place the mask just to the left of the + * default mask position) + */ + readonly x_shift?: number, + /** + * Shift by Y-axis measured in heights of the mask scaled to the face size, from + * top to bottom. (For example, 1.0 will place the mask just below the default + * mask position) + */ + readonly y_shift?: number, + /** Mask scaling coefficient. (For example, 2.0 means a doubled size) */ + readonly scale?: number, + } + + export type closedVectorPath = { + /** + * Represents a closed vector path. The path begins at the end point of the last + * command + */ + _: 'closedVectorPath', + /** List of vector path commands */ + commands: Array, + } + + export type pollOption = { + /** Describes one answer option of a poll */ + _: 'pollOption', + /** Option text; 1-100 characters */ + text: string, + /** Number of voters for this option, available only for closed or voted polls */ + voter_count: number, + /** The percentage of votes for this option; 0-100 */ + vote_percentage: number, + /** True, if the option was chosen by the user */ + is_chosen: boolean, + /** True, if the option is being chosen by a pending setPollAnswer request */ + is_being_chosen: boolean, + } + + export type pollTypeRegular = { + /** A regular poll */ + _: 'pollTypeRegular', + /** True, if multiple answer options can be chosen simultaneously */ + allow_multiple_answers: boolean, + } + + export type pollTypeRegular$Input = { + /** A regular poll */ + readonly _: 'pollTypeRegular', + /** True, if multiple answer options can be chosen simultaneously */ + readonly allow_multiple_answers?: boolean, + } + + export type pollTypeQuiz = { + /** + * A poll in quiz mode, which has exactly one correct answer option and can be + * answered only once + */ + _: 'pollTypeQuiz', + /** 0-based identifier of the correct answer option; -1 for a yet unanswered poll */ + correct_option_id: number, + /** + * Text that is shown when the user chooses an incorrect answer or taps on the + * lamp icon; 0-200 characters with at most 2 line feeds; empty for a yet unanswered + * poll + */ + explanation: formattedText, + } + + export type pollTypeQuiz$Input = { + /** + * A poll in quiz mode, which has exactly one correct answer option and can be + * answered only once + */ + readonly _: 'pollTypeQuiz', + /** 0-based identifier of the correct answer option; -1 for a yet unanswered poll */ + readonly correct_option_id?: number, + /** + * Text that is shown when the user chooses an incorrect answer or taps on the + * lamp icon; 0-200 characters with at most 2 line feeds; empty for a yet unanswered + * poll + */ + readonly explanation?: formattedText$Input, + } + + export type animation = { + /** Describes an animation file. The animation must be encoded in GIF or MPEG4 format */ + _: 'animation', + /** Duration of the animation, in seconds; as defined by the sender */ + duration: number, + /** Width of the animation */ + width: number, + /** Height of the animation */ + height: number, + /** Original name of the file; as defined by the sender */ + file_name: string, + /** MIME type of the file, usually "image/gif" or "video/mp4" */ + mime_type: string, + /** + * True, if stickers were added to the animation. The list of corresponding sticker + * set can be received using getAttachedStickerSets + */ + has_stickers: boolean, + /** Animation minithumbnail; may be null */ + minithumbnail?: minithumbnail, + /** Animation thumbnail in JPEG or MPEG4 format; may be null */ + thumbnail?: thumbnail, + /** File containing the animation */ + animation: file, + } + + export type audio = { + /** Describes an audio file. Audio is usually in MP3 or M4A format */ + _: 'audio', + /** Duration of the audio, in seconds; as defined by the sender */ + duration: number, + /** Title of the audio; as defined by the sender */ + title: string, + /** Performer of the audio; as defined by the sender */ + performer: string, + /** Original name of the file; as defined by the sender */ + file_name: string, + /** The MIME type of the file; as defined by the sender */ + mime_type: string, + /** The minithumbnail of the album cover; may be null */ + album_cover_minithumbnail?: minithumbnail, + /** + * The thumbnail of the album cover in JPEG format; as defined by the sender. The + * full size thumbnail is supposed to be extracted from the downloaded file; may + * be null + */ + album_cover_thumbnail?: thumbnail, + /** File containing the audio */ + audio: file, + } + + export type document = { + /** Describes a document of any type */ + _: 'document', + /** Original name of the file; as defined by the sender */ + file_name: string, + /** MIME type of the file; as defined by the sender */ + mime_type: string, + /** Document minithumbnail; may be null */ + minithumbnail?: minithumbnail, + /** + * Document thumbnail in JPEG or PNG format (PNG will be used only for background + * patterns); as defined by the sender; may be null + */ + thumbnail?: thumbnail, + /** File containing the document */ + document: file, + } + + export type photo = { + /** Describes a photo */ + _: 'photo', + /** + * True, if stickers were added to the photo. The list of corresponding sticker + * sets can be received using getAttachedStickerSets + */ + has_stickers: boolean, + /** Photo minithumbnail; may be null */ + minithumbnail?: minithumbnail, + /** Available variants of the photo, in different sizes */ + sizes: Array, + } + + export type sticker = { + /** Describes a sticker */ + _: 'sticker', + /** The identifier of the sticker set to which the sticker belongs; 0 if none */ + set_id: string, + /** Sticker width; as defined by the sender */ + width: number, + /** Sticker height; as defined by the sender */ + height: number, + /** Emoji corresponding to the sticker */ + emoji: string, + /** True, if the sticker is an animated sticker in TGS format */ + is_animated: boolean, + /** True, if the sticker is a mask */ + is_mask: boolean, + /** Position where the mask is placed; may be null */ + mask_position?: maskPosition, + /** + * Sticker's outline represented as a list of closed vector paths; may be empty. + * The coordinate system origin is in the upper-left corner + */ + outline: Array, + /** Sticker thumbnail in WEBP or JPEG format; may be null */ + thumbnail?: thumbnail, + /** File containing the sticker */ + sticker: file, + } + + export type video = { + /** Describes a video file */ + _: 'video', + /** Duration of the video, in seconds; as defined by the sender */ + duration: number, + /** Video width; as defined by the sender */ + width: number, + /** Video height; as defined by the sender */ + height: number, + /** Original name of the file; as defined by the sender */ + file_name: string, + /** MIME type of the file; as defined by the sender */ + mime_type: string, + /** + * True, if stickers were added to the video. The list of corresponding sticker + * sets can be received using getAttachedStickerSets + */ + has_stickers: boolean, + /** True, if the video is supposed to be streamed */ + supports_streaming: boolean, + /** Video minithumbnail; may be null */ + minithumbnail?: minithumbnail, + /** Video thumbnail in JPEG or MPEG4 format; as defined by the sender; may be null */ + thumbnail?: thumbnail, + /** File containing the video */ + video: file, + } + + export type videoNote = { + /** + * Describes a video note. The video must be equal in width and height, cropped + * to a circle, and stored in MPEG4 format + */ + _: 'videoNote', + /** Duration of the video, in seconds; as defined by the sender */ + duration: number, + /** Video width and height; as defined by the sender */ + length: number, + /** Video minithumbnail; may be null */ + minithumbnail?: minithumbnail, + /** Video thumbnail in JPEG format; as defined by the sender; may be null */ + thumbnail?: thumbnail, + /** File containing the video */ + video: file, + } + + export type voiceNote = { + /** + * Describes a voice note. The voice note must be encoded with the Opus codec, + * and stored inside an OGG container. Voice notes can have only a single audio + * channel + */ + _: 'voiceNote', + /** Duration of the voice note, in seconds; as defined by the sender */ + duration: number, + /** A waveform representation of the voice note in 5-bit format */ + waveform: string /* base64 */, + /** MIME type of the file; as defined by the sender */ + mime_type: string, + /** File containing the voice note */ + voice: file, + } + + export type animatedEmoji = { + /** Describes an animated representation of an emoji */ + _: 'animatedEmoji', + /** Animated sticker for the emoji */ + sticker: sticker, + /** Emoji modifier fitzpatrick type; 0-6; 0 if none */ + fitzpatrick_type: number, + /** + * File containing the sound to be played when the animated emoji is clicked if + * any; may be null. The sound is encoded with the Opus codec, and stored inside + * an OGG container + */ + sound?: file, + } + + export type contact = { + /** Describes a user contact */ + _: 'contact', + /** Phone number of the user */ + phone_number: string, + /** First name of the user; 1-255 characters in length */ + first_name: string, + /** Last name of the user */ + last_name: string, + /** Additional data about the user in a form of vCard; 0-2048 bytes in length */ + vcard: string, + /** Identifier of the user, if known; otherwise 0 */ + user_id: number, + } + + export type contact$Input = { + /** Describes a user contact */ + readonly _: 'contact', + /** Phone number of the user */ + readonly phone_number?: string, + /** First name of the user; 1-255 characters in length */ + readonly first_name?: string, + /** Last name of the user */ + readonly last_name?: string, + /** Additional data about the user in a form of vCard; 0-2048 bytes in length */ + readonly vcard?: string, + /** Identifier of the user, if known; otherwise 0 */ + readonly user_id?: number, + } + + export type location = { + /** Describes a location on planet Earth */ + _: 'location', + /** Latitude of the location in degrees; as defined by the sender */ + latitude: number, + /** Longitude of the location, in degrees; as defined by the sender */ + longitude: number, + /** + * The estimated horizontal accuracy of the location, in meters; as defined by + * the sender. 0 if unknown + */ + horizontal_accuracy: number, + } + + export type location$Input = { + /** Describes a location on planet Earth */ + readonly _: 'location', + /** Latitude of the location in degrees; as defined by the sender */ + readonly latitude?: number, + /** Longitude of the location, in degrees; as defined by the sender */ + readonly longitude?: number, + /** + * The estimated horizontal accuracy of the location, in meters; as defined by + * the sender. 0 if unknown + */ + readonly horizontal_accuracy?: number, + } + + export type venue = { + /** Describes a venue */ + _: 'venue', + /** Venue location; as defined by the sender */ + location: location, + /** Venue name; as defined by the sender */ + title: string, + /** Venue address; as defined by the sender */ + address: string, + /** + * Provider of the venue database; as defined by the sender. Currently, only "foursquare" + * and "gplaces" (Google Places) need to be supported + */ + provider: string, + /** Identifier of the venue in the provider database; as defined by the sender */ + id: string, + /** Type of the venue in the provider database; as defined by the sender */ + type: string, + } + + export type venue$Input = { + /** Describes a venue */ + readonly _: 'venue', + /** Venue location; as defined by the sender */ + readonly location?: location$Input, + /** Venue name; as defined by the sender */ + readonly title?: string, + /** Venue address; as defined by the sender */ + readonly address?: string, + /** + * Provider of the venue database; as defined by the sender. Currently, only "foursquare" + * and "gplaces" (Google Places) need to be supported + */ + readonly provider?: string, + /** Identifier of the venue in the provider database; as defined by the sender */ + readonly id?: string, + /** Type of the venue in the provider database; as defined by the sender */ + readonly type?: string, + } + + export type game = { + /** Describes a game */ + _: 'game', + /** Game ID */ + id: string, + /** Game short name. To share a game use the URL https://t.me/{bot_username}?game={game_short_name} */ + short_name: string, + /** Game title */ + title: string, + /** Game text, usually containing scoreboards for a game */ + text: formattedText, + /** Game description */ + description: string, + /** Game photo */ + photo: photo, + /** Game animation; may be null */ + animation?: animation, + } + + export type poll = { + /** Describes a poll */ + _: 'poll', + /** Unique poll identifier */ + id: string, + /** Poll question; 1-300 characters */ + question: string, + /** List of poll answer options */ + options: Array, + /** Total number of voters, participating in the poll */ + total_voter_count: number, + /** User identifiers of recent voters, if the poll is non-anonymous */ + recent_voter_user_ids: Array, + /** True, if the poll is anonymous */ + is_anonymous: boolean, + /** Type of the poll */ + type: PollType, + /** Amount of time the poll will be active after creation, in seconds */ + open_period: number, + /** Point in time (Unix timestamp) when the poll will automatically be closed */ + close_date: number, + /** True, if the poll is closed */ + is_closed: boolean, + } + + export type profilePhoto = { + /** Describes a user profile photo */ + _: 'profilePhoto', + /** + * Photo identifier; 0 for an empty photo. Can be used to find a photo in a list + * of user profile photos + */ + id: string, + /** + * A small (160x160) user profile photo. The file can be downloaded only before + * the photo is changed + */ + small: file, + /** + * A big (640x640) user profile photo. The file can be downloaded only before the + * photo is changed + */ + big: file, + /** User profile photo minithumbnail; may be null */ + minithumbnail?: minithumbnail, + /** True, if the photo has animated variant */ + has_animation: boolean, + } + + export type chatPhotoInfo = { + /** Contains basic information about the photo of a chat */ + _: 'chatPhotoInfo', + /** + * A small (160x160) chat photo variant in JPEG format. The file can be downloaded + * only before the photo is changed + */ + small: file, + /** + * A big (640x640) chat photo variant in JPEG format. The file can be downloaded + * only before the photo is changed + */ + big: file, + /** Chat photo minithumbnail; may be null */ + minithumbnail?: minithumbnail, + /** True, if the photo has animated variant */ + has_animation: boolean, + } + + export type userTypeRegular = { + /** A regular user */ + _: 'userTypeRegular', + } + + export type userTypeDeleted = { + /** + * A deleted user or deleted bot. No information on the user besides the user identifier + * is available. It is not possible to perform any active actions on this type + * of user + */ + _: 'userTypeDeleted', + } + + export type userTypeBot = { + /** A bot (see https://core.telegram.org/bots) */ + _: 'userTypeBot', + /** True, if the bot can be invited to basic group and supergroup chats */ + can_join_groups: boolean, + /** + * True, if the bot can read all messages in basic group or supergroup chats and + * not just those addressed to the bot. In private and channel chats a bot can + * always read all messages + */ + can_read_all_group_messages: boolean, + /** True, if the bot supports inline queries */ + is_inline: boolean, + /** Placeholder for inline queries (displayed on the application input field) */ + inline_query_placeholder: string, + /** + * True, if the location of the user is expected to be sent with every inline query + * to this bot + */ + need_location: boolean, + } + + export type userTypeUnknown = { + /** + * No information on the user besides the user identifier is available, yet this + * user has not been deleted. This object is extremely rare and must be handled + * like a deleted user. It is not possible to perform any actions on users of this + * type + */ + _: 'userTypeUnknown', + } + + export type botCommand = { + /** Represents a command supported by a bot */ + _: 'botCommand', + /** Text of the bot command */ + command: string, + /** Description of the bot command */ + description: string, + } + + export type botCommand$Input = { + /** Represents a command supported by a bot */ + readonly _: 'botCommand', + /** Text of the bot command */ + readonly command?: string, + /** Description of the bot command */ + readonly description?: string, + } + + export type botCommands = { + /** Contains a list of bot commands */ + _: 'botCommands', + /** Bot's user identifier */ + bot_user_id: number, + /** List of bot commands */ + commands: Array, + } + + export type chatLocation = { + /** Represents a location to which a chat is connected */ + _: 'chatLocation', + /** The location */ + location: location, + /** Location address; 1-64 characters, as defined by the chat owner */ + address: string, + } + + export type chatLocation$Input = { + /** Represents a location to which a chat is connected */ + readonly _: 'chatLocation', + /** The location */ + readonly location?: location$Input, + /** Location address; 1-64 characters, as defined by the chat owner */ + readonly address?: string, + } + + export type animatedChatPhoto = { + /** Animated variant of a chat photo in MPEG4 format */ + _: 'animatedChatPhoto', + /** Animation width and height */ + length: number, + /** Information about the animation file */ + file: file, + /** Timestamp of the frame, used as a static chat photo */ + main_frame_timestamp: number, + } + + export type chatPhoto = { + /** Describes a chat or user profile photo */ + _: 'chatPhoto', + /** Unique photo identifier */ + id: string, + /** Point in time (Unix timestamp) when the photo has been added */ + added_date: number, + /** Photo minithumbnail; may be null */ + minithumbnail?: minithumbnail, + /** Available variants of the photo in JPEG format, in different size */ + sizes: Array, + /** Animated variant of the photo in MPEG4 format; may be null */ + animation?: animatedChatPhoto, + } + + export type chatPhotos = { + /** Contains a list of chat or user profile photos */ + _: 'chatPhotos', + /** Total number of photos */ + total_count: number, + /** List of photos */ + photos: Array, + } + + export type inputChatPhotoPrevious$Input = { + /** A previously used profile photo of the current user */ + readonly _: 'inputChatPhotoPrevious', + /** Identifier of the current user's profile photo to reuse */ + readonly chat_photo_id?: number | string, + } + + export type inputChatPhotoStatic$Input = { + /** A static photo in JPEG format */ + readonly _: 'inputChatPhotoStatic', + /** + * Photo to be set as profile photo. Only inputFileLocal and inputFileGenerated + * are allowed + */ + readonly photo?: InputFile$Input, + } + + export type inputChatPhotoAnimation$Input = { + /** + * An animation in MPEG4 format; must be square, at most 10 seconds long, have + * width between 160 and 800 and be at most 2MB in size + */ + readonly _: 'inputChatPhotoAnimation', + /** + * Animation to be set as profile photo. Only inputFileLocal and inputFileGenerated + * are allowed + */ + readonly animation?: InputFile$Input, + /** Timestamp of the frame, which will be used as static chat photo */ + readonly main_frame_timestamp?: number, + } + + export type user = { + /** Represents a user */ + _: 'user', + /** User identifier */ + id: number, + /** First name of the user */ + first_name: string, + /** Last name of the user */ + last_name: string, + /** Username of the user */ + username: string, + /** Phone number of the user */ + phone_number: string, + /** Current online status of the user */ + status: UserStatus, + /** Profile photo of the user; may be null */ + profile_photo?: profilePhoto, + /** The user is a contact of the current user */ + is_contact: boolean, + /** + * The user is a contact of the current user and the current user is a contact + * of the user + */ + is_mutual_contact: boolean, + /** True, if the user is verified */ + is_verified: boolean, + /** True, if the user is Telegram support account */ + is_support: boolean, + /** + * If non-empty, it contains a human-readable description of the reason why access + * to this user must be restricted + */ + restriction_reason: string, + /** True, if many users reported this user as a scam */ + is_scam: boolean, + /** True, if many users reported this user as a fake account */ + is_fake: boolean, + /** + * If false, the user is inaccessible, and the only information known about the + * user is inside this class. It can't be passed to any method except GetUser + */ + have_access: boolean, + /** Type of the user */ + type: UserType, + /** IETF language tag of the user's language; only available to bots */ + language_code: string, + } + + export type userFullInfo = { + /** Contains full information about a user */ + _: 'userFullInfo', + /** User profile photo; may be null */ + photo?: chatPhoto, + /** True, if the user is blocked by the current user */ + is_blocked: boolean, + /** True, if the user can be called */ + can_be_called: boolean, + /** True, if a video call can be created with the user */ + supports_video_calls: boolean, + /** True, if the user can't be called due to their privacy settings */ + has_private_calls: boolean, + /** + * True, if the user can't be linked in forwarded messages due to their privacy + * settings + */ + has_private_forwards: boolean, + /** + * True, if the current user needs to explicitly allow to share their phone number + * with the user when the method addContact is used + */ + need_phone_number_privacy_exception: boolean, + /** A short user bio */ + bio: string, + /** + * For bots, the text that is shown on the bot's profile page and is sent together + * with the link when users share the bot + */ + share_text: string, + /** For bots, the text shown in the chat with the bot if the chat is empty */ + description: string, + /** + * Number of group chats where both the other user and the current user are a member; + * 0 for the current user + */ + group_in_common_count: number, + /** For bots, list of the bot commands */ + commands: Array, + } + + export type users = { + /** Represents a list of users */ + _: 'users', + /** Approximate total count of users found */ + total_count: number, + /** A list of user identifiers */ + user_ids: Array, + } + + export type chatAdministrator = { + /** Contains information about a chat administrator */ + _: 'chatAdministrator', + /** User identifier of the administrator */ + user_id: number, + /** Custom title of the administrator */ + custom_title: string, + /** True, if the user is the owner of the chat */ + is_owner: boolean, + } + + export type chatAdministrators = { + /** Represents a list of chat administrators */ + _: 'chatAdministrators', + /** A list of chat administrators */ + administrators: Array, + } + + export type chatPermissions = { + /** Describes actions that a user is allowed to take in a chat */ + _: 'chatPermissions', + /** True, if the user can send text messages, contacts, locations, and venues */ + can_send_messages: boolean, + /** + * True, if the user can send audio files, documents, photos, videos, video notes, + * and voice notes. Implies can_send_messages permissions + */ + can_send_media_messages: boolean, + /** True, if the user can send polls. Implies can_send_messages permissions */ + can_send_polls: boolean, + /** + * True, if the user can send animations, games, stickers, and dice and use inline + * bots. Implies can_send_messages permissions + */ + can_send_other_messages: boolean, + /** + * True, if the user may add a web page preview to their messages. Implies can_send_messages + * permissions + */ + can_add_web_page_previews: boolean, + /** True, if the user can change the chat title, photo, and other settings */ + can_change_info: boolean, + /** True, if the user can invite new users to the chat */ + can_invite_users: boolean, + /** True, if the user can pin messages */ + can_pin_messages: boolean, + } + + export type chatPermissions$Input = { + /** Describes actions that a user is allowed to take in a chat */ + readonly _: 'chatPermissions', + /** True, if the user can send text messages, contacts, locations, and venues */ + readonly can_send_messages?: boolean, + /** + * True, if the user can send audio files, documents, photos, videos, video notes, + * and voice notes. Implies can_send_messages permissions + */ + readonly can_send_media_messages?: boolean, + /** True, if the user can send polls. Implies can_send_messages permissions */ + readonly can_send_polls?: boolean, + /** + * True, if the user can send animations, games, stickers, and dice and use inline + * bots. Implies can_send_messages permissions + */ + readonly can_send_other_messages?: boolean, + /** + * True, if the user may add a web page preview to their messages. Implies can_send_messages + * permissions + */ + readonly can_add_web_page_previews?: boolean, + /** True, if the user can change the chat title, photo, and other settings */ + readonly can_change_info?: boolean, + /** True, if the user can invite new users to the chat */ + readonly can_invite_users?: boolean, + /** True, if the user can pin messages */ + readonly can_pin_messages?: boolean, + } + + export type chatMemberStatusCreator = { + /** The user is the owner of the chat and has all the administrator privileges */ + _: 'chatMemberStatusCreator', + /** + * A custom title of the owner; 0-16 characters without emojis; applicable to supergroups + * only + */ + custom_title: string, + /** + * True, if the creator isn't shown in the chat member list and sends messages + * anonymously; applicable to supergroups only + */ + is_anonymous: boolean, + /** True, if the user is a member of the chat */ + is_member: boolean, + } + + export type chatMemberStatusCreator$Input = { + /** The user is the owner of the chat and has all the administrator privileges */ + readonly _: 'chatMemberStatusCreator', + /** + * A custom title of the owner; 0-16 characters without emojis; applicable to supergroups + * only + */ + readonly custom_title?: string, + /** + * True, if the creator isn't shown in the chat member list and sends messages + * anonymously; applicable to supergroups only + */ + readonly is_anonymous?: boolean, + /** True, if the user is a member of the chat */ + readonly is_member?: boolean, + } + + export type chatMemberStatusAdministrator = { + /** + * The user is a member of the chat and has some additional privileges. In basic + * groups, administrators can edit and delete messages sent by others, add new + * members, ban unprivileged members, and manage video chats. In supergroups and + * channels, there are more detailed options for administrator privileges + */ + _: 'chatMemberStatusAdministrator', + /** + * A custom title of the administrator; 0-16 characters without emojis; applicable + * to supergroups only + */ + custom_title: string, + /** + * True, if the current user can edit the administrator privileges for the called + * user + */ + can_be_edited: boolean, + /** + * True, if the administrator can get chat event log, get chat statistics, get + * message statistics in channels, get channel members, see anonymous administrators + * in supergroups and ignore slow mode. Implied by any other privilege; applicable + * to supergroups and channels only + */ + can_manage_chat: boolean, + /** True, if the administrator can change the chat title, photo, and other settings */ + can_change_info: boolean, + /** + * True, if the administrator can create channel posts; applicable to channels + * only + */ + can_post_messages: boolean, + /** + * True, if the administrator can edit messages of other users and pin messages; + * applicable to channels only + */ + can_edit_messages: boolean, + /** True, if the administrator can delete messages of other users */ + can_delete_messages: boolean, + /** True, if the administrator can invite new users to the chat */ + can_invite_users: boolean, + /** + * True, if the administrator can restrict, ban, or unban chat members; always + * true for channels + */ + can_restrict_members: boolean, + /** + * True, if the administrator can pin messages; applicable to basic groups and + * supergroups only + */ + can_pin_messages: boolean, + /** + * True, if the administrator can add new administrators with a subset of their + * own privileges or demote administrators that were directly or indirectly promoted + * by them + */ + can_promote_members: boolean, + /** True, if the administrator can manage video chats */ + can_manage_video_chats: boolean, + /** + * True, if the administrator isn't shown in the chat member list and sends messages + * anonymously; applicable to supergroups only + */ + is_anonymous: boolean, + } + + export type chatMemberStatusAdministrator$Input = { + /** + * The user is a member of the chat and has some additional privileges. In basic + * groups, administrators can edit and delete messages sent by others, add new + * members, ban unprivileged members, and manage video chats. In supergroups and + * channels, there are more detailed options for administrator privileges + */ + readonly _: 'chatMemberStatusAdministrator', + /** + * A custom title of the administrator; 0-16 characters without emojis; applicable + * to supergroups only + */ + readonly custom_title?: string, + /** + * True, if the current user can edit the administrator privileges for the called + * user + */ + readonly can_be_edited?: boolean, + /** + * True, if the administrator can get chat event log, get chat statistics, get + * message statistics in channels, get channel members, see anonymous administrators + * in supergroups and ignore slow mode. Implied by any other privilege; applicable + * to supergroups and channels only + */ + readonly can_manage_chat?: boolean, + /** True, if the administrator can change the chat title, photo, and other settings */ + readonly can_change_info?: boolean, + /** + * True, if the administrator can create channel posts; applicable to channels + * only + */ + readonly can_post_messages?: boolean, + /** + * True, if the administrator can edit messages of other users and pin messages; + * applicable to channels only + */ + readonly can_edit_messages?: boolean, + /** True, if the administrator can delete messages of other users */ + readonly can_delete_messages?: boolean, + /** True, if the administrator can invite new users to the chat */ + readonly can_invite_users?: boolean, + /** + * True, if the administrator can restrict, ban, or unban chat members; always + * true for channels + */ + readonly can_restrict_members?: boolean, + /** + * True, if the administrator can pin messages; applicable to basic groups and + * supergroups only + */ + readonly can_pin_messages?: boolean, + /** + * True, if the administrator can add new administrators with a subset of their + * own privileges or demote administrators that were directly or indirectly promoted + * by them + */ + readonly can_promote_members?: boolean, + /** True, if the administrator can manage video chats */ + readonly can_manage_video_chats?: boolean, + /** + * True, if the administrator isn't shown in the chat member list and sends messages + * anonymously; applicable to supergroups only + */ + readonly is_anonymous?: boolean, + } + + export type chatMemberStatusMember = { + /** The user is a member of the chat, without any additional privileges or restrictions */ + _: 'chatMemberStatusMember', + } + + export type chatMemberStatusMember$Input = { + /** The user is a member of the chat, without any additional privileges or restrictions */ + readonly _: 'chatMemberStatusMember', + } + + export type chatMemberStatusRestricted = { + /** + * The user is under certain restrictions in the chat. Not supported in basic groups + * and channels + */ + _: 'chatMemberStatusRestricted', + /** True, if the user is a member of the chat */ + is_member: boolean, + /** + * Point in time (Unix timestamp) when restrictions will be lifted from the user; + * 0 if never. If the user is restricted for more than 366 days or for less than + * 30 seconds from the current time, the user is considered to be restricted forever + */ + restricted_until_date: number, + /** User permissions in the chat */ + permissions: chatPermissions, + } + + export type chatMemberStatusRestricted$Input = { + /** + * The user is under certain restrictions in the chat. Not supported in basic groups + * and channels + */ + readonly _: 'chatMemberStatusRestricted', + /** True, if the user is a member of the chat */ + readonly is_member?: boolean, + /** + * Point in time (Unix timestamp) when restrictions will be lifted from the user; + * 0 if never. If the user is restricted for more than 366 days or for less than + * 30 seconds from the current time, the user is considered to be restricted forever + */ + readonly restricted_until_date?: number, + /** User permissions in the chat */ + readonly permissions?: chatPermissions$Input, + } + + export type chatMemberStatusLeft = { + /** The user or the chat is not a chat member */ + _: 'chatMemberStatusLeft', + } + + export type chatMemberStatusLeft$Input = { + /** The user or the chat is not a chat member */ + readonly _: 'chatMemberStatusLeft', + } + + export type chatMemberStatusBanned = { + /** + * The user or the chat was banned (and hence is not a member of the chat). Implies + * the user can't return to the chat, view messages, or be used as a participant + * identifier to join a video chat of the chat + */ + _: 'chatMemberStatusBanned', + /** + * Point in time (Unix timestamp) when the user will be unbanned; 0 if never. If + * the user is banned for more than 366 days or for less than 30 seconds from the + * current time, the user is considered to be banned forever. Always 0 in basic + * groups + */ + banned_until_date: number, + } + + export type chatMemberStatusBanned$Input = { + /** + * The user or the chat was banned (and hence is not a member of the chat). Implies + * the user can't return to the chat, view messages, or be used as a participant + * identifier to join a video chat of the chat + */ + readonly _: 'chatMemberStatusBanned', + /** + * Point in time (Unix timestamp) when the user will be unbanned; 0 if never. If + * the user is banned for more than 366 days or for less than 30 seconds from the + * current time, the user is considered to be banned forever. Always 0 in basic + * groups + */ + readonly banned_until_date?: number, + } + + export type chatMember = { + /** Describes a user or a chat as a member of another chat */ + _: 'chatMember', + /** + * Identifier of the chat member. Currently, other chats can be only Left or Banned. + * Only supergroups and channels can have other chats as Left or Banned members + * and these chats must be supergroups or channels + */ + member_id: MessageSender, + /** + * Identifier of a user that invited/promoted/banned this member in the chat; 0 + * if unknown + */ + inviter_user_id: number, + /** Point in time (Unix timestamp) when the user joined the chat */ + joined_chat_date: number, + /** Status of the member in the chat */ + status: ChatMemberStatus, + } + + export type chatMembers = { + /** Contains a list of chat members */ + _: 'chatMembers', + /** Approximate total count of chat members found */ + total_count: number, + /** A list of chat members */ + members: Array, + } + + export type chatMembersFilterContacts$Input = { + /** Returns contacts of the user */ + readonly _: 'chatMembersFilterContacts', + } + + export type chatMembersFilterAdministrators$Input = { + /** Returns the owner and administrators */ + readonly _: 'chatMembersFilterAdministrators', + } + + export type chatMembersFilterMembers$Input = { + /** Returns all chat members, including restricted chat members */ + readonly _: 'chatMembersFilterMembers', + } + + export type chatMembersFilterMention$Input = { + /** Returns users which can be mentioned in the chat */ + readonly _: 'chatMembersFilterMention', + /** If non-zero, the identifier of the current message thread */ + readonly message_thread_id?: number, + } + + export type chatMembersFilterRestricted$Input = { + /** + * Returns users under certain restrictions in the chat; can be used only by administrators + * in a supergroup + */ + readonly _: 'chatMembersFilterRestricted', + } + + export type chatMembersFilterBanned$Input = { + /** + * Returns users banned from the chat; can be used only by administrators in a + * supergroup or in a channel + */ + readonly _: 'chatMembersFilterBanned', + } + + export type chatMembersFilterBots$Input = { + /** Returns bot members of the chat */ + readonly _: 'chatMembersFilterBots', + } + + export type supergroupMembersFilterRecent$Input = { + /** Returns recently active users in reverse chronological order */ + readonly _: 'supergroupMembersFilterRecent', + } + + export type supergroupMembersFilterContacts$Input = { + /** Returns contacts of the user, which are members of the supergroup or channel */ + readonly _: 'supergroupMembersFilterContacts', + /** Query to search for */ + readonly query?: string, + } + + export type supergroupMembersFilterAdministrators$Input = { + /** Returns the owner and administrators */ + readonly _: 'supergroupMembersFilterAdministrators', + } + + export type supergroupMembersFilterSearch$Input = { + /** Used to search for supergroup or channel members via a (string) query */ + readonly _: 'supergroupMembersFilterSearch', + /** Query to search for */ + readonly query?: string, + } + + export type supergroupMembersFilterRestricted$Input = { + /** Returns restricted supergroup members; can be used only by administrators */ + readonly _: 'supergroupMembersFilterRestricted', + /** Query to search for */ + readonly query?: string, + } + + export type supergroupMembersFilterBanned$Input = { + /** Returns users banned from the supergroup or channel; can be used only by administrators */ + readonly _: 'supergroupMembersFilterBanned', + /** Query to search for */ + readonly query?: string, + } + + export type supergroupMembersFilterMention$Input = { + /** Returns users which can be mentioned in the supergroup */ + readonly _: 'supergroupMembersFilterMention', + /** Query to search for */ + readonly query?: string, + /** If non-zero, the identifier of the current message thread */ + readonly message_thread_id?: number, + } + + export type supergroupMembersFilterBots$Input = { + /** Returns bot members of the supergroup or channel */ + readonly _: 'supergroupMembersFilterBots', + } + + export type chatInviteLink = { + /** Contains a chat invite link */ + _: 'chatInviteLink', + /** Chat invite link */ + invite_link: string, + /** Name of the link */ + name: string, + /** User identifier of an administrator created the link */ + creator_user_id: number, + /** Point in time (Unix timestamp) when the link was created */ + date: number, + /** + * Point in time (Unix timestamp) when the link was last edited; 0 if never or + * unknown + */ + edit_date: number, + /** Point in time (Unix timestamp) when the link will expire; 0 if never */ + expiration_date: number, + /** + * The maximum number of members, which can join the chat using the link simultaneously; + * 0 if not limited. Always 0 if the link requires approval + */ + member_limit: number, + /** Number of chat members, which joined the chat using the link */ + member_count: number, + /** Number of pending join requests created using this link */ + pending_join_request_count: number, + /** + * True, if the link only creates join request. If true, total number of joining + * members will be unlimited + */ + creates_join_request: boolean, + /** + * True, if the link is primary. Primary invite link can't have name, expiration + * date, or usage limit. There is exactly one primary invite link for each administrator + * with can_invite_users right at a given time + */ + is_primary: boolean, + /** True, if the link was revoked */ + is_revoked: boolean, + } + + export type chatInviteLinks = { + /** Contains a list of chat invite links */ + _: 'chatInviteLinks', + /** Approximate total count of chat invite links found */ + total_count: number, + /** List of invite links */ + invite_links: Array, + } + + export type chatInviteLinkCount = { + /** + * Describes a chat administrator with a number of active and revoked chat invite + * links + */ + _: 'chatInviteLinkCount', + /** Administrator's user identifier */ + user_id: number, + /** Number of active invite links */ + invite_link_count: number, + /** Number of revoked invite links */ + revoked_invite_link_count: number, + } + + export type chatInviteLinkCounts = { + /** Contains a list of chat invite link counts */ + _: 'chatInviteLinkCounts', + /** List of invite link counts */ + invite_link_counts: Array, + } + + export type chatInviteLinkMember = { + /** Describes a chat member joined a chat via an invite link */ + _: 'chatInviteLinkMember', + /** User identifier */ + user_id: number, + /** Point in time (Unix timestamp) when the user joined the chat */ + joined_chat_date: number, + /** User identifier of the chat administrator, approved user join request */ + approver_user_id: number, + } + + export type chatInviteLinkMember$Input = { + /** Describes a chat member joined a chat via an invite link */ + readonly _: 'chatInviteLinkMember', + /** User identifier */ + readonly user_id?: number, + /** Point in time (Unix timestamp) when the user joined the chat */ + readonly joined_chat_date?: number, + /** User identifier of the chat administrator, approved user join request */ + readonly approver_user_id?: number, + } + + export type chatInviteLinkMembers = { + /** Contains a list of chat members joined a chat via an invite link */ + _: 'chatInviteLinkMembers', + /** Approximate total count of chat members found */ + total_count: number, + /** List of chat members, joined a chat via an invite link */ + members: Array, + } + + export type chatInviteLinkInfo = { + /** Contains information about a chat invite link */ + _: 'chatInviteLinkInfo', + /** + * Chat identifier of the invite link; 0 if the user has no access to the chat + * before joining + */ + chat_id: number, + /** + * If non-zero, the amount of time for which read access to the chat will remain + * available, in seconds + */ + accessible_for: number, + /** Type of the chat */ + type: ChatType, + /** Title of the chat */ + title: string, + /** Chat photo; may be null */ + photo?: chatPhotoInfo, + /** Chat description */ + description: string, + /** Number of members in the chat */ + member_count: number, + /** User identifiers of some chat members that may be known to the current user */ + member_user_ids: Array, + /** True, if the link only creates join request */ + creates_join_request: boolean, + /** + * True, if the chat is a public supergroup or channel, i.e. it has a username + * or it is a location-based supergroup + */ + is_public: boolean, + } + + export type chatJoinRequest = { + /** Describes a user that sent a join request and waits for administrator approval */ + _: 'chatJoinRequest', + /** User identifier */ + user_id: number, + /** Point in time (Unix timestamp) when the user sent the join request */ + date: number, + /** A short bio of the user */ + bio: string, + } + + export type chatJoinRequest$Input = { + /** Describes a user that sent a join request and waits for administrator approval */ + readonly _: 'chatJoinRequest', + /** User identifier */ + readonly user_id?: number, + /** Point in time (Unix timestamp) when the user sent the join request */ + readonly date?: number, + /** A short bio of the user */ + readonly bio?: string, + } + + export type chatJoinRequests = { + /** Contains a list of requests to join a chat */ + _: 'chatJoinRequests', + /** Approximate total count of requests found */ + total_count: number, + /** List of the requests */ + requests: Array, + } + + export type chatJoinRequestsInfo = { + /** Contains information about pending join requests for a chat */ + _: 'chatJoinRequestsInfo', + /** Total number of pending join requests */ + total_count: number, + /** Identifiers of at most 3 users sent the newest pending join requests */ + user_ids: Array, + } + + export type basicGroup = { + /** + * Represents a basic group of 0-200 users (must be upgraded to a supergroup to + * accommodate more than 200 users) + */ + _: 'basicGroup', + /** Group identifier */ + id: number, + /** Number of members in the group */ + member_count: number, + /** Status of the current user in the group */ + status: ChatMemberStatus, + /** True, if the group is active */ + is_active: boolean, + /** Identifier of the supergroup to which this group was upgraded; 0 if none */ + upgraded_to_supergroup_id: number, + } + + export type basicGroupFullInfo = { + /** Contains full information about a basic group */ + _: 'basicGroupFullInfo', + /** Chat photo; may be null */ + photo?: chatPhoto, + /** Group description. Updated only after the basic group is opened */ + description: string, + /** User identifier of the creator of the group; 0 if unknown */ + creator_user_id: number, + /** Group members */ + members: Array, + /** + * Primary invite link for this group; may be null. For chat administrators with + * can_invite_users right only. Updated only after the basic group is opened + */ + invite_link?: chatInviteLink, + /** List of commands of bots in the group */ + bot_commands: Array, + } + + export type supergroup = { + /** + * Represents a supergroup or channel with zero or more members (subscribers in + * the case of channels). From the point of view of the system, a channel is a + * special kind of a supergroup: only administrators can post and see the list + * of members, and posts from all administrators use the name and photo of the + * channel instead of individual names and profile photos. Unlike supergroups, + * channels can have an unlimited number of subscribers + */ + _: 'supergroup', + /** Supergroup or channel identifier */ + id: number, + /** Username of the supergroup or channel; empty for private supergroups or channels */ + username: string, + /** + * Point in time (Unix timestamp) when the current user joined, or the point in + * time when the supergroup or channel was created, in case the user is not a member + */ + date: number, + /** + * Status of the current user in the supergroup or channel; custom title will be + * always empty + */ + status: ChatMemberStatus, + /** + * Number of members in the supergroup or channel; 0 if unknown. Currently, it + * is guaranteed to be known only if the supergroup or channel was received through + * searchPublicChats, searchChatsNearby, getInactiveSupergroupChats, getSuitableDiscussionChats, + * getGroupsInCommon, or getUserPrivacySettingRules + */ + member_count: number, + /** + * True, if the channel has a discussion group, or the supergroup is the designated + * discussion group for a channel + */ + has_linked_chat: boolean, + /** + * True, if the supergroup is connected to a location, i.e. the supergroup is a + * location-based supergroup + */ + has_location: boolean, + /** + * True, if messages sent to the channel need to contain information about the + * sender. This field is only applicable to channels + */ + sign_messages: boolean, + /** True, if the slow mode is enabled in the supergroup */ + is_slow_mode_enabled: boolean, + /** True, if the supergroup is a channel */ + is_channel: boolean, + /** + * True, if the supergroup is a broadcast group, i.e. only administrators can send + * messages and there is no limit on the number of members + */ + is_broadcast_group: boolean, + /** True, if the supergroup or channel is verified */ + is_verified: boolean, + /** + * If non-empty, contains a human-readable description of the reason why access + * to this supergroup or channel must be restricted + */ + restriction_reason: string, + /** True, if many users reported this supergroup or channel as a scam */ + is_scam: boolean, + /** True, if many users reported this supergroup or channel as a fake account */ + is_fake: boolean, + } + + export type supergroupFullInfo = { + /** Contains full information about a supergroup or channel */ + _: 'supergroupFullInfo', + /** Chat photo; may be null */ + photo?: chatPhoto, + /** Supergroup or channel description */ + description: string, + /** Number of members in the supergroup or channel; 0 if unknown */ + member_count: number, + /** Number of privileged users in the supergroup or channel; 0 if unknown */ + administrator_count: number, + /** Number of restricted users in the supergroup; 0 if unknown */ + restricted_count: number, + /** Number of users banned from chat; 0 if unknown */ + banned_count: number, + /** + * Chat identifier of a discussion group for the channel, or a channel, for which + * the supergroup is the designated discussion group; 0 if none or unknown + */ + linked_chat_id: number, + /** + * Delay between consecutive sent messages for non-administrator supergroup members, + * in seconds + */ + slow_mode_delay: number, + /** + * Time left before next message can be sent in the supergroup, in seconds. An + * updateSupergroupFullInfo update is not triggered when value of this field changes, + * but both new and old values are non-zero + */ + slow_mode_delay_expires_in: number, + /** True, if members of the chat can be retrieved */ + can_get_members: boolean, + /** True, if the chat username can be changed */ + can_set_username: boolean, + /** True, if the supergroup sticker set can be changed */ + can_set_sticker_set: boolean, + /** True, if the supergroup location can be changed */ + can_set_location: boolean, + /** True, if the supergroup or channel statistics are available */ + can_get_statistics: boolean, + /** + * True, if new chat members will have access to old messages. In public or discussion + * groups and both public and private channels, old messages are always available, + * so this option affects only private supergroups without a linked chat. The value + * of this field is only available for chat administrators + */ + is_all_history_available: boolean, + /** Identifier of the supergroup sticker set; 0 if none */ + sticker_set_id: string, + /** Location to which the supergroup is connected; may be null */ + location?: chatLocation, + /** + * Primary invite link for this chat; may be null. For chat administrators with + * can_invite_users right only + */ + invite_link?: chatInviteLink, + /** List of commands of bots in the group */ + bot_commands: Array, + /** Identifier of the basic group from which supergroup was upgraded; 0 if none */ + upgraded_from_basic_group_id: number, + /** + * Identifier of the last message in the basic group from which supergroup was + * upgraded; 0 if none + */ + upgraded_from_max_message_id: number, + } + + export type secretChatStatePending = { + /** The secret chat is not yet created; waiting for the other user to get online */ + _: 'secretChatStatePending', + } + + export type secretChatStateReady = { + /** The secret chat is ready to use */ + _: 'secretChatStateReady', + } + + export type secretChatStateClosed = { + /** The secret chat is closed */ + _: 'secretChatStateClosed', + } + + export type secretChat = { + /** Represents a secret chat */ + _: 'secretChat', + /** Secret chat identifier */ + id: number, + /** Identifier of the chat partner */ + user_id: number, + /** State of the secret chat */ + state: SecretChatState, + /** True, if the chat was created by the current user; otherwise false */ + is_outbound: boolean, + /** + * Hash of the currently used key for comparison with the hash of the chat partner's + * key. This is a string of 36 little-endian bytes, which must be split into groups + * of 2 bits, each denoting a pixel of one of 4 colors FFFFFF, D5E6F3, 2D5775, + * and 2F99C9. The pixels must be used to make a 12x12 square image filled from + * left to right, top to bottom. Alternatively, the first 32 bytes of the hash + * can be converted to the hexadecimal format and printed as 32 2-digit hex numbers + */ + key_hash: string /* base64 */, + /** + * Secret chat layer; determines features supported by the chat partner's application. + * Nested text entities and underline and strikethrough entities are supported + * if the layer >= 101 + */ + layer: number, + } + + export type messageSenderUser = { + /** The message was sent by a known user */ + _: 'messageSenderUser', + /** Identifier of the user that sent the message */ + user_id: number, + } + + export type messageSenderUser$Input = { + /** The message was sent by a known user */ + readonly _: 'messageSenderUser', + /** Identifier of the user that sent the message */ + readonly user_id?: number, + } + + export type messageSenderChat = { + /** The message was sent on behalf of a chat */ + _: 'messageSenderChat', + /** Identifier of the chat that sent the message */ + chat_id: number, + } + + export type messageSenderChat$Input = { + /** The message was sent on behalf of a chat */ + readonly _: 'messageSenderChat', + /** Identifier of the chat that sent the message */ + readonly chat_id?: number, + } + + export type messageSenders = { + /** Represents a list of message senders */ + _: 'messageSenders', + /** Approximate total count of messages senders found */ + total_count: number, + /** List of message senders */ + senders: Array, + } + + export type messageForwardOriginUser = { + /** The message was originally sent by a known user */ + _: 'messageForwardOriginUser', + /** Identifier of the user that originally sent the message */ + sender_user_id: number, + } + + export type messageForwardOriginChat = { + /** The message was originally sent on behalf of a chat */ + _: 'messageForwardOriginChat', + /** Identifier of the chat that originally sent the message */ + sender_chat_id: number, + /** + * For messages originally sent by an anonymous chat administrator, original message + * author signature + */ + author_signature: string, + } + + export type messageForwardOriginHiddenUser = { + /** + * The message was originally sent by a user, which is hidden by their privacy + * settings + */ + _: 'messageForwardOriginHiddenUser', + /** Name of the sender */ + sender_name: string, + } + + export type messageForwardOriginChannel = { + /** The message was originally a post in a channel */ + _: 'messageForwardOriginChannel', + /** Identifier of the chat from which the message was originally forwarded */ + chat_id: number, + /** Message identifier of the original message */ + message_id: number, + /** Original post author signature */ + author_signature: string, + } + + export type messageForwardOriginMessageImport = { + /** The message was imported from an exported message history */ + _: 'messageForwardOriginMessageImport', + /** Name of the sender */ + sender_name: string, + } + + export type messageForwardInfo = { + /** Contains information about a forwarded message */ + _: 'messageForwardInfo', + /** Origin of a forwarded message */ + origin: MessageForwardOrigin, + /** Point in time (Unix timestamp) when the message was originally sent */ + date: number, + /** The type of a public service announcement for the forwarded message */ + public_service_announcement_type: string, + /** + * For messages forwarded to the chat with the current user (Saved Messages), to + * the Replies bot chat, or to the channel's discussion group, the identifier of + * the chat from which the message was forwarded last time; 0 if unknown + */ + from_chat_id: number, + /** + * For messages forwarded to the chat with the current user (Saved Messages), to + * the Replies bot chat, or to the channel's discussion group, the identifier of + * the original message from which the new message was forwarded last time; 0 if + * unknown + */ + from_message_id: number, + } + + export type messageReplyInfo = { + /** Contains information about replies to a message */ + _: 'messageReplyInfo', + /** Number of times the message was directly or indirectly replied */ + reply_count: number, + /** + * Identifiers of at most 3 recent repliers to the message; available in channels + * with a discussion supergroup. The users and chats are expected to be inaccessible: + * only their photo and name will be available + */ + recent_replier_ids: Array, + /** Identifier of the last read incoming reply to the message */ + last_read_inbox_message_id: number, + /** Identifier of the last read outgoing reply to the message */ + last_read_outbox_message_id: number, + /** Identifier of the last reply to the message */ + last_message_id: number, + } + + export type messageInteractionInfo = { + /** Contains information about interactions with a message */ + _: 'messageInteractionInfo', + /** Number of times the message was viewed */ + view_count: number, + /** Number of times the message was forwarded */ + forward_count: number, + /** + * Information about direct or indirect replies to the message; may be null. Currently, + * available only in channels with a discussion supergroup and discussion supergroups + * for messages, which are not replies itself + */ + reply_info?: messageReplyInfo, + } + + export type messageSendingStatePending = { + /** The message is being sent now, but has not yet been delivered to the server */ + _: 'messageSendingStatePending', + } + + export type messageSendingStateFailed = { + /** The message failed to be sent */ + _: 'messageSendingStateFailed', + /** An error code; 0 if unknown */ + error_code: number, + /** Error message */ + error_message: string, + /** True, if the message can be re-sent */ + can_retry: boolean, + /** True, if the message can be re-sent only on behalf of a different sender */ + need_another_sender: boolean, + /** + * Time left before the message can be re-sent, in seconds. No update is sent when + * this field changes + */ + retry_after: number, + } + + export type message = { + /** Describes a message */ + _: 'message', + /** Message identifier; unique for the chat to which the message belongs */ + id: number, + /** Identifier of the sender of the message */ + sender_id: MessageSender, + /** Chat identifier */ + chat_id: number, + /** The sending state of the message; may be null */ + sending_state?: MessageSendingState, + /** The scheduling state of the message; may be null */ + scheduling_state?: MessageSchedulingState, + /** True, if the message is outgoing */ + is_outgoing: boolean, + /** True, if the message is pinned */ + is_pinned: boolean, + /** + * True, if the message can be edited. For live location and poll messages this + * fields shows whether editMessageLiveLocation or stopPoll can be used with this + * message by the application + */ + can_be_edited: boolean, + /** True, if the message can be forwarded */ + can_be_forwarded: boolean, + /** True, if content of the message can be saved locally or copied */ + can_be_saved: boolean, + /** + * True, if the message can be deleted only for the current user while other users + * will continue to see it + */ + can_be_deleted_only_for_self: boolean, + /** True, if the message can be deleted for all users */ + can_be_deleted_for_all_users: boolean, + /** True, if the message statistics are available */ + can_get_statistics: boolean, + /** True, if the message thread info is available */ + can_get_message_thread: boolean, + /** True, if chat members already viewed the message can be received through getMessageViewers */ + can_get_viewers: boolean, + /** + * True, if media timestamp links can be generated for media timestamp entities + * in the message text, caption or web page description + */ + can_get_media_timestamp_links: boolean, + /** + * True, if media timestamp entities refers to a media in this message as opposed + * to a media in the replied message + */ + has_timestamped_media: boolean, + /** + * True, if the message is a channel post. All messages to channels are channel + * posts, all other messages are not channel posts + */ + is_channel_post: boolean, + /** True, if the message contains an unread mention for the current user */ + contains_unread_mention: boolean, + /** Point in time (Unix timestamp) when the message was sent */ + date: number, + /** Point in time (Unix timestamp) when the message was last edited */ + edit_date: number, + /** Information about the initial message sender; may be null */ + forward_info?: messageForwardInfo, + /** Information about interactions with the message; may be null */ + interaction_info?: messageInteractionInfo, + /** + * If non-zero, the identifier of the chat to which the replied message belongs; + * Currently, only messages in the Replies chat can have different reply_in_chat_id + * and chat_id + */ + reply_in_chat_id: number, + /** + * If non-zero, the identifier of the message this message is replying to; can + * be the identifier of a deleted message + */ + reply_to_message_id: number, + /** + * If non-zero, the identifier of the message thread the message belongs to; unique + * within the chat to which the message belongs + */ + message_thread_id: number, + /** + * For self-destructing messages, the message's TTL (Time To Live), in seconds; + * 0 if none. TDLib will send updateDeleteMessages or updateMessageContent once + * the TTL expires + */ + ttl: number, + /** + * Time left before the message expires, in seconds. If the TTL timer isn't started + * yet, equals to the value of the ttl field + */ + ttl_expires_in: number, + /** If non-zero, the user identifier of the bot through which this message was sent */ + via_bot_user_id: number, + /** For channel posts and anonymous group messages, optional author signature */ + author_signature: string, + /** + * Unique identifier of an album this message belongs to. Only audios, documents, + * photos and videos can be grouped together in albums + */ + media_album_id: string, + /** + * If non-empty, contains a human-readable description of the reason why access + * to this message must be restricted + */ + restriction_reason: string, + /** Content of the message */ + content: MessageContent, + /** Reply markup for the message; may be null */ + reply_markup?: ReplyMarkup, + } + + export type messages = { + /** Contains a list of messages */ + _: 'messages', + /** Approximate total count of messages found */ + total_count: number, + /** List of messages; messages may be null */ + messages: Array, + } + + export type foundMessages = { + /** Contains a list of messages found by a search */ + _: 'foundMessages', + /** Approximate total count of messages found; -1 if unknown */ + total_count: number, + /** List of messages */ + messages: Array, + /** The offset for the next request. If empty, there are no more results */ + next_offset: string, + } + + export type messagePosition = { + /** Contains information about a message in a specific position */ + _: 'messagePosition', + /** 0-based message position in the full list of suitable messages */ + position: number, + /** Message identifier */ + message_id: number, + /** Point in time (Unix timestamp) when the message was sent */ + date: number, + } + + export type messagePositions = { + /** Contains a list of message positions */ + _: 'messagePositions', + /** Total count of messages found */ + total_count: number, + /** List of message positions */ + positions: Array, + } + + export type messageCalendarDay = { + /** Contains information about found messages sent on a specific day */ + _: 'messageCalendarDay', + /** Total number of found messages sent on the day */ + total_count: number, + /** First message sent on the day */ + message: message, + } + + export type messageCalendar = { + /** + * Contains information about found messages, split by days according to the option + * "utc_time_offset" + */ + _: 'messageCalendar', + /** Total number of found messages */ + total_count: number, + /** Information about messages sent */ + days: Array, + } + + export type sponsoredMessage = { + /** Describes a sponsored message */ + _: 'sponsoredMessage', + /** + * Message identifier; unique for the chat to which the sponsored message belongs + * among both ordinary and sponsored messages + */ + message_id: number, + /** Chat identifier */ + sponsor_chat_id: number, + /** + * An internal link to be opened when the sponsored message is clicked; may be + * null. If null, the sponsor chat needs to be opened instead + */ + link?: InternalLinkType, + /** Content of the message. Currently, can be only of the type messageText */ + content: MessageContent, + } + + export type notificationSettingsScopePrivateChats = { + /** + * Notification settings applied to all private and secret chats when the corresponding + * chat setting has a default value + */ + _: 'notificationSettingsScopePrivateChats', + } + + export type notificationSettingsScopePrivateChats$Input = { + /** + * Notification settings applied to all private and secret chats when the corresponding + * chat setting has a default value + */ + readonly _: 'notificationSettingsScopePrivateChats', + } + + export type notificationSettingsScopeGroupChats = { + /** + * Notification settings applied to all basic groups and supergroups when the corresponding + * chat setting has a default value + */ + _: 'notificationSettingsScopeGroupChats', + } + + export type notificationSettingsScopeGroupChats$Input = { + /** + * Notification settings applied to all basic groups and supergroups when the corresponding + * chat setting has a default value + */ + readonly _: 'notificationSettingsScopeGroupChats', + } + + export type notificationSettingsScopeChannelChats = { + /** + * Notification settings applied to all channels when the corresponding chat setting + * has a default value + */ + _: 'notificationSettingsScopeChannelChats', + } + + export type notificationSettingsScopeChannelChats$Input = { + /** + * Notification settings applied to all channels when the corresponding chat setting + * has a default value + */ + readonly _: 'notificationSettingsScopeChannelChats', + } + + export type chatNotificationSettings = { + /** Contains information about notification settings for a chat */ + _: 'chatNotificationSettings', + /** + * If true, mute_for is ignored and the value for the relevant type of chat is + * used instead + */ + use_default_mute_for: boolean, + /** Time left before notifications will be unmuted, in seconds */ + mute_for: number, + /** + * If true, sound is ignored and the value for the relevant type of chat is used + * instead + */ + use_default_sound: boolean, + /** + * The name of an audio file to be used for notification sounds; only applies to + * iOS applications + */ + sound: string, + /** + * If true, show_preview is ignored and the value for the relevant type of chat + * is used instead + */ + use_default_show_preview: boolean, + /** True, if message content must be displayed in notifications */ + show_preview: boolean, + /** + * If true, disable_pinned_message_notifications is ignored and the value for the + * relevant type of chat is used instead + */ + use_default_disable_pinned_message_notifications: boolean, + /** + * If true, notifications for incoming pinned messages will be created as for an + * ordinary unread message + */ + disable_pinned_message_notifications: boolean, + /** + * If true, disable_mention_notifications is ignored and the value for the relevant + * type of chat is used instead + */ + use_default_disable_mention_notifications: boolean, + /** + * If true, notifications for messages with mentions will be created as for an + * ordinary unread message + */ + disable_mention_notifications: boolean, + } + + export type chatNotificationSettings$Input = { + /** Contains information about notification settings for a chat */ + readonly _: 'chatNotificationSettings', + /** + * If true, mute_for is ignored and the value for the relevant type of chat is + * used instead + */ + readonly use_default_mute_for?: boolean, + /** Time left before notifications will be unmuted, in seconds */ + readonly mute_for?: number, + /** + * If true, sound is ignored and the value for the relevant type of chat is used + * instead + */ + readonly use_default_sound?: boolean, + /** + * The name of an audio file to be used for notification sounds; only applies to + * iOS applications + */ + readonly sound?: string, + /** + * If true, show_preview is ignored and the value for the relevant type of chat + * is used instead + */ + readonly use_default_show_preview?: boolean, + /** True, if message content must be displayed in notifications */ + readonly show_preview?: boolean, + /** + * If true, disable_pinned_message_notifications is ignored and the value for the + * relevant type of chat is used instead + */ + readonly use_default_disable_pinned_message_notifications?: boolean, + /** + * If true, notifications for incoming pinned messages will be created as for an + * ordinary unread message + */ + readonly disable_pinned_message_notifications?: boolean, + /** + * If true, disable_mention_notifications is ignored and the value for the relevant + * type of chat is used instead + */ + readonly use_default_disable_mention_notifications?: boolean, + /** + * If true, notifications for messages with mentions will be created as for an + * ordinary unread message + */ + readonly disable_mention_notifications?: boolean, + } + + export type scopeNotificationSettings = { + /** Contains information about notification settings for several chats */ + _: 'scopeNotificationSettings', + /** Time left before notifications will be unmuted, in seconds */ + mute_for: number, + /** + * The name of an audio file to be used for notification sounds; only applies to + * iOS applications + */ + sound: string, + /** True, if message content must be displayed in notifications */ + show_preview: boolean, + /** + * True, if notifications for incoming pinned messages will be created as for an + * ordinary unread message + */ + disable_pinned_message_notifications: boolean, + /** + * True, if notifications for messages with mentions will be created as for an + * ordinary unread message + */ + disable_mention_notifications: boolean, + } + + export type scopeNotificationSettings$Input = { + /** Contains information about notification settings for several chats */ + readonly _: 'scopeNotificationSettings', + /** Time left before notifications will be unmuted, in seconds */ + readonly mute_for?: number, + /** + * The name of an audio file to be used for notification sounds; only applies to + * iOS applications + */ + readonly sound?: string, + /** True, if message content must be displayed in notifications */ + readonly show_preview?: boolean, + /** + * True, if notifications for incoming pinned messages will be created as for an + * ordinary unread message + */ + readonly disable_pinned_message_notifications?: boolean, + /** + * True, if notifications for messages with mentions will be created as for an + * ordinary unread message + */ + readonly disable_mention_notifications?: boolean, + } + + export type draftMessage = { + /** Contains information about a message draft */ + _: 'draftMessage', + /** Identifier of the message to reply to; 0 if none */ + reply_to_message_id: number, + /** Point in time (Unix timestamp) when the draft was created */ + date: number, + /** Content of the message draft; must be of the type inputMessageText */ + input_message_text: InputMessageContent, + } + + export type draftMessage$Input = { + /** Contains information about a message draft */ + readonly _: 'draftMessage', + /** Identifier of the message to reply to; 0 if none */ + readonly reply_to_message_id?: number, + /** Point in time (Unix timestamp) when the draft was created */ + readonly date?: number, + /** Content of the message draft; must be of the type inputMessageText */ + readonly input_message_text?: InputMessageContent$Input, + } + + export type chatTypePrivate = { + /** An ordinary chat with a user */ + _: 'chatTypePrivate', + /** User identifier */ + user_id: number, + } + + export type chatTypeBasicGroup = { + /** A basic group (a chat with 0-200 other users) */ + _: 'chatTypeBasicGroup', + /** Basic group identifier */ + basic_group_id: number, + } + + export type chatTypeSupergroup = { + /** A supergroup or channel (with unlimited members) */ + _: 'chatTypeSupergroup', + /** Supergroup or channel identifier */ + supergroup_id: number, + /** True, if the supergroup is a channel */ + is_channel: boolean, + } + + export type chatTypeSecret = { + /** A secret chat with a user */ + _: 'chatTypeSecret', + /** Secret chat identifier */ + secret_chat_id: number, + /** User identifier of the secret chat peer */ + user_id: number, + } + + export type chatFilter = { + /** Represents a filter of user chats */ + _: 'chatFilter', + /** The title of the filter; 1-12 characters without line feeds */ + title: string, + /** + * The chosen icon name for short filter representation. If non-empty, must be + * one of "All", "Unread", "Unmuted", "Bots", "Channels", "Groups", "Private", + * "Custom", "Setup", "Cat", "Crown", "Favorite", "Flower", "Game", "Home", "Love", + * "Mask", "Party", "Sport", "Study", "Trade", "Travel", "Work". If empty, use + * getChatFilterDefaultIconName to get default icon name for the filter + */ + icon_name: string, + /** The chat identifiers of pinned chats in the filtered chat list */ + pinned_chat_ids: Array, + /** The chat identifiers of always included chats in the filtered chat list */ + included_chat_ids: Array, + /** The chat identifiers of always excluded chats in the filtered chat list */ + excluded_chat_ids: Array, + /** True, if muted chats need to be excluded */ + exclude_muted: boolean, + /** True, if read chats need to be excluded */ + exclude_read: boolean, + /** True, if archived chats need to be excluded */ + exclude_archived: boolean, + /** True, if contacts need to be included */ + include_contacts: boolean, + /** True, if non-contact users need to be included */ + include_non_contacts: boolean, + /** True, if bots need to be included */ + include_bots: boolean, + /** True, if basic groups and supergroups need to be included */ + include_groups: boolean, + /** True, if channels need to be included */ + include_channels: boolean, + } + + export type chatFilter$Input = { + /** Represents a filter of user chats */ + readonly _: 'chatFilter', + /** The title of the filter; 1-12 characters without line feeds */ + readonly title?: string, + /** + * The chosen icon name for short filter representation. If non-empty, must be + * one of "All", "Unread", "Unmuted", "Bots", "Channels", "Groups", "Private", + * "Custom", "Setup", "Cat", "Crown", "Favorite", "Flower", "Game", "Home", "Love", + * "Mask", "Party", "Sport", "Study", "Trade", "Travel", "Work". If empty, use + * getChatFilterDefaultIconName to get default icon name for the filter + */ + readonly icon_name?: string, + /** The chat identifiers of pinned chats in the filtered chat list */ + readonly pinned_chat_ids?: ReadonlyArray, + /** The chat identifiers of always included chats in the filtered chat list */ + readonly included_chat_ids?: ReadonlyArray, + /** The chat identifiers of always excluded chats in the filtered chat list */ + readonly excluded_chat_ids?: ReadonlyArray, + /** True, if muted chats need to be excluded */ + readonly exclude_muted?: boolean, + /** True, if read chats need to be excluded */ + readonly exclude_read?: boolean, + /** True, if archived chats need to be excluded */ + readonly exclude_archived?: boolean, + /** True, if contacts need to be included */ + readonly include_contacts?: boolean, + /** True, if non-contact users need to be included */ + readonly include_non_contacts?: boolean, + /** True, if bots need to be included */ + readonly include_bots?: boolean, + /** True, if basic groups and supergroups need to be included */ + readonly include_groups?: boolean, + /** True, if channels need to be included */ + readonly include_channels?: boolean, + } + + export type chatFilterInfo = { + /** Contains basic information about a chat filter */ + _: 'chatFilterInfo', + /** Unique chat filter identifier */ + id: number, + /** The title of the filter; 1-12 characters without line feeds */ + title: string, + /** + * The chosen or default icon name for short filter representation. One of "All", + * "Unread", "Unmuted", "Bots", "Channels", "Groups", "Private", "Custom", "Setup", + * "Cat", "Crown", "Favorite", "Flower", "Game", "Home", "Love", "Mask", "Party", + * "Sport", "Study", "Trade", "Travel", "Work" + */ + icon_name: string, + } + + export type recommendedChatFilter = { + /** Describes a recommended chat filter */ + _: 'recommendedChatFilter', + /** The chat filter */ + filter: chatFilter, + /** Chat filter description */ + description: string, + } + + export type recommendedChatFilters = { + /** Contains a list of recommended chat filters */ + _: 'recommendedChatFilters', + /** List of recommended chat filters */ + chat_filters: Array, + } + + export type chatListMain = { + /** A main list of chats */ + _: 'chatListMain', + } + + export type chatListMain$Input = { + /** A main list of chats */ + readonly _: 'chatListMain', + } + + export type chatListArchive = { + /** + * A list of chats usually located at the top of the main chat list. Unmuted chats + * are automatically moved from the Archive to the Main chat list when a new message + * arrives + */ + _: 'chatListArchive', + } + + export type chatListArchive$Input = { + /** + * A list of chats usually located at the top of the main chat list. Unmuted chats + * are automatically moved from the Archive to the Main chat list when a new message + * arrives + */ + readonly _: 'chatListArchive', + } + + export type chatListFilter = { + /** A list of chats belonging to a chat filter */ + _: 'chatListFilter', + /** Chat filter identifier */ + chat_filter_id: number, + } + + export type chatListFilter$Input = { + /** A list of chats belonging to a chat filter */ + readonly _: 'chatListFilter', + /** Chat filter identifier */ + readonly chat_filter_id?: number, + } + + export type chatLists = { + /** Contains a list of chat lists */ + _: 'chatLists', + /** List of chat lists */ + chat_lists: Array, + } + + export type chatSourceMtprotoProxy = { + /** The chat is sponsored by the user's MTProxy server */ + _: 'chatSourceMtprotoProxy', + } + + export type chatSourcePublicServiceAnnouncement = { + /** The chat contains a public service announcement */ + _: 'chatSourcePublicServiceAnnouncement', + /** The type of the announcement */ + type: string, + /** The text of the announcement */ + text: string, + } + + export type chatPosition = { + /** Describes a position of a chat in a chat list */ + _: 'chatPosition', + /** The chat list */ + list: ChatList, + /** + * A parameter used to determine order of the chat in the chat list. Chats must + * be sorted by the pair (order, chat.id) in descending order + */ + order: string, + /** True, if the chat is pinned in the chat list */ + is_pinned: boolean, + /** Source of the chat in the chat list; may be null */ + source?: ChatSource, + } + + export type videoChat = { + /** Describes a video chat */ + _: 'videoChat', + /** + * Group call identifier of an active video chat; 0 if none. Full information about + * the video chat can be received through the method getGroupCall + */ + group_call_id: number, + /** True, if the video chat has participants */ + has_participants: boolean, + /** Default group call participant identifier to join the video chat; may be null */ + default_participant_id?: MessageSender, + } + + export type chat = { + /** A chat. (Can be a private chat, basic group, supergroup, or secret chat) */ + _: 'chat', + /** Chat unique identifier */ + id: number, + /** Type of the chat */ + type: ChatType, + /** Chat title */ + title: string, + /** Chat photo; may be null */ + photo?: chatPhotoInfo, + /** Actions that non-administrator chat members are allowed to take in the chat */ + permissions: chatPermissions, + /** Last message in the chat; may be null */ + last_message?: message, + /** Positions of the chat in chat lists */ + positions: Array, + /** + * Identifier of a user or chat that is selected to send messages in the chat; + * may be null if the user can't change message sender + */ + message_sender_id?: MessageSender, + /** True, if chat content can't be saved locally, forwarded, or copied */ + has_protected_content: boolean, + /** True, if the chat is marked as unread */ + is_marked_as_unread: boolean, + /** + * True, if the chat is blocked by the current user and private messages from the + * chat can't be received + */ + is_blocked: boolean, + /** True, if the chat has scheduled messages */ + has_scheduled_messages: boolean, + /** + * True, if the chat messages can be deleted only for the current user while other + * users will continue to see the messages + */ + can_be_deleted_only_for_self: boolean, + /** True, if the chat messages can be deleted for all users */ + can_be_deleted_for_all_users: boolean, + /** + * True, if the chat can be reported to Telegram moderators through reportChat + * or reportChatPhoto + */ + can_be_reported: boolean, + /** + * Default value of the disable_notification parameter, used when a message is + * sent to the chat + */ + default_disable_notification: boolean, + /** Number of unread messages in the chat */ + unread_count: number, + /** Identifier of the last read incoming message */ + last_read_inbox_message_id: number, + /** Identifier of the last read outgoing message */ + last_read_outbox_message_id: number, + /** Number of unread messages with a mention/reply in the chat */ + unread_mention_count: number, + /** Notification settings for this chat */ + notification_settings: chatNotificationSettings, + /** + * Current message Time To Live setting (self-destruct timer) for the chat; 0 if + * not defined. TTL is counted from the time message or its content is viewed in + * secret chats and from the send date in other chats + */ + message_ttl: number, + /** If non-empty, name of a theme, set for the chat */ + theme_name: string, + /** + * Information about actions which must be possible to do through the chat action + * bar; may be null + */ + action_bar?: ChatActionBar, + /** Information about video chat of the chat */ + video_chat: videoChat, + /** Information about pending join requests; may be null */ + pending_join_requests?: chatJoinRequestsInfo, + /** + * Identifier of the message from which reply markup needs to be used; 0 if there + * is no default custom reply markup in the chat + */ + reply_markup_message_id: number, + /** A draft of a message in the chat; may be null */ + draft_message?: draftMessage, + /** + * Application-specific data associated with the chat. (For example, the chat scroll + * position or local chat notification settings can be stored here.) Persistent + * if the message database is used + */ + client_data: string, + } + + export type chats = { + /** Represents a list of chats */ + _: 'chats', + /** Approximate total count of chats found */ + total_count: number, + /** List of chat identifiers */ + chat_ids: Array, + } + + export type chatNearby = { + /** Describes a chat located nearby */ + _: 'chatNearby', + /** Chat identifier */ + chat_id: number, + /** Distance to the chat location, in meters */ + distance: number, + } + + export type chatsNearby = { + /** Represents a list of chats located nearby */ + _: 'chatsNearby', + /** List of users nearby */ + users_nearby: Array, + /** List of location-based supergroups nearby */ + supergroups_nearby: Array, + } + + export type publicChatTypeHasUsername$Input = { + /** The chat is public, because it has username */ + readonly _: 'publicChatTypeHasUsername', + } + + export type publicChatTypeIsLocationBased$Input = { + /** The chat is public, because it is a location-based supergroup */ + readonly _: 'publicChatTypeIsLocationBased', + } + + export type chatActionBarReportSpam = { + /** + * The chat can be reported as spam using the method reportChat with the reason + * chatReportReasonSpam + */ + _: 'chatActionBarReportSpam', + /** + * If true, the chat was automatically archived and can be moved back to the main + * chat list using addChatToList simultaneously with setting chat notification + * settings to default using setChatNotificationSettings + */ + can_unarchive: boolean, + } + + export type chatActionBarReportUnrelatedLocation = { + /** + * The chat is a location-based supergroup, which can be reported as having unrelated + * location using the method reportChat with the reason chatReportReasonUnrelatedLocation + */ + _: 'chatActionBarReportUnrelatedLocation', + } + + export type chatActionBarInviteMembers = { + /** The chat is a recently created group chat to which new members can be invited */ + _: 'chatActionBarInviteMembers', + } + + export type chatActionBarReportAddBlock = { + /** + * The chat is a private or secret chat, which can be reported using the method + * reportChat, or the other user can be blocked using the method toggleMessageSenderIsBlocked, + * or the other user can be added to the contact list using the method addContact + */ + _: 'chatActionBarReportAddBlock', + /** + * If true, the chat was automatically archived and can be moved back to the main + * chat list using addChatToList simultaneously with setting chat notification + * settings to default using setChatNotificationSettings + */ + can_unarchive: boolean, + /** + * If non-negative, the current user was found by the peer through searchChatsNearby + * and this is the distance between the users + */ + distance: number, + } + + export type chatActionBarAddContact = { + /** + * The chat is a private or secret chat and the other user can be added to the + * contact list using the method addContact + */ + _: 'chatActionBarAddContact', + } + + export type chatActionBarSharePhoneNumber = { + /** + * The chat is a private or secret chat with a mutual contact and the user's phone + * number can be shared with the other user using the method sharePhoneNumber + */ + _: 'chatActionBarSharePhoneNumber', + } + + export type chatActionBarJoinRequest = { + /** + * The chat is a private chat with an administrator of a chat to which the user + * sent join request + */ + _: 'chatActionBarJoinRequest', + /** Title of the chat to which the join request was sent */ + title: string, + /** True, if the join request was sent to a channel chat */ + is_channel: boolean, + /** Point in time (Unix timestamp) when the join request was sent */ + request_date: number, + } + + export type keyboardButtonTypeText = { + /** A simple button, with text that must be sent when the button is pressed */ + _: 'keyboardButtonTypeText', + } + + export type keyboardButtonTypeText$Input = { + /** A simple button, with text that must be sent when the button is pressed */ + readonly _: 'keyboardButtonTypeText', + } + + export type keyboardButtonTypeRequestPhoneNumber = { + /** + * A button that sends the user's phone number when pressed; available only in + * private chats + */ + _: 'keyboardButtonTypeRequestPhoneNumber', + } + + export type keyboardButtonTypeRequestPhoneNumber$Input = { + /** + * A button that sends the user's phone number when pressed; available only in + * private chats + */ + readonly _: 'keyboardButtonTypeRequestPhoneNumber', + } + + export type keyboardButtonTypeRequestLocation = { + /** + * A button that sends the user's location when pressed; available only in private + * chats + */ + _: 'keyboardButtonTypeRequestLocation', + } + + export type keyboardButtonTypeRequestLocation$Input = { + /** + * A button that sends the user's location when pressed; available only in private + * chats + */ + readonly _: 'keyboardButtonTypeRequestLocation', + } + + export type keyboardButtonTypeRequestPoll = { + /** + * A button that allows the user to create and send a poll when pressed; available + * only in private chats + */ + _: 'keyboardButtonTypeRequestPoll', + /** If true, only regular polls must be allowed to create */ + force_regular: boolean, + /** If true, only polls in quiz mode must be allowed to create */ + force_quiz: boolean, + } + + export type keyboardButtonTypeRequestPoll$Input = { + /** + * A button that allows the user to create and send a poll when pressed; available + * only in private chats + */ + readonly _: 'keyboardButtonTypeRequestPoll', + /** If true, only regular polls must be allowed to create */ + readonly force_regular?: boolean, + /** If true, only polls in quiz mode must be allowed to create */ + readonly force_quiz?: boolean, + } + + export type keyboardButton = { + /** Represents a single button in a bot keyboard */ + _: 'keyboardButton', + /** Text of the button */ + text: string, + /** Type of the button */ + type: KeyboardButtonType, + } + + export type keyboardButton$Input = { + /** Represents a single button in a bot keyboard */ + readonly _: 'keyboardButton', + /** Text of the button */ + readonly text?: string, + /** Type of the button */ + readonly type?: KeyboardButtonType$Input, + } + + export type inlineKeyboardButtonTypeUrl = { + /** A button that opens a specified URL */ + _: 'inlineKeyboardButtonTypeUrl', + /** HTTP or tg:// URL to open */ + url: string, + } + + export type inlineKeyboardButtonTypeUrl$Input = { + /** A button that opens a specified URL */ + readonly _: 'inlineKeyboardButtonTypeUrl', + /** HTTP or tg:// URL to open */ + readonly url?: string, + } + + export type inlineKeyboardButtonTypeLoginUrl = { + /** + * A button that opens a specified URL and automatically authorize the current + * user if allowed to do so + */ + _: 'inlineKeyboardButtonTypeLoginUrl', + /** An HTTP URL to open */ + url: string, + /** Unique button identifier */ + id: number, + /** If non-empty, new text of the button in forwarded messages */ + forward_text: string, + } + + export type inlineKeyboardButtonTypeLoginUrl$Input = { + /** + * A button that opens a specified URL and automatically authorize the current + * user if allowed to do so + */ + readonly _: 'inlineKeyboardButtonTypeLoginUrl', + /** An HTTP URL to open */ + readonly url?: string, + /** Unique button identifier */ + readonly id?: number, + /** If non-empty, new text of the button in forwarded messages */ + readonly forward_text?: string, + } + + export type inlineKeyboardButtonTypeCallback = { + /** A button that sends a callback query to a bot */ + _: 'inlineKeyboardButtonTypeCallback', + /** Data to be sent to the bot via a callback query */ + data: string /* base64 */, + } + + export type inlineKeyboardButtonTypeCallback$Input = { + /** A button that sends a callback query to a bot */ + readonly _: 'inlineKeyboardButtonTypeCallback', + /** Data to be sent to the bot via a callback query */ + readonly data?: string /* base64 */, + } + + export type inlineKeyboardButtonTypeCallbackWithPassword = { + /** + * A button that asks for password of the current user and then sends a callback + * query to a bot + */ + _: 'inlineKeyboardButtonTypeCallbackWithPassword', + /** Data to be sent to the bot via a callback query */ + data: string /* base64 */, + } + + export type inlineKeyboardButtonTypeCallbackWithPassword$Input = { + /** + * A button that asks for password of the current user and then sends a callback + * query to a bot + */ + readonly _: 'inlineKeyboardButtonTypeCallbackWithPassword', + /** Data to be sent to the bot via a callback query */ + readonly data?: string /* base64 */, + } + + export type inlineKeyboardButtonTypeCallbackGame = { + /** + * A button with a game that sends a callback query to a bot. This button must + * be in the first column and row of the keyboard and can be attached only to a + * message with content of the type messageGame + */ + _: 'inlineKeyboardButtonTypeCallbackGame', + } + + export type inlineKeyboardButtonTypeCallbackGame$Input = { + /** + * A button with a game that sends a callback query to a bot. This button must + * be in the first column and row of the keyboard and can be attached only to a + * message with content of the type messageGame + */ + readonly _: 'inlineKeyboardButtonTypeCallbackGame', + } + + export type inlineKeyboardButtonTypeSwitchInline = { + /** + * A button that forces an inline query to the bot to be inserted in the input + * field + */ + _: 'inlineKeyboardButtonTypeSwitchInline', + /** Inline query to be sent to the bot */ + query: string, + /** True, if the inline query must be sent from the current chat */ + in_current_chat: boolean, + } + + export type inlineKeyboardButtonTypeSwitchInline$Input = { + /** + * A button that forces an inline query to the bot to be inserted in the input + * field + */ + readonly _: 'inlineKeyboardButtonTypeSwitchInline', + /** Inline query to be sent to the bot */ + readonly query?: string, + /** True, if the inline query must be sent from the current chat */ + readonly in_current_chat?: boolean, + } + + export type inlineKeyboardButtonTypeBuy = { + /** + * A button to buy something. This button must be in the first column and row of + * the keyboard and can be attached only to a message with content of the type + * messageInvoice + */ + _: 'inlineKeyboardButtonTypeBuy', + } + + export type inlineKeyboardButtonTypeBuy$Input = { + /** + * A button to buy something. This button must be in the first column and row of + * the keyboard and can be attached only to a message with content of the type + * messageInvoice + */ + readonly _: 'inlineKeyboardButtonTypeBuy', + } + + export type inlineKeyboardButtonTypeUser = { + /** + * A button with a user reference to be handled in the same way as textEntityTypeMentionName + * entities + */ + _: 'inlineKeyboardButtonTypeUser', + /** User identifier */ + user_id: number, + } + + export type inlineKeyboardButtonTypeUser$Input = { + /** + * A button with a user reference to be handled in the same way as textEntityTypeMentionName + * entities + */ + readonly _: 'inlineKeyboardButtonTypeUser', + /** User identifier */ + readonly user_id?: number, + } + + export type inlineKeyboardButton = { + /** Represents a single button in an inline keyboard */ + _: 'inlineKeyboardButton', + /** Text of the button */ + text: string, + /** Type of the button */ + type: InlineKeyboardButtonType, + } + + export type inlineKeyboardButton$Input = { + /** Represents a single button in an inline keyboard */ + readonly _: 'inlineKeyboardButton', + /** Text of the button */ + readonly text?: string, + /** Type of the button */ + readonly type?: InlineKeyboardButtonType$Input, + } + + export type replyMarkupRemoveKeyboard = { + /** + * Instructs application to remove the keyboard once this message has been received. + * This kind of keyboard can't be received in an incoming message; instead, UpdateChatReplyMarkup + * with message_id == 0 will be sent + */ + _: 'replyMarkupRemoveKeyboard', + /** + * True, if the keyboard is removed only for the mentioned users or the target + * user of a reply + */ + is_personal: boolean, + } + + export type replyMarkupRemoveKeyboard$Input = { + /** + * Instructs application to remove the keyboard once this message has been received. + * This kind of keyboard can't be received in an incoming message; instead, UpdateChatReplyMarkup + * with message_id == 0 will be sent + */ + readonly _: 'replyMarkupRemoveKeyboard', + /** + * True, if the keyboard is removed only for the mentioned users or the target + * user of a reply + */ + readonly is_personal?: boolean, + } + + export type replyMarkupForceReply = { + /** Instructs application to force a reply to this message */ + _: 'replyMarkupForceReply', + /** + * True, if a forced reply must automatically be shown to the current user. For + * outgoing messages, specify true to show the forced reply only for the mentioned + * users and for the target user of a reply + */ + is_personal: boolean, + /** + * If non-empty, the placeholder to be shown in the input field when the reply + * is active; 0-64 characters + */ + input_field_placeholder: string, + } + + export type replyMarkupForceReply$Input = { + /** Instructs application to force a reply to this message */ + readonly _: 'replyMarkupForceReply', + /** + * True, if a forced reply must automatically be shown to the current user. For + * outgoing messages, specify true to show the forced reply only for the mentioned + * users and for the target user of a reply + */ + readonly is_personal?: boolean, + /** + * If non-empty, the placeholder to be shown in the input field when the reply + * is active; 0-64 characters + */ + readonly input_field_placeholder?: string, + } + + export type replyMarkupShowKeyboard = { + /** Contains a custom keyboard layout to quickly reply to bots */ + _: 'replyMarkupShowKeyboard', + /** A list of rows of bot keyboard buttons */ + rows: Array>, + /** True, if the application needs to resize the keyboard vertically */ + resize_keyboard: boolean, + /** True, if the application needs to hide the keyboard after use */ + one_time: boolean, + /** + * True, if the keyboard must automatically be shown to the current user. For outgoing + * messages, specify true to show the keyboard only for the mentioned users and + * for the target user of a reply + */ + is_personal: boolean, + /** + * If non-empty, the placeholder to be shown in the input field when the keyboard + * is active; 0-64 characters + */ + input_field_placeholder: string, + } + + export type replyMarkupShowKeyboard$Input = { + /** Contains a custom keyboard layout to quickly reply to bots */ + readonly _: 'replyMarkupShowKeyboard', + /** A list of rows of bot keyboard buttons */ + readonly rows?: ReadonlyArray>, + /** True, if the application needs to resize the keyboard vertically */ + readonly resize_keyboard?: boolean, + /** True, if the application needs to hide the keyboard after use */ + readonly one_time?: boolean, + /** + * True, if the keyboard must automatically be shown to the current user. For outgoing + * messages, specify true to show the keyboard only for the mentioned users and + * for the target user of a reply + */ + readonly is_personal?: boolean, + /** + * If non-empty, the placeholder to be shown in the input field when the keyboard + * is active; 0-64 characters + */ + readonly input_field_placeholder?: string, + } + + export type replyMarkupInlineKeyboard = { + /** Contains an inline keyboard layout */ + _: 'replyMarkupInlineKeyboard', + /** A list of rows of inline keyboard buttons */ + rows: Array>, + } + + export type replyMarkupInlineKeyboard$Input = { + /** Contains an inline keyboard layout */ + readonly _: 'replyMarkupInlineKeyboard', + /** A list of rows of inline keyboard buttons */ + readonly rows?: ReadonlyArray>, + } + + export type loginUrlInfoOpen = { + /** An HTTP url needs to be open */ + _: 'loginUrlInfoOpen', + /** The URL to open */ + url: string, + /** True, if there is no need to show an ordinary open URL confirm */ + skip_confirm: boolean, + } + + export type loginUrlInfoRequestConfirmation = { + /** An authorization confirmation dialog needs to be shown to the user */ + _: 'loginUrlInfoRequestConfirmation', + /** An HTTP URL to be opened */ + url: string, + /** A domain of the URL */ + domain: string, + /** User identifier of a bot linked with the website */ + bot_user_id: number, + /** + * True, if the user needs to be requested to give the permission to the bot to + * send them messages + */ + request_write_access: boolean, + } + + export type messageThreadInfo = { + /** Contains information about a message thread */ + _: 'messageThreadInfo', + /** Identifier of the chat to which the message thread belongs */ + chat_id: number, + /** Message thread identifier, unique within the chat */ + message_thread_id: number, + /** Information about the message thread */ + reply_info: messageReplyInfo, + /** Approximate number of unread messages in the message thread */ + unread_message_count: number, + /** + * The messages from which the thread starts. The messages are returned in a reverse + * chronological order (i.e., in order of decreasing message_id) + */ + messages: Array, + /** A draft of a message in the message thread; may be null */ + draft_message?: draftMessage, + } + + export type richTextPlain = { + /** A plain text */ + _: 'richTextPlain', + /** Text */ + text: string, + } + + export type richTextBold = { + /** A bold rich text */ + _: 'richTextBold', + /** Text */ + text: RichText, + } + + export type richTextItalic = { + /** An italicized rich text */ + _: 'richTextItalic', + /** Text */ + text: RichText, + } + + export type richTextUnderline = { + /** An underlined rich text */ + _: 'richTextUnderline', + /** Text */ + text: RichText, + } + + export type richTextStrikethrough = { + /** A strikethrough rich text */ + _: 'richTextStrikethrough', + /** Text */ + text: RichText, + } + + export type richTextFixed = { + /** A fixed-width rich text */ + _: 'richTextFixed', + /** Text */ + text: RichText, + } + + export type richTextUrl = { + /** A rich text URL link */ + _: 'richTextUrl', + /** Text */ + text: RichText, + /** URL */ + url: string, + /** True, if the URL has cached instant view server-side */ + is_cached: boolean, + } + + export type richTextEmailAddress = { + /** A rich text email link */ + _: 'richTextEmailAddress', + /** Text */ + text: RichText, + /** Email address */ + email_address: string, + } + + export type richTextSubscript = { + /** A subscript rich text */ + _: 'richTextSubscript', + /** Text */ + text: RichText, + } + + export type richTextSuperscript = { + /** A superscript rich text */ + _: 'richTextSuperscript', + /** Text */ + text: RichText, + } + + export type richTextMarked = { + /** A marked rich text */ + _: 'richTextMarked', + /** Text */ + text: RichText, + } + + export type richTextPhoneNumber = { + /** A rich text phone number */ + _: 'richTextPhoneNumber', + /** Text */ + text: RichText, + /** Phone number */ + phone_number: string, + } + + export type richTextIcon = { + /** A small image inside the text */ + _: 'richTextIcon', + /** The image represented as a document. The image can be in GIF, JPEG or PNG format */ + document: document, + /** Width of a bounding box in which the image must be shown; 0 if unknown */ + width: number, + /** Height of a bounding box in which the image must be shown; 0 if unknown */ + height: number, + } + + export type richTextReference = { + /** A reference to a richTexts object on the same web page */ + _: 'richTextReference', + /** The text */ + text: RichText, + /** + * The name of a richTextAnchor object, which is the first element of the target + * richTexts object + */ + anchor_name: string, + /** An HTTP URL, opening the reference */ + url: string, + } + + export type richTextAnchor = { + /** An anchor */ + _: 'richTextAnchor', + /** Anchor name */ + name: string, + } + + export type richTextAnchorLink = { + /** A link to an anchor on the same web page */ + _: 'richTextAnchorLink', + /** The link text */ + text: RichText, + /** The anchor name. If the name is empty, the link must bring back to top */ + anchor_name: string, + /** An HTTP URL, opening the anchor */ + url: string, + } + + export type richTexts = { + /** A concatenation of rich texts */ + _: 'richTexts', + /** Texts */ + texts: Array, + } + + export type pageBlockCaption = { + /** + * Contains a caption of an instant view web page block, consisting of a text and + * a trailing credit + */ + _: 'pageBlockCaption', + /** Content of the caption */ + text: RichText, + /** Block credit (like HTML tag ) */ + credit: RichText, + } + + export type pageBlockListItem = { + /** Describes an item of a list page block */ + _: 'pageBlockListItem', + /** Item label */ + label: string, + /** Item blocks */ + page_blocks: Array, + } + + export type pageBlockHorizontalAlignmentLeft = { + /** The content must be left-aligned */ + _: 'pageBlockHorizontalAlignmentLeft', + } + + export type pageBlockHorizontalAlignmentCenter = { + /** The content must be center-aligned */ + _: 'pageBlockHorizontalAlignmentCenter', + } + + export type pageBlockHorizontalAlignmentRight = { + /** The content must be right-aligned */ + _: 'pageBlockHorizontalAlignmentRight', + } + + export type pageBlockVerticalAlignmentTop = { + /** The content must be top-aligned */ + _: 'pageBlockVerticalAlignmentTop', + } + + export type pageBlockVerticalAlignmentMiddle = { + /** The content must be middle-aligned */ + _: 'pageBlockVerticalAlignmentMiddle', + } + + export type pageBlockVerticalAlignmentBottom = { + /** The content must be bottom-aligned */ + _: 'pageBlockVerticalAlignmentBottom', + } + + export type pageBlockTableCell = { + /** Represents a cell of a table */ + _: 'pageBlockTableCell', + /** Cell text; may be null. If the text is null, then the cell must be invisible */ + text?: RichText, + /** True, if it is a header cell */ + is_header: boolean, + /** The number of columns the cell spans */ + colspan: number, + /** The number of rows the cell spans */ + rowspan: number, + /** Horizontal cell content alignment */ + align: PageBlockHorizontalAlignment, + /** Vertical cell content alignment */ + valign: PageBlockVerticalAlignment, + } + + export type pageBlockRelatedArticle = { + /** Contains information about a related article */ + _: 'pageBlockRelatedArticle', + /** Related article URL */ + url: string, + /** Article title; may be empty */ + title: string, + /** Article description; may be empty */ + description: string, + /** Article photo; may be null */ + photo?: photo, + /** Article author; may be empty */ + author: string, + /** Point in time (Unix timestamp) when the article was published; 0 if unknown */ + publish_date: number, + } + + export type pageBlockTitle = { + /** The title of a page */ + _: 'pageBlockTitle', + /** Title */ + title: RichText, + } + + export type pageBlockSubtitle = { + /** The subtitle of a page */ + _: 'pageBlockSubtitle', + /** Subtitle */ + subtitle: RichText, + } + + export type pageBlockAuthorDate = { + /** The author and publishing date of a page */ + _: 'pageBlockAuthorDate', + /** Author */ + author: RichText, + /** Point in time (Unix timestamp) when the article was published; 0 if unknown */ + publish_date: number, + } + + export type pageBlockHeader = { + /** A header */ + _: 'pageBlockHeader', + /** Header */ + header: RichText, + } + + export type pageBlockSubheader = { + /** A subheader */ + _: 'pageBlockSubheader', + /** Subheader */ + subheader: RichText, + } + + export type pageBlockKicker = { + /** A kicker */ + _: 'pageBlockKicker', + /** Kicker */ + kicker: RichText, + } + + export type pageBlockParagraph = { + /** A text paragraph */ + _: 'pageBlockParagraph', + /** Paragraph text */ + text: RichText, + } + + export type pageBlockPreformatted = { + /** A preformatted text paragraph */ + _: 'pageBlockPreformatted', + /** Paragraph text */ + text: RichText, + /** Programming language for which the text needs to be formatted */ + language: string, + } + + export type pageBlockFooter = { + /** The footer of a page */ + _: 'pageBlockFooter', + /** Footer */ + footer: RichText, + } + + export type pageBlockDivider = { + /** An empty block separating a page */ + _: 'pageBlockDivider', + } + + export type pageBlockAnchor = { + /** + * An invisible anchor on a page, which can be used in a URL to open the page from + * the specified anchor + */ + _: 'pageBlockAnchor', + /** Name of the anchor */ + name: string, + } + + export type pageBlockList = { + /** A list of data blocks */ + _: 'pageBlockList', + /** The items of the list */ + items: Array, + } + + export type pageBlockBlockQuote = { + /** A block quote */ + _: 'pageBlockBlockQuote', + /** Quote text */ + text: RichText, + /** Quote credit */ + credit: RichText, + } + + export type pageBlockPullQuote = { + /** A pull quote */ + _: 'pageBlockPullQuote', + /** Quote text */ + text: RichText, + /** Quote credit */ + credit: RichText, + } + + export type pageBlockAnimation = { + /** An animation */ + _: 'pageBlockAnimation', + /** Animation file; may be null */ + animation?: animation, + /** Animation caption */ + caption: pageBlockCaption, + /** True, if the animation must be played automatically */ + need_autoplay: boolean, + } + + export type pageBlockAudio = { + /** An audio file */ + _: 'pageBlockAudio', + /** Audio file; may be null */ + audio?: audio, + /** Audio file caption */ + caption: pageBlockCaption, + } + + export type pageBlockPhoto = { + /** A photo */ + _: 'pageBlockPhoto', + /** Photo file; may be null */ + photo?: photo, + /** Photo caption */ + caption: pageBlockCaption, + /** URL that needs to be opened when the photo is clicked */ + url: string, + } + + export type pageBlockVideo = { + /** A video */ + _: 'pageBlockVideo', + /** Video file; may be null */ + video?: video, + /** Video caption */ + caption: pageBlockCaption, + /** True, if the video must be played automatically */ + need_autoplay: boolean, + /** True, if the video must be looped */ + is_looped: boolean, + } + + export type pageBlockVoiceNote = { + /** A voice note */ + _: 'pageBlockVoiceNote', + /** Voice note; may be null */ + voice_note?: voiceNote, + /** Voice note caption */ + caption: pageBlockCaption, + } + + export type pageBlockCover = { + /** A page cover */ + _: 'pageBlockCover', + /** Cover */ + cover: PageBlock, + } + + export type pageBlockEmbedded = { + /** An embedded web page */ + _: 'pageBlockEmbedded', + /** Web page URL, if available */ + url: string, + /** HTML-markup of the embedded page */ + html: string, + /** Poster photo, if available; may be null */ + poster_photo?: photo, + /** Block width; 0 if unknown */ + width: number, + /** Block height; 0 if unknown */ + height: number, + /** Block caption */ + caption: pageBlockCaption, + /** True, if the block must be full width */ + is_full_width: boolean, + /** True, if scrolling needs to be allowed */ + allow_scrolling: boolean, + } + + export type pageBlockEmbeddedPost = { + /** An embedded post */ + _: 'pageBlockEmbeddedPost', + /** Web page URL */ + url: string, + /** Post author */ + author: string, + /** Post author photo; may be null */ + author_photo?: photo, + /** Point in time (Unix timestamp) when the post was created; 0 if unknown */ + date: number, + /** Post content */ + page_blocks: Array, + /** Post caption */ + caption: pageBlockCaption, + } + + export type pageBlockCollage = { + /** A collage */ + _: 'pageBlockCollage', + /** Collage item contents */ + page_blocks: Array, + /** Block caption */ + caption: pageBlockCaption, + } + + export type pageBlockSlideshow = { + /** A slideshow */ + _: 'pageBlockSlideshow', + /** Slideshow item contents */ + page_blocks: Array, + /** Block caption */ + caption: pageBlockCaption, + } + + export type pageBlockChatLink = { + /** A link to a chat */ + _: 'pageBlockChatLink', + /** Chat title */ + title: string, + /** Chat photo; may be null */ + photo?: chatPhotoInfo, + /** Chat username, by which all other information about the chat can be resolved */ + username: string, + } + + export type pageBlockTable = { + /** A table */ + _: 'pageBlockTable', + /** Table caption */ + caption: RichText, + /** Table cells */ + cells: Array>, + /** True, if the table is bordered */ + is_bordered: boolean, + /** True, if the table is striped */ + is_striped: boolean, + } + + export type pageBlockDetails = { + /** A collapsible block */ + _: 'pageBlockDetails', + /** Always visible heading for the block */ + header: RichText, + /** Block contents */ + page_blocks: Array, + /** True, if the block is open by default */ + is_open: boolean, + } + + export type pageBlockRelatedArticles = { + /** Related articles */ + _: 'pageBlockRelatedArticles', + /** Block header */ + header: RichText, + /** List of related articles */ + articles: Array, + } + + export type pageBlockMap = { + /** A map */ + _: 'pageBlockMap', + /** Location of the map center */ + location: location, + /** Map zoom level */ + zoom: number, + /** Map width */ + width: number, + /** Map height */ + height: number, + /** Block caption */ + caption: pageBlockCaption, + } + + export type webPageInstantView = { + /** Describes an instant view page for a web page */ + _: 'webPageInstantView', + /** Content of the web page */ + page_blocks: Array, + /** Number of the instant view views; 0 if unknown */ + view_count: number, + /** Version of the instant view; currently, can be 1 or 2 */ + version: number, + /** True, if the instant view must be shown from right to left */ + is_rtl: boolean, + /** + * True, if the instant view contains the full page. A network request might be + * needed to get the full web page instant view + */ + is_full: boolean, + /** An internal link to be opened to leave feedback about the instant view */ + feedback_link: InternalLinkType, + } + + export type webPage = { + /** Describes a web page preview */ + _: 'webPage', + /** Original URL of the link */ + url: string, + /** URL to display */ + display_url: string, + /** + * Type of the web page. Can be: article, photo, audio, video, document, profile, + * app, or something else + */ + type: string, + /** Short name of the site (e.g., Google Docs, App Store) */ + site_name: string, + /** Title of the content */ + title: string, + /** Description of the content */ + description: formattedText, + /** Image representing the content; may be null */ + photo?: photo, + /** URL to show in the embedded preview */ + embed_url: string, + /** MIME type of the embedded preview, (e.g., text/html or video/mp4) */ + embed_type: string, + /** Width of the embedded preview */ + embed_width: number, + /** Height of the embedded preview */ + embed_height: number, + /** Duration of the content, in seconds */ + duration: number, + /** Author of the content */ + author: string, + /** Preview of the content as an animation, if available; may be null */ + animation?: animation, + /** Preview of the content as an audio file, if available; may be null */ + audio?: audio, + /** Preview of the content as a document, if available; may be null */ + document?: document, + /** + * Preview of the content as a sticker for small WEBP files, if available; may + * be null + */ + sticker?: sticker, + /** Preview of the content as a video, if available; may be null */ + video?: video, + /** Preview of the content as a video note, if available; may be null */ + video_note?: videoNote, + /** Preview of the content as a voice note, if available; may be null */ + voice_note?: voiceNote, + /** + * Version of instant view, available for the web page (currently, can be 1 or + * 2), 0 if none + */ + instant_view_version: number, + } + + export type countryInfo = { + /** Contains information about a country */ + _: 'countryInfo', + /** A two-letter ISO 3166-1 alpha-2 country code */ + country_code: string, + /** Native name of the country */ + name: string, + /** English name of the country */ + english_name: string, + /** True, if the country must be hidden from the list of all countries */ + is_hidden: boolean, + /** List of country calling codes */ + calling_codes: Array, + } + + export type countries = { + /** Contains information about countries */ + _: 'countries', + /** The list of countries */ + countries: Array, + } + + export type phoneNumberInfo = { + /** Contains information about a phone number */ + _: 'phoneNumberInfo', + /** Information about the country to which the phone number belongs; may be null */ + country?: countryInfo, + /** The part of the phone number denoting country calling code or its part */ + country_calling_code: string, + /** + * The phone number without country calling code formatted accordingly to local + * rules. Expected digits are returned as '-', but even more digits might be entered + * by the user + */ + formatted_phone_number: string, + } + + export type bankCardActionOpenUrl = { + /** Describes an action associated with a bank card number */ + _: 'bankCardActionOpenUrl', + /** Action text */ + text: string, + /** The URL to be opened */ + url: string, + } + + export type bankCardInfo = { + /** Information about a bank card */ + _: 'bankCardInfo', + /** Title of the bank card description */ + title: string, + /** Actions that can be done with the bank card number */ + actions: Array, + } + + export type address = { + /** Describes an address */ + _: 'address', + /** A two-letter ISO 3166-1 alpha-2 country code */ + country_code: string, + /** State, if applicable */ + state: string, + /** City */ + city: string, + /** First line of the address */ + street_line1: string, + /** Second line of the address */ + street_line2: string, + /** Address postal code */ + postal_code: string, + } + + export type address$Input = { + /** Describes an address */ + readonly _: 'address', + /** A two-letter ISO 3166-1 alpha-2 country code */ + readonly country_code?: string, + /** State, if applicable */ + readonly state?: string, + /** City */ + readonly city?: string, + /** First line of the address */ + readonly street_line1?: string, + /** Second line of the address */ + readonly street_line2?: string, + /** Address postal code */ + readonly postal_code?: string, + } + + export type labeledPricePart = { + /** Portion of the price of a product (e.g., "delivery cost", "tax amount") */ + _: 'labeledPricePart', + /** Label for this portion of the product price */ + label: string, + /** Currency amount in the smallest units of the currency */ + amount: number, + } + + export type labeledPricePart$Input = { + /** Portion of the price of a product (e.g., "delivery cost", "tax amount") */ + readonly _: 'labeledPricePart', + /** Label for this portion of the product price */ + readonly label?: string, + /** Currency amount in the smallest units of the currency */ + readonly amount?: number, + } + + export type invoice = { + /** Product invoice */ + _: 'invoice', + /** ISO 4217 currency code */ + currency: string, + /** A list of objects used to calculate the total price of the product */ + price_parts: Array, + /** The maximum allowed amount of tip in the smallest units of the currency */ + max_tip_amount: number, + /** Suggested amounts of tip in the smallest units of the currency */ + suggested_tip_amounts: Array, + /** True, if the payment is a test payment */ + is_test: boolean, + /** True, if the user's name is needed for payment */ + need_name: boolean, + /** True, if the user's phone number is needed for payment */ + need_phone_number: boolean, + /** True, if the user's email address is needed for payment */ + need_email_address: boolean, + /** True, if the user's shipping address is needed for payment */ + need_shipping_address: boolean, + /** True, if the user's phone number will be sent to the provider */ + send_phone_number_to_provider: boolean, + /** True, if the user's email address will be sent to the provider */ + send_email_address_to_provider: boolean, + /** True, if the total price depends on the shipping method */ + is_flexible: boolean, + } + + export type invoice$Input = { + /** Product invoice */ + readonly _: 'invoice', + /** ISO 4217 currency code */ + readonly currency?: string, + /** A list of objects used to calculate the total price of the product */ + readonly price_parts?: ReadonlyArray, + /** The maximum allowed amount of tip in the smallest units of the currency */ + readonly max_tip_amount?: number, + /** Suggested amounts of tip in the smallest units of the currency */ + readonly suggested_tip_amounts?: ReadonlyArray, + /** True, if the payment is a test payment */ + readonly is_test?: boolean, + /** True, if the user's name is needed for payment */ + readonly need_name?: boolean, + /** True, if the user's phone number is needed for payment */ + readonly need_phone_number?: boolean, + /** True, if the user's email address is needed for payment */ + readonly need_email_address?: boolean, + /** True, if the user's shipping address is needed for payment */ + readonly need_shipping_address?: boolean, + /** True, if the user's phone number will be sent to the provider */ + readonly send_phone_number_to_provider?: boolean, + /** True, if the user's email address will be sent to the provider */ + readonly send_email_address_to_provider?: boolean, + /** True, if the total price depends on the shipping method */ + readonly is_flexible?: boolean, + } + + export type orderInfo = { + /** Order information */ + _: 'orderInfo', + /** Name of the user */ + name: string, + /** Phone number of the user */ + phone_number: string, + /** Email address of the user */ + email_address: string, + /** Shipping address for this order; may be null */ + shipping_address?: address, + } + + export type orderInfo$Input = { + /** Order information */ + readonly _: 'orderInfo', + /** Name of the user */ + readonly name?: string, + /** Phone number of the user */ + readonly phone_number?: string, + /** Email address of the user */ + readonly email_address?: string, + /** Shipping address for this order; may be null */ + readonly shipping_address?: address$Input, + } + + export type shippingOption = { + /** One shipping option */ + _: 'shippingOption', + /** Shipping option identifier */ + id: string, + /** Option title */ + title: string, + /** A list of objects used to calculate the total shipping costs */ + price_parts: Array, + } + + export type shippingOption$Input = { + /** One shipping option */ + readonly _: 'shippingOption', + /** Shipping option identifier */ + readonly id?: string, + /** Option title */ + readonly title?: string, + /** A list of objects used to calculate the total shipping costs */ + readonly price_parts?: ReadonlyArray, + } + + export type savedCredentials = { + /** Contains information about saved card credentials */ + _: 'savedCredentials', + /** Unique identifier of the saved credentials */ + id: string, + /** Title of the saved credentials */ + title: string, + } + + export type inputCredentialsSaved$Input = { + /** + * Applies if a user chooses some previously saved payment credentials. To use + * their previously saved credentials, the user must have a valid temporary password + */ + readonly _: 'inputCredentialsSaved', + /** Identifier of the saved credentials */ + readonly saved_credentials_id?: string, + } + + export type inputCredentialsNew$Input = { + /** Applies if a user enters new credentials on a payment provider website */ + readonly _: 'inputCredentialsNew', + /** JSON-encoded data with the credential identifier from the payment provider */ + readonly data?: string, + /** True, if the credential identifier can be saved on the server side */ + readonly allow_save?: boolean, + } + + export type inputCredentialsApplePay$Input = { + /** Applies if a user enters new credentials using Apple Pay */ + readonly _: 'inputCredentialsApplePay', + /** JSON-encoded data with the credential identifier */ + readonly data?: string, + } + + export type inputCredentialsGooglePay$Input = { + /** Applies if a user enters new credentials using Google Pay */ + readonly _: 'inputCredentialsGooglePay', + /** JSON-encoded data with the credential identifier */ + readonly data?: string, + } + + export type paymentsProviderStripe = { + /** Stripe payment provider */ + _: 'paymentsProviderStripe', + /** Stripe API publishable key */ + publishable_key: string, + /** True, if the user country must be provided */ + need_country: boolean, + /** True, if the user ZIP/postal code must be provided */ + need_postal_code: boolean, + /** True, if the cardholder name must be provided */ + need_cardholder_name: boolean, + } + + export type paymentFormTheme$Input = { + /** Theme colors for a payment form */ + readonly _: 'paymentFormTheme', + /** A color of the payment form background in the RGB24 format */ + readonly background_color?: number, + /** A color of text in the RGB24 format */ + readonly text_color?: number, + /** A color of hints in the RGB24 format */ + readonly hint_color?: number, + /** A color of links in the RGB24 format */ + readonly link_color?: number, + /** A color of the buttons in the RGB24 format */ + readonly button_color?: number, + /** A color of text on the buttons in the RGB24 format */ + readonly button_text_color?: number, + } + + export type paymentForm = { + /** Contains information about an invoice payment form */ + _: 'paymentForm', + /** The payment form identifier */ + id: string, + /** Full information of the invoice */ + invoice: invoice, + /** Payment form URL */ + url: string, + /** User identifier of the seller bot */ + seller_bot_user_id: number, + /** User identifier of the payment provider bot */ + payments_provider_user_id: number, + /** + * Information about the payment provider, if available, to support it natively + * without the need for opening the URL; may be null + */ + payments_provider?: paymentsProviderStripe, + /** Saved server-side order information; may be null */ + saved_order_info?: orderInfo, + /** Information about saved card credentials; may be null */ + saved_credentials?: savedCredentials, + /** True, if the user can choose to save credentials */ + can_save_credentials: boolean, + /** + * True, if the user will be able to save credentials protected by a password they + * set up + */ + need_password: boolean, + } + + export type validatedOrderInfo = { + /** + * Contains a temporary identifier of validated order information, which is stored + * for one hour. Also contains the available shipping options + */ + _: 'validatedOrderInfo', + /** Temporary identifier of the order information */ + order_info_id: string, + /** Available shipping options */ + shipping_options: Array, + } + + export type paymentResult = { + /** Contains the result of a payment request */ + _: 'paymentResult', + /** + * True, if the payment request was successful; otherwise the verification_url + * will be non-empty + */ + success: boolean, + /** URL for additional payment credentials verification */ + verification_url: string, + } + + export type paymentReceipt = { + /** Contains information about a successful payment */ + _: 'paymentReceipt', + /** Product title */ + title: string, + /** Product description */ + description: string, + /** Product photo; may be null */ + photo?: photo, + /** Point in time (Unix timestamp) when the payment was made */ + date: number, + /** User identifier of the seller bot */ + seller_bot_user_id: number, + /** User identifier of the payment provider bot */ + payments_provider_user_id: number, + /** Information about the invoice */ + invoice: invoice, + /** Order information; may be null */ + order_info?: orderInfo, + /** Chosen shipping option; may be null */ + shipping_option?: shippingOption, + /** Title of the saved credentials chosen by the buyer */ + credentials_title: string, + /** The amount of tip chosen by the buyer in the smallest units of the currency */ + tip_amount: number, + } + + export type datedFile = { + /** File with the date it was uploaded */ + _: 'datedFile', + /** The file */ + file: file, + /** Point in time (Unix timestamp) when the file was uploaded */ + date: number, + } + + export type passportElementTypePersonalDetails = { + /** A Telegram Passport element containing the user's personal details */ + _: 'passportElementTypePersonalDetails', + } + + export type passportElementTypePersonalDetails$Input = { + /** A Telegram Passport element containing the user's personal details */ + readonly _: 'passportElementTypePersonalDetails', + } + + export type passportElementTypePassport = { + /** A Telegram Passport element containing the user's passport */ + _: 'passportElementTypePassport', + } + + export type passportElementTypePassport$Input = { + /** A Telegram Passport element containing the user's passport */ + readonly _: 'passportElementTypePassport', + } + + export type passportElementTypeDriverLicense = { + /** A Telegram Passport element containing the user's driver license */ + _: 'passportElementTypeDriverLicense', + } + + export type passportElementTypeDriverLicense$Input = { + /** A Telegram Passport element containing the user's driver license */ + readonly _: 'passportElementTypeDriverLicense', + } + + export type passportElementTypeIdentityCard = { + /** A Telegram Passport element containing the user's identity card */ + _: 'passportElementTypeIdentityCard', + } + + export type passportElementTypeIdentityCard$Input = { + /** A Telegram Passport element containing the user's identity card */ + readonly _: 'passportElementTypeIdentityCard', + } + + export type passportElementTypeInternalPassport = { + /** A Telegram Passport element containing the user's internal passport */ + _: 'passportElementTypeInternalPassport', + } + + export type passportElementTypeInternalPassport$Input = { + /** A Telegram Passport element containing the user's internal passport */ + readonly _: 'passportElementTypeInternalPassport', + } + + export type passportElementTypeAddress = { + /** A Telegram Passport element containing the user's address */ + _: 'passportElementTypeAddress', + } + + export type passportElementTypeAddress$Input = { + /** A Telegram Passport element containing the user's address */ + readonly _: 'passportElementTypeAddress', + } + + export type passportElementTypeUtilityBill = { + /** A Telegram Passport element containing the user's utility bill */ + _: 'passportElementTypeUtilityBill', + } + + export type passportElementTypeUtilityBill$Input = { + /** A Telegram Passport element containing the user's utility bill */ + readonly _: 'passportElementTypeUtilityBill', + } + + export type passportElementTypeBankStatement = { + /** A Telegram Passport element containing the user's bank statement */ + _: 'passportElementTypeBankStatement', + } + + export type passportElementTypeBankStatement$Input = { + /** A Telegram Passport element containing the user's bank statement */ + readonly _: 'passportElementTypeBankStatement', + } + + export type passportElementTypeRentalAgreement = { + /** A Telegram Passport element containing the user's rental agreement */ + _: 'passportElementTypeRentalAgreement', + } + + export type passportElementTypeRentalAgreement$Input = { + /** A Telegram Passport element containing the user's rental agreement */ + readonly _: 'passportElementTypeRentalAgreement', + } + + export type passportElementTypePassportRegistration = { + /** A Telegram Passport element containing the registration page of the user's passport */ + _: 'passportElementTypePassportRegistration', + } + + export type passportElementTypePassportRegistration$Input = { + /** A Telegram Passport element containing the registration page of the user's passport */ + readonly _: 'passportElementTypePassportRegistration', + } + + export type passportElementTypeTemporaryRegistration = { + /** A Telegram Passport element containing the user's temporary registration */ + _: 'passportElementTypeTemporaryRegistration', + } + + export type passportElementTypeTemporaryRegistration$Input = { + /** A Telegram Passport element containing the user's temporary registration */ + readonly _: 'passportElementTypeTemporaryRegistration', + } + + export type passportElementTypePhoneNumber = { + /** A Telegram Passport element containing the user's phone number */ + _: 'passportElementTypePhoneNumber', + } + + export type passportElementTypePhoneNumber$Input = { + /** A Telegram Passport element containing the user's phone number */ + readonly _: 'passportElementTypePhoneNumber', + } + + export type passportElementTypeEmailAddress = { + /** A Telegram Passport element containing the user's email address */ + _: 'passportElementTypeEmailAddress', + } + + export type passportElementTypeEmailAddress$Input = { + /** A Telegram Passport element containing the user's email address */ + readonly _: 'passportElementTypeEmailAddress', + } + + export type date = { + /** Represents a date according to the Gregorian calendar */ + _: 'date', + /** Day of the month; 1-31 */ + day: number, + /** Month; 1-12 */ + month: number, + /** Year; 1-9999 */ + year: number, + } + + export type date$Input = { + /** Represents a date according to the Gregorian calendar */ + readonly _: 'date', + /** Day of the month; 1-31 */ + readonly day?: number, + /** Month; 1-12 */ + readonly month?: number, + /** Year; 1-9999 */ + readonly year?: number, + } + + export type personalDetails = { + /** Contains the user's personal details */ + _: 'personalDetails', + /** First name of the user written in English; 1-255 characters */ + first_name: string, + /** Middle name of the user written in English; 0-255 characters */ + middle_name: string, + /** Last name of the user written in English; 1-255 characters */ + last_name: string, + /** Native first name of the user; 1-255 characters */ + native_first_name: string, + /** Native middle name of the user; 0-255 characters */ + native_middle_name: string, + /** Native last name of the user; 1-255 characters */ + native_last_name: string, + /** Birthdate of the user */ + birthdate: date, + /** Gender of the user, "male" or "female" */ + gender: string, + /** A two-letter ISO 3166-1 alpha-2 country code of the user's country */ + country_code: string, + /** A two-letter ISO 3166-1 alpha-2 country code of the user's residence country */ + residence_country_code: string, + } + + export type personalDetails$Input = { + /** Contains the user's personal details */ + readonly _: 'personalDetails', + /** First name of the user written in English; 1-255 characters */ + readonly first_name?: string, + /** Middle name of the user written in English; 0-255 characters */ + readonly middle_name?: string, + /** Last name of the user written in English; 1-255 characters */ + readonly last_name?: string, + /** Native first name of the user; 1-255 characters */ + readonly native_first_name?: string, + /** Native middle name of the user; 0-255 characters */ + readonly native_middle_name?: string, + /** Native last name of the user; 1-255 characters */ + readonly native_last_name?: string, + /** Birthdate of the user */ + readonly birthdate?: date$Input, + /** Gender of the user, "male" or "female" */ + readonly gender?: string, + /** A two-letter ISO 3166-1 alpha-2 country code of the user's country */ + readonly country_code?: string, + /** A two-letter ISO 3166-1 alpha-2 country code of the user's residence country */ + readonly residence_country_code?: string, + } + + export type identityDocument = { + /** An identity document */ + _: 'identityDocument', + /** Document number; 1-24 characters */ + number: string, + /** Document expiry date; may be null if not applicable */ + expiry_date?: date, + /** Front side of the document */ + front_side: datedFile, + /** + * Reverse side of the document; only for driver license and identity card; may + * be null + */ + reverse_side?: datedFile, + /** Selfie with the document; may be null */ + selfie?: datedFile, + /** List of files containing a certified English translation of the document */ + translation: Array, + } + + export type inputIdentityDocument$Input = { + /** An identity document to be saved to Telegram Passport */ + readonly _: 'inputIdentityDocument', + /** Document number; 1-24 characters */ + readonly number?: string, + /** Document expiry date; pass null if not applicable */ + readonly expiry_date?: date$Input, + /** Front side of the document */ + readonly front_side?: InputFile$Input, + /** + * Reverse side of the document; only for driver license and identity card; pass + * null otherwise + */ + readonly reverse_side?: InputFile$Input, + /** Selfie with the document; pass null if unavailable */ + readonly selfie?: InputFile$Input, + /** List of files containing a certified English translation of the document */ + readonly translation?: ReadonlyArray, + } + + export type personalDocument = { + /** A personal document, containing some information about a user */ + _: 'personalDocument', + /** List of files containing the pages of the document */ + files: Array, + /** List of files containing a certified English translation of the document */ + translation: Array, + } + + export type inputPersonalDocument$Input = { + /** A personal document to be saved to Telegram Passport */ + readonly _: 'inputPersonalDocument', + /** List of files containing the pages of the document */ + readonly files?: ReadonlyArray, + /** List of files containing a certified English translation of the document */ + readonly translation?: ReadonlyArray, + } + + export type passportElementPersonalDetails = { + /** A Telegram Passport element containing the user's personal details */ + _: 'passportElementPersonalDetails', + /** Personal details of the user */ + personal_details: personalDetails, + } + + export type passportElementPassport = { + /** A Telegram Passport element containing the user's passport */ + _: 'passportElementPassport', + /** Passport */ + passport: identityDocument, + } + + export type passportElementDriverLicense = { + /** A Telegram Passport element containing the user's driver license */ + _: 'passportElementDriverLicense', + /** Driver license */ + driver_license: identityDocument, + } + + export type passportElementIdentityCard = { + /** A Telegram Passport element containing the user's identity card */ + _: 'passportElementIdentityCard', + /** Identity card */ + identity_card: identityDocument, + } + + export type passportElementInternalPassport = { + /** A Telegram Passport element containing the user's internal passport */ + _: 'passportElementInternalPassport', + /** Internal passport */ + internal_passport: identityDocument, + } + + export type passportElementAddress = { + /** A Telegram Passport element containing the user's address */ + _: 'passportElementAddress', + /** Address */ + address: address, + } + + export type passportElementUtilityBill = { + /** A Telegram Passport element containing the user's utility bill */ + _: 'passportElementUtilityBill', + /** Utility bill */ + utility_bill: personalDocument, + } + + export type passportElementBankStatement = { + /** A Telegram Passport element containing the user's bank statement */ + _: 'passportElementBankStatement', + /** Bank statement */ + bank_statement: personalDocument, + } + + export type passportElementRentalAgreement = { + /** A Telegram Passport element containing the user's rental agreement */ + _: 'passportElementRentalAgreement', + /** Rental agreement */ + rental_agreement: personalDocument, + } + + export type passportElementPassportRegistration = { + /** A Telegram Passport element containing the user's passport registration pages */ + _: 'passportElementPassportRegistration', + /** Passport registration pages */ + passport_registration: personalDocument, + } + + export type passportElementTemporaryRegistration = { + /** A Telegram Passport element containing the user's temporary registration */ + _: 'passportElementTemporaryRegistration', + /** Temporary registration */ + temporary_registration: personalDocument, + } + + export type passportElementPhoneNumber = { + /** A Telegram Passport element containing the user's phone number */ + _: 'passportElementPhoneNumber', + /** Phone number */ + phone_number: string, + } + + export type passportElementEmailAddress = { + /** A Telegram Passport element containing the user's email address */ + _: 'passportElementEmailAddress', + /** Email address */ + email_address: string, + } + + export type inputPassportElementPersonalDetails$Input = { + /** A Telegram Passport element to be saved containing the user's personal details */ + readonly _: 'inputPassportElementPersonalDetails', + /** Personal details of the user */ + readonly personal_details?: personalDetails$Input, + } + + export type inputPassportElementPassport$Input = { + /** A Telegram Passport element to be saved containing the user's passport */ + readonly _: 'inputPassportElementPassport', + /** The passport to be saved */ + readonly passport?: inputIdentityDocument$Input, + } + + export type inputPassportElementDriverLicense$Input = { + /** A Telegram Passport element to be saved containing the user's driver license */ + readonly _: 'inputPassportElementDriverLicense', + /** The driver license to be saved */ + readonly driver_license?: inputIdentityDocument$Input, + } + + export type inputPassportElementIdentityCard$Input = { + /** A Telegram Passport element to be saved containing the user's identity card */ + readonly _: 'inputPassportElementIdentityCard', + /** The identity card to be saved */ + readonly identity_card?: inputIdentityDocument$Input, + } + + export type inputPassportElementInternalPassport$Input = { + /** A Telegram Passport element to be saved containing the user's internal passport */ + readonly _: 'inputPassportElementInternalPassport', + /** The internal passport to be saved */ + readonly internal_passport?: inputIdentityDocument$Input, + } + + export type inputPassportElementAddress$Input = { + /** A Telegram Passport element to be saved containing the user's address */ + readonly _: 'inputPassportElementAddress', + /** The address to be saved */ + readonly address?: address$Input, + } + + export type inputPassportElementUtilityBill$Input = { + /** A Telegram Passport element to be saved containing the user's utility bill */ + readonly _: 'inputPassportElementUtilityBill', + /** The utility bill to be saved */ + readonly utility_bill?: inputPersonalDocument$Input, + } + + export type inputPassportElementBankStatement$Input = { + /** A Telegram Passport element to be saved containing the user's bank statement */ + readonly _: 'inputPassportElementBankStatement', + /** The bank statement to be saved */ + readonly bank_statement?: inputPersonalDocument$Input, + } + + export type inputPassportElementRentalAgreement$Input = { + /** A Telegram Passport element to be saved containing the user's rental agreement */ + readonly _: 'inputPassportElementRentalAgreement', + /** The rental agreement to be saved */ + readonly rental_agreement?: inputPersonalDocument$Input, + } + + export type inputPassportElementPassportRegistration$Input = { + /** A Telegram Passport element to be saved containing the user's passport registration */ + readonly _: 'inputPassportElementPassportRegistration', + /** The passport registration page to be saved */ + readonly passport_registration?: inputPersonalDocument$Input, + } + + export type inputPassportElementTemporaryRegistration$Input = { + /** A Telegram Passport element to be saved containing the user's temporary registration */ + readonly _: 'inputPassportElementTemporaryRegistration', + /** The temporary registration document to be saved */ + readonly temporary_registration?: inputPersonalDocument$Input, + } + + export type inputPassportElementPhoneNumber$Input = { + /** A Telegram Passport element to be saved containing the user's phone number */ + readonly _: 'inputPassportElementPhoneNumber', + /** The phone number to be saved */ + readonly phone_number?: string, + } + + export type inputPassportElementEmailAddress$Input = { + /** A Telegram Passport element to be saved containing the user's email address */ + readonly _: 'inputPassportElementEmailAddress', + /** The email address to be saved */ + readonly email_address?: string, + } + + export type passportElements = { + /** Contains information about saved Telegram Passport elements */ + _: 'passportElements', + /** Telegram Passport elements */ + elements: Array, + } + + export type passportElementErrorSourceUnspecified = { + /** + * The element contains an error in an unspecified place. The error will be considered + * resolved when new data is added + */ + _: 'passportElementErrorSourceUnspecified', + } + + export type passportElementErrorSourceDataField = { + /** + * One of the data fields contains an error. The error will be considered resolved + * when the value of the field changes + */ + _: 'passportElementErrorSourceDataField', + /** Field name */ + field_name: string, + } + + export type passportElementErrorSourceFrontSide = { + /** + * The front side of the document contains an error. The error will be considered + * resolved when the file with the front side changes + */ + _: 'passportElementErrorSourceFrontSide', + } + + export type passportElementErrorSourceReverseSide = { + /** + * The reverse side of the document contains an error. The error will be considered + * resolved when the file with the reverse side changes + */ + _: 'passportElementErrorSourceReverseSide', + } + + export type passportElementErrorSourceSelfie = { + /** + * The selfie with the document contains an error. The error will be considered + * resolved when the file with the selfie changes + */ + _: 'passportElementErrorSourceSelfie', + } + + export type passportElementErrorSourceTranslationFile = { + /** + * One of files with the translation of the document contains an error. The error + * will be considered resolved when the file changes + */ + _: 'passportElementErrorSourceTranslationFile', + /** Index of a file with the error */ + file_index: number, + } + + export type passportElementErrorSourceTranslationFiles = { + /** + * The translation of the document contains an error. The error will be considered + * resolved when the list of translation files changes + */ + _: 'passportElementErrorSourceTranslationFiles', + } + + export type passportElementErrorSourceFile = { + /** + * The file contains an error. The error will be considered resolved when the file + * changes + */ + _: 'passportElementErrorSourceFile', + /** Index of a file with the error */ + file_index: number, + } + + export type passportElementErrorSourceFiles = { + /** + * The list of attached files contains an error. The error will be considered resolved + * when the list of files changes + */ + _: 'passportElementErrorSourceFiles', + } + + export type passportElementError = { + /** Contains the description of an error in a Telegram Passport element */ + _: 'passportElementError', + /** Type of the Telegram Passport element which has the error */ + type: PassportElementType, + /** Error message */ + message: string, + /** Error source */ + source: PassportElementErrorSource, + } + + export type passportSuitableElement = { + /** + * Contains information about a Telegram Passport element that was requested by + * a service + */ + _: 'passportSuitableElement', + /** Type of the element */ + type: PassportElementType, + /** True, if a selfie is required with the identity document */ + is_selfie_required: boolean, + /** True, if a certified English translation is required with the document */ + is_translation_required: boolean, + /** + * True, if personal details must include the user's name in the language of their + * country of residence + */ + is_native_name_required: boolean, + } + + export type passportRequiredElement = { + /** + * Contains a description of the required Telegram Passport element that was requested + * by a service + */ + _: 'passportRequiredElement', + /** List of Telegram Passport elements any of which is enough to provide */ + suitable_elements: Array, + } + + export type passportAuthorizationForm = { + /** Contains information about a Telegram Passport authorization form that was requested */ + _: 'passportAuthorizationForm', + /** Unique identifier of the authorization form */ + id: number, + /** Telegram Passport elements that must be provided to complete the form */ + required_elements: Array, + /** URL for the privacy policy of the service; may be empty */ + privacy_policy_url: string, + } + + export type passportElementsWithErrors = { + /** Contains information about a Telegram Passport elements and corresponding errors */ + _: 'passportElementsWithErrors', + /** Telegram Passport elements */ + elements: Array, + /** Errors in the elements that are already available */ + errors: Array, + } + + export type encryptedCredentials = { + /** Contains encrypted Telegram Passport data credentials */ + _: 'encryptedCredentials', + /** The encrypted credentials */ + data: string /* base64 */, + /** The decrypted data hash */ + hash: string /* base64 */, + /** Secret for data decryption, encrypted with the service's public key */ + secret: string /* base64 */, + } + + export type encryptedPassportElement = { + /** + * Contains information about an encrypted Telegram Passport element; for bots + * only + */ + _: 'encryptedPassportElement', + /** Type of Telegram Passport element */ + type: PassportElementType, + /** Encrypted JSON-encoded data about the user */ + data: string /* base64 */, + /** The front side of an identity document */ + front_side: datedFile, + /** The reverse side of an identity document; may be null */ + reverse_side?: datedFile, + /** Selfie with the document; may be null */ + selfie?: datedFile, + /** List of files containing a certified English translation of the document */ + translation: Array, + /** List of attached files */ + files: Array, + /** Unencrypted data, phone number or email address */ + value: string, + /** Hash of the entire element */ + hash: string, + } + + export type inputPassportElementErrorSourceUnspecified$Input = { + /** + * The element contains an error in an unspecified place. The error will be considered + * resolved when new data is added + */ + readonly _: 'inputPassportElementErrorSourceUnspecified', + /** Current hash of the entire element */ + readonly element_hash?: string /* base64 */, + } + + export type inputPassportElementErrorSourceDataField$Input = { + /** + * A data field contains an error. The error is considered resolved when the field's + * value changes + */ + readonly _: 'inputPassportElementErrorSourceDataField', + /** Field name */ + readonly field_name?: string, + /** Current data hash */ + readonly data_hash?: string /* base64 */, + } + + export type inputPassportElementErrorSourceFrontSide$Input = { + /** + * The front side of the document contains an error. The error is considered resolved + * when the file with the front side of the document changes + */ + readonly _: 'inputPassportElementErrorSourceFrontSide', + /** Current hash of the file containing the front side */ + readonly file_hash?: string /* base64 */, + } + + export type inputPassportElementErrorSourceReverseSide$Input = { + /** + * The reverse side of the document contains an error. The error is considered + * resolved when the file with the reverse side of the document changes + */ + readonly _: 'inputPassportElementErrorSourceReverseSide', + /** Current hash of the file containing the reverse side */ + readonly file_hash?: string /* base64 */, + } + + export type inputPassportElementErrorSourceSelfie$Input = { + /** + * The selfie contains an error. The error is considered resolved when the file + * with the selfie changes + */ + readonly _: 'inputPassportElementErrorSourceSelfie', + /** Current hash of the file containing the selfie */ + readonly file_hash?: string /* base64 */, + } + + export type inputPassportElementErrorSourceTranslationFile$Input = { + /** + * One of the files containing the translation of the document contains an error. + * The error is considered resolved when the file with the translation changes + */ + readonly _: 'inputPassportElementErrorSourceTranslationFile', + /** Current hash of the file containing the translation */ + readonly file_hash?: string /* base64 */, + } + + export type inputPassportElementErrorSourceTranslationFiles$Input = { + /** + * The translation of the document contains an error. The error is considered resolved + * when the list of files changes + */ + readonly _: 'inputPassportElementErrorSourceTranslationFiles', + /** Current hashes of all files with the translation */ + readonly file_hashes?: ReadonlyArray, + } + + export type inputPassportElementErrorSourceFile$Input = { + /** The file contains an error. The error is considered resolved when the file changes */ + readonly _: 'inputPassportElementErrorSourceFile', + /** Current hash of the file which has the error */ + readonly file_hash?: string /* base64 */, + } + + export type inputPassportElementErrorSourceFiles$Input = { + /** + * The list of attached files contains an error. The error is considered resolved + * when the file list changes + */ + readonly _: 'inputPassportElementErrorSourceFiles', + /** Current hashes of all attached files */ + readonly file_hashes?: ReadonlyArray, + } + + export type inputPassportElementError$Input = { + /** + * Contains the description of an error in a Telegram Passport element; for bots + * only + */ + readonly _: 'inputPassportElementError', + /** Type of Telegram Passport element that has the error */ + readonly type?: PassportElementType$Input, + /** Error message */ + readonly message?: string, + /** Error source */ + readonly source?: InputPassportElementErrorSource$Input, + } + + export type messageText = { + /** A text message */ + _: 'messageText', + /** Text of the message */ + text: formattedText, + /** A preview of the web page that's mentioned in the text; may be null */ + web_page?: webPage, + } + + export type messageAnimation = { + /** An animation message (GIF-style). */ + _: 'messageAnimation', + /** The animation description */ + animation: animation, + /** Animation caption */ + caption: formattedText, + /** + * True, if the animation thumbnail must be blurred and the animation must be shown + * only while tapped + */ + is_secret: boolean, + } + + export type messageAudio = { + /** An audio message */ + _: 'messageAudio', + /** The audio description */ + audio: audio, + /** Audio caption */ + caption: formattedText, + } + + export type messageDocument = { + /** A document message (general file) */ + _: 'messageDocument', + /** The document description */ + document: document, + /** Document caption */ + caption: formattedText, + } + + export type messagePhoto = { + /** A photo message */ + _: 'messagePhoto', + /** The photo description */ + photo: photo, + /** Photo caption */ + caption: formattedText, + /** True, if the photo must be blurred and must be shown only while tapped */ + is_secret: boolean, + } + + export type messageExpiredPhoto = { + /** An expired photo message (self-destructed after TTL has elapsed) */ + _: 'messageExpiredPhoto', + } + + export type messageSticker = { + /** A sticker message */ + _: 'messageSticker', + /** The sticker description */ + sticker: sticker, + } + + export type messageVideo = { + /** A video message */ + _: 'messageVideo', + /** The video description */ + video: video, + /** Video caption */ + caption: formattedText, + /** + * True, if the video thumbnail must be blurred and the video must be shown only + * while tapped + */ + is_secret: boolean, + } + + export type messageExpiredVideo = { + /** An expired video message (self-destructed after TTL has elapsed) */ + _: 'messageExpiredVideo', + } + + export type messageVideoNote = { + /** A video note message */ + _: 'messageVideoNote', + /** The video note description */ + video_note: videoNote, + /** True, if at least one of the recipients has viewed the video note */ + is_viewed: boolean, + /** + * True, if the video note thumbnail must be blurred and the video note must be + * shown only while tapped + */ + is_secret: boolean, + } + + export type messageVoiceNote = { + /** A voice note message */ + _: 'messageVoiceNote', + /** The voice note description */ + voice_note: voiceNote, + /** Voice note caption */ + caption: formattedText, + /** True, if at least one of the recipients has listened to the voice note */ + is_listened: boolean, + } + + export type messageLocation = { + /** A message with a location */ + _: 'messageLocation', + /** The location description */ + location: location, + /** + * Time relative to the message send date, for which the location can be updated, + * in seconds + */ + live_period: number, + /** + * Left time for which the location can be updated, in seconds. updateMessageContent + * is not sent when this field changes + */ + expires_in: number, + /** + * For live locations, a direction in which the location moves, in degrees; 1-360. + * If 0 the direction is unknown + */ + heading: number, + /** + * For live locations, a maximum distance to another chat member for proximity + * alerts, in meters (0-100000). 0 if the notification is disabled. Available only + * for the message sender + */ + proximity_alert_radius: number, + } + + export type messageVenue = { + /** A message with information about a venue */ + _: 'messageVenue', + /** The venue description */ + venue: venue, + } + + export type messageContact = { + /** A message with a user contact */ + _: 'messageContact', + /** The contact description */ + contact: contact, + } + + export type messageAnimatedEmoji = { + /** A message with an animated emoji */ + _: 'messageAnimatedEmoji', + /** The animated emoji */ + animated_emoji: animatedEmoji, + /** The corresponding emoji */ + emoji: string, + } + + export type messageDice = { + /** A dice message. The dice value is randomly generated by the server */ + _: 'messageDice', + /** + * The animated stickers with the initial dice animation; may be null if unknown. + * updateMessageContent will be sent when the sticker became known + */ + initial_state?: DiceStickers, + /** + * The animated stickers with the final dice animation; may be null if unknown. + * updateMessageContent will be sent when the sticker became known + */ + final_state?: DiceStickers, + /** Emoji on which the dice throw animation is based */ + emoji: string, + /** The dice value. If the value is 0, the dice don't have final state yet */ + value: number, + /** + * Number of frame after which a success animation like a shower of confetti needs + * to be shown on updateMessageSendSucceeded + */ + success_animation_frame_number: number, + } + + export type messageGame = { + /** A message with a game */ + _: 'messageGame', + /** The game description */ + game: game, + } + + export type messagePoll = { + /** A message with a poll */ + _: 'messagePoll', + /** The poll description */ + poll: poll, + } + + export type messageInvoice = { + /** A message with an invoice from a bot */ + _: 'messageInvoice', + /** Product title */ + title: string, + /** Product description */ + description: string, + /** Product photo; may be null */ + photo?: photo, + /** Currency for the product price */ + currency: string, + /** Product total price in the smallest units of the currency */ + total_amount: number, + /** Unique invoice bot start_parameter. To share an invoice use the URL https://t.me/{bot_username}?start={start_parameter} */ + start_parameter: string, + /** True, if the invoice is a test invoice */ + is_test: boolean, + /** True, if the shipping address must be specified */ + need_shipping_address: boolean, + /** The identifier of the message with the receipt, after the product has been purchased */ + receipt_message_id: number, + } + + export type messageCall = { + /** A message with information about an ended call */ + _: 'messageCall', + /** True, if the call was a video call */ + is_video: boolean, + /** Reason why the call was discarded */ + discard_reason: CallDiscardReason, + /** Call duration, in seconds */ + duration: number, + } + + export type messageVideoChatScheduled = { + /** A new video chat was scheduled */ + _: 'messageVideoChatScheduled', + /** + * Identifier of the video chat. The video chat can be received through the method + * getGroupCall + */ + group_call_id: number, + /** + * Point in time (Unix timestamp) when the group call is supposed to be started + * by an administrator + */ + start_date: number, + } + + export type messageVideoChatStarted = { + /** A newly created video chat */ + _: 'messageVideoChatStarted', + /** + * Identifier of the video chat. The video chat can be received through the method + * getGroupCall + */ + group_call_id: number, + } + + export type messageVideoChatEnded = { + /** A message with information about an ended video chat */ + _: 'messageVideoChatEnded', + /** Call duration, in seconds */ + duration: number, + } + + export type messageInviteVideoChatParticipants = { + /** A message with information about an invite to a video chat */ + _: 'messageInviteVideoChatParticipants', + /** + * Identifier of the video chat. The video chat can be received through the method + * getGroupCall + */ + group_call_id: number, + /** Invited user identifiers */ + user_ids: Array, + } + + export type messageBasicGroupChatCreate = { + /** A newly created basic group */ + _: 'messageBasicGroupChatCreate', + /** Title of the basic group */ + title: string, + /** User identifiers of members in the basic group */ + member_user_ids: Array, + } + + export type messageSupergroupChatCreate = { + /** A newly created supergroup or channel */ + _: 'messageSupergroupChatCreate', + /** Title of the supergroup or channel */ + title: string, + } + + export type messageChatChangeTitle = { + /** An updated chat title */ + _: 'messageChatChangeTitle', + /** New chat title */ + title: string, + } + + export type messageChatChangePhoto = { + /** An updated chat photo */ + _: 'messageChatChangePhoto', + /** New chat photo */ + photo: chatPhoto, + } + + export type messageChatDeletePhoto = { + /** A deleted chat photo */ + _: 'messageChatDeletePhoto', + } + + export type messageChatAddMembers = { + /** New chat members were added */ + _: 'messageChatAddMembers', + /** User identifiers of the new members */ + member_user_ids: Array, + } + + export type messageChatJoinByLink = { + /** A new member joined the chat via an invite link */ + _: 'messageChatJoinByLink', + } + + export type messageChatJoinByRequest = { + /** A new member was accepted to the chat by an administrator */ + _: 'messageChatJoinByRequest', + } + + export type messageChatDeleteMember = { + /** A chat member was deleted */ + _: 'messageChatDeleteMember', + /** User identifier of the deleted chat member */ + user_id: number, + } + + export type messageChatUpgradeTo = { + /** A basic group was upgraded to a supergroup and was deactivated as the result */ + _: 'messageChatUpgradeTo', + /** Identifier of the supergroup to which the basic group was upgraded */ + supergroup_id: number, + } + + export type messageChatUpgradeFrom = { + /** A supergroup has been created from a basic group */ + _: 'messageChatUpgradeFrom', + /** Title of the newly created supergroup */ + title: string, + /** The identifier of the original basic group */ + basic_group_id: number, + } + + export type messagePinMessage = { + /** A message has been pinned */ + _: 'messagePinMessage', + /** + * Identifier of the pinned message, can be an identifier of a deleted message + * or 0 + */ + message_id: number, + } + + export type messageScreenshotTaken = { + /** A screenshot of a message in the chat has been taken */ + _: 'messageScreenshotTaken', + } + + export type messageChatSetTheme = { + /** A theme in the chat has been changed */ + _: 'messageChatSetTheme', + /** + * If non-empty, name of a new theme, set for the chat. Otherwise chat theme was + * reset to the default one + */ + theme_name: string, + } + + export type messageChatSetTtl = { + /** The TTL (Time To Live) setting for messages in the chat has been changed */ + _: 'messageChatSetTtl', + /** New message TTL */ + ttl: number, + } + + export type messageCustomServiceAction = { + /** A non-standard action has happened in the chat */ + _: 'messageCustomServiceAction', + /** Message text to be shown in the chat */ + text: string, + } + + export type messageGameScore = { + /** A new high score was achieved in a game */ + _: 'messageGameScore', + /** Identifier of the message with the game, can be an identifier of a deleted message */ + game_message_id: number, + /** + * Identifier of the game; may be different from the games presented in the message + * with the game + */ + game_id: string, + /** New score */ + score: number, + } + + export type messagePaymentSuccessful = { + /** A payment has been completed */ + _: 'messagePaymentSuccessful', + /** Identifier of the chat, containing the corresponding invoice message; 0 if unknown */ + invoice_chat_id: number, + /** + * Identifier of the message with the corresponding invoice; can be an identifier + * of a deleted message + */ + invoice_message_id: number, + /** Currency for the price of the product */ + currency: string, + /** Total price for the product, in the smallest units of the currency */ + total_amount: number, + } + + export type messagePaymentSuccessfulBot = { + /** A payment has been completed; for bots only */ + _: 'messagePaymentSuccessfulBot', + /** Currency for price of the product */ + currency: string, + /** Total price for the product, in the smallest units of the currency */ + total_amount: number, + /** Invoice payload */ + invoice_payload: string /* base64 */, + /** Identifier of the shipping option chosen by the user; may be empty if not applicable */ + shipping_option_id: string, + /** Information about the order; may be null */ + order_info?: orderInfo, + /** Telegram payment identifier */ + telegram_payment_charge_id: string, + /** Provider payment identifier */ + provider_payment_charge_id: string, + } + + export type messageContactRegistered = { + /** A contact has registered with Telegram */ + _: 'messageContactRegistered', + } + + export type messageWebsiteConnected = { + /** + * The current user has connected a website by logging in using Telegram Login + * Widget on it + */ + _: 'messageWebsiteConnected', + /** Domain name of the connected website */ + domain_name: string, + } + + export type messagePassportDataSent = { + /** Telegram Passport data has been sent */ + _: 'messagePassportDataSent', + /** List of Telegram Passport element types sent */ + types: Array, + } + + export type messagePassportDataReceived = { + /** Telegram Passport data has been received; for bots only */ + _: 'messagePassportDataReceived', + /** List of received Telegram Passport elements */ + elements: Array, + /** Encrypted data credentials */ + credentials: encryptedCredentials, + } + + export type messageProximityAlertTriggered = { + /** A user in the chat came within proximity alert range */ + _: 'messageProximityAlertTriggered', + /** The identifier of a user or chat that triggered the proximity alert */ + traveler_id: MessageSender, + /** The identifier of a user or chat that subscribed for the proximity alert */ + watcher_id: MessageSender, + /** The distance between the users */ + distance: number, + } + + export type messageUnsupported = { + /** Message content that is not supported in the current TDLib version */ + _: 'messageUnsupported', + } + + export type textEntityTypeMention = { + /** A mention of a user by their username */ + _: 'textEntityTypeMention', + } + + export type textEntityTypeMention$Input = { + /** A mention of a user by their username */ + readonly _: 'textEntityTypeMention', + } + + export type textEntityTypeHashtag = { + /** A hashtag text, beginning with "#" */ + _: 'textEntityTypeHashtag', + } + + export type textEntityTypeHashtag$Input = { + /** A hashtag text, beginning with "#" */ + readonly _: 'textEntityTypeHashtag', + } + + export type textEntityTypeCashtag = { + /** + * A cashtag text, beginning with "$" and consisting of capital English letters + * (e.g., "$USD") + */ + _: 'textEntityTypeCashtag', + } + + export type textEntityTypeCashtag$Input = { + /** + * A cashtag text, beginning with "$" and consisting of capital English letters + * (e.g., "$USD") + */ + readonly _: 'textEntityTypeCashtag', + } + + export type textEntityTypeBotCommand = { + /** A bot command, beginning with "/" */ + _: 'textEntityTypeBotCommand', + } + + export type textEntityTypeBotCommand$Input = { + /** A bot command, beginning with "/" */ + readonly _: 'textEntityTypeBotCommand', + } + + export type textEntityTypeUrl = { + /** An HTTP URL */ + _: 'textEntityTypeUrl', + } + + export type textEntityTypeUrl$Input = { + /** An HTTP URL */ + readonly _: 'textEntityTypeUrl', + } + + export type textEntityTypeEmailAddress = { + /** An email address */ + _: 'textEntityTypeEmailAddress', + } + + export type textEntityTypeEmailAddress$Input = { + /** An email address */ + readonly _: 'textEntityTypeEmailAddress', + } + + export type textEntityTypePhoneNumber = { + /** A phone number */ + _: 'textEntityTypePhoneNumber', + } + + export type textEntityTypePhoneNumber$Input = { + /** A phone number */ + readonly _: 'textEntityTypePhoneNumber', + } + + export type textEntityTypeBankCardNumber = { + /** + * A bank card number. The getBankCardInfo method can be used to get information + * about the bank card + */ + _: 'textEntityTypeBankCardNumber', + } + + export type textEntityTypeBankCardNumber$Input = { + /** + * A bank card number. The getBankCardInfo method can be used to get information + * about the bank card + */ + readonly _: 'textEntityTypeBankCardNumber', + } + + export type textEntityTypeBold = { + /** A bold text */ + _: 'textEntityTypeBold', + } + + export type textEntityTypeBold$Input = { + /** A bold text */ + readonly _: 'textEntityTypeBold', + } + + export type textEntityTypeItalic = { + /** An italic text */ + _: 'textEntityTypeItalic', + } + + export type textEntityTypeItalic$Input = { + /** An italic text */ + readonly _: 'textEntityTypeItalic', + } + + export type textEntityTypeUnderline = { + /** An underlined text */ + _: 'textEntityTypeUnderline', + } + + export type textEntityTypeUnderline$Input = { + /** An underlined text */ + readonly _: 'textEntityTypeUnderline', + } + + export type textEntityTypeStrikethrough = { + /** A strikethrough text */ + _: 'textEntityTypeStrikethrough', + } + + export type textEntityTypeStrikethrough$Input = { + /** A strikethrough text */ + readonly _: 'textEntityTypeStrikethrough', + } + + export type textEntityTypeCode = { + /** Text that must be formatted as if inside a code HTML tag */ + _: 'textEntityTypeCode', + } + + export type textEntityTypeCode$Input = { + /** Text that must be formatted as if inside a code HTML tag */ + readonly _: 'textEntityTypeCode', + } + + export type textEntityTypePre = { + /** Text that must be formatted as if inside a pre HTML tag */ + _: 'textEntityTypePre', + } + + export type textEntityTypePre$Input = { + /** Text that must be formatted as if inside a pre HTML tag */ + readonly _: 'textEntityTypePre', + } + + export type textEntityTypePreCode = { + /** Text that must be formatted as if inside pre, and code HTML tags */ + _: 'textEntityTypePreCode', + /** Programming language of the code; as defined by the sender */ + language: string, + } + + export type textEntityTypePreCode$Input = { + /** Text that must be formatted as if inside pre, and code HTML tags */ + readonly _: 'textEntityTypePreCode', + /** Programming language of the code; as defined by the sender */ + readonly language?: string, + } + + export type textEntityTypeTextUrl = { + /** A text description shown instead of a raw URL */ + _: 'textEntityTypeTextUrl', + /** HTTP or tg:// URL to be opened when the link is clicked */ + url: string, + } + + export type textEntityTypeTextUrl$Input = { + /** A text description shown instead of a raw URL */ + readonly _: 'textEntityTypeTextUrl', + /** HTTP or tg:// URL to be opened when the link is clicked */ + readonly url?: string, + } + + export type textEntityTypeMentionName = { + /** + * A text shows instead of a raw mention of the user (e.g., when the user has no + * username) + */ + _: 'textEntityTypeMentionName', + /** Identifier of the mentioned user */ + user_id: number, + } + + export type textEntityTypeMentionName$Input = { + /** + * A text shows instead of a raw mention of the user (e.g., when the user has no + * username) + */ + readonly _: 'textEntityTypeMentionName', + /** Identifier of the mentioned user */ + readonly user_id?: number, + } + + export type textEntityTypeMediaTimestamp = { + /** A media timestamp */ + _: 'textEntityTypeMediaTimestamp', + /** + * Timestamp from which a video/audio/video note/voice note playing must start, + * in seconds. The media can be in the content or the web page preview of the current + * message, or in the same places in the replied message + */ + media_timestamp: number, + } + + export type textEntityTypeMediaTimestamp$Input = { + /** A media timestamp */ + readonly _: 'textEntityTypeMediaTimestamp', + /** + * Timestamp from which a video/audio/video note/voice note playing must start, + * in seconds. The media can be in the content or the web page preview of the current + * message, or in the same places in the replied message + */ + readonly media_timestamp?: number, + } + + export type inputThumbnail = { + /** + * A thumbnail to be sent along with a file; must be in JPEG or WEBP format for + * stickers, and less than 200 KB in size + */ + _: 'inputThumbnail', + /** Thumbnail file to send. Sending thumbnails by file_id is currently not supported */ + thumbnail: InputFile, + /** Thumbnail width, usually shouldn't exceed 320. Use 0 if unknown */ + width: number, + /** Thumbnail height, usually shouldn't exceed 320. Use 0 if unknown */ + height: number, + } + + export type inputThumbnail$Input = { + /** + * A thumbnail to be sent along with a file; must be in JPEG or WEBP format for + * stickers, and less than 200 KB in size + */ + readonly _: 'inputThumbnail', + /** Thumbnail file to send. Sending thumbnails by file_id is currently not supported */ + readonly thumbnail?: InputFile$Input, + /** Thumbnail width, usually shouldn't exceed 320. Use 0 if unknown */ + readonly width?: number, + /** Thumbnail height, usually shouldn't exceed 320. Use 0 if unknown */ + readonly height?: number, + } + + export type messageSchedulingStateSendAtDate = { + /** The message will be sent at the specified date */ + _: 'messageSchedulingStateSendAtDate', + /** Date the message will be sent. The date must be within 367 days in the future */ + send_date: number, + } + + export type messageSchedulingStateSendAtDate$Input = { + /** The message will be sent at the specified date */ + readonly _: 'messageSchedulingStateSendAtDate', + /** Date the message will be sent. The date must be within 367 days in the future */ + readonly send_date?: number, + } + + export type messageSchedulingStateSendWhenOnline = { + /** + * The message will be sent when the peer will be online. Applicable to private + * chats only and when the exact online status of the peer is known + */ + _: 'messageSchedulingStateSendWhenOnline', + } + + export type messageSchedulingStateSendWhenOnline$Input = { + /** + * The message will be sent when the peer will be online. Applicable to private + * chats only and when the exact online status of the peer is known + */ + readonly _: 'messageSchedulingStateSendWhenOnline', + } + + export type messageSendOptions$Input = { + /** Options to be used when a message is sent */ + readonly _: 'messageSendOptions', + /** Pass true to disable notification for the message */ + readonly disable_notification?: boolean, + /** Pass true if the message is sent from the background */ + readonly from_background?: boolean, + /** + * Message scheduling state; pass null to send message immediately. Messages sent + * to a secret chat, live location messages and self-destructing messages can't + * be scheduled + */ + readonly scheduling_state?: MessageSchedulingState$Input, + } + + export type messageCopyOptions = { + /** + * Options to be used when a message content is copied without reference to the + * original sender. Service messages and messageInvoice can't be copied + */ + _: 'messageCopyOptions', + /** + * True, if content of the message needs to be copied without reference to the + * original sender. Always true if the message is forwarded to a secret chat or + * is local + */ + send_copy: boolean, + /** + * True, if media caption of the message copy needs to be replaced. Ignored if + * send_copy is false + */ + replace_caption: boolean, + /** + * New message caption; pass null to copy message without caption. Ignored if replace_caption + * is false + */ + new_caption: formattedText, + } + + export type messageCopyOptions$Input = { + /** + * Options to be used when a message content is copied without reference to the + * original sender. Service messages and messageInvoice can't be copied + */ + readonly _: 'messageCopyOptions', + /** + * True, if content of the message needs to be copied without reference to the + * original sender. Always true if the message is forwarded to a secret chat or + * is local + */ + readonly send_copy?: boolean, + /** + * True, if media caption of the message copy needs to be replaced. Ignored if + * send_copy is false + */ + readonly replace_caption?: boolean, + /** + * New message caption; pass null to copy message without caption. Ignored if replace_caption + * is false + */ + readonly new_caption?: formattedText$Input, + } + + export type inputMessageText = { + /** A text message */ + _: 'inputMessageText', + /** + * Formatted text to be sent; 1-GetOption("message_text_length_max") characters. + * Only Bold, Italic, Underline, Strikethrough, Code, Pre, PreCode, TextUrl and + * MentionName entities are allowed to be specified manually + */ + text: formattedText, + /** True, if rich web page previews for URLs in the message text must be disabled */ + disable_web_page_preview: boolean, + /** True, if a chat message draft must be deleted */ + clear_draft: boolean, + } + + export type inputMessageText$Input = { + /** A text message */ + readonly _: 'inputMessageText', + /** + * Formatted text to be sent; 1-GetOption("message_text_length_max") characters. + * Only Bold, Italic, Underline, Strikethrough, Code, Pre, PreCode, TextUrl and + * MentionName entities are allowed to be specified manually + */ + readonly text?: formattedText$Input, + /** True, if rich web page previews for URLs in the message text must be disabled */ + readonly disable_web_page_preview?: boolean, + /** True, if a chat message draft must be deleted */ + readonly clear_draft?: boolean, + } + + export type inputMessageAnimation = { + /** An animation message (GIF-style). */ + _: 'inputMessageAnimation', + /** Animation file to be sent */ + animation: InputFile, + /** Animation thumbnail; pass null to skip thumbnail uploading */ + thumbnail: inputThumbnail, + /** File identifiers of the stickers added to the animation, if applicable */ + added_sticker_file_ids: Array, + /** Duration of the animation, in seconds */ + duration: number, + /** Width of the animation; may be replaced by the server */ + width: number, + /** Height of the animation; may be replaced by the server */ + height: number, + /** + * Animation caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + caption: formattedText, + } + + export type inputMessageAnimation$Input = { + /** An animation message (GIF-style). */ + readonly _: 'inputMessageAnimation', + /** Animation file to be sent */ + readonly animation?: InputFile$Input, + /** Animation thumbnail; pass null to skip thumbnail uploading */ + readonly thumbnail?: inputThumbnail$Input, + /** File identifiers of the stickers added to the animation, if applicable */ + readonly added_sticker_file_ids?: ReadonlyArray, + /** Duration of the animation, in seconds */ + readonly duration?: number, + /** Width of the animation; may be replaced by the server */ + readonly width?: number, + /** Height of the animation; may be replaced by the server */ + readonly height?: number, + /** + * Animation caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + readonly caption?: formattedText$Input, + } + + export type inputMessageAudio = { + /** An audio message */ + _: 'inputMessageAudio', + /** Audio file to be sent */ + audio: InputFile, + /** Thumbnail of the cover for the album; pass null to skip thumbnail uploading */ + album_cover_thumbnail: inputThumbnail, + /** Duration of the audio, in seconds; may be replaced by the server */ + duration: number, + /** Title of the audio; 0-64 characters; may be replaced by the server */ + title: string, + /** Performer of the audio; 0-64 characters, may be replaced by the server */ + performer: string, + /** + * Audio caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + caption: formattedText, + } + + export type inputMessageAudio$Input = { + /** An audio message */ + readonly _: 'inputMessageAudio', + /** Audio file to be sent */ + readonly audio?: InputFile$Input, + /** Thumbnail of the cover for the album; pass null to skip thumbnail uploading */ + readonly album_cover_thumbnail?: inputThumbnail$Input, + /** Duration of the audio, in seconds; may be replaced by the server */ + readonly duration?: number, + /** Title of the audio; 0-64 characters; may be replaced by the server */ + readonly title?: string, + /** Performer of the audio; 0-64 characters, may be replaced by the server */ + readonly performer?: string, + /** + * Audio caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + readonly caption?: formattedText$Input, + } + + export type inputMessageDocument = { + /** A document message (general file) */ + _: 'inputMessageDocument', + /** Document to be sent */ + document: InputFile, + /** Document thumbnail; pass null to skip thumbnail uploading */ + thumbnail: inputThumbnail, + /** + * If true, automatic file type detection will be disabled and the document will + * be always sent as file. Always true for files sent to secret chats + */ + disable_content_type_detection: boolean, + /** + * Document caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + caption: formattedText, + } + + export type inputMessageDocument$Input = { + /** A document message (general file) */ + readonly _: 'inputMessageDocument', + /** Document to be sent */ + readonly document?: InputFile$Input, + /** Document thumbnail; pass null to skip thumbnail uploading */ + readonly thumbnail?: inputThumbnail$Input, + /** + * If true, automatic file type detection will be disabled and the document will + * be always sent as file. Always true for files sent to secret chats + */ + readonly disable_content_type_detection?: boolean, + /** + * Document caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + readonly caption?: formattedText$Input, + } + + export type inputMessagePhoto = { + /** A photo message */ + _: 'inputMessagePhoto', + /** Photo to send */ + photo: InputFile, + /** + * Photo thumbnail to be sent; pass null to skip thumbnail uploading. The thumbnail + * is sent to the other party only in secret chats + */ + thumbnail: inputThumbnail, + /** File identifiers of the stickers added to the photo, if applicable */ + added_sticker_file_ids: Array, + /** Photo width */ + width: number, + /** Photo height */ + height: number, + /** + * Photo caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + caption: formattedText, + /** + * Photo TTL (Time To Live), in seconds (0-60). A non-zero TTL can be specified + * only in private chats + */ + ttl: number, + } + + export type inputMessagePhoto$Input = { + /** A photo message */ + readonly _: 'inputMessagePhoto', + /** Photo to send */ + readonly photo?: InputFile$Input, + /** + * Photo thumbnail to be sent; pass null to skip thumbnail uploading. The thumbnail + * is sent to the other party only in secret chats + */ + readonly thumbnail?: inputThumbnail$Input, + /** File identifiers of the stickers added to the photo, if applicable */ + readonly added_sticker_file_ids?: ReadonlyArray, + /** Photo width */ + readonly width?: number, + /** Photo height */ + readonly height?: number, + /** + * Photo caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + readonly caption?: formattedText$Input, + /** + * Photo TTL (Time To Live), in seconds (0-60). A non-zero TTL can be specified + * only in private chats + */ + readonly ttl?: number, + } + + export type inputMessageSticker = { + /** A sticker message */ + _: 'inputMessageSticker', + /** Sticker to be sent */ + sticker: InputFile, + /** Sticker thumbnail; pass null to skip thumbnail uploading */ + thumbnail: inputThumbnail, + /** Sticker width */ + width: number, + /** Sticker height */ + height: number, + /** Emoji used to choose the sticker */ + emoji: string, + } + + export type inputMessageSticker$Input = { + /** A sticker message */ + readonly _: 'inputMessageSticker', + /** Sticker to be sent */ + readonly sticker?: InputFile$Input, + /** Sticker thumbnail; pass null to skip thumbnail uploading */ + readonly thumbnail?: inputThumbnail$Input, + /** Sticker width */ + readonly width?: number, + /** Sticker height */ + readonly height?: number, + /** Emoji used to choose the sticker */ + readonly emoji?: string, + } + + export type inputMessageVideo = { + /** A video message */ + _: 'inputMessageVideo', + /** Video to be sent */ + video: InputFile, + /** Video thumbnail; pass null to skip thumbnail uploading */ + thumbnail: inputThumbnail, + /** File identifiers of the stickers added to the video, if applicable */ + added_sticker_file_ids: Array, + /** Duration of the video, in seconds */ + duration: number, + /** Video width */ + width: number, + /** Video height */ + height: number, + /** True, if the video is supposed to be streamed */ + supports_streaming: boolean, + /** + * Video caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + caption: formattedText, + /** + * Video TTL (Time To Live), in seconds (0-60). A non-zero TTL can be specified + * only in private chats + */ + ttl: number, + } + + export type inputMessageVideo$Input = { + /** A video message */ + readonly _: 'inputMessageVideo', + /** Video to be sent */ + readonly video?: InputFile$Input, + /** Video thumbnail; pass null to skip thumbnail uploading */ + readonly thumbnail?: inputThumbnail$Input, + /** File identifiers of the stickers added to the video, if applicable */ + readonly added_sticker_file_ids?: ReadonlyArray, + /** Duration of the video, in seconds */ + readonly duration?: number, + /** Video width */ + readonly width?: number, + /** Video height */ + readonly height?: number, + /** True, if the video is supposed to be streamed */ + readonly supports_streaming?: boolean, + /** + * Video caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + readonly caption?: formattedText$Input, + /** + * Video TTL (Time To Live), in seconds (0-60). A non-zero TTL can be specified + * only in private chats + */ + readonly ttl?: number, + } + + export type inputMessageVideoNote = { + /** A video note message */ + _: 'inputMessageVideoNote', + /** Video note to be sent */ + video_note: InputFile, + /** Video thumbnail; pass null to skip thumbnail uploading */ + thumbnail: inputThumbnail, + /** Duration of the video, in seconds */ + duration: number, + /** Video width and height; must be positive and not greater than 640 */ + length: number, + } + + export type inputMessageVideoNote$Input = { + /** A video note message */ + readonly _: 'inputMessageVideoNote', + /** Video note to be sent */ + readonly video_note?: InputFile$Input, + /** Video thumbnail; pass null to skip thumbnail uploading */ + readonly thumbnail?: inputThumbnail$Input, + /** Duration of the video, in seconds */ + readonly duration?: number, + /** Video width and height; must be positive and not greater than 640 */ + readonly length?: number, + } + + export type inputMessageVoiceNote = { + /** A voice note message */ + _: 'inputMessageVoiceNote', + /** Voice note to be sent */ + voice_note: InputFile, + /** Duration of the voice note, in seconds */ + duration: number, + /** Waveform representation of the voice note, in 5-bit format */ + waveform: string /* base64 */, + /** + * Voice note caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + caption: formattedText, + } + + export type inputMessageVoiceNote$Input = { + /** A voice note message */ + readonly _: 'inputMessageVoiceNote', + /** Voice note to be sent */ + readonly voice_note?: InputFile$Input, + /** Duration of the voice note, in seconds */ + readonly duration?: number, + /** Waveform representation of the voice note, in 5-bit format */ + readonly waveform?: string /* base64 */, + /** + * Voice note caption; pass null to use an empty caption; 0-GetOption("message_caption_length_max") + * characters + */ + readonly caption?: formattedText$Input, + } + + export type inputMessageLocation = { + /** A message with a location */ + _: 'inputMessageLocation', + /** Location to be sent */ + location: location, + /** + * Period for which the location can be updated, in seconds; must be between 60 + * and 86400 for a live location and 0 otherwise + */ + live_period: number, + /** + * For live locations, a direction in which the location moves, in degrees; 1-360. + * Pass 0 if unknown + */ + heading: number, + /** + * For live locations, a maximum distance to another chat member for proximity + * alerts, in meters (0-100000). Pass 0 if the notification is disabled. Can't + * be enabled in channels and Saved Messages + */ + proximity_alert_radius: number, + } + + export type inputMessageLocation$Input = { + /** A message with a location */ + readonly _: 'inputMessageLocation', + /** Location to be sent */ + readonly location?: location$Input, + /** + * Period for which the location can be updated, in seconds; must be between 60 + * and 86400 for a live location and 0 otherwise + */ + readonly live_period?: number, + /** + * For live locations, a direction in which the location moves, in degrees; 1-360. + * Pass 0 if unknown + */ + readonly heading?: number, + /** + * For live locations, a maximum distance to another chat member for proximity + * alerts, in meters (0-100000). Pass 0 if the notification is disabled. Can't + * be enabled in channels and Saved Messages + */ + readonly proximity_alert_radius?: number, + } + + export type inputMessageVenue = { + /** A message with information about a venue */ + _: 'inputMessageVenue', + /** Venue to send */ + venue: venue, + } + + export type inputMessageVenue$Input = { + /** A message with information about a venue */ + readonly _: 'inputMessageVenue', + /** Venue to send */ + readonly venue?: venue$Input, + } + + export type inputMessageContact = { + /** A message containing a user contact */ + _: 'inputMessageContact', + /** Contact to send */ + contact: contact, + } + + export type inputMessageContact$Input = { + /** A message containing a user contact */ + readonly _: 'inputMessageContact', + /** Contact to send */ + readonly contact?: contact$Input, + } + + export type inputMessageDice = { + /** A dice message */ + _: 'inputMessageDice', + /** Emoji on which the dice throw animation is based */ + emoji: string, + /** True, if the chat message draft must be deleted */ + clear_draft: boolean, + } + + export type inputMessageDice$Input = { + /** A dice message */ + readonly _: 'inputMessageDice', + /** Emoji on which the dice throw animation is based */ + readonly emoji?: string, + /** True, if the chat message draft must be deleted */ + readonly clear_draft?: boolean, + } + + export type inputMessageGame = { + /** A message with a game; not supported for channels or secret chats */ + _: 'inputMessageGame', + /** User identifier of the bot that owns the game */ + bot_user_id: number, + /** Short name of the game */ + game_short_name: string, + } + + export type inputMessageGame$Input = { + /** A message with a game; not supported for channels or secret chats */ + readonly _: 'inputMessageGame', + /** User identifier of the bot that owns the game */ + readonly bot_user_id?: number, + /** Short name of the game */ + readonly game_short_name?: string, + } + + export type inputMessageInvoice = { + /** A message with an invoice; can be used only by bots */ + _: 'inputMessageInvoice', + /** Invoice */ + invoice: invoice, + /** Product title; 1-32 characters */ + title: string, + /** Product description; 0-255 characters */ + description: string, + /** Product photo URL; optional */ + photo_url: string, + /** Product photo size */ + photo_size: number, + /** Product photo width */ + photo_width: number, + /** Product photo height */ + photo_height: number, + /** The invoice payload */ + payload: string /* base64 */, + /** Payment provider token */ + provider_token: string, + /** JSON-encoded data about the invoice, which will be shared with the payment provider */ + provider_data: string, + /** + * Unique invoice bot deep link parameter for the generation of this invoice. If + * empty, it would be possible to pay directly from forwards of the invoice message + */ + start_parameter: string, + } + + export type inputMessageInvoice$Input = { + /** A message with an invoice; can be used only by bots */ + readonly _: 'inputMessageInvoice', + /** Invoice */ + readonly invoice?: invoice$Input, + /** Product title; 1-32 characters */ + readonly title?: string, + /** Product description; 0-255 characters */ + readonly description?: string, + /** Product photo URL; optional */ + readonly photo_url?: string, + /** Product photo size */ + readonly photo_size?: number, + /** Product photo width */ + readonly photo_width?: number, + /** Product photo height */ + readonly photo_height?: number, + /** The invoice payload */ + readonly payload?: string /* base64 */, + /** Payment provider token */ + readonly provider_token?: string, + /** JSON-encoded data about the invoice, which will be shared with the payment provider */ + readonly provider_data?: string, + /** + * Unique invoice bot deep link parameter for the generation of this invoice. If + * empty, it would be possible to pay directly from forwards of the invoice message + */ + readonly start_parameter?: string, + } + + export type inputMessagePoll = { + /** + * A message with a poll. Polls can't be sent to secret chats. Polls can be sent + * only to a private chat with a bot + */ + _: 'inputMessagePoll', + /** Poll question; 1-255 characters (up to 300 characters for bots) */ + question: string, + /** List of poll answer options, 2-10 strings 1-100 characters each */ + options: Array, + /** + * True, if the poll voters are anonymous. Non-anonymous polls can't be sent or + * forwarded to channels + */ + is_anonymous: boolean, + /** Type of the poll */ + type: PollType, + /** + * Amount of time the poll will be active after creation, in seconds; for bots + * only + */ + open_period: number, + /** + * Point in time (Unix timestamp) when the poll will automatically be closed; for + * bots only + */ + close_date: number, + /** True, if the poll needs to be sent already closed; for bots only */ + is_closed: boolean, + } + + export type inputMessagePoll$Input = { + /** + * A message with a poll. Polls can't be sent to secret chats. Polls can be sent + * only to a private chat with a bot + */ + readonly _: 'inputMessagePoll', + /** Poll question; 1-255 characters (up to 300 characters for bots) */ + readonly question?: string, + /** List of poll answer options, 2-10 strings 1-100 characters each */ + readonly options?: ReadonlyArray, + /** + * True, if the poll voters are anonymous. Non-anonymous polls can't be sent or + * forwarded to channels + */ + readonly is_anonymous?: boolean, + /** Type of the poll */ + readonly type?: PollType$Input, + /** + * Amount of time the poll will be active after creation, in seconds; for bots + * only + */ + readonly open_period?: number, + /** + * Point in time (Unix timestamp) when the poll will automatically be closed; for + * bots only + */ + readonly close_date?: number, + /** True, if the poll needs to be sent already closed; for bots only */ + readonly is_closed?: boolean, + } + + export type inputMessageForwarded = { + /** A forwarded message */ + _: 'inputMessageForwarded', + /** Identifier for the chat this forwarded message came from */ + from_chat_id: number, + /** Identifier of the message to forward */ + message_id: number, + /** + * True, if a game message is being shared from a launched game; applies only to + * game messages + */ + in_game_share: boolean, + /** + * Options to be used to copy content of the message without reference to the original + * sender; pass null to forward the message as usual + */ + copy_options: messageCopyOptions, + } + + export type inputMessageForwarded$Input = { + /** A forwarded message */ + readonly _: 'inputMessageForwarded', + /** Identifier for the chat this forwarded message came from */ + readonly from_chat_id?: number, + /** Identifier of the message to forward */ + readonly message_id?: number, + /** + * True, if a game message is being shared from a launched game; applies only to + * game messages + */ + readonly in_game_share?: boolean, + /** + * Options to be used to copy content of the message without reference to the original + * sender; pass null to forward the message as usual + */ + readonly copy_options?: messageCopyOptions$Input, + } + + export type searchMessagesFilterEmpty$Input = { + /** Returns all found messages, no filter is applied */ + readonly _: 'searchMessagesFilterEmpty', + } + + export type searchMessagesFilterAnimation$Input = { + /** Returns only animation messages */ + readonly _: 'searchMessagesFilterAnimation', + } + + export type searchMessagesFilterAudio$Input = { + /** Returns only audio messages */ + readonly _: 'searchMessagesFilterAudio', + } + + export type searchMessagesFilterDocument$Input = { + /** Returns only document messages */ + readonly _: 'searchMessagesFilterDocument', + } + + export type searchMessagesFilterPhoto$Input = { + /** Returns only photo messages */ + readonly _: 'searchMessagesFilterPhoto', + } + + export type searchMessagesFilterVideo$Input = { + /** Returns only video messages */ + readonly _: 'searchMessagesFilterVideo', + } + + export type searchMessagesFilterVoiceNote$Input = { + /** Returns only voice note messages */ + readonly _: 'searchMessagesFilterVoiceNote', + } + + export type searchMessagesFilterPhotoAndVideo$Input = { + /** Returns only photo and video messages */ + readonly _: 'searchMessagesFilterPhotoAndVideo', + } + + export type searchMessagesFilterUrl$Input = { + /** Returns only messages containing URLs */ + readonly _: 'searchMessagesFilterUrl', + } + + export type searchMessagesFilterChatPhoto$Input = { + /** Returns only messages containing chat photos */ + readonly _: 'searchMessagesFilterChatPhoto', + } + + export type searchMessagesFilterVideoNote$Input = { + /** Returns only video note messages */ + readonly _: 'searchMessagesFilterVideoNote', + } + + export type searchMessagesFilterVoiceAndVideoNote$Input = { + /** Returns only voice and video note messages */ + readonly _: 'searchMessagesFilterVoiceAndVideoNote', + } + + export type searchMessagesFilterMention$Input = { + /** + * Returns only messages with mentions of the current user, or messages that are + * replies to their messages + */ + readonly _: 'searchMessagesFilterMention', + } + + export type searchMessagesFilterUnreadMention$Input = { + /** + * Returns only messages with unread mentions of the current user, or messages + * that are replies to their messages. When using this filter the results can't + * be additionally filtered by a query, a message thread or by the sending user + */ + readonly _: 'searchMessagesFilterUnreadMention', + } + + export type searchMessagesFilterFailedToSend$Input = { + /** + * Returns only failed to send messages. This filter can be used only if the message + * database is used + */ + readonly _: 'searchMessagesFilterFailedToSend', + } + + export type searchMessagesFilterPinned$Input = { + /** Returns only pinned messages */ + readonly _: 'searchMessagesFilterPinned', + } + + export type chatActionTyping = { + /** The user is typing a message */ + _: 'chatActionTyping', + } + + export type chatActionTyping$Input = { + /** The user is typing a message */ + readonly _: 'chatActionTyping', + } + + export type chatActionRecordingVideo = { + /** The user is recording a video */ + _: 'chatActionRecordingVideo', + } + + export type chatActionRecordingVideo$Input = { + /** The user is recording a video */ + readonly _: 'chatActionRecordingVideo', + } + + export type chatActionUploadingVideo = { + /** The user is uploading a video */ + _: 'chatActionUploadingVideo', + /** Upload progress, as a percentage */ + progress: number, + } + + export type chatActionUploadingVideo$Input = { + /** The user is uploading a video */ + readonly _: 'chatActionUploadingVideo', + /** Upload progress, as a percentage */ + readonly progress?: number, + } + + export type chatActionRecordingVoiceNote = { + /** The user is recording a voice note */ + _: 'chatActionRecordingVoiceNote', + } + + export type chatActionRecordingVoiceNote$Input = { + /** The user is recording a voice note */ + readonly _: 'chatActionRecordingVoiceNote', + } + + export type chatActionUploadingVoiceNote = { + /** The user is uploading a voice note */ + _: 'chatActionUploadingVoiceNote', + /** Upload progress, as a percentage */ + progress: number, + } + + export type chatActionUploadingVoiceNote$Input = { + /** The user is uploading a voice note */ + readonly _: 'chatActionUploadingVoiceNote', + /** Upload progress, as a percentage */ + readonly progress?: number, + } + + export type chatActionUploadingPhoto = { + /** The user is uploading a photo */ + _: 'chatActionUploadingPhoto', + /** Upload progress, as a percentage */ + progress: number, + } + + export type chatActionUploadingPhoto$Input = { + /** The user is uploading a photo */ + readonly _: 'chatActionUploadingPhoto', + /** Upload progress, as a percentage */ + readonly progress?: number, + } + + export type chatActionUploadingDocument = { + /** The user is uploading a document */ + _: 'chatActionUploadingDocument', + /** Upload progress, as a percentage */ + progress: number, + } + + export type chatActionUploadingDocument$Input = { + /** The user is uploading a document */ + readonly _: 'chatActionUploadingDocument', + /** Upload progress, as a percentage */ + readonly progress?: number, + } + + export type chatActionChoosingSticker = { + /** The user is picking a sticker to send */ + _: 'chatActionChoosingSticker', + } + + export type chatActionChoosingSticker$Input = { + /** The user is picking a sticker to send */ + readonly _: 'chatActionChoosingSticker', + } + + export type chatActionChoosingLocation = { + /** The user is picking a location or venue to send */ + _: 'chatActionChoosingLocation', + } + + export type chatActionChoosingLocation$Input = { + /** The user is picking a location or venue to send */ + readonly _: 'chatActionChoosingLocation', + } + + export type chatActionChoosingContact = { + /** The user is picking a contact to send */ + _: 'chatActionChoosingContact', + } + + export type chatActionChoosingContact$Input = { + /** The user is picking a contact to send */ + readonly _: 'chatActionChoosingContact', + } + + export type chatActionStartPlayingGame = { + /** The user has started to play a game */ + _: 'chatActionStartPlayingGame', + } + + export type chatActionStartPlayingGame$Input = { + /** The user has started to play a game */ + readonly _: 'chatActionStartPlayingGame', + } + + export type chatActionRecordingVideoNote = { + /** The user is recording a video note */ + _: 'chatActionRecordingVideoNote', + } + + export type chatActionRecordingVideoNote$Input = { + /** The user is recording a video note */ + readonly _: 'chatActionRecordingVideoNote', + } + + export type chatActionUploadingVideoNote = { + /** The user is uploading a video note */ + _: 'chatActionUploadingVideoNote', + /** Upload progress, as a percentage */ + progress: number, + } + + export type chatActionUploadingVideoNote$Input = { + /** The user is uploading a video note */ + readonly _: 'chatActionUploadingVideoNote', + /** Upload progress, as a percentage */ + readonly progress?: number, + } + + export type chatActionWatchingAnimations = { + /** + * The user is watching animations sent by the other party by clicking on an animated + * emoji + */ + _: 'chatActionWatchingAnimations', + /** The animated emoji */ + emoji: string, + } + + export type chatActionWatchingAnimations$Input = { + /** + * The user is watching animations sent by the other party by clicking on an animated + * emoji + */ + readonly _: 'chatActionWatchingAnimations', + /** The animated emoji */ + readonly emoji?: string, + } + + export type chatActionCancel = { + /** The user has canceled the previous action */ + _: 'chatActionCancel', + } + + export type chatActionCancel$Input = { + /** The user has canceled the previous action */ + readonly _: 'chatActionCancel', + } + + export type userStatusEmpty = { + /** The user status was never changed */ + _: 'userStatusEmpty', + } + + export type userStatusOnline = { + /** The user is online */ + _: 'userStatusOnline', + /** Point in time (Unix timestamp) when the user's online status will expire */ + expires: number, + } + + export type userStatusOffline = { + /** The user is offline */ + _: 'userStatusOffline', + /** Point in time (Unix timestamp) when the user was last online */ + was_online: number, + } + + export type userStatusRecently = { + /** The user was online recently */ + _: 'userStatusRecently', + } + + export type userStatusLastWeek = { + /** The user is offline, but was online last week */ + _: 'userStatusLastWeek', + } + + export type userStatusLastMonth = { + /** The user is offline, but was online last month */ + _: 'userStatusLastMonth', + } + + export type stickers = { + /** Represents a list of stickers */ + _: 'stickers', + /** List of stickers */ + stickers: Array, + } + + export type emojis = { + /** Represents a list of emoji */ + _: 'emojis', + /** List of emojis */ + emojis: Array, + } + + export type stickerSet = { + /** Represents a sticker set */ + _: 'stickerSet', + /** Identifier of the sticker set */ + id: string, + /** Title of the sticker set */ + title: string, + /** Name of the sticker set */ + name: string, + /** + * Sticker set thumbnail in WEBP or TGS format with width and height 100; may be + * null. The file can be downloaded only before the thumbnail is changed + */ + thumbnail?: thumbnail, + /** + * Sticker set thumbnail's outline represented as a list of closed vector paths; + * may be empty. The coordinate system origin is in the upper-left corner + */ + thumbnail_outline: Array, + /** True, if the sticker set has been installed by the current user */ + is_installed: boolean, + /** + * True, if the sticker set has been archived. A sticker set can't be installed + * and archived simultaneously + */ + is_archived: boolean, + /** True, if the sticker set is official */ + is_official: boolean, + /** True, is the stickers in the set are animated */ + is_animated: boolean, + /** True, if the stickers in the set are masks */ + is_masks: boolean, + /** True for already viewed trending sticker sets */ + is_viewed: boolean, + /** List of stickers in this set */ + stickers: Array, + /** + * A list of emoji corresponding to the stickers in the same order. The list is + * only for informational purposes, because a sticker is always sent with a fixed + * emoji from the corresponding Sticker object + */ + emojis: Array, + } + + export type stickerSetInfo = { + /** Represents short information about a sticker set */ + _: 'stickerSetInfo', + /** Identifier of the sticker set */ + id: string, + /** Title of the sticker set */ + title: string, + /** Name of the sticker set */ + name: string, + /** + * Sticker set thumbnail in WEBP or TGS format with width and height 100; may be + * null + */ + thumbnail?: thumbnail, + /** + * Sticker set thumbnail's outline represented as a list of closed vector paths; + * may be empty. The coordinate system origin is in the upper-left corner + */ + thumbnail_outline: Array, + /** True, if the sticker set has been installed by the current user */ + is_installed: boolean, + /** + * True, if the sticker set has been archived. A sticker set can't be installed + * and archived simultaneously + */ + is_archived: boolean, + /** True, if the sticker set is official */ + is_official: boolean, + /** True, is the stickers in the set are animated */ + is_animated: boolean, + /** True, if the stickers in the set are masks */ + is_masks: boolean, + /** True for already viewed trending sticker sets */ + is_viewed: boolean, + /** Total number of stickers in the set */ + size: number, + /** + * Up to the first 5 stickers from the set, depending on the context. If the application + * needs more stickers the full sticker set needs to be requested + */ + covers: Array, + } + + export type stickerSets = { + /** Represents a list of sticker sets */ + _: 'stickerSets', + /** Approximate total number of sticker sets found */ + total_count: number, + /** List of sticker sets */ + sets: Array, + } + + export type callDiscardReasonEmpty = { + /** The call wasn't discarded, or the reason is unknown */ + _: 'callDiscardReasonEmpty', + } + + export type callDiscardReasonMissed = { + /** + * The call was ended before the conversation started. It was canceled by the caller + * or missed by the other party + */ + _: 'callDiscardReasonMissed', + } + + export type callDiscardReasonDeclined = { + /** + * The call was ended before the conversation started. It was declined by the other + * party + */ + _: 'callDiscardReasonDeclined', + } + + export type callDiscardReasonDisconnected = { + /** The call was ended during the conversation because the users were disconnected */ + _: 'callDiscardReasonDisconnected', + } + + export type callDiscardReasonHungUp = { + /** The call was ended because one of the parties hung up */ + _: 'callDiscardReasonHungUp', + } + + export type callProtocol = { + /** Specifies the supported call protocols */ + _: 'callProtocol', + /** True, if UDP peer-to-peer connections are supported */ + udp_p2p: boolean, + /** True, if connection through UDP reflectors is supported */ + udp_reflector: boolean, + /** The minimum supported API layer; use 65 */ + min_layer: number, + /** The maximum supported API layer; use 65 */ + max_layer: number, + /** List of supported tgcalls versions */ + library_versions: Array, + } + + export type callProtocol$Input = { + /** Specifies the supported call protocols */ + readonly _: 'callProtocol', + /** True, if UDP peer-to-peer connections are supported */ + readonly udp_p2p?: boolean, + /** True, if connection through UDP reflectors is supported */ + readonly udp_reflector?: boolean, + /** The minimum supported API layer; use 65 */ + readonly min_layer?: number, + /** The maximum supported API layer; use 65 */ + readonly max_layer?: number, + /** List of supported tgcalls versions */ + readonly library_versions?: ReadonlyArray, + } + + export type callServerTypeTelegramReflector = { + /** A Telegram call reflector */ + _: 'callServerTypeTelegramReflector', + /** A peer tag to be used with the reflector */ + peer_tag: string /* base64 */, + } + + export type callServerTypeWebrtc = { + /** A WebRTC server */ + _: 'callServerTypeWebrtc', + /** Username to be used for authentication */ + username: string, + /** Authentication password */ + password: string, + /** True, if the server supports TURN */ + supports_turn: boolean, + /** True, if the server supports STUN */ + supports_stun: boolean, + } + + export type callServer = { + /** Describes a server for relaying call data */ + _: 'callServer', + /** Server identifier */ + id: string, + /** Server IPv4 address */ + ip_address: string, + /** Server IPv6 address */ + ipv6_address: string, + /** Server port number */ + port: number, + /** Server type */ + type: CallServerType, + } + + export type callId = { + /** Contains the call identifier */ + _: 'callId', + /** Call identifier */ + id: number, + } + + export type groupCallId = { + /** Contains the group call identifier */ + _: 'groupCallId', + /** Group call identifier */ + id: number, + } + + export type callStatePending = { + /** The call is pending, waiting to be accepted by a user */ + _: 'callStatePending', + /** True, if the call has already been created by the server */ + is_created: boolean, + /** True, if the call has already been received by the other party */ + is_received: boolean, + } + + export type callStateExchangingKeys = { + /** The call has been answered and encryption keys are being exchanged */ + _: 'callStateExchangingKeys', + } + + export type callStateReady = { + /** The call is ready to use */ + _: 'callStateReady', + /** Call protocols supported by the peer */ + protocol: callProtocol, + /** List of available call servers */ + servers: Array, + /** A JSON-encoded call config */ + config: string, + /** Call encryption key */ + encryption_key: string /* base64 */, + /** Encryption key emojis fingerprint */ + emojis: Array, + /** True, if peer-to-peer connection is allowed by users privacy settings */ + allow_p2p: boolean, + } + + export type callStateHangingUp = { + /** The call is hanging up after discardCall has been called */ + _: 'callStateHangingUp', + } + + export type callStateDiscarded = { + /** The call has ended successfully */ + _: 'callStateDiscarded', + /** The reason, why the call has ended */ + reason: CallDiscardReason, + /** True, if the call rating must be sent to the server */ + need_rating: boolean, + /** True, if the call debug information must be sent to the server */ + need_debug_information: boolean, + } + + export type callStateError = { + /** The call has ended with an error */ + _: 'callStateError', + /** + * Error. An error with the code 4005000 will be returned if an outgoing call is + * missed because of an expired timeout + */ + error: error, + } + + export type groupCallVideoQualityThumbnail$Input = { + /** The worst available video quality */ + readonly _: 'groupCallVideoQualityThumbnail', + } + + export type groupCallVideoQualityMedium$Input = { + /** The medium video quality */ + readonly _: 'groupCallVideoQualityMedium', + } + + export type groupCallVideoQualityFull$Input = { + /** The best available video quality */ + readonly _: 'groupCallVideoQualityFull', + } + + export type groupCallRecentSpeaker = { + /** Describes a recently speaking participant in a group call */ + _: 'groupCallRecentSpeaker', + /** Group call participant identifier */ + participant_id: MessageSender, + /** True, is the user has spoken recently */ + is_speaking: boolean, + } + + export type groupCall = { + /** Describes a group call */ + _: 'groupCall', + /** Group call identifier */ + id: number, + /** Group call title */ + title: string, + /** + * Point in time (Unix timestamp) when the group call is supposed to be started + * by an administrator; 0 if it is already active or was ended + */ + scheduled_start_date: number, + /** + * True, if the group call is scheduled and the current user will receive a notification + * when the group call will start + */ + enabled_start_notification: boolean, + /** True, if the call is active */ + is_active: boolean, + /** True, if the call is joined */ + is_joined: boolean, + /** + * True, if user was kicked from the call because of network loss and the call + * needs to be rejoined + */ + need_rejoin: boolean, + /** True, if the current user can manage the group call */ + can_be_managed: boolean, + /** Number of participants in the group call */ + participant_count: number, + /** True, if all group call participants are loaded */ + loaded_all_participants: boolean, + /** At most 3 recently speaking users in the group call */ + recent_speakers: Array, + /** True, if the current user's video is enabled */ + is_my_video_enabled: boolean, + /** True, if the current user's video is paused */ + is_my_video_paused: boolean, + /** True, if the current user can broadcast video or share screen */ + can_enable_video: boolean, + /** True, if only group call administrators can unmute new participants */ + mute_new_participants: boolean, + /** True, if the current user can enable or disable mute_new_participants setting */ + can_toggle_mute_new_participants: boolean, + /** + * Duration of the ongoing group call recording, in seconds; 0 if none. An updateGroupCall + * update is not triggered when value of this field changes, but the same recording + * goes on + */ + record_duration: number, + /** True, if a video file is being recorded for the call */ + is_video_recorded: boolean, + /** Call duration, in seconds; for ended calls only */ + duration: number, + } + + export type groupCallVideoSourceGroup = { + /** Describes a group of video synchronization source identifiers */ + _: 'groupCallVideoSourceGroup', + /** The semantics of sources, one of "SIM" or "FID" */ + semantics: string, + /** The list of synchronization source identifiers */ + source_ids: Array, + } + + export type groupCallParticipantVideoInfo = { + /** Contains information about a group call participant's video channel */ + _: 'groupCallParticipantVideoInfo', + /** List of synchronization source groups of the video */ + source_groups: Array, + /** Video channel endpoint identifier */ + endpoint_id: string, + /** + * True if the video is paused. This flag needs to be ignored, if new video frames + * are received + */ + is_paused: boolean, + } + + export type groupCallParticipant = { + /** Represents a group call participant */ + _: 'groupCallParticipant', + /** Identifier of the group call participant */ + participant_id: MessageSender, + /** User's audio channel synchronization source identifier */ + audio_source_id: number, + /** User's screen sharing audio channel synchronization source identifier */ + screen_sharing_audio_source_id: number, + /** Information about user's video channel; may be null if there is no active video */ + video_info?: groupCallParticipantVideoInfo, + /** + * Information about user's screen sharing video channel; may be null if there + * is no active screen sharing video + */ + screen_sharing_video_info?: groupCallParticipantVideoInfo, + /** The participant user's bio or the participant chat's description */ + bio: string, + /** True, if the participant is the current user */ + is_current_user: boolean, + /** True, if the participant is speaking as set by setGroupCallParticipantIsSpeaking */ + is_speaking: boolean, + /** True, if the participant hand is raised */ + is_hand_raised: boolean, + /** + * True, if the current user can mute the participant for all other group call + * participants + */ + can_be_muted_for_all_users: boolean, + /** + * True, if the current user can allow the participant to unmute themselves or + * unmute the participant (if the participant is the current user) + */ + can_be_unmuted_for_all_users: boolean, + /** True, if the current user can mute the participant only for self */ + can_be_muted_for_current_user: boolean, + /** True, if the current user can unmute the participant for self */ + can_be_unmuted_for_current_user: boolean, + /** True, if the participant is muted for all users */ + is_muted_for_all_users: boolean, + /** True, if the participant is muted for the current user */ + is_muted_for_current_user: boolean, + /** True, if the participant is muted for all users, but can unmute themselves */ + can_unmute_self: boolean, + /** Participant's volume level; 1-20000 in hundreds of percents */ + volume_level: number, + /** + * User's order in the group call participant list. Orders must be compared lexicographically. + * The bigger is order, the higher is user in the list. If order is empty, the + * user must be removed from the participant list + */ + order: string, + } + + export type callProblemEcho$Input = { + /** The user heard their own voice */ + readonly _: 'callProblemEcho', + } + + export type callProblemNoise$Input = { + /** The user heard background noise */ + readonly _: 'callProblemNoise', + } + + export type callProblemInterruptions$Input = { + /** The other side kept disappearing */ + readonly _: 'callProblemInterruptions', + } + + export type callProblemDistortedSpeech$Input = { + /** The speech was distorted */ + readonly _: 'callProblemDistortedSpeech', + } + + export type callProblemSilentLocal$Input = { + /** The user couldn't hear the other side */ + readonly _: 'callProblemSilentLocal', + } + + export type callProblemSilentRemote$Input = { + /** The other side couldn't hear the user */ + readonly _: 'callProblemSilentRemote', + } + + export type callProblemDropped$Input = { + /** The call ended unexpectedly */ + readonly _: 'callProblemDropped', + } + + export type callProblemDistortedVideo$Input = { + /** The video was distorted */ + readonly _: 'callProblemDistortedVideo', + } + + export type callProblemPixelatedVideo$Input = { + /** The video was pixelated */ + readonly _: 'callProblemPixelatedVideo', + } + + export type call = { + /** Describes a call */ + _: 'call', + /** Call identifier, not persistent */ + id: number, + /** Peer user identifier */ + user_id: number, + /** True, if the call is outgoing */ + is_outgoing: boolean, + /** True, if the call is a video call */ + is_video: boolean, + /** Call state */ + state: CallState, + } + + export type phoneNumberAuthenticationSettings$Input = { + /** Contains settings for the authentication of the user's phone number */ + readonly _: 'phoneNumberAuthenticationSettings', + /** + * Pass true if the authentication code may be sent via a flash call to the specified + * phone number + */ + readonly allow_flash_call?: boolean, + /** + * Pass true if the authentication code may be sent via a missed call to the specified + * phone number + */ + readonly allow_missed_call?: boolean, + /** Pass true if the authenticated phone number is used on the current device */ + readonly is_current_phone_number?: boolean, + /** + * For official applications only. True, if the application can use Android SMS + * Retriever API (requires Google Play Services >= 10.2) to automatically receive + * the authentication code from the SMS. See https://developers.google.com/identity/sms-retriever/ + * for more details + */ + readonly allow_sms_retriever_api?: boolean, + /** + * List of up to 20 authentication tokens, recently received in updateOption("authentication_token") + * in previously logged out sessions + */ + readonly authentication_tokens?: ReadonlyArray, + } + + export type animations = { + /** Represents a list of animations */ + _: 'animations', + /** List of animations */ + animations: Array, + } + + export type diceStickersRegular = { + /** A regular animated sticker */ + _: 'diceStickersRegular', + /** The animated sticker with the dice animation */ + sticker: sticker, + } + + export type diceStickersSlotMachine = { + /** Animated stickers to be combined into a slot machine */ + _: 'diceStickersSlotMachine', + /** + * The animated sticker with the slot machine background. The background animation + * must start playing after all reel animations finish + */ + background: sticker, + /** + * The animated sticker with the lever animation. The lever animation must play + * once in the initial dice state + */ + lever: sticker, + /** The animated sticker with the left reel */ + left_reel: sticker, + /** The animated sticker with the center reel */ + center_reel: sticker, + /** The animated sticker with the right reel */ + right_reel: sticker, + } + + export type importedContacts = { + /** Represents the result of an ImportContacts request */ + _: 'importedContacts', + /** + * User identifiers of the imported contacts in the same order as they were specified + * in the request; 0 if the contact is not yet a registered user + */ + user_ids: Array, + /** + * The number of users that imported the corresponding contact; 0 for already registered + * users or if unavailable + */ + importer_count: Array, + } + + export type httpUrl = { + /** Contains an HTTP URL */ + _: 'httpUrl', + /** The URL */ + url: string, + } + + export type inputInlineQueryResultAnimation$Input = { + /** + * Represents a link to an animated GIF or an animated (i.e., without sound) H.264/MPEG-4 + * AVC video + */ + readonly _: 'inputInlineQueryResultAnimation', + /** Unique identifier of the query result */ + readonly id?: string, + /** Title of the query result */ + readonly title?: string, + /** URL of the result thumbnail (JPEG, GIF, or MPEG4), if it exists */ + readonly thumbnail_url?: string, + /** + * MIME type of the video thumbnail. If non-empty, must be one of "image/jpeg", + * "image/gif" and "video/mp4" + */ + readonly thumbnail_mime_type?: string, + /** The URL of the video file (file size must not exceed 1MB) */ + readonly video_url?: string, + /** MIME type of the video file. Must be one of "image/gif" and "video/mp4" */ + readonly video_mime_type?: string, + /** Duration of the video, in seconds */ + readonly video_duration?: number, + /** Width of the video */ + readonly video_width?: number, + /** Height of the video */ + readonly video_height?: number, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * The content of the message to be sent. Must be one of the following types: inputMessageText, + * inputMessageAnimation, inputMessageInvoice, inputMessageLocation, inputMessageVenue + * or inputMessageContact + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type inputInlineQueryResultArticle$Input = { + /** Represents a link to an article or web page */ + readonly _: 'inputInlineQueryResultArticle', + /** Unique identifier of the query result */ + readonly id?: string, + /** URL of the result, if it exists */ + readonly url?: string, + /** True, if the URL must be not shown */ + readonly hide_url?: boolean, + /** Title of the result */ + readonly title?: string, + /** A short description of the result */ + readonly description?: string, + /** URL of the result thumbnail, if it exists */ + readonly thumbnail_url?: string, + /** Thumbnail width, if known */ + readonly thumbnail_width?: number, + /** Thumbnail height, if known */ + readonly thumbnail_height?: number, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * The content of the message to be sent. Must be one of the following types: inputMessageText, + * inputMessageInvoice, inputMessageLocation, inputMessageVenue or inputMessageContact + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type inputInlineQueryResultAudio$Input = { + /** Represents a link to an MP3 audio file */ + readonly _: 'inputInlineQueryResultAudio', + /** Unique identifier of the query result */ + readonly id?: string, + /** Title of the audio file */ + readonly title?: string, + /** Performer of the audio file */ + readonly performer?: string, + /** The URL of the audio file */ + readonly audio_url?: string, + /** Audio file duration, in seconds */ + readonly audio_duration?: number, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * The content of the message to be sent. Must be one of the following types: inputMessageText, + * inputMessageAudio, inputMessageInvoice, inputMessageLocation, inputMessageVenue + * or inputMessageContact + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type inputInlineQueryResultContact$Input = { + /** Represents a user contact */ + readonly _: 'inputInlineQueryResultContact', + /** Unique identifier of the query result */ + readonly id?: string, + /** User contact */ + readonly contact?: contact$Input, + /** URL of the result thumbnail, if it exists */ + readonly thumbnail_url?: string, + /** Thumbnail width, if known */ + readonly thumbnail_width?: number, + /** Thumbnail height, if known */ + readonly thumbnail_height?: number, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * The content of the message to be sent. Must be one of the following types: inputMessageText, + * inputMessageInvoice, inputMessageLocation, inputMessageVenue or inputMessageContact + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type inputInlineQueryResultDocument$Input = { + /** Represents a link to a file */ + readonly _: 'inputInlineQueryResultDocument', + /** Unique identifier of the query result */ + readonly id?: string, + /** Title of the resulting file */ + readonly title?: string, + /** Short description of the result, if known */ + readonly description?: string, + /** URL of the file */ + readonly document_url?: string, + /** + * MIME type of the file content; only "application/pdf" and "application/zip" + * are currently allowed + */ + readonly mime_type?: string, + /** The URL of the file thumbnail, if it exists */ + readonly thumbnail_url?: string, + /** Width of the thumbnail */ + readonly thumbnail_width?: number, + /** Height of the thumbnail */ + readonly thumbnail_height?: number, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * The content of the message to be sent. Must be one of the following types: inputMessageText, + * inputMessageDocument, inputMessageInvoice, inputMessageLocation, inputMessageVenue + * or inputMessageContact + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type inputInlineQueryResultGame$Input = { + /** Represents a game */ + readonly _: 'inputInlineQueryResultGame', + /** Unique identifier of the query result */ + readonly id?: string, + /** Short name of the game */ + readonly game_short_name?: string, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + } + + export type inputInlineQueryResultLocation$Input = { + /** Represents a point on the map */ + readonly _: 'inputInlineQueryResultLocation', + /** Unique identifier of the query result */ + readonly id?: string, + /** Location result */ + readonly location?: location$Input, + /** + * Amount of time relative to the message sent time until the location can be updated, + * in seconds + */ + readonly live_period?: number, + /** Title of the result */ + readonly title?: string, + /** URL of the result thumbnail, if it exists */ + readonly thumbnail_url?: string, + /** Thumbnail width, if known */ + readonly thumbnail_width?: number, + /** Thumbnail height, if known */ + readonly thumbnail_height?: number, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * The content of the message to be sent. Must be one of the following types: inputMessageText, + * inputMessageInvoice, inputMessageLocation, inputMessageVenue or inputMessageContact + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type inputInlineQueryResultPhoto$Input = { + /** Represents link to a JPEG image */ + readonly _: 'inputInlineQueryResultPhoto', + /** Unique identifier of the query result */ + readonly id?: string, + /** Title of the result, if known */ + readonly title?: string, + /** A short description of the result, if known */ + readonly description?: string, + /** URL of the photo thumbnail, if it exists */ + readonly thumbnail_url?: string, + /** The URL of the JPEG photo (photo size must not exceed 5MB) */ + readonly photo_url?: string, + /** Width of the photo */ + readonly photo_width?: number, + /** Height of the photo */ + readonly photo_height?: number, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * The content of the message to be sent. Must be one of the following types: inputMessageText, + * inputMessagePhoto, inputMessageInvoice, inputMessageLocation, inputMessageVenue + * or inputMessageContact + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type inputInlineQueryResultSticker$Input = { + /** Represents a link to a WEBP or TGS sticker */ + readonly _: 'inputInlineQueryResultSticker', + /** Unique identifier of the query result */ + readonly id?: string, + /** URL of the sticker thumbnail, if it exists */ + readonly thumbnail_url?: string, + /** The URL of the WEBP or TGS sticker (sticker file size must not exceed 5MB) */ + readonly sticker_url?: string, + /** Width of the sticker */ + readonly sticker_width?: number, + /** Height of the sticker */ + readonly sticker_height?: number, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * The content of the message to be sent. Must be one of the following types: inputMessageText, + * inputMessageSticker, inputMessageInvoice, inputMessageLocation, inputMessageVenue + * or inputMessageContact + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type inputInlineQueryResultVenue$Input = { + /** Represents information about a venue */ + readonly _: 'inputInlineQueryResultVenue', + /** Unique identifier of the query result */ + readonly id?: string, + /** Venue result */ + readonly venue?: venue$Input, + /** URL of the result thumbnail, if it exists */ + readonly thumbnail_url?: string, + /** Thumbnail width, if known */ + readonly thumbnail_width?: number, + /** Thumbnail height, if known */ + readonly thumbnail_height?: number, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * The content of the message to be sent. Must be one of the following types: inputMessageText, + * inputMessageInvoice, inputMessageLocation, inputMessageVenue or inputMessageContact + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type inputInlineQueryResultVideo$Input = { + /** Represents a link to a page containing an embedded video player or a video file */ + readonly _: 'inputInlineQueryResultVideo', + /** Unique identifier of the query result */ + readonly id?: string, + /** Title of the result */ + readonly title?: string, + /** A short description of the result, if known */ + readonly description?: string, + /** The URL of the video thumbnail (JPEG), if it exists */ + readonly thumbnail_url?: string, + /** URL of the embedded video player or video file */ + readonly video_url?: string, + /** + * MIME type of the content of the video URL, only "text/html" or "video/mp4" are + * currently supported + */ + readonly mime_type?: string, + /** Width of the video */ + readonly video_width?: number, + /** Height of the video */ + readonly video_height?: number, + /** Video duration, in seconds */ + readonly video_duration?: number, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * The content of the message to be sent. Must be one of the following types: inputMessageText, + * inputMessageVideo, inputMessageInvoice, inputMessageLocation, inputMessageVenue + * or inputMessageContact + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type inputInlineQueryResultVoiceNote$Input = { + /** + * Represents a link to an opus-encoded audio file within an OGG container, single + * channel audio + */ + readonly _: 'inputInlineQueryResultVoiceNote', + /** Unique identifier of the query result */ + readonly id?: string, + /** Title of the voice note */ + readonly title?: string, + /** The URL of the voice note file */ + readonly voice_note_url?: string, + /** Duration of the voice note, in seconds */ + readonly voice_note_duration?: number, + /** + * The message reply markup; pass null if none. Must be of type replyMarkupInlineKeyboard + * or null + */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * The content of the message to be sent. Must be one of the following types: inputMessageText, + * inputMessageVoiceNote, inputMessageInvoice, inputMessageLocation, inputMessageVenue + * or inputMessageContact + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type inlineQueryResultArticle = { + /** Represents a link to an article or web page */ + _: 'inlineQueryResultArticle', + /** Unique identifier of the query result */ + id: string, + /** URL of the result, if it exists */ + url: string, + /** True, if the URL must be not shown */ + hide_url: boolean, + /** Title of the result */ + title: string, + /** A short description of the result */ + description: string, + /** Result thumbnail in JPEG format; may be null */ + thumbnail?: thumbnail, + } + + export type inlineQueryResultContact = { + /** Represents a user contact */ + _: 'inlineQueryResultContact', + /** Unique identifier of the query result */ + id: string, + /** A user contact */ + contact: contact, + /** Result thumbnail in JPEG format; may be null */ + thumbnail?: thumbnail, + } + + export type inlineQueryResultLocation = { + /** Represents a point on the map */ + _: 'inlineQueryResultLocation', + /** Unique identifier of the query result */ + id: string, + /** Location result */ + location: location, + /** Title of the result */ + title: string, + /** Result thumbnail in JPEG format; may be null */ + thumbnail?: thumbnail, + } + + export type inlineQueryResultVenue = { + /** Represents information about a venue */ + _: 'inlineQueryResultVenue', + /** Unique identifier of the query result */ + id: string, + /** Venue result */ + venue: venue, + /** Result thumbnail in JPEG format; may be null */ + thumbnail?: thumbnail, + } + + export type inlineQueryResultGame = { + /** Represents information about a game */ + _: 'inlineQueryResultGame', + /** Unique identifier of the query result */ + id: string, + /** Game result */ + game: game, + } + + export type inlineQueryResultAnimation = { + /** Represents an animation file */ + _: 'inlineQueryResultAnimation', + /** Unique identifier of the query result */ + id: string, + /** Animation file */ + animation: animation, + /** Animation title */ + title: string, + } + + export type inlineQueryResultAudio = { + /** Represents an audio file */ + _: 'inlineQueryResultAudio', + /** Unique identifier of the query result */ + id: string, + /** Audio file */ + audio: audio, + } + + export type inlineQueryResultDocument = { + /** Represents a document */ + _: 'inlineQueryResultDocument', + /** Unique identifier of the query result */ + id: string, + /** Document */ + document: document, + /** Document title */ + title: string, + /** Document description */ + description: string, + } + + export type inlineQueryResultPhoto = { + /** Represents a photo */ + _: 'inlineQueryResultPhoto', + /** Unique identifier of the query result */ + id: string, + /** Photo */ + photo: photo, + /** Title of the result, if known */ + title: string, + /** A short description of the result, if known */ + description: string, + } + + export type inlineQueryResultSticker = { + /** Represents a sticker */ + _: 'inlineQueryResultSticker', + /** Unique identifier of the query result */ + id: string, + /** Sticker */ + sticker: sticker, + } + + export type inlineQueryResultVideo = { + /** Represents a video */ + _: 'inlineQueryResultVideo', + /** Unique identifier of the query result */ + id: string, + /** Video */ + video: video, + /** Title of the video */ + title: string, + /** Description of the video */ + description: string, + } + + export type inlineQueryResultVoiceNote = { + /** Represents a voice note */ + _: 'inlineQueryResultVoiceNote', + /** Unique identifier of the query result */ + id: string, + /** Voice note */ + voice_note: voiceNote, + /** Title of the voice note */ + title: string, + } + + export type inlineQueryResults = { + /** + * Represents the results of the inline query. Use sendInlineQueryResultMessage + * to send the result of the query + */ + _: 'inlineQueryResults', + /** Unique identifier of the inline query */ + inline_query_id: string, + /** The offset for the next request. If empty, there are no more results */ + next_offset: string, + /** Results of the query */ + results: Array, + /** + * If non-empty, this text must be shown on the button, which opens a private chat + * with the bot and sends the bot a start message with the switch_pm_parameter + */ + switch_pm_text: string, + /** Parameter for the bot start message */ + switch_pm_parameter: string, + } + + export type callbackQueryPayloadData = { + /** The payload for a general callback button */ + _: 'callbackQueryPayloadData', + /** Data that was attached to the callback button */ + data: string /* base64 */, + } + + export type callbackQueryPayloadData$Input = { + /** The payload for a general callback button */ + readonly _: 'callbackQueryPayloadData', + /** Data that was attached to the callback button */ + readonly data?: string /* base64 */, + } + + export type callbackQueryPayloadDataWithPassword = { + /** The payload for a callback button requiring password */ + _: 'callbackQueryPayloadDataWithPassword', + /** The password for the current user */ + password: string, + /** Data that was attached to the callback button */ + data: string /* base64 */, + } + + export type callbackQueryPayloadDataWithPassword$Input = { + /** The payload for a callback button requiring password */ + readonly _: 'callbackQueryPayloadDataWithPassword', + /** The password for the current user */ + readonly password?: string, + /** Data that was attached to the callback button */ + readonly data?: string /* base64 */, + } + + export type callbackQueryPayloadGame = { + /** The payload for a game callback button */ + _: 'callbackQueryPayloadGame', + /** A short name of the game that was attached to the callback button */ + game_short_name: string, + } + + export type callbackQueryPayloadGame$Input = { + /** The payload for a game callback button */ + readonly _: 'callbackQueryPayloadGame', + /** A short name of the game that was attached to the callback button */ + readonly game_short_name?: string, + } + + export type callbackQueryAnswer = { + /** Contains a bot's answer to a callback query */ + _: 'callbackQueryAnswer', + /** Text of the answer */ + text: string, + /** True, if an alert must be shown to the user instead of a toast notification */ + show_alert: boolean, + /** URL to be opened */ + url: string, + } + + export type customRequestResult = { + /** Contains the result of a custom request */ + _: 'customRequestResult', + /** A JSON-serialized result */ + result: string, + } + + export type gameHighScore = { + /** Contains one row of the game high score table */ + _: 'gameHighScore', + /** Position in the high score table */ + position: number, + /** User identifier */ + user_id: number, + /** User score */ + score: number, + } + + export type gameHighScores = { + /** Contains a list of game high scores */ + _: 'gameHighScores', + /** A list of game high scores */ + scores: Array, + } + + export type chatEventMessageEdited = { + /** A message was edited */ + _: 'chatEventMessageEdited', + /** The original message before the edit */ + old_message: message, + /** The message after it was edited */ + new_message: message, + } + + export type chatEventMessageDeleted = { + /** A message was deleted */ + _: 'chatEventMessageDeleted', + /** Deleted message */ + message: message, + } + + export type chatEventPollStopped = { + /** A poll in a message was stopped */ + _: 'chatEventPollStopped', + /** The message with the poll */ + message: message, + } + + export type chatEventMessagePinned = { + /** A message was pinned */ + _: 'chatEventMessagePinned', + /** Pinned message */ + message: message, + } + + export type chatEventMessageUnpinned = { + /** A message was unpinned */ + _: 'chatEventMessageUnpinned', + /** Unpinned message */ + message: message, + } + + export type chatEventMemberJoined = { + /** A new member joined the chat */ + _: 'chatEventMemberJoined', + } + + export type chatEventMemberJoinedByInviteLink = { + /** A new member joined the chat via an invite link */ + _: 'chatEventMemberJoinedByInviteLink', + /** Invite link used to join the chat */ + invite_link: chatInviteLink, + } + + export type chatEventMemberJoinedByRequest = { + /** A new member was accepted to the chat by an administrator */ + _: 'chatEventMemberJoinedByRequest', + /** User identifier of the chat administrator, approved user join request */ + approver_user_id: number, + /** Invite link used to join the chat; may be null */ + invite_link?: chatInviteLink, + } + + export type chatEventMemberLeft = { + /** A member left the chat */ + _: 'chatEventMemberLeft', + } + + export type chatEventMemberInvited = { + /** A new chat member was invited */ + _: 'chatEventMemberInvited', + /** New member user identifier */ + user_id: number, + /** New member status */ + status: ChatMemberStatus, + } + + export type chatEventMemberPromoted = { + /** + * A chat member has gained/lost administrator status, or the list of their administrator + * privileges has changed + */ + _: 'chatEventMemberPromoted', + /** Affected chat member user identifier */ + user_id: number, + /** Previous status of the chat member */ + old_status: ChatMemberStatus, + /** New status of the chat member */ + new_status: ChatMemberStatus, + } + + export type chatEventMemberRestricted = { + /** + * A chat member was restricted/unrestricted or banned/unbanned, or the list of + * their restrictions has changed + */ + _: 'chatEventMemberRestricted', + /** Affected chat member identifier */ + member_id: MessageSender, + /** Previous status of the chat member */ + old_status: ChatMemberStatus, + /** New status of the chat member */ + new_status: ChatMemberStatus, + } + + export type chatEventTitleChanged = { + /** The chat title was changed */ + _: 'chatEventTitleChanged', + /** Previous chat title */ + old_title: string, + /** New chat title */ + new_title: string, + } + + export type chatEventPermissionsChanged = { + /** The chat permissions was changed */ + _: 'chatEventPermissionsChanged', + /** Previous chat permissions */ + old_permissions: chatPermissions, + /** New chat permissions */ + new_permissions: chatPermissions, + } + + export type chatEventDescriptionChanged = { + /** The chat description was changed */ + _: 'chatEventDescriptionChanged', + /** Previous chat description */ + old_description: string, + /** New chat description */ + new_description: string, + } + + export type chatEventUsernameChanged = { + /** The chat username was changed */ + _: 'chatEventUsernameChanged', + /** Previous chat username */ + old_username: string, + /** New chat username */ + new_username: string, + } + + export type chatEventPhotoChanged = { + /** The chat photo was changed */ + _: 'chatEventPhotoChanged', + /** Previous chat photo value; may be null */ + old_photo?: chatPhoto, + /** New chat photo value; may be null */ + new_photo?: chatPhoto, + } + + export type chatEventInvitesToggled = { + /** The can_invite_users permission of a supergroup chat was toggled */ + _: 'chatEventInvitesToggled', + /** New value of can_invite_users permission */ + can_invite_users: boolean, + } + + export type chatEventLinkedChatChanged = { + /** The linked chat of a supergroup was changed */ + _: 'chatEventLinkedChatChanged', + /** Previous supergroup linked chat identifier */ + old_linked_chat_id: number, + /** New supergroup linked chat identifier */ + new_linked_chat_id: number, + } + + export type chatEventSlowModeDelayChanged = { + /** The slow_mode_delay setting of a supergroup was changed */ + _: 'chatEventSlowModeDelayChanged', + /** Previous value of slow_mode_delay, in seconds */ + old_slow_mode_delay: number, + /** New value of slow_mode_delay, in seconds */ + new_slow_mode_delay: number, + } + + export type chatEventMessageTtlChanged = { + /** The message TTL was changed */ + _: 'chatEventMessageTtlChanged', + /** Previous value of message_ttl */ + old_message_ttl: number, + /** New value of message_ttl */ + new_message_ttl: number, + } + + export type chatEventSignMessagesToggled = { + /** The sign_messages setting of a channel was toggled */ + _: 'chatEventSignMessagesToggled', + /** New value of sign_messages */ + sign_messages: boolean, + } + + export type chatEventHasProtectedContentToggled = { + /** The has_protected_content setting of a channel was toggled */ + _: 'chatEventHasProtectedContentToggled', + /** New value of has_protected_content */ + has_protected_content: boolean, + } + + export type chatEventStickerSetChanged = { + /** The supergroup sticker set was changed */ + _: 'chatEventStickerSetChanged', + /** Previous identifier of the chat sticker set; 0 if none */ + old_sticker_set_id: string, + /** New identifier of the chat sticker set; 0 if none */ + new_sticker_set_id: string, + } + + export type chatEventLocationChanged = { + /** The supergroup location was changed */ + _: 'chatEventLocationChanged', + /** Previous location; may be null */ + old_location?: chatLocation, + /** New location; may be null */ + new_location?: chatLocation, + } + + export type chatEventIsAllHistoryAvailableToggled = { + /** The is_all_history_available setting of a supergroup was toggled */ + _: 'chatEventIsAllHistoryAvailableToggled', + /** New value of is_all_history_available */ + is_all_history_available: boolean, + } + + export type chatEventInviteLinkEdited = { + /** A chat invite link was edited */ + _: 'chatEventInviteLinkEdited', + /** Previous information about the invite link */ + old_invite_link: chatInviteLink, + /** New information about the invite link */ + new_invite_link: chatInviteLink, + } + + export type chatEventInviteLinkRevoked = { + /** A chat invite link was revoked */ + _: 'chatEventInviteLinkRevoked', + /** The invite link */ + invite_link: chatInviteLink, + } + + export type chatEventInviteLinkDeleted = { + /** A revoked chat invite link was deleted */ + _: 'chatEventInviteLinkDeleted', + /** The invite link */ + invite_link: chatInviteLink, + } + + export type chatEventVideoChatCreated = { + /** A video chat was created */ + _: 'chatEventVideoChatCreated', + /** + * Identifier of the video chat. The video chat can be received through the method + * getGroupCall + */ + group_call_id: number, + } + + export type chatEventVideoChatEnded = { + /** A video chat was ended */ + _: 'chatEventVideoChatEnded', + /** + * Identifier of the video chat. The video chat can be received through the method + * getGroupCall + */ + group_call_id: number, + } + + export type chatEventVideoChatParticipantIsMutedToggled = { + /** A video chat participant was muted or unmuted */ + _: 'chatEventVideoChatParticipantIsMutedToggled', + /** Identifier of the affected group call participant */ + participant_id: MessageSender, + /** New value of is_muted */ + is_muted: boolean, + } + + export type chatEventVideoChatParticipantVolumeLevelChanged = { + /** A video chat participant volume level was changed */ + _: 'chatEventVideoChatParticipantVolumeLevelChanged', + /** Identifier of the affected group call participant */ + participant_id: MessageSender, + /** New value of volume_level; 1-20000 in hundreds of percents */ + volume_level: number, + } + + export type chatEventVideoChatMuteNewParticipantsToggled = { + /** The mute_new_participants setting of a video chat was toggled */ + _: 'chatEventVideoChatMuteNewParticipantsToggled', + /** New value of the mute_new_participants setting */ + mute_new_participants: boolean, + } + + export type chatEvent = { + /** Represents a chat event */ + _: 'chatEvent', + /** Chat event identifier */ + id: string, + /** Point in time (Unix timestamp) when the event happened */ + date: number, + /** Identifier of the user or chat who performed the action */ + member_id: MessageSender, + /** The action */ + action: ChatEventAction, + } + + export type chatEvents = { + /** Contains a list of chat events */ + _: 'chatEvents', + /** List of events */ + events: Array, + } + + export type chatEventLogFilters$Input = { + /** Represents a set of filters used to obtain a chat event log */ + readonly _: 'chatEventLogFilters', + /** True, if message edits need to be returned */ + readonly message_edits?: boolean, + /** True, if message deletions need to be returned */ + readonly message_deletions?: boolean, + /** True, if pin/unpin events need to be returned */ + readonly message_pins?: boolean, + /** True, if members joining events need to be returned */ + readonly member_joins?: boolean, + /** True, if members leaving events need to be returned */ + readonly member_leaves?: boolean, + /** True, if invited member events need to be returned */ + readonly member_invites?: boolean, + /** True, if member promotion/demotion events need to be returned */ + readonly member_promotions?: boolean, + /** True, if member restricted/unrestricted/banned/unbanned events need to be returned */ + readonly member_restrictions?: boolean, + /** True, if changes in chat information need to be returned */ + readonly info_changes?: boolean, + /** True, if changes in chat settings need to be returned */ + readonly setting_changes?: boolean, + /** True, if changes to invite links need to be returned */ + readonly invite_link_changes?: boolean, + /** True, if video chat actions need to be returned */ + readonly video_chat_changes?: boolean, + } + + export type languagePackStringValueOrdinary = { + /** An ordinary language pack string */ + _: 'languagePackStringValueOrdinary', + /** String value */ + value: string, + } + + export type languagePackStringValueOrdinary$Input = { + /** An ordinary language pack string */ + readonly _: 'languagePackStringValueOrdinary', + /** String value */ + readonly value?: string, + } + + export type languagePackStringValuePluralized = { + /** + * A language pack string which has different forms based on the number of some + * object it mentions. See https://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html + * for more info + */ + _: 'languagePackStringValuePluralized', + /** Value for zero objects */ + zero_value: string, + /** Value for one object */ + one_value: string, + /** Value for two objects */ + two_value: string, + /** Value for few objects */ + few_value: string, + /** Value for many objects */ + many_value: string, + /** Default value */ + other_value: string, + } + + export type languagePackStringValuePluralized$Input = { + /** + * A language pack string which has different forms based on the number of some + * object it mentions. See https://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html + * for more info + */ + readonly _: 'languagePackStringValuePluralized', + /** Value for zero objects */ + readonly zero_value?: string, + /** Value for one object */ + readonly one_value?: string, + /** Value for two objects */ + readonly two_value?: string, + /** Value for few objects */ + readonly few_value?: string, + /** Value for many objects */ + readonly many_value?: string, + /** Default value */ + readonly other_value?: string, + } + + export type languagePackStringValueDeleted = { + /** + * A deleted language pack string, the value must be taken from the built-in English + * language pack + */ + _: 'languagePackStringValueDeleted', + } + + export type languagePackStringValueDeleted$Input = { + /** + * A deleted language pack string, the value must be taken from the built-in English + * language pack + */ + readonly _: 'languagePackStringValueDeleted', + } + + export type languagePackString = { + /** Represents one language pack string */ + _: 'languagePackString', + /** String key */ + key: string, + /** + * String value; pass null if the string needs to be taken from the built-in English + * language pack + */ + value: LanguagePackStringValue, + } + + export type languagePackString$Input = { + /** Represents one language pack string */ + readonly _: 'languagePackString', + /** String key */ + readonly key?: string, + /** + * String value; pass null if the string needs to be taken from the built-in English + * language pack + */ + readonly value?: LanguagePackStringValue$Input, + } + + export type languagePackStrings = { + /** Contains a list of language pack strings */ + _: 'languagePackStrings', + /** A list of language pack strings */ + strings: Array, + } + + export type languagePackInfo = { + /** Contains information about a language pack */ + _: 'languagePackInfo', + /** Unique language pack identifier */ + id: string, + /** + * Identifier of a base language pack; may be empty. If a string is missed in the + * language pack, then it must be fetched from base language pack. Unsupported + * in custom language packs + */ + base_language_pack_id: string, + /** Language name */ + name: string, + /** Name of the language in that language */ + native_name: string, + /** + * A language code to be used to apply plural forms. See https://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html + * for more info + */ + plural_code: string, + /** True, if the language pack is official */ + is_official: boolean, + /** True, if the language pack strings are RTL */ + is_rtl: boolean, + /** True, if the language pack is a beta language pack */ + is_beta: boolean, + /** True, if the language pack is installed by the current user */ + is_installed: boolean, + /** Total number of non-deleted strings from the language pack */ + total_string_count: number, + /** Total number of translated strings from the language pack */ + translated_string_count: number, + /** Total number of non-deleted strings from the language pack available locally */ + local_string_count: number, + /** Link to language translation interface; empty for custom local language packs */ + translation_url: string, + } + + export type languagePackInfo$Input = { + /** Contains information about a language pack */ + readonly _: 'languagePackInfo', + /** Unique language pack identifier */ + readonly id?: string, + /** + * Identifier of a base language pack; may be empty. If a string is missed in the + * language pack, then it must be fetched from base language pack. Unsupported + * in custom language packs + */ + readonly base_language_pack_id?: string, + /** Language name */ + readonly name?: string, + /** Name of the language in that language */ + readonly native_name?: string, + /** + * A language code to be used to apply plural forms. See https://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html + * for more info + */ + readonly plural_code?: string, + /** True, if the language pack is official */ + readonly is_official?: boolean, + /** True, if the language pack strings are RTL */ + readonly is_rtl?: boolean, + /** True, if the language pack is a beta language pack */ + readonly is_beta?: boolean, + /** True, if the language pack is installed by the current user */ + readonly is_installed?: boolean, + /** Total number of non-deleted strings from the language pack */ + readonly total_string_count?: number, + /** Total number of translated strings from the language pack */ + readonly translated_string_count?: number, + /** Total number of non-deleted strings from the language pack available locally */ + readonly local_string_count?: number, + /** Link to language translation interface; empty for custom local language packs */ + readonly translation_url?: string, + } + + export type localizationTargetInfo = { + /** Contains information about the current localization target */ + _: 'localizationTargetInfo', + /** List of available language packs for this application */ + language_packs: Array, + } + + export type deviceTokenFirebaseCloudMessaging$Input = { + /** A token for Firebase Cloud Messaging */ + readonly _: 'deviceTokenFirebaseCloudMessaging', + /** Device registration token; may be empty to deregister a device */ + readonly token?: string, + /** True, if push notifications must be additionally encrypted */ + readonly encrypt?: boolean, + } + + export type deviceTokenApplePush$Input = { + /** A token for Apple Push Notification service */ + readonly _: 'deviceTokenApplePush', + /** Device token; may be empty to deregister a device */ + readonly device_token?: string, + /** True, if App Sandbox is enabled */ + readonly is_app_sandbox?: boolean, + } + + export type deviceTokenApplePushVoIP$Input = { + /** A token for Apple Push Notification service VoIP notifications */ + readonly _: 'deviceTokenApplePushVoIP', + /** Device token; may be empty to deregister a device */ + readonly device_token?: string, + /** True, if App Sandbox is enabled */ + readonly is_app_sandbox?: boolean, + /** True, if push notifications must be additionally encrypted */ + readonly encrypt?: boolean, + } + + export type deviceTokenWindowsPush$Input = { + /** A token for Windows Push Notification Services */ + readonly _: 'deviceTokenWindowsPush', + /** + * The access token that will be used to send notifications; may be empty to deregister + * a device + */ + readonly access_token?: string, + } + + export type deviceTokenMicrosoftPush$Input = { + /** A token for Microsoft Push Notification Service */ + readonly _: 'deviceTokenMicrosoftPush', + /** Push notification channel URI; may be empty to deregister a device */ + readonly channel_uri?: string, + } + + export type deviceTokenMicrosoftPushVoIP$Input = { + /** A token for Microsoft Push Notification Service VoIP channel */ + readonly _: 'deviceTokenMicrosoftPushVoIP', + /** Push notification channel URI; may be empty to deregister a device */ + readonly channel_uri?: string, + } + + export type deviceTokenWebPush$Input = { + /** A token for web Push API */ + readonly _: 'deviceTokenWebPush', + /** + * Absolute URL exposed by the push service where the application server can send + * push messages; may be empty to deregister a device + */ + readonly endpoint?: string, + /** Base64url-encoded P-256 elliptic curve Diffie-Hellman public key */ + readonly p256dh_base64url?: string, + /** Base64url-encoded authentication secret */ + readonly auth_base64url?: string, + } + + export type deviceTokenSimplePush$Input = { + /** A token for Simple Push API for Firefox OS */ + readonly _: 'deviceTokenSimplePush', + /** + * Absolute URL exposed by the push service where the application server can send + * push messages; may be empty to deregister a device + */ + readonly endpoint?: string, + } + + export type deviceTokenUbuntuPush$Input = { + /** A token for Ubuntu Push Client service */ + readonly _: 'deviceTokenUbuntuPush', + /** Token; may be empty to deregister a device */ + readonly token?: string, + } + + export type deviceTokenBlackBerryPush$Input = { + /** A token for BlackBerry Push Service */ + readonly _: 'deviceTokenBlackBerryPush', + /** Token; may be empty to deregister a device */ + readonly token?: string, + } + + export type deviceTokenTizenPush$Input = { + /** A token for Tizen Push Service */ + readonly _: 'deviceTokenTizenPush', + /** Push service registration identifier; may be empty to deregister a device */ + readonly reg_id?: string, + } + + export type pushReceiverId = { + /** + * Contains a globally unique push receiver identifier, which can be used to identify + * which account has received a push notification + */ + _: 'pushReceiverId', + /** The globally unique identifier of push notification subscription */ + id: string, + } + + export type backgroundFillSolid = { + /** Describes a solid fill of a background */ + _: 'backgroundFillSolid', + /** A color of the background in the RGB24 format */ + color: number, + } + + export type backgroundFillSolid$Input = { + /** Describes a solid fill of a background */ + readonly _: 'backgroundFillSolid', + /** A color of the background in the RGB24 format */ + readonly color?: number, + } + + export type backgroundFillGradient = { + /** Describes a gradient fill of a background */ + _: 'backgroundFillGradient', + /** A top color of the background in the RGB24 format */ + top_color: number, + /** A bottom color of the background in the RGB24 format */ + bottom_color: number, + /** + * Clockwise rotation angle of the gradient, in degrees; 0-359. Must be always + * divisible by 45 + */ + rotation_angle: number, + } + + export type backgroundFillGradient$Input = { + /** Describes a gradient fill of a background */ + readonly _: 'backgroundFillGradient', + /** A top color of the background in the RGB24 format */ + readonly top_color?: number, + /** A bottom color of the background in the RGB24 format */ + readonly bottom_color?: number, + /** + * Clockwise rotation angle of the gradient, in degrees; 0-359. Must be always + * divisible by 45 + */ + readonly rotation_angle?: number, + } + + export type backgroundFillFreeformGradient = { + /** Describes a freeform gradient fill of a background */ + _: 'backgroundFillFreeformGradient', + /** A list of 3 or 4 colors of the freeform gradients in the RGB24 format */ + colors: Array, + } + + export type backgroundFillFreeformGradient$Input = { + /** Describes a freeform gradient fill of a background */ + readonly _: 'backgroundFillFreeformGradient', + /** A list of 3 or 4 colors of the freeform gradients in the RGB24 format */ + readonly colors?: ReadonlyArray, + } + + export type backgroundTypeWallpaper = { + /** A wallpaper in JPEG format */ + _: 'backgroundTypeWallpaper', + /** + * True, if the wallpaper must be downscaled to fit in 450x450 square and then + * box-blurred with radius 12 + */ + is_blurred: boolean, + /** True, if the background needs to be slightly moved when device is tilted */ + is_moving: boolean, + } + + export type backgroundTypeWallpaper$Input = { + /** A wallpaper in JPEG format */ + readonly _: 'backgroundTypeWallpaper', + /** + * True, if the wallpaper must be downscaled to fit in 450x450 square and then + * box-blurred with radius 12 + */ + readonly is_blurred?: boolean, + /** True, if the background needs to be slightly moved when device is tilted */ + readonly is_moving?: boolean, + } + + export type backgroundTypePattern = { + /** + * A PNG or TGV (gzipped subset of SVG with MIME type "application/x-tgwallpattern") + * pattern to be combined with the background fill chosen by the user + */ + _: 'backgroundTypePattern', + /** Fill of the background */ + fill: BackgroundFill, + /** Intensity of the pattern when it is shown above the filled background; 0-100. */ + intensity: number, + /** + * True, if the background fill must be applied only to the pattern itself. All + * other pixels are black in this case. For dark themes only + */ + is_inverted: boolean, + /** True, if the background needs to be slightly moved when device is tilted */ + is_moving: boolean, + } + + export type backgroundTypePattern$Input = { + /** + * A PNG or TGV (gzipped subset of SVG with MIME type "application/x-tgwallpattern") + * pattern to be combined with the background fill chosen by the user + */ + readonly _: 'backgroundTypePattern', + /** Fill of the background */ + readonly fill?: BackgroundFill$Input, + /** Intensity of the pattern when it is shown above the filled background; 0-100. */ + readonly intensity?: number, + /** + * True, if the background fill must be applied only to the pattern itself. All + * other pixels are black in this case. For dark themes only + */ + readonly is_inverted?: boolean, + /** True, if the background needs to be slightly moved when device is tilted */ + readonly is_moving?: boolean, + } + + export type backgroundTypeFill = { + /** A filled background */ + _: 'backgroundTypeFill', + /** The background fill */ + fill: BackgroundFill, + } + + export type backgroundTypeFill$Input = { + /** A filled background */ + readonly _: 'backgroundTypeFill', + /** The background fill */ + readonly fill?: BackgroundFill$Input, + } + + export type background = { + /** Describes a chat background */ + _: 'background', + /** Unique background identifier */ + id: string, + /** True, if this is one of default backgrounds */ + is_default: boolean, + /** True, if the background is dark and is recommended to be used with dark theme */ + is_dark: boolean, + /** Unique background name */ + name: string, + /** Document with the background; may be null. Null only for filled backgrounds */ + document?: document, + /** Type of the background */ + type: BackgroundType, + } + + export type backgrounds = { + /** Contains a list of backgrounds */ + _: 'backgrounds', + /** A list of backgrounds */ + backgrounds: Array, + } + + export type inputBackgroundLocal$Input = { + /** A background from a local file */ + readonly _: 'inputBackgroundLocal', + /** + * Background file to use. Only inputFileLocal and inputFileGenerated are supported. + * The file must be in JPEG format for wallpapers and in PNG format for patterns + */ + readonly background?: InputFile$Input, + } + + export type inputBackgroundRemote$Input = { + /** A background from the server */ + readonly _: 'inputBackgroundRemote', + /** The background identifier */ + readonly background_id?: number | string, + } + + export type themeSettings = { + /** Describes theme settings */ + _: 'themeSettings', + /** Theme accent color in ARGB format */ + accent_color: number, + /** The background to be used in chats; may be null */ + background?: background, + /** The fill to be used as a background for outgoing messages */ + outgoing_message_fill: BackgroundFill, + /** If true, the freeform gradient fill needs to be animated on every sent message */ + animate_outgoing_message_fill: boolean, + /** Accent color of outgoing messages in ARGB format */ + outgoing_message_accent_color: number, + } + + export type chatTheme = { + /** Describes a chat theme */ + _: 'chatTheme', + /** Theme name */ + name: string, + /** Theme settings for a light chat theme */ + light_settings: themeSettings, + /** Theme settings for a dark chat theme */ + dark_settings: themeSettings, + } + + export type hashtags = { + /** Contains a list of hashtags */ + _: 'hashtags', + /** A list of hashtags */ + hashtags: Array, + } + + export type canTransferOwnershipResultOk = { + /** The session can be used */ + _: 'canTransferOwnershipResultOk', + } + + export type canTransferOwnershipResultPasswordNeeded = { + /** The 2-step verification needs to be enabled first */ + _: 'canTransferOwnershipResultPasswordNeeded', + } + + export type canTransferOwnershipResultPasswordTooFresh = { + /** The 2-step verification was enabled recently, user needs to wait */ + _: 'canTransferOwnershipResultPasswordTooFresh', + /** + * Time left before the session can be used to transfer ownership of a chat, in + * seconds + */ + retry_after: number, + } + + export type canTransferOwnershipResultSessionTooFresh = { + /** The session was created recently, user needs to wait */ + _: 'canTransferOwnershipResultSessionTooFresh', + /** + * Time left before the session can be used to transfer ownership of a chat, in + * seconds + */ + retry_after: number, + } + + export type checkChatUsernameResultOk = { + /** The username can be set */ + _: 'checkChatUsernameResultOk', + } + + export type checkChatUsernameResultUsernameInvalid = { + /** The username is invalid */ + _: 'checkChatUsernameResultUsernameInvalid', + } + + export type checkChatUsernameResultUsernameOccupied = { + /** The username is occupied */ + _: 'checkChatUsernameResultUsernameOccupied', + } + + export type checkChatUsernameResultPublicChatsTooMuch = { + /** + * The user has too much chats with username, one of them must be made private + * first + */ + _: 'checkChatUsernameResultPublicChatsTooMuch', + } + + export type checkChatUsernameResultPublicGroupsUnavailable = { + /** The user can't be a member of a public supergroup */ + _: 'checkChatUsernameResultPublicGroupsUnavailable', + } + + export type checkStickerSetNameResultOk = { + /** The name can be set */ + _: 'checkStickerSetNameResultOk', + } + + export type checkStickerSetNameResultNameInvalid = { + /** The name is invalid */ + _: 'checkStickerSetNameResultNameInvalid', + } + + export type checkStickerSetNameResultNameOccupied = { + /** The name is occupied */ + _: 'checkStickerSetNameResultNameOccupied', + } + + export type resetPasswordResultOk = { + /** The password was reset */ + _: 'resetPasswordResultOk', + } + + export type resetPasswordResultPending = { + /** The password reset request is pending */ + _: 'resetPasswordResultPending', + /** + * Point in time (Unix timestamp) after which the password can be reset immediately + * using resetPassword + */ + pending_reset_date: number, + } + + export type resetPasswordResultDeclined = { + /** The password reset request was declined */ + _: 'resetPasswordResultDeclined', + /** Point in time (Unix timestamp) when the password reset can be retried */ + retry_date: number, + } + + export type messageFileTypePrivate = { + /** The messages was exported from a private chat */ + _: 'messageFileTypePrivate', + /** Name of the other party; may be empty if unrecognized */ + name: string, + } + + export type messageFileTypeGroup = { + /** The messages was exported from a group chat */ + _: 'messageFileTypeGroup', + /** Title of the group chat; may be empty if unrecognized */ + title: string, + } + + export type messageFileTypeUnknown = { + /** The messages was exported from a chat of unknown type */ + _: 'messageFileTypeUnknown', + } + + export type pushMessageContentHidden = { + /** A general message with hidden content */ + _: 'pushMessageContentHidden', + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentAnimation = { + /** An animation message (GIF-style). */ + _: 'pushMessageContentAnimation', + /** Message content; may be null */ + animation?: animation, + /** Animation caption */ + caption: string, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentAudio = { + /** An audio message */ + _: 'pushMessageContentAudio', + /** Message content; may be null */ + audio?: audio, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentContact = { + /** A message with a user contact */ + _: 'pushMessageContentContact', + /** Contact's name */ + name: string, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentContactRegistered = { + /** A contact has registered with Telegram */ + _: 'pushMessageContentContactRegistered', + } + + export type pushMessageContentDocument = { + /** A document message (a general file) */ + _: 'pushMessageContentDocument', + /** Message content; may be null */ + document?: document, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentGame = { + /** A message with a game */ + _: 'pushMessageContentGame', + /** Game title, empty for pinned game message */ + title: string, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentGameScore = { + /** A new high score was achieved in a game */ + _: 'pushMessageContentGameScore', + /** Game title, empty for pinned message */ + title: string, + /** New score, 0 for pinned message */ + score: number, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentInvoice = { + /** A message with an invoice from a bot */ + _: 'pushMessageContentInvoice', + /** Product price */ + price: string, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentLocation = { + /** A message with a location */ + _: 'pushMessageContentLocation', + /** True, if the location is live */ + is_live: boolean, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentPhoto = { + /** A photo message */ + _: 'pushMessageContentPhoto', + /** Message content; may be null */ + photo?: photo, + /** Photo caption */ + caption: string, + /** True, if the photo is secret */ + is_secret: boolean, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentPoll = { + /** A message with a poll */ + _: 'pushMessageContentPoll', + /** Poll question */ + question: string, + /** True, if the poll is regular and not in quiz mode */ + is_regular: boolean, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentScreenshotTaken = { + /** A screenshot of a message in the chat has been taken */ + _: 'pushMessageContentScreenshotTaken', + } + + export type pushMessageContentSticker = { + /** A message with a sticker */ + _: 'pushMessageContentSticker', + /** Message content; may be null */ + sticker?: sticker, + /** Emoji corresponding to the sticker; may be empty */ + emoji: string, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentText = { + /** A text message */ + _: 'pushMessageContentText', + /** Message text */ + text: string, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentVideo = { + /** A video message */ + _: 'pushMessageContentVideo', + /** Message content; may be null */ + video?: video, + /** Video caption */ + caption: string, + /** True, if the video is secret */ + is_secret: boolean, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentVideoNote = { + /** A video note message */ + _: 'pushMessageContentVideoNote', + /** Message content; may be null */ + video_note?: videoNote, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentVoiceNote = { + /** A voice note message */ + _: 'pushMessageContentVoiceNote', + /** Message content; may be null */ + voice_note?: voiceNote, + /** True, if the message is a pinned message with the specified content */ + is_pinned: boolean, + } + + export type pushMessageContentBasicGroupChatCreate = { + /** A newly created basic group */ + _: 'pushMessageContentBasicGroupChatCreate', + } + + export type pushMessageContentChatAddMembers = { + /** New chat members were invited to a group */ + _: 'pushMessageContentChatAddMembers', + /** Name of the added member */ + member_name: string, + /** True, if the current user was added to the group */ + is_current_user: boolean, + /** True, if the user has returned to the group themselves */ + is_returned: boolean, + } + + export type pushMessageContentChatChangePhoto = { + /** A chat photo was edited */ + _: 'pushMessageContentChatChangePhoto', + } + + export type pushMessageContentChatChangeTitle = { + /** A chat title was edited */ + _: 'pushMessageContentChatChangeTitle', + /** New chat title */ + title: string, + } + + export type pushMessageContentChatSetTheme = { + /** A chat theme was edited */ + _: 'pushMessageContentChatSetTheme', + /** + * If non-empty, name of a new theme, set for the chat. Otherwise chat theme was + * reset to the default one + */ + theme_name: string, + } + + export type pushMessageContentChatDeleteMember = { + /** A chat member was deleted */ + _: 'pushMessageContentChatDeleteMember', + /** Name of the deleted member */ + member_name: string, + /** True, if the current user was deleted from the group */ + is_current_user: boolean, + /** True, if the user has left the group themselves */ + is_left: boolean, + } + + export type pushMessageContentChatJoinByLink = { + /** A new member joined the chat via an invite link */ + _: 'pushMessageContentChatJoinByLink', + } + + export type pushMessageContentChatJoinByRequest = { + /** A new member was accepted to the chat by an administrator */ + _: 'pushMessageContentChatJoinByRequest', + } + + export type pushMessageContentMessageForwards = { + /** A forwarded messages */ + _: 'pushMessageContentMessageForwards', + /** Number of forwarded messages */ + total_count: number, + } + + export type pushMessageContentMediaAlbum = { + /** A media album */ + _: 'pushMessageContentMediaAlbum', + /** Number of messages in the album */ + total_count: number, + /** True, if the album has at least one photo */ + has_photos: boolean, + /** True, if the album has at least one video */ + has_videos: boolean, + /** True, if the album has at least one audio file */ + has_audios: boolean, + /** True, if the album has at least one document */ + has_documents: boolean, + } + + export type notificationTypeNewMessage = { + /** New message was received */ + _: 'notificationTypeNewMessage', + /** The message */ + message: message, + } + + export type notificationTypeNewSecretChat = { + /** New secret chat was created */ + _: 'notificationTypeNewSecretChat', + } + + export type notificationTypeNewCall = { + /** New call was received */ + _: 'notificationTypeNewCall', + /** Call identifier */ + call_id: number, + } + + export type notificationTypeNewPushMessage = { + /** New message was received through a push notification */ + _: 'notificationTypeNewPushMessage', + /** + * The message identifier. The message will not be available in the chat history, + * but the ID can be used in viewMessages, or as reply_to_message_id + */ + message_id: number, + /** Identifier of the sender of the message. Corresponding user or chat may be inaccessible */ + sender_id: MessageSender, + /** Name of the sender */ + sender_name: string, + /** True, if the message is outgoing */ + is_outgoing: boolean, + /** Push message content */ + content: PushMessageContent, + } + + export type notificationGroupTypeMessages = { + /** + * A group containing notifications of type notificationTypeNewMessage and notificationTypeNewPushMessage + * with ordinary unread messages + */ + _: 'notificationGroupTypeMessages', + } + + export type notificationGroupTypeMentions = { + /** + * A group containing notifications of type notificationTypeNewMessage and notificationTypeNewPushMessage + * with unread mentions of the current user, replies to their messages, or a pinned + * message + */ + _: 'notificationGroupTypeMentions', + } + + export type notificationGroupTypeSecretChat = { + /** A group containing a notification of type notificationTypeNewSecretChat */ + _: 'notificationGroupTypeSecretChat', + } + + export type notificationGroupTypeCalls = { + /** A group containing notifications of type notificationTypeNewCall */ + _: 'notificationGroupTypeCalls', + } + + export type notification = { + /** Contains information about a notification */ + _: 'notification', + /** Unique persistent identifier of this notification */ + id: number, + /** Notification date */ + date: number, + /** True, if the notification was initially silent */ + is_silent: boolean, + /** Notification type */ + type: NotificationType, + } + + export type notificationGroup = { + /** Describes a group of notifications */ + _: 'notificationGroup', + /** Unique persistent auto-incremented from 1 identifier of the notification group */ + id: number, + /** Type of the group */ + type: NotificationGroupType, + /** Identifier of a chat to which all notifications in the group belong */ + chat_id: number, + /** Total number of active notifications in the group */ + total_count: number, + /** The list of active notifications */ + notifications: Array, + } + + export type optionValueBoolean = { + /** Represents a boolean option */ + _: 'optionValueBoolean', + /** The value of the option */ + value: boolean, + } + + export type optionValueBoolean$Input = { + /** Represents a boolean option */ + readonly _: 'optionValueBoolean', + /** The value of the option */ + readonly value?: boolean, + } + + export type optionValueEmpty = { + /** Represents an unknown option or an option which has a default value */ + _: 'optionValueEmpty', + } + + export type optionValueEmpty$Input = { + /** Represents an unknown option or an option which has a default value */ + readonly _: 'optionValueEmpty', + } + + export type optionValueInteger = { + /** Represents an integer option */ + _: 'optionValueInteger', + /** The value of the option */ + value: string, + } + + export type optionValueInteger$Input = { + /** Represents an integer option */ + readonly _: 'optionValueInteger', + /** The value of the option */ + readonly value?: number | string, + } + + export type optionValueString = { + /** Represents a string option */ + _: 'optionValueString', + /** The value of the option */ + value: string, + } + + export type optionValueString$Input = { + /** Represents a string option */ + readonly _: 'optionValueString', + /** The value of the option */ + readonly value?: string, + } + + export type jsonObjectMember = { + /** Represents one member of a JSON object */ + _: 'jsonObjectMember', + /** Member's key */ + key: string, + /** Member's value */ + value: JsonValue, + } + + export type jsonObjectMember$Input = { + /** Represents one member of a JSON object */ + readonly _: 'jsonObjectMember', + /** Member's key */ + readonly key?: string, + /** Member's value */ + readonly value?: JsonValue$Input, + } + + export type jsonValueNull = { + /** Represents a null JSON value */ + _: 'jsonValueNull', + } + + export type jsonValueNull$Input = { + /** Represents a null JSON value */ + readonly _: 'jsonValueNull', + } + + export type jsonValueBoolean = { + /** Represents a boolean JSON value */ + _: 'jsonValueBoolean', + /** The value */ + value: boolean, + } + + export type jsonValueBoolean$Input = { + /** Represents a boolean JSON value */ + readonly _: 'jsonValueBoolean', + /** The value */ + readonly value?: boolean, + } + + export type jsonValueNumber = { + /** Represents a numeric JSON value */ + _: 'jsonValueNumber', + /** The value */ + value: number, + } + + export type jsonValueNumber$Input = { + /** Represents a numeric JSON value */ + readonly _: 'jsonValueNumber', + /** The value */ + readonly value?: number, + } + + export type jsonValueString = { + /** Represents a string JSON value */ + _: 'jsonValueString', + /** The value */ + value: string, + } + + export type jsonValueString$Input = { + /** Represents a string JSON value */ + readonly _: 'jsonValueString', + /** The value */ + readonly value?: string, + } + + export type jsonValueArray = { + /** Represents a JSON array */ + _: 'jsonValueArray', + /** The list of array elements */ + values: Array, + } + + export type jsonValueArray$Input = { + /** Represents a JSON array */ + readonly _: 'jsonValueArray', + /** The list of array elements */ + readonly values?: ReadonlyArray, + } + + export type jsonValueObject = { + /** Represents a JSON object */ + _: 'jsonValueObject', + /** The list of object members */ + members: Array, + } + + export type jsonValueObject$Input = { + /** Represents a JSON object */ + readonly _: 'jsonValueObject', + /** The list of object members */ + readonly members?: ReadonlyArray, + } + + export type userPrivacySettingRuleAllowAll = { + /** A rule to allow all users to do something */ + _: 'userPrivacySettingRuleAllowAll', + } + + export type userPrivacySettingRuleAllowAll$Input = { + /** A rule to allow all users to do something */ + readonly _: 'userPrivacySettingRuleAllowAll', + } + + export type userPrivacySettingRuleAllowContacts = { + /** A rule to allow all of a user's contacts to do something */ + _: 'userPrivacySettingRuleAllowContacts', + } + + export type userPrivacySettingRuleAllowContacts$Input = { + /** A rule to allow all of a user's contacts to do something */ + readonly _: 'userPrivacySettingRuleAllowContacts', + } + + export type userPrivacySettingRuleAllowUsers = { + /** A rule to allow certain specified users to do something */ + _: 'userPrivacySettingRuleAllowUsers', + /** The user identifiers, total number of users in all rules must not exceed 1000 */ + user_ids: Array, + } + + export type userPrivacySettingRuleAllowUsers$Input = { + /** A rule to allow certain specified users to do something */ + readonly _: 'userPrivacySettingRuleAllowUsers', + /** The user identifiers, total number of users in all rules must not exceed 1000 */ + readonly user_ids?: ReadonlyArray, + } + + export type userPrivacySettingRuleAllowChatMembers = { + /** + * A rule to allow all members of certain specified basic groups and supergroups + * to doing something + */ + _: 'userPrivacySettingRuleAllowChatMembers', + /** The chat identifiers, total number of chats in all rules must not exceed 20 */ + chat_ids: Array, + } + + export type userPrivacySettingRuleAllowChatMembers$Input = { + /** + * A rule to allow all members of certain specified basic groups and supergroups + * to doing something + */ + readonly _: 'userPrivacySettingRuleAllowChatMembers', + /** The chat identifiers, total number of chats in all rules must not exceed 20 */ + readonly chat_ids?: ReadonlyArray, + } + + export type userPrivacySettingRuleRestrictAll = { + /** A rule to restrict all users from doing something */ + _: 'userPrivacySettingRuleRestrictAll', + } + + export type userPrivacySettingRuleRestrictAll$Input = { + /** A rule to restrict all users from doing something */ + readonly _: 'userPrivacySettingRuleRestrictAll', + } + + export type userPrivacySettingRuleRestrictContacts = { + /** A rule to restrict all contacts of a user from doing something */ + _: 'userPrivacySettingRuleRestrictContacts', + } + + export type userPrivacySettingRuleRestrictContacts$Input = { + /** A rule to restrict all contacts of a user from doing something */ + readonly _: 'userPrivacySettingRuleRestrictContacts', + } + + export type userPrivacySettingRuleRestrictUsers = { + /** A rule to restrict all specified users from doing something */ + _: 'userPrivacySettingRuleRestrictUsers', + /** The user identifiers, total number of users in all rules must not exceed 1000 */ + user_ids: Array, + } + + export type userPrivacySettingRuleRestrictUsers$Input = { + /** A rule to restrict all specified users from doing something */ + readonly _: 'userPrivacySettingRuleRestrictUsers', + /** The user identifiers, total number of users in all rules must not exceed 1000 */ + readonly user_ids?: ReadonlyArray, + } + + export type userPrivacySettingRuleRestrictChatMembers = { + /** + * A rule to restrict all members of specified basic groups and supergroups from + * doing something + */ + _: 'userPrivacySettingRuleRestrictChatMembers', + /** The chat identifiers, total number of chats in all rules must not exceed 20 */ + chat_ids: Array, + } + + export type userPrivacySettingRuleRestrictChatMembers$Input = { + /** + * A rule to restrict all members of specified basic groups and supergroups from + * doing something + */ + readonly _: 'userPrivacySettingRuleRestrictChatMembers', + /** The chat identifiers, total number of chats in all rules must not exceed 20 */ + readonly chat_ids?: ReadonlyArray, + } + + export type userPrivacySettingRules = { + /** + * A list of privacy rules. Rules are matched in the specified order. The first + * matched rule defines the privacy setting for a given user. If no rule matches, + * the action is not allowed + */ + _: 'userPrivacySettingRules', + /** A list of rules */ + rules: Array, + } + + export type userPrivacySettingRules$Input = { + /** + * A list of privacy rules. Rules are matched in the specified order. The first + * matched rule defines the privacy setting for a given user. If no rule matches, + * the action is not allowed + */ + readonly _: 'userPrivacySettingRules', + /** A list of rules */ + readonly rules?: ReadonlyArray, + } + + export type userPrivacySettingShowStatus = { + /** A privacy setting for managing whether the user's online status is visible */ + _: 'userPrivacySettingShowStatus', + } + + export type userPrivacySettingShowStatus$Input = { + /** A privacy setting for managing whether the user's online status is visible */ + readonly _: 'userPrivacySettingShowStatus', + } + + export type userPrivacySettingShowProfilePhoto = { + /** A privacy setting for managing whether the user's profile photo is visible */ + _: 'userPrivacySettingShowProfilePhoto', + } + + export type userPrivacySettingShowProfilePhoto$Input = { + /** A privacy setting for managing whether the user's profile photo is visible */ + readonly _: 'userPrivacySettingShowProfilePhoto', + } + + export type userPrivacySettingShowLinkInForwardedMessages = { + /** + * A privacy setting for managing whether a link to the user's account is included + * in forwarded messages + */ + _: 'userPrivacySettingShowLinkInForwardedMessages', + } + + export type userPrivacySettingShowLinkInForwardedMessages$Input = { + /** + * A privacy setting for managing whether a link to the user's account is included + * in forwarded messages + */ + readonly _: 'userPrivacySettingShowLinkInForwardedMessages', + } + + export type userPrivacySettingShowPhoneNumber = { + /** A privacy setting for managing whether the user's phone number is visible */ + _: 'userPrivacySettingShowPhoneNumber', + } + + export type userPrivacySettingShowPhoneNumber$Input = { + /** A privacy setting for managing whether the user's phone number is visible */ + readonly _: 'userPrivacySettingShowPhoneNumber', + } + + export type userPrivacySettingAllowChatInvites = { + /** A privacy setting for managing whether the user can be invited to chats */ + _: 'userPrivacySettingAllowChatInvites', + } + + export type userPrivacySettingAllowChatInvites$Input = { + /** A privacy setting for managing whether the user can be invited to chats */ + readonly _: 'userPrivacySettingAllowChatInvites', + } + + export type userPrivacySettingAllowCalls = { + /** A privacy setting for managing whether the user can be called */ + _: 'userPrivacySettingAllowCalls', + } + + export type userPrivacySettingAllowCalls$Input = { + /** A privacy setting for managing whether the user can be called */ + readonly _: 'userPrivacySettingAllowCalls', + } + + export type userPrivacySettingAllowPeerToPeerCalls = { + /** + * A privacy setting for managing whether peer-to-peer connections can be used + * for calls + */ + _: 'userPrivacySettingAllowPeerToPeerCalls', + } + + export type userPrivacySettingAllowPeerToPeerCalls$Input = { + /** + * A privacy setting for managing whether peer-to-peer connections can be used + * for calls + */ + readonly _: 'userPrivacySettingAllowPeerToPeerCalls', + } + + export type userPrivacySettingAllowFindingByPhoneNumber = { + /** + * A privacy setting for managing whether the user can be found by their phone + * number. Checked only if the phone number is not known to the other user. Can + * be set only to "Allow contacts" or "Allow all" + */ + _: 'userPrivacySettingAllowFindingByPhoneNumber', + } + + export type userPrivacySettingAllowFindingByPhoneNumber$Input = { + /** + * A privacy setting for managing whether the user can be found by their phone + * number. Checked only if the phone number is not known to the other user. Can + * be set only to "Allow contacts" or "Allow all" + */ + readonly _: 'userPrivacySettingAllowFindingByPhoneNumber', + } + + export type accountTtl = { + /** + * Contains information about the period of inactivity after which the current + * user's account will automatically be deleted + */ + _: 'accountTtl', + /** + * Number of days of inactivity before the account will be flagged for deletion; + * 30-366 days + */ + days: number, + } + + export type accountTtl$Input = { + /** + * Contains information about the period of inactivity after which the current + * user's account will automatically be deleted + */ + readonly _: 'accountTtl', + /** + * Number of days of inactivity before the account will be flagged for deletion; + * 30-366 days + */ + readonly days?: number, + } + + export type session = { + /** + * Contains information about one session in a Telegram application used by the + * current user. Sessions must be shown to the user in the returned order + */ + _: 'session', + /** Session identifier */ + id: string, + /** True, if this session is the current session */ + is_current: boolean, + /** True, if a password is needed to complete authorization of the session */ + is_password_pending: boolean, + /** True, if incoming secret chats can be accepted by the session */ + can_accept_secret_chats: boolean, + /** True, if incoming calls can be accepted by the session */ + can_accept_calls: boolean, + /** Telegram API identifier, as provided by the application */ + api_id: number, + /** Name of the application, as provided by the application */ + application_name: string, + /** The version of the application, as provided by the application */ + application_version: string, + /** + * True, if the application is an official application or uses the api_id of an + * official application + */ + is_official_application: boolean, + /** + * Model of the device the application has been run or is running on, as provided + * by the application + */ + device_model: string, + /** + * Operating system the application has been run or is running on, as provided + * by the application + */ + platform: string, + /** + * Version of the operating system the application has been run or is running on, + * as provided by the application + */ + system_version: string, + /** Point in time (Unix timestamp) when the user has logged in */ + log_in_date: number, + /** Point in time (Unix timestamp) when the session was last used */ + last_active_date: number, + /** IP address from which the session was created, in human-readable format */ + ip: string, + /** + * A two-letter country code for the country from which the session was created, + * based on the IP address + */ + country: string, + /** Region code from which the session was created, based on the IP address */ + region: string, + } + + export type sessions = { + /** Contains a list of sessions */ + _: 'sessions', + /** List of sessions */ + sessions: Array, + /** + * Number of days of inactivity before sessions will automatically be terminated; + * 1-366 days + */ + inactive_session_ttl_days: number, + } + + export type connectedWebsite = { + /** Contains information about one website the current user is logged in with Telegram */ + _: 'connectedWebsite', + /** Website identifier */ + id: string, + /** The domain name of the website */ + domain_name: string, + /** User identifier of a bot linked with the website */ + bot_user_id: number, + /** The version of a browser used to log in */ + browser: string, + /** Operating system the browser is running on */ + platform: string, + /** Point in time (Unix timestamp) when the user was logged in */ + log_in_date: number, + /** Point in time (Unix timestamp) when obtained authorization was last used */ + last_active_date: number, + /** IP address from which the user was logged in, in human-readable format */ + ip: string, + /** + * Human-readable description of a country and a region, from which the user was + * logged in, based on the IP address + */ + location: string, + } + + export type connectedWebsites = { + /** Contains a list of websites the current user is logged in with Telegram */ + _: 'connectedWebsites', + /** List of connected websites */ + websites: Array, + } + + export type chatReportReasonSpam$Input = { + /** The chat contains spam messages */ + readonly _: 'chatReportReasonSpam', + } + + export type chatReportReasonViolence$Input = { + /** The chat promotes violence */ + readonly _: 'chatReportReasonViolence', + } + + export type chatReportReasonPornography$Input = { + /** The chat contains pornographic messages */ + readonly _: 'chatReportReasonPornography', + } + + export type chatReportReasonChildAbuse$Input = { + /** The chat has child abuse related content */ + readonly _: 'chatReportReasonChildAbuse', + } + + export type chatReportReasonCopyright$Input = { + /** The chat contains copyrighted content */ + readonly _: 'chatReportReasonCopyright', + } + + export type chatReportReasonUnrelatedLocation$Input = { + /** The location-based chat is unrelated to its stated location */ + readonly _: 'chatReportReasonUnrelatedLocation', + } + + export type chatReportReasonFake$Input = { + /** The chat represents a fake account */ + readonly _: 'chatReportReasonFake', + } + + export type chatReportReasonCustom$Input = { + /** A custom reason provided by the user */ + readonly _: 'chatReportReasonCustom', + } + + export type internalLinkTypeActiveSessions = { + /** + * The link is a link to the active sessions section of the app. Use getActiveSessions + * to handle the link + */ + _: 'internalLinkTypeActiveSessions', + } + + export type internalLinkTypeAuthenticationCode = { + /** + * The link contains an authentication code. Call checkAuthenticationCode with + * the code if the current authorization state is authorizationStateWaitCode + */ + _: 'internalLinkTypeAuthenticationCode', + /** The authentication code */ + code: string, + } + + export type internalLinkTypeBackground = { + /** + * The link is a link to a background. Call searchBackground with the given background + * name to process the link + */ + _: 'internalLinkTypeBackground', + /** Name of the background */ + background_name: string, + } + + export type internalLinkTypeBotStart = { + /** + * The link is a link to a chat with a Telegram bot. Call searchPublicChat with + * the given bot username, check that the user is a bot, show START button in the + * chat with the bot, and then call sendBotStartMessage with the given start parameter + * after the button is pressed + */ + _: 'internalLinkTypeBotStart', + /** Username of the bot */ + bot_username: string, + /** The parameter to be passed to sendBotStartMessage */ + start_parameter: string, + } + + export type internalLinkTypeBotStartInGroup = { + /** + * The link is a link to a Telegram bot, which is supposed to be added to a group + * chat. Call searchPublicChat with the given bot username, check that the user + * is a bot and can be added to groups, ask the current user to select a group + * to add the bot to, and then call sendBotStartMessage with the given start parameter + * and the chosen group chat. Bots can be added to a public group only by administrators + * of the group + */ + _: 'internalLinkTypeBotStartInGroup', + /** Username of the bot */ + bot_username: string, + /** The parameter to be passed to sendBotStartMessage */ + start_parameter: string, + } + + export type internalLinkTypeChangePhoneNumber = { + /** The link is a link to the change phone number section of the app */ + _: 'internalLinkTypeChangePhoneNumber', + } + + export type internalLinkTypeChatInvite = { + /** + * The link is a chat invite link. Call checkChatInviteLink with the given invite + * link to process the link + */ + _: 'internalLinkTypeChatInvite', + /** Internal representation of the invite link */ + invite_link: string, + } + + export type internalLinkTypeFilterSettings = { + /** The link is a link to the filter settings section of the app */ + _: 'internalLinkTypeFilterSettings', + } + + export type internalLinkTypeGame = { + /** + * The link is a link to a game. Call searchPublicChat with the given bot username, + * check that the user is a bot, ask the current user to select a chat to send + * the game, and then call sendMessage with inputMessageGame + */ + _: 'internalLinkTypeGame', + /** Username of the bot that owns the game */ + bot_username: string, + /** Short name of the game */ + game_short_name: string, + } + + export type internalLinkTypeLanguagePack = { + /** + * The link is a link to a language pack. Call getLanguagePackInfo with the given + * language pack identifier to process the link + */ + _: 'internalLinkTypeLanguagePack', + /** Language pack identifier */ + language_pack_id: string, + } + + export type internalLinkTypeMessage = { + /** + * The link is a link to a Telegram message. Call getMessageLinkInfo with the given + * URL to process the link + */ + _: 'internalLinkTypeMessage', + /** URL to be passed to getMessageLinkInfo */ + url: string, + } + + export type internalLinkTypeMessageDraft = { + /** + * The link contains a message draft text. A share screen needs to be shown to + * the user, then the chosen chat must be opened and the text is added to the input + * field + */ + _: 'internalLinkTypeMessageDraft', + /** Message draft text */ + text: formattedText, + /** + * True, if the first line of the text contains a link. If true, the input field + * needs to be focused and the text after the link must be selected + */ + contains_link: boolean, + } + + export type internalLinkTypePassportDataRequest = { + /** + * The link contains a request of Telegram passport data. Call getPassportAuthorizationForm + * with the given parameters to process the link if the link was received from + * outside of the app, otherwise ignore it + */ + _: 'internalLinkTypePassportDataRequest', + /** User identifier of the service's bot */ + bot_user_id: number, + /** Telegram Passport element types requested by the service */ + scope: string, + /** Service's public key */ + public_key: string, + /** Unique request identifier provided by the service */ + nonce: string, + /** + * An HTTP URL to open once the request is finished or canceled with the parameter + * tg_passport=success or tg_passport=cancel respectively. If empty, then the link + * tgbot{bot_user_id}://passport/success or tgbot{bot_user_id}://passport/cancel + * needs to be opened instead + */ + callback_url: string, + } + + export type internalLinkTypePhoneNumberConfirmation = { + /** + * The link can be used to confirm ownership of a phone number to prevent account + * deletion. Call sendPhoneNumberConfirmationCode with the given hash and phone + * number to process the link + */ + _: 'internalLinkTypePhoneNumberConfirmation', + /** Hash value from the link */ + hash: string, + /** Phone number value from the link */ + phone_number: string, + } + + export type internalLinkTypeProxy = { + /** + * The link is a link to a proxy. Call addProxy with the given parameters to process + * the link and add the proxy + */ + _: 'internalLinkTypeProxy', + /** Proxy server IP address */ + server: string, + /** Proxy server port */ + port: number, + /** Type of the proxy */ + type: ProxyType, + } + + export type internalLinkTypePublicChat = { + /** + * The link is a link to a chat by its username. Call searchPublicChat with the + * given chat username to process the link + */ + _: 'internalLinkTypePublicChat', + /** Username of the chat */ + chat_username: string, + } + + export type internalLinkTypeQrCodeAuthentication = { + /** + * The link can be used to login the current user on another device, but it must + * be scanned from QR-code using in-app camera. An alert similar to "This code + * can be used to allow someone to log in to your Telegram account. To confirm + * Telegram login, please go to Settings > Devices > Scan QR and scan the code" + * needs to be shown + */ + _: 'internalLinkTypeQrCodeAuthentication', + } + + export type internalLinkTypeSettings = { + /** The link is a link to app settings */ + _: 'internalLinkTypeSettings', + } + + export type internalLinkTypeStickerSet = { + /** + * The link is a link to a sticker set. Call searchStickerSet with the given sticker + * set name to process the link and show the sticker set + */ + _: 'internalLinkTypeStickerSet', + /** Name of the sticker set */ + sticker_set_name: string, + } + + export type internalLinkTypeTheme = { + /** The link is a link to a theme. TDLib has no theme support yet */ + _: 'internalLinkTypeTheme', + /** Name of the theme */ + theme_name: string, + } + + export type internalLinkTypeThemeSettings = { + /** The link is a link to the theme settings section of the app */ + _: 'internalLinkTypeThemeSettings', + } + + export type internalLinkTypeUnknownDeepLink = { + /** The link is an unknown tg: link. Call getDeepLinkInfo to process the link */ + _: 'internalLinkTypeUnknownDeepLink', + /** Link to be passed to getDeepLinkInfo */ + link: string, + } + + export type internalLinkTypeUnsupportedProxy = { + /** The link is a link to an unsupported proxy. An alert can be shown to the user */ + _: 'internalLinkTypeUnsupportedProxy', + } + + export type internalLinkTypeVideoChat = { + /** + * The link is a link to a video chat. Call searchPublicChat with the given chat + * username, and then joinGoupCall with the given invite hash to process the link + */ + _: 'internalLinkTypeVideoChat', + /** Username of the chat with the video chat */ + chat_username: string, + /** + * If non-empty, invite hash to be used to join the video chat without being muted + * by administrators + */ + invite_hash: string, + /** + * True, if the video chat is expected to be a live stream in a channel or a broadcast + * group + */ + is_live_stream: boolean, + } + + export type messageLink = { + /** Contains an HTTPS link to a message in a supergroup or channel */ + _: 'messageLink', + /** Message link */ + link: string, + /** True, if the link will work for non-members of the chat */ + is_public: boolean, + } + + export type messageLinkInfo = { + /** Contains information about a link to a message in a chat */ + _: 'messageLinkInfo', + /** True, if the link is a public link for a message in a chat */ + is_public: boolean, + /** If found, identifier of the chat to which the message belongs, 0 otherwise */ + chat_id: number, + /** If found, the linked message; may be null */ + message?: message, + /** + * Timestamp from which the video/audio/video note/voice note playing must start, + * in seconds; 0 if not specified. The media can be in the message content or in + * its web page preview + */ + media_timestamp: number, + /** True, if the whole media album to which the message belongs is linked */ + for_album: boolean, + /** True, if the message is linked as a channel post comment or from a message thread */ + for_comment: boolean, + } + + export type filePart = { + /** Contains a part of a file */ + _: 'filePart', + /** File bytes */ + data: string /* base64 */, + } + + export type fileTypeNone = { + /** The data is not a file */ + _: 'fileTypeNone', + } + + export type fileTypeNone$Input = { + /** The data is not a file */ + readonly _: 'fileTypeNone', + } + + export type fileTypeAnimation = { + /** The file is an animation */ + _: 'fileTypeAnimation', + } + + export type fileTypeAnimation$Input = { + /** The file is an animation */ + readonly _: 'fileTypeAnimation', + } + + export type fileTypeAudio = { + /** The file is an audio file */ + _: 'fileTypeAudio', + } + + export type fileTypeAudio$Input = { + /** The file is an audio file */ + readonly _: 'fileTypeAudio', + } + + export type fileTypeDocument = { + /** The file is a document */ + _: 'fileTypeDocument', + } + + export type fileTypeDocument$Input = { + /** The file is a document */ + readonly _: 'fileTypeDocument', + } + + export type fileTypePhoto = { + /** The file is a photo */ + _: 'fileTypePhoto', + } + + export type fileTypePhoto$Input = { + /** The file is a photo */ + readonly _: 'fileTypePhoto', + } + + export type fileTypeProfilePhoto = { + /** The file is a profile photo */ + _: 'fileTypeProfilePhoto', + } + + export type fileTypeProfilePhoto$Input = { + /** The file is a profile photo */ + readonly _: 'fileTypeProfilePhoto', + } + + export type fileTypeSecret = { + /** The file was sent to a secret chat (the file type is not known to the server) */ + _: 'fileTypeSecret', + } + + export type fileTypeSecret$Input = { + /** The file was sent to a secret chat (the file type is not known to the server) */ + readonly _: 'fileTypeSecret', + } + + export type fileTypeSecretThumbnail = { + /** The file is a thumbnail of a file from a secret chat */ + _: 'fileTypeSecretThumbnail', + } + + export type fileTypeSecretThumbnail$Input = { + /** The file is a thumbnail of a file from a secret chat */ + readonly _: 'fileTypeSecretThumbnail', + } + + export type fileTypeSecure = { + /** The file is a file from Secure storage used for storing Telegram Passport files */ + _: 'fileTypeSecure', + } + + export type fileTypeSecure$Input = { + /** The file is a file from Secure storage used for storing Telegram Passport files */ + readonly _: 'fileTypeSecure', + } + + export type fileTypeSticker = { + /** The file is a sticker */ + _: 'fileTypeSticker', + } + + export type fileTypeSticker$Input = { + /** The file is a sticker */ + readonly _: 'fileTypeSticker', + } + + export type fileTypeThumbnail = { + /** The file is a thumbnail of another file */ + _: 'fileTypeThumbnail', + } + + export type fileTypeThumbnail$Input = { + /** The file is a thumbnail of another file */ + readonly _: 'fileTypeThumbnail', + } + + export type fileTypeUnknown = { + /** The file type is not yet known */ + _: 'fileTypeUnknown', + } + + export type fileTypeUnknown$Input = { + /** The file type is not yet known */ + readonly _: 'fileTypeUnknown', + } + + export type fileTypeVideo = { + /** The file is a video */ + _: 'fileTypeVideo', + } + + export type fileTypeVideo$Input = { + /** The file is a video */ + readonly _: 'fileTypeVideo', + } + + export type fileTypeVideoNote = { + /** The file is a video note */ + _: 'fileTypeVideoNote', + } + + export type fileTypeVideoNote$Input = { + /** The file is a video note */ + readonly _: 'fileTypeVideoNote', + } + + export type fileTypeVoiceNote = { + /** The file is a voice note */ + _: 'fileTypeVoiceNote', + } + + export type fileTypeVoiceNote$Input = { + /** The file is a voice note */ + readonly _: 'fileTypeVoiceNote', + } + + export type fileTypeWallpaper = { + /** The file is a wallpaper or a background pattern */ + _: 'fileTypeWallpaper', + } + + export type fileTypeWallpaper$Input = { + /** The file is a wallpaper or a background pattern */ + readonly _: 'fileTypeWallpaper', + } + + export type storageStatisticsByFileType = { + /** Contains the storage usage statistics for a specific file type */ + _: 'storageStatisticsByFileType', + /** File type */ + file_type: FileType, + /** Total size of the files, in bytes */ + size: number, + /** Total number of files */ + count: number, + } + + export type storageStatisticsByChat = { + /** Contains the storage usage statistics for a specific chat */ + _: 'storageStatisticsByChat', + /** Chat identifier; 0 if none */ + chat_id: number, + /** Total size of the files in the chat, in bytes */ + size: number, + /** Total number of files in the chat */ + count: number, + /** Statistics split by file types */ + by_file_type: Array, + } + + export type storageStatistics = { + /** Contains the exact storage usage statistics split by chats and file type */ + _: 'storageStatistics', + /** Total size of files, in bytes */ + size: number, + /** Total number of files */ + count: number, + /** Statistics split by chats */ + by_chat: Array, + } + + export type storageStatisticsFast = { + /** + * Contains approximate storage usage statistics, excluding files of unknown file + * type + */ + _: 'storageStatisticsFast', + /** Approximate total size of files, in bytes */ + files_size: number, + /** Approximate number of files */ + file_count: number, + /** Size of the database */ + database_size: number, + /** Size of the language pack database */ + language_pack_database_size: number, + /** Size of the TDLib internal log */ + log_size: number, + } + + export type databaseStatistics = { + /** Contains database statistics */ + _: 'databaseStatistics', + /** Database statistics in an unspecified human-readable format */ + statistics: string, + } + + export type networkTypeNone = { + /** The network is not available */ + _: 'networkTypeNone', + } + + export type networkTypeNone$Input = { + /** The network is not available */ + readonly _: 'networkTypeNone', + } + + export type networkTypeMobile = { + /** A mobile network */ + _: 'networkTypeMobile', + } + + export type networkTypeMobile$Input = { + /** A mobile network */ + readonly _: 'networkTypeMobile', + } + + export type networkTypeMobileRoaming = { + /** A mobile roaming network */ + _: 'networkTypeMobileRoaming', + } + + export type networkTypeMobileRoaming$Input = { + /** A mobile roaming network */ + readonly _: 'networkTypeMobileRoaming', + } + + export type networkTypeWiFi = { + /** A Wi-Fi network */ + _: 'networkTypeWiFi', + } + + export type networkTypeWiFi$Input = { + /** A Wi-Fi network */ + readonly _: 'networkTypeWiFi', + } + + export type networkTypeOther = { + /** A different network type (e.g., Ethernet network) */ + _: 'networkTypeOther', + } + + export type networkTypeOther$Input = { + /** A different network type (e.g., Ethernet network) */ + readonly _: 'networkTypeOther', + } + + export type networkStatisticsEntryFile = { + /** + * Contains information about the total amount of data that was used to send and + * receive files + */ + _: 'networkStatisticsEntryFile', + /** + * Type of the file the data is part of; pass null if the data isn't related to + * files + */ + file_type: FileType, + /** + * Type of the network the data was sent through. Call setNetworkType to maintain + * the actual network type + */ + network_type: NetworkType, + /** Total number of bytes sent */ + sent_bytes: number, + /** Total number of bytes received */ + received_bytes: number, + } + + export type networkStatisticsEntryFile$Input = { + /** + * Contains information about the total amount of data that was used to send and + * receive files + */ + readonly _: 'networkStatisticsEntryFile', + /** + * Type of the file the data is part of; pass null if the data isn't related to + * files + */ + readonly file_type?: FileType$Input, + /** + * Type of the network the data was sent through. Call setNetworkType to maintain + * the actual network type + */ + readonly network_type?: NetworkType$Input, + /** Total number of bytes sent */ + readonly sent_bytes?: number, + /** Total number of bytes received */ + readonly received_bytes?: number, + } + + export type networkStatisticsEntryCall = { + /** Contains information about the total amount of data that was used for calls */ + _: 'networkStatisticsEntryCall', + /** + * Type of the network the data was sent through. Call setNetworkType to maintain + * the actual network type + */ + network_type: NetworkType, + /** Total number of bytes sent */ + sent_bytes: number, + /** Total number of bytes received */ + received_bytes: number, + /** Total call duration, in seconds */ + duration: number, + } + + export type networkStatisticsEntryCall$Input = { + /** Contains information about the total amount of data that was used for calls */ + readonly _: 'networkStatisticsEntryCall', + /** + * Type of the network the data was sent through. Call setNetworkType to maintain + * the actual network type + */ + readonly network_type?: NetworkType$Input, + /** Total number of bytes sent */ + readonly sent_bytes?: number, + /** Total number of bytes received */ + readonly received_bytes?: number, + /** Total call duration, in seconds */ + readonly duration?: number, + } + + export type networkStatistics = { + /** A full list of available network statistic entries */ + _: 'networkStatistics', + /** Point in time (Unix timestamp) from which the statistics are collected */ + since_date: number, + /** Network statistics entries */ + entries: Array, + } + + export type autoDownloadSettings = { + /** Contains auto-download settings */ + _: 'autoDownloadSettings', + /** True, if the auto-download is enabled */ + is_auto_download_enabled: boolean, + /** The maximum size of a photo file to be auto-downloaded, in bytes */ + max_photo_file_size: number, + /** The maximum size of a video file to be auto-downloaded, in bytes */ + max_video_file_size: number, + /** The maximum size of other file types to be auto-downloaded, in bytes */ + max_other_file_size: number, + /** The maximum suggested bitrate for uploaded videos, in kbit/s */ + video_upload_bitrate: number, + /** True, if the beginning of video files needs to be preloaded for instant playback */ + preload_large_videos: boolean, + /** + * True, if the next audio track needs to be preloaded while the user is listening + * to an audio file + */ + preload_next_audio: boolean, + /** True, if "use less data for calls" option needs to be enabled */ + use_less_data_for_calls: boolean, + } + + export type autoDownloadSettings$Input = { + /** Contains auto-download settings */ + readonly _: 'autoDownloadSettings', + /** True, if the auto-download is enabled */ + readonly is_auto_download_enabled?: boolean, + /** The maximum size of a photo file to be auto-downloaded, in bytes */ + readonly max_photo_file_size?: number, + /** The maximum size of a video file to be auto-downloaded, in bytes */ + readonly max_video_file_size?: number, + /** The maximum size of other file types to be auto-downloaded, in bytes */ + readonly max_other_file_size?: number, + /** The maximum suggested bitrate for uploaded videos, in kbit/s */ + readonly video_upload_bitrate?: number, + /** True, if the beginning of video files needs to be preloaded for instant playback */ + readonly preload_large_videos?: boolean, + /** + * True, if the next audio track needs to be preloaded while the user is listening + * to an audio file + */ + readonly preload_next_audio?: boolean, + /** True, if "use less data for calls" option needs to be enabled */ + readonly use_less_data_for_calls?: boolean, + } + + export type autoDownloadSettingsPresets = { + /** Contains auto-download settings presets for the current user */ + _: 'autoDownloadSettingsPresets', + /** Preset with lowest settings; supposed to be used by default when roaming */ + low: autoDownloadSettings, + /** + * Preset with medium settings; supposed to be used by default when using mobile + * data + */ + medium: autoDownloadSettings, + /** + * Preset with highest settings; supposed to be used by default when connected + * on Wi-Fi + */ + high: autoDownloadSettings, + } + + export type connectionStateWaitingForNetwork = { + /** + * Currently waiting for the network to become available. Use setNetworkType to + * change the available network type + */ + _: 'connectionStateWaitingForNetwork', + } + + export type connectionStateConnectingToProxy = { + /** Currently establishing a connection with a proxy server */ + _: 'connectionStateConnectingToProxy', + } + + export type connectionStateConnecting = { + /** Currently establishing a connection to the Telegram servers */ + _: 'connectionStateConnecting', + } + + export type connectionStateUpdating = { + /** Downloading data received while the application was offline */ + _: 'connectionStateUpdating', + } + + export type connectionStateReady = { + /** There is a working connection to the Telegram servers */ + _: 'connectionStateReady', + } + + export type topChatCategoryUsers$Input = { + /** A category containing frequently used private chats with non-bot users */ + readonly _: 'topChatCategoryUsers', + } + + export type topChatCategoryBots$Input = { + /** A category containing frequently used private chats with bot users */ + readonly _: 'topChatCategoryBots', + } + + export type topChatCategoryGroups$Input = { + /** A category containing frequently used basic groups and supergroups */ + readonly _: 'topChatCategoryGroups', + } + + export type topChatCategoryChannels$Input = { + /** A category containing frequently used channels */ + readonly _: 'topChatCategoryChannels', + } + + export type topChatCategoryInlineBots$Input = { + /** + * A category containing frequently used chats with inline bots sorted by their + * usage in inline mode + */ + readonly _: 'topChatCategoryInlineBots', + } + + export type topChatCategoryCalls$Input = { + /** A category containing frequently used chats used for calls */ + readonly _: 'topChatCategoryCalls', + } + + export type topChatCategoryForwardChats$Input = { + /** A category containing frequently used chats used to forward messages */ + readonly _: 'topChatCategoryForwardChats', + } + + export type tMeUrlTypeUser = { + /** A URL linking to a user */ + _: 'tMeUrlTypeUser', + /** Identifier of the user */ + user_id: number, + } + + export type tMeUrlTypeSupergroup = { + /** A URL linking to a public supergroup or channel */ + _: 'tMeUrlTypeSupergroup', + /** Identifier of the supergroup or channel */ + supergroup_id: number, + } + + export type tMeUrlTypeChatInvite = { + /** A chat invite link */ + _: 'tMeUrlTypeChatInvite', + /** Chat invite link info */ + info: chatInviteLinkInfo, + } + + export type tMeUrlTypeStickerSet = { + /** A URL linking to a sticker set */ + _: 'tMeUrlTypeStickerSet', + /** Identifier of the sticker set */ + sticker_set_id: string, + } + + export type tMeUrl = { + /** Represents a URL linking to an internal Telegram entity */ + _: 'tMeUrl', + /** URL */ + url: string, + /** Type of the URL */ + type: TMeUrlType, + } + + export type tMeUrls = { + /** Contains a list of t.me URLs */ + _: 'tMeUrls', + /** List of URLs */ + urls: Array, + } + + export type suggestedActionEnableArchiveAndMuteNewChats = { + /** + * Suggests the user to enable "archive_and_mute_new_chats_from_unknown_users" + * option + */ + _: 'suggestedActionEnableArchiveAndMuteNewChats', + } + + export type suggestedActionEnableArchiveAndMuteNewChats$Input = { + /** + * Suggests the user to enable "archive_and_mute_new_chats_from_unknown_users" + * option + */ + readonly _: 'suggestedActionEnableArchiveAndMuteNewChats', + } + + export type suggestedActionCheckPassword = { + /** + * Suggests the user to check whether they still remember their 2-step verification + * password + */ + _: 'suggestedActionCheckPassword', + } + + export type suggestedActionCheckPassword$Input = { + /** + * Suggests the user to check whether they still remember their 2-step verification + * password + */ + readonly _: 'suggestedActionCheckPassword', + } + + export type suggestedActionCheckPhoneNumber = { + /** + * Suggests the user to check whether authorization phone number is correct and + * change the phone number if it is inaccessible + */ + _: 'suggestedActionCheckPhoneNumber', + } + + export type suggestedActionCheckPhoneNumber$Input = { + /** + * Suggests the user to check whether authorization phone number is correct and + * change the phone number if it is inaccessible + */ + readonly _: 'suggestedActionCheckPhoneNumber', + } + + export type suggestedActionViewChecksHint = { + /** + * Suggests the user to view a hint about the meaning of one and two check marks + * on sent messages + */ + _: 'suggestedActionViewChecksHint', + } + + export type suggestedActionViewChecksHint$Input = { + /** + * Suggests the user to view a hint about the meaning of one and two check marks + * on sent messages + */ + readonly _: 'suggestedActionViewChecksHint', + } + + export type suggestedActionConvertToBroadcastGroup = { + /** Suggests the user to convert specified supergroup to a broadcast group */ + _: 'suggestedActionConvertToBroadcastGroup', + /** Supergroup identifier */ + supergroup_id: number, + } + + export type suggestedActionConvertToBroadcastGroup$Input = { + /** Suggests the user to convert specified supergroup to a broadcast group */ + readonly _: 'suggestedActionConvertToBroadcastGroup', + /** Supergroup identifier */ + readonly supergroup_id?: number, + } + + export type suggestedActionSetPassword = { + /** + * Suggests the user to set a 2-step verification password to be able to log in + * again + */ + _: 'suggestedActionSetPassword', + /** + * The number of days to pass between consecutive authorizations if the user declines + * to set password + */ + authorization_delay: number, + } + + export type suggestedActionSetPassword$Input = { + /** + * Suggests the user to set a 2-step verification password to be able to log in + * again + */ + readonly _: 'suggestedActionSetPassword', + /** + * The number of days to pass between consecutive authorizations if the user declines + * to set password + */ + readonly authorization_delay?: number, + } + + export type count = { + /** Contains a counter */ + _: 'count', + /** Count */ + count: number, + } + + export type text = { + /** Contains some text */ + _: 'text', + /** Text */ + text: string, + } + + export type seconds = { + /** Contains a value representing a number of seconds */ + _: 'seconds', + /** Number of seconds */ + seconds: number, + } + + export type deepLinkInfo = { + /** Contains information about a tg: deep link */ + _: 'deepLinkInfo', + /** Text to be shown to the user */ + text: formattedText, + /** True, if the user must be asked to update the application */ + need_update_application: boolean, + } + + export type textParseModeMarkdown$Input = { + /** The text uses Markdown-style formatting */ + readonly _: 'textParseModeMarkdown', + /** + * Version of the parser: 0 or 1 - Telegram Bot API "Markdown" parse mode, 2 - + * Telegram Bot API "MarkdownV2" parse mode + */ + readonly version?: number, + } + + export type textParseModeHTML$Input = { + /** + * The text uses HTML-style formatting. The same as Telegram Bot API "HTML" parse + * mode + */ + readonly _: 'textParseModeHTML', + } + + export type proxyTypeSocks5 = { + /** A SOCKS5 proxy server */ + _: 'proxyTypeSocks5', + /** Username for logging in; may be empty */ + username: string, + /** Password for logging in; may be empty */ + password: string, + } + + export type proxyTypeSocks5$Input = { + /** A SOCKS5 proxy server */ + readonly _: 'proxyTypeSocks5', + /** Username for logging in; may be empty */ + readonly username?: string, + /** Password for logging in; may be empty */ + readonly password?: string, + } + + export type proxyTypeHttp = { + /** A HTTP transparent proxy server */ + _: 'proxyTypeHttp', + /** Username for logging in; may be empty */ + username: string, + /** Password for logging in; may be empty */ + password: string, + /** + * Pass true if the proxy supports only HTTP requests and doesn't support transparent + * TCP connections via HTTP CONNECT method + */ + http_only: boolean, + } + + export type proxyTypeHttp$Input = { + /** A HTTP transparent proxy server */ + readonly _: 'proxyTypeHttp', + /** Username for logging in; may be empty */ + readonly username?: string, + /** Password for logging in; may be empty */ + readonly password?: string, + /** + * Pass true if the proxy supports only HTTP requests and doesn't support transparent + * TCP connections via HTTP CONNECT method + */ + readonly http_only?: boolean, + } + + export type proxyTypeMtproto = { + /** An MTProto proxy server */ + _: 'proxyTypeMtproto', + /** The proxy's secret in hexadecimal encoding */ + secret: string, + } + + export type proxyTypeMtproto$Input = { + /** An MTProto proxy server */ + readonly _: 'proxyTypeMtproto', + /** The proxy's secret in hexadecimal encoding */ + readonly secret?: string, + } + + export type proxy = { + /** Contains information about a proxy server */ + _: 'proxy', + /** Unique identifier of the proxy */ + id: number, + /** Proxy server IP address */ + server: string, + /** Proxy server port */ + port: number, + /** Point in time (Unix timestamp) when the proxy was last used; 0 if never */ + last_used_date: number, + /** True, if the proxy is enabled now */ + is_enabled: boolean, + /** Type of the proxy */ + type: ProxyType, + } + + export type proxies = { + /** Represents a list of proxy servers */ + _: 'proxies', + /** List of proxy servers */ + proxies: Array, + } + + export type inputStickerStatic$Input = { + /** A static sticker in PNG format, which will be converted to WEBP server-side */ + readonly _: 'inputStickerStatic', + /** + * PNG image with the sticker; must be up to 512 KB in size and fit in a 512x512 + * square + */ + readonly sticker?: InputFile$Input, + /** Emojis corresponding to the sticker */ + readonly emojis?: string, + /** For masks, position where the mask is placed; pass null if unspecified */ + readonly mask_position?: maskPosition$Input, + } + + export type inputStickerAnimated$Input = { + /** An animated sticker in TGS format */ + readonly _: 'inputStickerAnimated', + /** + * File with the animated sticker. Only local or uploaded within a week files are + * supported. See https://core.telegram.org/animated_stickers#technical-requirements + * for technical requirements + */ + readonly sticker?: InputFile$Input, + /** Emojis corresponding to the sticker */ + readonly emojis?: string, + } + + export type dateRange = { + /** Represents a date range */ + _: 'dateRange', + /** Point in time (Unix timestamp) at which the date range begins */ + start_date: number, + /** Point in time (Unix timestamp) at which the date range ends */ + end_date: number, + } + + export type statisticalValue = { + /** A value with information about its recent changes */ + _: 'statisticalValue', + /** The current value */ + value: number, + /** The value for the previous day */ + previous_value: number, + /** The growth rate of the value, as a percentage */ + growth_rate_percentage: number, + } + + export type statisticalGraphData = { + /** A graph data */ + _: 'statisticalGraphData', + /** Graph data in JSON format */ + json_data: string, + /** If non-empty, a token which can be used to receive a zoomed in graph */ + zoom_token: string, + } + + export type statisticalGraphAsync = { + /** The graph data to be asynchronously loaded through getStatisticalGraph */ + _: 'statisticalGraphAsync', + /** The token to use for data loading */ + token: string, + } + + export type statisticalGraphError = { + /** An error message to be shown to the user instead of the graph */ + _: 'statisticalGraphError', + /** The error message */ + error_message: string, + } + + export type chatStatisticsMessageInteractionInfo = { + /** Contains statistics about interactions with a message */ + _: 'chatStatisticsMessageInteractionInfo', + /** Message identifier */ + message_id: number, + /** Number of times the message was viewed */ + view_count: number, + /** Number of times the message was forwarded */ + forward_count: number, + } + + export type chatStatisticsMessageSenderInfo = { + /** Contains statistics about messages sent by a user */ + _: 'chatStatisticsMessageSenderInfo', + /** User identifier */ + user_id: number, + /** Number of sent messages */ + sent_message_count: number, + /** Average number of characters in sent messages; 0 if unknown */ + average_character_count: number, + } + + export type chatStatisticsAdministratorActionsInfo = { + /** Contains statistics about administrator actions done by a user */ + _: 'chatStatisticsAdministratorActionsInfo', + /** Administrator user identifier */ + user_id: number, + /** Number of messages deleted by the administrator */ + deleted_message_count: number, + /** Number of users banned by the administrator */ + banned_user_count: number, + /** Number of users restricted by the administrator */ + restricted_user_count: number, + } + + export type chatStatisticsInviterInfo = { + /** Contains statistics about number of new members invited by a user */ + _: 'chatStatisticsInviterInfo', + /** User identifier */ + user_id: number, + /** Number of new members invited by the user */ + added_member_count: number, + } + + export type chatStatisticsSupergroup = { + /** A detailed statistics about a supergroup chat */ + _: 'chatStatisticsSupergroup', + /** A period to which the statistics applies */ + period: dateRange, + /** Number of members in the chat */ + member_count: statisticalValue, + /** Number of messages sent to the chat */ + message_count: statisticalValue, + /** Number of users who viewed messages in the chat */ + viewer_count: statisticalValue, + /** Number of users who sent messages to the chat */ + sender_count: statisticalValue, + /** A graph containing number of members in the chat */ + member_count_graph: StatisticalGraph, + /** A graph containing number of members joined and left the chat */ + join_graph: StatisticalGraph, + /** A graph containing number of new member joins per source */ + join_by_source_graph: StatisticalGraph, + /** A graph containing distribution of active users per language */ + language_graph: StatisticalGraph, + /** A graph containing distribution of sent messages by content type */ + message_content_graph: StatisticalGraph, + /** A graph containing number of different actions in the chat */ + action_graph: StatisticalGraph, + /** A graph containing distribution of message views per hour */ + day_graph: StatisticalGraph, + /** A graph containing distribution of message views per day of week */ + week_graph: StatisticalGraph, + /** List of users sent most messages in the last week */ + top_senders: Array, + /** List of most active administrators in the last week */ + top_administrators: Array, + /** List of most active inviters of new members in the last week */ + top_inviters: Array, + } + + export type chatStatisticsChannel = { + /** A detailed statistics about a channel chat */ + _: 'chatStatisticsChannel', + /** A period to which the statistics applies */ + period: dateRange, + /** Number of members in the chat */ + member_count: statisticalValue, + /** Mean number of times the recently sent messages was viewed */ + mean_view_count: statisticalValue, + /** Mean number of times the recently sent messages was shared */ + mean_share_count: statisticalValue, + /** A percentage of users with enabled notifications for the chat */ + enabled_notifications_percentage: number, + /** A graph containing number of members in the chat */ + member_count_graph: StatisticalGraph, + /** A graph containing number of members joined and left the chat */ + join_graph: StatisticalGraph, + /** A graph containing number of members muted and unmuted the chat */ + mute_graph: StatisticalGraph, + /** A graph containing number of message views in a given hour in the last two weeks */ + view_count_by_hour_graph: StatisticalGraph, + /** A graph containing number of message views per source */ + view_count_by_source_graph: StatisticalGraph, + /** A graph containing number of new member joins per source */ + join_by_source_graph: StatisticalGraph, + /** A graph containing number of users viewed chat messages per language */ + language_graph: StatisticalGraph, + /** A graph containing number of chat message views and shares */ + message_interaction_graph: StatisticalGraph, + /** A graph containing number of views of associated with the chat instant views */ + instant_view_interaction_graph: StatisticalGraph, + /** Detailed statistics about number of views and shares of recently sent messages */ + recent_message_interactions: Array, + } + + export type messageStatistics = { + /** A detailed statistics about a message */ + _: 'messageStatistics', + /** A graph containing number of message views and shares */ + message_interaction_graph: StatisticalGraph, + } + + export type point = { + /** A point on a Cartesian plane */ + _: 'point', + /** The point's first coordinate */ + x: number, + /** The point's second coordinate */ + y: number, + } + + export type vectorPathCommandLine = { + /** A straight line to a given point */ + _: 'vectorPathCommandLine', + /** The end point of the straight line */ + end_point: point, + } + + export type vectorPathCommandCubicBezierCurve = { + /** A cubic Bézier curve to a given point */ + _: 'vectorPathCommandCubicBezierCurve', + /** The start control point of the curve */ + start_control_point: point, + /** The end control point of the curve */ + end_control_point: point, + /** The end point of the curve */ + end_point: point, + } + + export type botCommandScopeDefault$Input = { + /** A scope covering all users */ + readonly _: 'botCommandScopeDefault', + } + + export type botCommandScopeAllPrivateChats$Input = { + /** A scope covering all private chats */ + readonly _: 'botCommandScopeAllPrivateChats', + } + + export type botCommandScopeAllGroupChats$Input = { + /** A scope covering all group and supergroup chats */ + readonly _: 'botCommandScopeAllGroupChats', + } + + export type botCommandScopeAllChatAdministrators$Input = { + /** A scope covering all group and supergroup chat administrators */ + readonly _: 'botCommandScopeAllChatAdministrators', + } + + export type botCommandScopeChat$Input = { + /** A scope covering all members of a chat */ + readonly _: 'botCommandScopeChat', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type botCommandScopeChatAdministrators$Input = { + /** A scope covering all administrators of a chat */ + readonly _: 'botCommandScopeChatAdministrators', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type botCommandScopeChatMember$Input = { + /** A scope covering a member of a chat */ + readonly _: 'botCommandScopeChatMember', + /** Chat identifier */ + readonly chat_id?: number, + /** User identifier */ + readonly user_id?: number, + } + + export type updateAuthorizationState = { + /** The user authorization state has changed */ + _: 'updateAuthorizationState', + /** New authorization state */ + authorization_state: AuthorizationState, + } + + export type updateNewMessage = { + /** A new message was received; can also be an outgoing message */ + _: 'updateNewMessage', + /** The new message */ + message: message, + } + + export type updateMessageSendAcknowledged = { + /** + * A request to send a message has reached the Telegram server. This doesn't mean + * that the message will be sent successfully or even that the send message request + * will be processed. This update will be sent only if the option "use_quick_ack" + * is set to true. This update may be sent multiple times for the same message + */ + _: 'updateMessageSendAcknowledged', + /** The chat identifier of the sent message */ + chat_id: number, + /** A temporary message identifier */ + message_id: number, + } + + export type updateMessageSendSucceeded = { + /** A message has been successfully sent */ + _: 'updateMessageSendSucceeded', + /** + * The sent message. Usually only the message identifier, date, and content are + * changed, but almost all other fields can also change + */ + message: message, + /** The previous temporary message identifier */ + old_message_id: number, + } + + export type updateMessageSendFailed = { + /** + * A message failed to send. Be aware that some messages being sent can be irrecoverably + * deleted, in which case updateDeleteMessages will be received instead of this + * update + */ + _: 'updateMessageSendFailed', + /** The failed to send message */ + message: message, + /** The previous temporary message identifier */ + old_message_id: number, + /** An error code */ + error_code: number, + /** Error message */ + error_message: string, + } + + export type updateMessageContent = { + /** The message content has changed */ + _: 'updateMessageContent', + /** Chat identifier */ + chat_id: number, + /** Message identifier */ + message_id: number, + /** New message content */ + new_content: MessageContent, + } + + export type updateMessageEdited = { + /** + * A message was edited. Changes in the message content will come in a separate + * updateMessageContent + */ + _: 'updateMessageEdited', + /** Chat identifier */ + chat_id: number, + /** Message identifier */ + message_id: number, + /** Point in time (Unix timestamp) when the message was edited */ + edit_date: number, + /** New message reply markup; may be null */ + reply_markup?: ReplyMarkup, + } + + export type updateMessageIsPinned = { + /** The message pinned state was changed */ + _: 'updateMessageIsPinned', + /** Chat identifier */ + chat_id: number, + /** The message identifier */ + message_id: number, + /** True, if the message is pinned */ + is_pinned: boolean, + } + + export type updateMessageInteractionInfo = { + /** The information about interactions with a message has changed */ + _: 'updateMessageInteractionInfo', + /** Chat identifier */ + chat_id: number, + /** Message identifier */ + message_id: number, + /** New information about interactions with the message; may be null */ + interaction_info?: messageInteractionInfo, + } + + export type updateMessageContentOpened = { + /** + * The message content was opened. Updates voice note messages to "listened", video + * note messages to "viewed" and starts the TTL timer for self-destructing messages + */ + _: 'updateMessageContentOpened', + /** Chat identifier */ + chat_id: number, + /** Message identifier */ + message_id: number, + } + + export type updateMessageMentionRead = { + /** A message with an unread mention was read */ + _: 'updateMessageMentionRead', + /** Chat identifier */ + chat_id: number, + /** Message identifier */ + message_id: number, + /** The new number of unread mention messages left in the chat */ + unread_mention_count: number, + } + + export type updateMessageLiveLocationViewed = { + /** + * A message with a live location was viewed. When the update is received, the + * application is supposed to update the live location + */ + _: 'updateMessageLiveLocationViewed', + /** Identifier of the chat with the live location message */ + chat_id: number, + /** Identifier of the message with live location */ + message_id: number, + } + + export type updateNewChat = { + /** + * A new chat has been loaded/created. This update is guaranteed to come before + * the chat identifier is returned to the application. The chat field changes will + * be reported through separate updates + */ + _: 'updateNewChat', + /** The chat */ + chat: chat, + } + + export type updateChatTitle = { + /** The title of a chat was changed */ + _: 'updateChatTitle', + /** Chat identifier */ + chat_id: number, + /** The new chat title */ + title: string, + } + + export type updateChatPhoto = { + /** A chat photo was changed */ + _: 'updateChatPhoto', + /** Chat identifier */ + chat_id: number, + /** The new chat photo; may be null */ + photo?: chatPhotoInfo, + } + + export type updateChatPermissions = { + /** Chat permissions was changed */ + _: 'updateChatPermissions', + /** Chat identifier */ + chat_id: number, + /** The new chat permissions */ + permissions: chatPermissions, + } + + export type updateChatLastMessage = { + /** + * The last message of a chat was changed. If last_message is null, then the last + * message in the chat became unknown. Some new unknown messages might be added + * to the chat in this case + */ + _: 'updateChatLastMessage', + /** Chat identifier */ + chat_id: number, + /** The new last message in the chat; may be null */ + last_message?: message, + /** The new chat positions in the chat lists */ + positions: Array, + } + + export type updateChatPosition = { + /** + * The position of a chat in a chat list has changed. Instead of this update updateChatLastMessage + * or updateChatDraftMessage might be sent + */ + _: 'updateChatPosition', + /** Chat identifier */ + chat_id: number, + /** + * New chat position. If new order is 0, then the chat needs to be removed from + * the list + */ + position: chatPosition, + } + + export type updateChatReadInbox = { + /** Incoming messages were read or the number of unread messages has been changed */ + _: 'updateChatReadInbox', + /** Chat identifier */ + chat_id: number, + /** Identifier of the last read incoming message */ + last_read_inbox_message_id: number, + /** The number of unread messages left in the chat */ + unread_count: number, + } + + export type updateChatReadOutbox = { + /** Outgoing messages were read */ + _: 'updateChatReadOutbox', + /** Chat identifier */ + chat_id: number, + /** Identifier of last read outgoing message */ + last_read_outbox_message_id: number, + } + + export type updateChatActionBar = { + /** The chat action bar was changed */ + _: 'updateChatActionBar', + /** Chat identifier */ + chat_id: number, + /** The new value of the action bar; may be null */ + action_bar?: ChatActionBar, + } + + export type updateChatDraftMessage = { + /** + * A chat draft has changed. Be aware that the update may come in the currently + * opened chat but with old content of the draft. If the user has changed the content + * of the draft, this update mustn't be applied + */ + _: 'updateChatDraftMessage', + /** Chat identifier */ + chat_id: number, + /** The new draft message; may be null */ + draft_message?: draftMessage, + /** The new chat positions in the chat lists */ + positions: Array, + } + + export type updateChatMessageSender = { + /** The message sender that is selected to send messages in a chat has changed */ + _: 'updateChatMessageSender', + /** Chat identifier */ + chat_id: number, + /** + * New value of message_sender_id; may be null if the user can't change message + * sender + */ + message_sender_id?: MessageSender, + } + + export type updateChatMessageTtl = { + /** The message Time To Live setting for a chat was changed */ + _: 'updateChatMessageTtl', + /** Chat identifier */ + chat_id: number, + /** New value of message_ttl */ + message_ttl: number, + } + + export type updateChatNotificationSettings = { + /** Notification settings for a chat were changed */ + _: 'updateChatNotificationSettings', + /** Chat identifier */ + chat_id: number, + /** The new notification settings */ + notification_settings: chatNotificationSettings, + } + + export type updateChatPendingJoinRequests = { + /** The chat pending join requests were changed */ + _: 'updateChatPendingJoinRequests', + /** Chat identifier */ + chat_id: number, + /** The new data about pending join requests; may be null */ + pending_join_requests?: chatJoinRequestsInfo, + } + + export type updateChatReplyMarkup = { + /** + * The default chat reply markup was changed. Can occur because new messages with + * reply markup were received or because an old reply markup was hidden by the + * user + */ + _: 'updateChatReplyMarkup', + /** Chat identifier */ + chat_id: number, + /** + * Identifier of the message from which reply markup needs to be used; 0 if there + * is no default custom reply markup in the chat + */ + reply_markup_message_id: number, + } + + export type updateChatTheme = { + /** The chat theme was changed */ + _: 'updateChatTheme', + /** Chat identifier */ + chat_id: number, + /** The new name of the chat theme; may be empty if theme was reset to default */ + theme_name: string, + } + + export type updateChatUnreadMentionCount = { + /** The chat unread_mention_count has changed */ + _: 'updateChatUnreadMentionCount', + /** Chat identifier */ + chat_id: number, + /** The number of unread mention messages left in the chat */ + unread_mention_count: number, + } + + export type updateChatVideoChat = { + /** A chat video chat state has changed */ + _: 'updateChatVideoChat', + /** Chat identifier */ + chat_id: number, + /** New value of video_chat */ + video_chat: videoChat, + } + + export type updateChatDefaultDisableNotification = { + /** + * The value of the default disable_notification parameter, used when a message + * is sent to the chat, was changed + */ + _: 'updateChatDefaultDisableNotification', + /** Chat identifier */ + chat_id: number, + /** The new default_disable_notification value */ + default_disable_notification: boolean, + } + + export type updateChatHasProtectedContent = { + /** A chat content was allowed or restricted for saving */ + _: 'updateChatHasProtectedContent', + /** Chat identifier */ + chat_id: number, + /** New value of has_protected_content */ + has_protected_content: boolean, + } + + export type updateChatHasScheduledMessages = { + /** A chat's has_scheduled_messages field has changed */ + _: 'updateChatHasScheduledMessages', + /** Chat identifier */ + chat_id: number, + /** New value of has_scheduled_messages */ + has_scheduled_messages: boolean, + } + + export type updateChatIsBlocked = { + /** A chat was blocked or unblocked */ + _: 'updateChatIsBlocked', + /** Chat identifier */ + chat_id: number, + /** New value of is_blocked */ + is_blocked: boolean, + } + + export type updateChatIsMarkedAsUnread = { + /** A chat was marked as unread or was read */ + _: 'updateChatIsMarkedAsUnread', + /** Chat identifier */ + chat_id: number, + /** New value of is_marked_as_unread */ + is_marked_as_unread: boolean, + } + + export type updateChatFilters = { + /** The list of chat filters or a chat filter has changed */ + _: 'updateChatFilters', + /** The new list of chat filters */ + chat_filters: Array, + } + + export type updateChatOnlineMemberCount = { + /** + * The number of online group members has changed. This update with non-zero count + * is sent only for currently opened chats. There is no guarantee that it will + * be sent just after the count has changed + */ + _: 'updateChatOnlineMemberCount', + /** Identifier of the chat */ + chat_id: number, + /** New number of online members in the chat, or 0 if unknown */ + online_member_count: number, + } + + export type updateScopeNotificationSettings = { + /** Notification settings for some type of chats were updated */ + _: 'updateScopeNotificationSettings', + /** Types of chats for which notification settings were updated */ + scope: NotificationSettingsScope, + /** The new notification settings */ + notification_settings: scopeNotificationSettings, + } + + export type updateNotification = { + /** A notification was changed */ + _: 'updateNotification', + /** Unique notification group identifier */ + notification_group_id: number, + /** Changed notification */ + notification: notification, + } + + export type updateNotificationGroup = { + /** A list of active notifications in a notification group has changed */ + _: 'updateNotificationGroup', + /** Unique notification group identifier */ + notification_group_id: number, + /** New type of the notification group */ + type: NotificationGroupType, + /** Identifier of a chat to which all notifications in the group belong */ + chat_id: number, + /** Chat identifier, which notification settings must be applied to the added notifications */ + notification_settings_chat_id: number, + /** True, if the notifications must be shown without sound */ + is_silent: boolean, + /** + * Total number of unread notifications in the group, can be bigger than number + * of active notifications + */ + total_count: number, + /** List of added group notifications, sorted by notification ID */ + added_notifications: Array, + /** Identifiers of removed group notifications, sorted by notification ID */ + removed_notification_ids: Array, + } + + export type updateActiveNotifications = { + /** + * Contains active notifications that was shown on previous application launches. + * This update is sent only if the message database is used. In that case it comes + * once before any updateNotification and updateNotificationGroup update + */ + _: 'updateActiveNotifications', + /** Lists of active notification groups */ + groups: Array, + } + + export type updateHavePendingNotifications = { + /** + * Describes whether there are some pending notification updates. Can be used to + * prevent application from killing, while there are some pending notifications + */ + _: 'updateHavePendingNotifications', + /** True, if there are some delayed notification updates, which will be sent soon */ + have_delayed_notifications: boolean, + /** + * True, if there can be some yet unreceived notifications, which are being fetched + * from the server + */ + have_unreceived_notifications: boolean, + } + + export type updateDeleteMessages = { + /** Some messages were deleted */ + _: 'updateDeleteMessages', + /** Chat identifier */ + chat_id: number, + /** Identifiers of the deleted messages */ + message_ids: Array, + /** + * True, if the messages are permanently deleted by a user (as opposed to just + * becoming inaccessible) + */ + is_permanent: boolean, + /** + * True, if the messages are deleted only from the cache and can possibly be retrieved + * again in the future + */ + from_cache: boolean, + } + + export type updateChatAction = { + /** A message sender activity in the chat has changed */ + _: 'updateChatAction', + /** Chat identifier */ + chat_id: number, + /** If not 0, a message thread identifier in which the action was performed */ + message_thread_id: number, + /** Identifier of a message sender performing the action */ + sender_id: MessageSender, + /** The action */ + action: ChatAction, + } + + export type updateUserStatus = { + /** The user went online or offline */ + _: 'updateUserStatus', + /** User identifier */ + user_id: number, + /** New status of the user */ + status: UserStatus, + } + + export type updateUser = { + /** + * Some data of a user has changed. This update is guaranteed to come before the + * user identifier is returned to the application + */ + _: 'updateUser', + /** New data about the user */ + user: user, + } + + export type updateBasicGroup = { + /** + * Some data of a basic group has changed. This update is guaranteed to come before + * the basic group identifier is returned to the application + */ + _: 'updateBasicGroup', + /** New data about the group */ + basic_group: basicGroup, + } + + export type updateSupergroup = { + /** + * Some data of a supergroup or a channel has changed. This update is guaranteed + * to come before the supergroup identifier is returned to the application + */ + _: 'updateSupergroup', + /** New data about the supergroup */ + supergroup: supergroup, + } + + export type updateSecretChat = { + /** + * Some data of a secret chat has changed. This update is guaranteed to come before + * the secret chat identifier is returned to the application + */ + _: 'updateSecretChat', + /** New data about the secret chat */ + secret_chat: secretChat, + } + + export type updateUserFullInfo = { + /** Some data in userFullInfo has been changed */ + _: 'updateUserFullInfo', + /** User identifier */ + user_id: number, + /** New full information about the user */ + user_full_info: userFullInfo, + } + + export type updateBasicGroupFullInfo = { + /** Some data in basicGroupFullInfo has been changed */ + _: 'updateBasicGroupFullInfo', + /** Identifier of a basic group */ + basic_group_id: number, + /** New full information about the group */ + basic_group_full_info: basicGroupFullInfo, + } + + export type updateSupergroupFullInfo = { + /** Some data in supergroupFullInfo has been changed */ + _: 'updateSupergroupFullInfo', + /** Identifier of the supergroup or channel */ + supergroup_id: number, + /** New full information about the supergroup */ + supergroup_full_info: supergroupFullInfo, + } + + export type updateServiceNotification = { + /** + * A service notification from the server was received. Upon receiving this the + * application must show a popup with the content of the notification + */ + _: 'updateServiceNotification', + /** + * Notification type. If type begins with "AUTH_KEY_DROP_", then two buttons "Cancel" + * and "Log out" must be shown under notification; if user presses the second, + * all local data must be destroyed using Destroy method + */ + type: string, + /** Notification content */ + content: MessageContent, + } + + export type updateFile = { + /** Information about a file was updated */ + _: 'updateFile', + /** New data about the file */ + file: file, + } + + export type updateFileGenerationStart = { + /** The file generation process needs to be started by the application */ + _: 'updateFileGenerationStart', + /** Unique identifier for the generation process */ + generation_id: string, + /** The path to a file from which a new file is generated; may be empty */ + original_path: string, + /** The path to a file that must be created and where the new file is generated */ + destination_path: string, + /** + * String specifying the conversion applied to the original file. If conversion + * is "#url#" than original_path contains an HTTP/HTTPS URL of a file, which must + * be downloaded by the application + */ + conversion: string, + } + + export type updateFileGenerationStop = { + /** File generation is no longer needed */ + _: 'updateFileGenerationStop', + /** Unique identifier for the generation process */ + generation_id: string, + } + + export type updateCall = { + /** New call was created or information about a call was updated */ + _: 'updateCall', + /** New data about a call */ + call: call, + } + + export type updateGroupCall = { + /** Information about a group call was updated */ + _: 'updateGroupCall', + /** New data about a group call */ + group_call: groupCall, + } + + export type updateGroupCallParticipant = { + /** + * Information about a group call participant was changed. The updates are sent + * only after the group call is received through getGroupCall and only if the call + * is joined or being joined + */ + _: 'updateGroupCallParticipant', + /** Identifier of group call */ + group_call_id: number, + /** New data about a participant */ + participant: groupCallParticipant, + } + + export type updateNewCallSignalingData = { + /** New call signaling data arrived */ + _: 'updateNewCallSignalingData', + /** The call identifier */ + call_id: number, + /** The data */ + data: string /* base64 */, + } + + export type updateUserPrivacySettingRules = { + /** Some privacy setting rules have been changed */ + _: 'updateUserPrivacySettingRules', + /** The privacy setting */ + setting: UserPrivacySetting, + /** New privacy rules */ + rules: userPrivacySettingRules, + } + + export type updateUnreadMessageCount = { + /** + * Number of unread messages in a chat list has changed. This update is sent only + * if the message database is used + */ + _: 'updateUnreadMessageCount', + /** The chat list with changed number of unread messages */ + chat_list: ChatList, + /** Total number of unread messages */ + unread_count: number, + /** Total number of unread messages in unmuted chats */ + unread_unmuted_count: number, + } + + export type updateUnreadChatCount = { + /** + * Number of unread chats, i.e. with unread messages or marked as unread, has changed. + * This update is sent only if the message database is used + */ + _: 'updateUnreadChatCount', + /** The chat list with changed number of unread messages */ + chat_list: ChatList, + /** Approximate total number of chats in the chat list */ + total_count: number, + /** Total number of unread chats */ + unread_count: number, + /** Total number of unread unmuted chats */ + unread_unmuted_count: number, + /** Total number of chats marked as unread */ + marked_as_unread_count: number, + /** Total number of unmuted chats marked as unread */ + marked_as_unread_unmuted_count: number, + } + + export type updateOption = { + /** An option changed its value */ + _: 'updateOption', + /** The option name */ + name: string, + /** The new option value */ + value: OptionValue, + } + + export type updateStickerSet = { + /** A sticker set has changed */ + _: 'updateStickerSet', + /** The sticker set */ + sticker_set: stickerSet, + } + + export type updateInstalledStickerSets = { + /** The list of installed sticker sets was updated */ + _: 'updateInstalledStickerSets', + /** True, if the list of installed mask sticker sets was updated */ + is_masks: boolean, + /** The new list of installed ordinary sticker sets */ + sticker_set_ids: Array, + } + + export type updateTrendingStickerSets = { + /** The list of trending sticker sets was updated or some of them were viewed */ + _: 'updateTrendingStickerSets', + /** + * The prefix of the list of trending sticker sets with the newest trending sticker + * sets + */ + sticker_sets: stickerSets, + } + + export type updateRecentStickers = { + /** The list of recently used stickers was updated */ + _: 'updateRecentStickers', + /** + * True, if the list of stickers attached to photo or video files was updated, + * otherwise the list of sent stickers is updated + */ + is_attached: boolean, + /** The new list of file identifiers of recently used stickers */ + sticker_ids: Array, + } + + export type updateFavoriteStickers = { + /** The list of favorite stickers was updated */ + _: 'updateFavoriteStickers', + /** The new list of file identifiers of favorite stickers */ + sticker_ids: Array, + } + + export type updateSavedAnimations = { + /** The list of saved animations was updated */ + _: 'updateSavedAnimations', + /** The new list of file identifiers of saved animations */ + animation_ids: Array, + } + + export type updateSelectedBackground = { + /** The selected background has changed */ + _: 'updateSelectedBackground', + /** True, if background for dark theme has changed */ + for_dark_theme: boolean, + /** The new selected background; may be null */ + background?: background, + } + + export type updateChatThemes = { + /** The list of available chat themes has changed */ + _: 'updateChatThemes', + /** The new list of chat themes */ + chat_themes: Array, + } + + export type updateLanguagePackStrings = { + /** Some language pack strings have been updated */ + _: 'updateLanguagePackStrings', + /** Localization target to which the language pack belongs */ + localization_target: string, + /** Identifier of the updated language pack */ + language_pack_id: string, + /** List of changed language pack strings */ + strings: Array, + } + + export type updateConnectionState = { + /** + * The connection state has changed. This update must be used only to show a human-readable + * description of the connection state + */ + _: 'updateConnectionState', + /** The new connection state */ + state: ConnectionState, + } + + export type updateTermsOfService = { + /** + * New terms of service must be accepted by the user. If the terms of service are + * declined, then the deleteAccount method must be called with the reason "Decline + * ToS update" + */ + _: 'updateTermsOfService', + /** Identifier of the terms of service */ + terms_of_service_id: string, + /** The new terms of service */ + terms_of_service: termsOfService, + } + + export type updateUsersNearby = { + /** + * The list of users nearby has changed. The update is guaranteed to be sent only + * 60 seconds after a successful searchChatsNearby request + */ + _: 'updateUsersNearby', + /** The new list of users nearby */ + users_nearby: Array, + } + + export type updateDiceEmojis = { + /** The list of supported dice emojis has changed */ + _: 'updateDiceEmojis', + /** The new list of supported dice emojis */ + emojis: Array, + } + + export type updateAnimatedEmojiMessageClicked = { + /** + * Some animated emoji message was clicked and a big animated sticker must be played + * if the message is visible on the screen. chatActionWatchingAnimations with the + * text of the message needs to be sent if the sticker is played + */ + _: 'updateAnimatedEmojiMessageClicked', + /** Chat identifier */ + chat_id: number, + /** Message identifier */ + message_id: number, + /** The animated sticker to be played */ + sticker: sticker, + } + + export type updateAnimationSearchParameters = { + /** + * The parameters of animation search through GetOption("animation_search_bot_username") + * bot has changed + */ + _: 'updateAnimationSearchParameters', + /** Name of the animation search provider */ + provider: string, + /** The new list of emojis suggested for searching */ + emojis: Array, + } + + export type updateSuggestedActions = { + /** The list of suggested to the user actions has changed */ + _: 'updateSuggestedActions', + /** Added suggested actions */ + added_actions: Array, + /** Removed suggested actions */ + removed_actions: Array, + } + + export type updateNewInlineQuery = { + /** A new incoming inline query; for bots only */ + _: 'updateNewInlineQuery', + /** Unique query identifier */ + id: string, + /** Identifier of the user who sent the query */ + sender_user_id: number, + /** User location; may be null */ + user_location?: location, + /** The type of the chat, from which the query originated; may be null if unknown */ + chat_type?: ChatType, + /** Text of the query */ + query: string, + /** Offset of the first entry to return */ + offset: string, + } + + export type updateNewChosenInlineResult = { + /** The user has chosen a result of an inline query; for bots only */ + _: 'updateNewChosenInlineResult', + /** Identifier of the user who sent the query */ + sender_user_id: number, + /** User location; may be null */ + user_location?: location, + /** Text of the query */ + query: string, + /** Identifier of the chosen result */ + result_id: string, + /** Identifier of the sent inline message, if known */ + inline_message_id: string, + } + + export type updateNewCallbackQuery = { + /** A new incoming callback query; for bots only */ + _: 'updateNewCallbackQuery', + /** Unique query identifier */ + id: string, + /** Identifier of the user who sent the query */ + sender_user_id: number, + /** Identifier of the chat where the query was sent */ + chat_id: number, + /** Identifier of the message, from which the query originated */ + message_id: number, + /** Identifier that uniquely corresponds to the chat to which the message was sent */ + chat_instance: string, + /** Query payload */ + payload: CallbackQueryPayload, + } + + export type updateNewInlineCallbackQuery = { + /** A new incoming callback query from a message sent via a bot; for bots only */ + _: 'updateNewInlineCallbackQuery', + /** Unique query identifier */ + id: string, + /** Identifier of the user who sent the query */ + sender_user_id: number, + /** Identifier of the inline message, from which the query originated */ + inline_message_id: string, + /** An identifier uniquely corresponding to the chat a message was sent to */ + chat_instance: string, + /** Query payload */ + payload: CallbackQueryPayload, + } + + export type updateNewShippingQuery = { + /** + * A new incoming shipping query; for bots only. Only for invoices with flexible + * price + */ + _: 'updateNewShippingQuery', + /** Unique query identifier */ + id: string, + /** Identifier of the user who sent the query */ + sender_user_id: number, + /** Invoice payload */ + invoice_payload: string, + /** User shipping address */ + shipping_address: address, + } + + export type updateNewPreCheckoutQuery = { + /** + * A new incoming pre-checkout query; for bots only. Contains full information + * about a checkout + */ + _: 'updateNewPreCheckoutQuery', + /** Unique query identifier */ + id: string, + /** Identifier of the user who sent the query */ + sender_user_id: number, + /** Currency for the product price */ + currency: string, + /** Total price for the product, in the smallest units of the currency */ + total_amount: number, + /** Invoice payload */ + invoice_payload: string /* base64 */, + /** Identifier of a shipping option chosen by the user; may be empty if not applicable */ + shipping_option_id: string, + /** Information about the order; may be null */ + order_info?: orderInfo, + } + + export type updateNewCustomEvent = { + /** A new incoming event; for bots only */ + _: 'updateNewCustomEvent', + /** A JSON-serialized event */ + event: string, + } + + export type updateNewCustomQuery = { + /** A new incoming query; for bots only */ + _: 'updateNewCustomQuery', + /** The query identifier */ + id: string, + /** JSON-serialized query data */ + data: string, + /** Query timeout */ + timeout: number, + } + + export type updatePoll = { + /** A poll was updated; for bots only */ + _: 'updatePoll', + /** New data about the poll */ + poll: poll, + } + + export type updatePollAnswer = { + /** A user changed the answer to a poll; for bots only */ + _: 'updatePollAnswer', + /** Unique poll identifier */ + poll_id: string, + /** The user, who changed the answer to the poll */ + user_id: number, + /** 0-based identifiers of answer options, chosen by the user */ + option_ids: Array, + } + + export type updateChatMember = { + /** User rights changed in a chat; for bots only */ + _: 'updateChatMember', + /** Chat identifier */ + chat_id: number, + /** Identifier of the user, changing the rights */ + actor_user_id: number, + /** Point in time (Unix timestamp) when the user rights was changed */ + date: number, + /** If user has joined the chat using an invite link, the invite link; may be null */ + invite_link?: chatInviteLink, + /** Previous chat member */ + old_chat_member: chatMember, + /** New chat member */ + new_chat_member: chatMember, + } + + export type updateNewChatJoinRequest = { + /** A user sent a join request to a chat; for bots only */ + _: 'updateNewChatJoinRequest', + /** Chat identifier */ + chat_id: number, + /** Join request */ + request: chatJoinRequest, + /** The invite link, which was used to send join request; may be null */ + invite_link?: chatInviteLink, + } + + export type updates = { + /** Contains a list of updates */ + _: 'updates', + /** List of updates */ + updates: Array, + } + + export type logStreamDefault = { + /** The log is written to stderr or an OS specific log */ + _: 'logStreamDefault', + } + + export type logStreamDefault$Input = { + /** The log is written to stderr or an OS specific log */ + readonly _: 'logStreamDefault', + } + + export type logStreamFile = { + /** The log is written to a file */ + _: 'logStreamFile', + /** Path to the file to where the internal TDLib log will be written */ + path: string, + /** + * The maximum size of the file to where the internal TDLib log is written before + * the file will automatically be rotated, in bytes + */ + max_file_size: number, + /** Pass true to additionally redirect stderr to the log file. Ignored on Windows */ + redirect_stderr: boolean, + } + + export type logStreamFile$Input = { + /** The log is written to a file */ + readonly _: 'logStreamFile', + /** Path to the file to where the internal TDLib log will be written */ + readonly path?: string, + /** + * The maximum size of the file to where the internal TDLib log is written before + * the file will automatically be rotated, in bytes + */ + readonly max_file_size?: number, + /** Pass true to additionally redirect stderr to the log file. Ignored on Windows */ + readonly redirect_stderr?: boolean, + } + + export type logStreamEmpty = { + /** The log is written nowhere */ + _: 'logStreamEmpty', + } + + export type logStreamEmpty$Input = { + /** The log is written nowhere */ + readonly _: 'logStreamEmpty', + } + + export type logVerbosityLevel = { + /** Contains a TDLib internal log verbosity level */ + _: 'logVerbosityLevel', + /** Log verbosity level */ + verbosity_level: number, + } + + export type logTags = { + /** Contains a list of available TDLib internal log tags */ + _: 'logTags', + /** List of log tags */ + tags: Array, + } + + export type testInt = { + /** A simple object containing a number; for testing only */ + _: 'testInt', + /** Number */ + value: number, + } + + export type testInt$Input = { + /** A simple object containing a number; for testing only */ + readonly _: 'testInt', + /** Number */ + readonly value?: number, + } + + export type testString = { + /** A simple object containing a string; for testing only */ + _: 'testString', + /** String */ + value: string, + } + + export type testString$Input = { + /** A simple object containing a string; for testing only */ + readonly _: 'testString', + /** String */ + readonly value?: string, + } + + export type testBytes = { + /** A simple object containing a sequence of bytes; for testing only */ + _: 'testBytes', + /** Bytes */ + value: string /* base64 */, + } + + export type testVectorInt = { + /** A simple object containing a vector of numbers; for testing only */ + _: 'testVectorInt', + /** Vector of numbers */ + value: Array, + } + + export type testVectorIntObject = { + /** + * A simple object containing a vector of objects that hold a number; for testing + * only + */ + _: 'testVectorIntObject', + /** Vector of objects */ + value: Array, + } + + export type testVectorString = { + /** A simple object containing a vector of strings; for testing only */ + _: 'testVectorString', + /** Vector of strings */ + value: Array, + } + + export type testVectorStringObject = { + /** + * A simple object containing a vector of objects that hold a string; for testing + * only + */ + _: 'testVectorStringObject', + /** Vector of objects */ + value: Array, + } + + export type getAuthorizationState = { + /** + * Returns the current authorization state; this is an offline request. For informational + * purposes only. Use updateAuthorizationState instead to maintain the current + * authorization state. Can be called before initialization + */ + readonly _: 'getAuthorizationState', + } + + export type setTdlibParameters = { + /** + * Sets the parameters for TDLib initialization. Works only when the current authorization + * state is authorizationStateWaitTdlibParameters + */ + readonly _: 'setTdlibParameters', + /** Parameters for TDLib initialization */ + readonly parameters?: tdlibParameters$Input, + } + + export type checkDatabaseEncryptionKey = { + /** + * Checks the database encryption key for correctness. Works only when the current + * authorization state is authorizationStateWaitEncryptionKey + */ + readonly _: 'checkDatabaseEncryptionKey', + /** Encryption key to check or set up */ + readonly encryption_key?: string /* base64 */, + } + + export type setAuthenticationPhoneNumber = { + /** + * Sets the phone number of the user and sends an authentication code to the user. + * Works only when the current authorization state is authorizationStateWaitPhoneNumber, + * or if there is no pending authentication query and the current authorization + * state is authorizationStateWaitCode, authorizationStateWaitRegistration, or + * authorizationStateWaitPassword + */ + readonly _: 'setAuthenticationPhoneNumber', + /** The phone number of the user, in international format */ + readonly phone_number?: string, + /** + * Settings for the authentication of the user's phone number; pass null to use + * default settings + */ + readonly settings?: phoneNumberAuthenticationSettings$Input, + } + + export type resendAuthenticationCode = { + /** + * Re-sends an authentication code to the user. Works only when the current authorization + * state is authorizationStateWaitCode, the next_code_type of the result is not + * null and the server-specified timeout has passed + */ + readonly _: 'resendAuthenticationCode', + } + + export type checkAuthenticationCode = { + /** + * Checks the authentication code. Works only when the current authorization state + * is authorizationStateWaitCode + */ + readonly _: 'checkAuthenticationCode', + /** Authentication code to check */ + readonly code?: string, + } + + export type requestQrCodeAuthentication = { + /** + * Requests QR code authentication by scanning a QR code on another logged in device. + * Works only when the current authorization state is authorizationStateWaitPhoneNumber, + * or if there is no pending authentication query and the current authorization + * state is authorizationStateWaitCode, authorizationStateWaitRegistration, or + * authorizationStateWaitPassword + */ + readonly _: 'requestQrCodeAuthentication', + /** List of user identifiers of other users currently using the application */ + readonly other_user_ids?: ReadonlyArray, + } + + export type registerUser = { + /** + * Finishes user registration. Works only when the current authorization state + * is authorizationStateWaitRegistration + */ + readonly _: 'registerUser', + /** The first name of the user; 1-64 characters */ + readonly first_name?: string, + /** The last name of the user; 0-64 characters */ + readonly last_name?: string, + } + + export type checkAuthenticationPassword = { + /** + * Checks the authentication password for correctness. Works only when the current + * authorization state is authorizationStateWaitPassword + */ + readonly _: 'checkAuthenticationPassword', + /** The password to check */ + readonly password?: string, + } + + export type requestAuthenticationPasswordRecovery = { + /** + * Requests to send a password recovery code to an email address that was previously + * set up. Works only when the current authorization state is authorizationStateWaitPassword + */ + readonly _: 'requestAuthenticationPasswordRecovery', + } + + export type checkAuthenticationPasswordRecoveryCode = { + /** + * Checks whether a password recovery code sent to an email address is valid. Works + * only when the current authorization state is authorizationStateWaitPassword + */ + readonly _: 'checkAuthenticationPasswordRecoveryCode', + /** Recovery code to check */ + readonly recovery_code?: string, + } + + export type recoverAuthenticationPassword = { + /** + * Recovers the password with a password recovery code sent to an email address + * that was previously set up. Works only when the current authorization state + * is authorizationStateWaitPassword + */ + readonly _: 'recoverAuthenticationPassword', + /** Recovery code to check */ + readonly recovery_code?: string, + /** New password of the user; may be empty to remove the password */ + readonly new_password?: string, + /** New password hint; may be empty */ + readonly new_hint?: string, + } + + export type checkAuthenticationBotToken = { + /** + * Checks the authentication token of a bot; to log in as a bot. Works only when + * the current authorization state is authorizationStateWaitPhoneNumber. Can be + * used instead of setAuthenticationPhoneNumber and checkAuthenticationCode to + * log in + */ + readonly _: 'checkAuthenticationBotToken', + /** The bot token */ + readonly token?: string, + } + + export type logOut = { + /** + * Closes the TDLib instance after a proper logout. Requires an available network + * connection. All local data will be destroyed. After the logout completes, updateAuthorizationState + * with authorizationStateClosed will be sent + */ + readonly _: 'logOut', + } + + export type close = { + /** + * Closes the TDLib instance. All databases will be flushed to disk and properly + * closed. After the close completes, updateAuthorizationState with authorizationStateClosed + * will be sent. Can be called before initialization + */ + readonly _: 'close', + } + + export type destroy = { + /** + * Closes the TDLib instance, destroying all local data without a proper logout. + * The current user session will remain in the list of all active sessions. All + * local data will be destroyed. After the destruction completes updateAuthorizationState + * with authorizationStateClosed will be sent. Can be called before authorization + */ + readonly _: 'destroy', + } + + export type confirmQrCodeAuthentication = { + /** + * Confirms QR code authentication on another device. Returns created session on + * success + */ + readonly _: 'confirmQrCodeAuthentication', + /** A link from a QR code. The link must be scanned by the in-app camera */ + readonly link?: string, + } + + export type getCurrentState = { + /** + * Returns all updates needed to restore current TDLib state, i.e. all actual UpdateAuthorizationState/UpdateUser/UpdateNewChat + * and others. This is especially useful if TDLib is run in a separate process. + * Can be called before initialization + */ + readonly _: 'getCurrentState', + } + + export type setDatabaseEncryptionKey = { + /** + * Changes the database encryption key. Usually the encryption key is never changed + * and is stored in some OS keychain + */ + readonly _: 'setDatabaseEncryptionKey', + /** New encryption key */ + readonly new_encryption_key?: string /* base64 */, + } + + export type getPasswordState = { + /** Returns the current state of 2-step verification */ + readonly _: 'getPasswordState', + } + + export type setPassword = { + /** + * Changes the password for the current user. If a new recovery email address is + * specified, then the change will not be applied until the new recovery email + * address is confirmed + */ + readonly _: 'setPassword', + /** Previous password of the user */ + readonly old_password?: string, + /** New password of the user; may be empty to remove the password */ + readonly new_password?: string, + /** New password hint; may be empty */ + readonly new_hint?: string, + /** Pass true if the recovery email address must be changed */ + readonly set_recovery_email_address?: boolean, + /** New recovery email address; may be empty */ + readonly new_recovery_email_address?: string, + } + + export type getRecoveryEmailAddress = { + /** + * Returns a 2-step verification recovery email address that was previously set + * up. This method can be used to verify a password provided by the user + */ + readonly _: 'getRecoveryEmailAddress', + /** The password for the current user */ + readonly password?: string, + } + + export type setRecoveryEmailAddress = { + /** + * Changes the 2-step verification recovery email address of the user. If a new + * recovery email address is specified, then the change will not be applied until + * the new recovery email address is confirmed. If new_recovery_email_address is + * the same as the email address that is currently set up, this call succeeds immediately + * and aborts all other requests waiting for an email confirmation + */ + readonly _: 'setRecoveryEmailAddress', + /** Password of the current user */ + readonly password?: string, + /** New recovery email address */ + readonly new_recovery_email_address?: string, + } + + export type checkRecoveryEmailAddressCode = { + /** Checks the 2-step verification recovery email address verification code */ + readonly _: 'checkRecoveryEmailAddressCode', + /** Verification code to check */ + readonly code?: string, + } + + export type resendRecoveryEmailAddressCode = { + /** Resends the 2-step verification recovery email address verification code */ + readonly _: 'resendRecoveryEmailAddressCode', + } + + export type requestPasswordRecovery = { + /** + * Requests to send a 2-step verification password recovery code to an email address + * that was previously set up + */ + readonly _: 'requestPasswordRecovery', + } + + export type checkPasswordRecoveryCode = { + /** + * Checks whether a 2-step verification password recovery code sent to an email + * address is valid + */ + readonly _: 'checkPasswordRecoveryCode', + /** Recovery code to check */ + readonly recovery_code?: string, + } + + export type recoverPassword = { + /** + * Recovers the 2-step verification password using a recovery code sent to an email + * address that was previously set up + */ + readonly _: 'recoverPassword', + /** Recovery code to check */ + readonly recovery_code?: string, + /** New password of the user; may be empty to remove the password */ + readonly new_password?: string, + /** New password hint; may be empty */ + readonly new_hint?: string, + } + + export type resetPassword = { + /** + * Removes 2-step verification password without previous password and access to + * recovery email address. The password can't be reset immediately and the request + * needs to be repeated after the specified time + */ + readonly _: 'resetPassword', + } + + export type cancelPasswordReset = { + /** + * Cancels reset of 2-step verification password. The method can be called if passwordState.pending_reset_date + * > 0 + */ + readonly _: 'cancelPasswordReset', + } + + export type createTemporaryPassword = { + /** Creates a new temporary password for processing payments */ + readonly _: 'createTemporaryPassword', + /** Persistent user password */ + readonly password?: string, + /** + * Time during which the temporary password will be valid, in seconds; must be + * between 60 and 86400 + */ + readonly valid_for?: number, + } + + export type getTemporaryPasswordState = { + /** Returns information about the current temporary password */ + readonly _: 'getTemporaryPasswordState', + } + + export type getMe = { + /** Returns the current user */ + readonly _: 'getMe', + } + + export type getUser = { + /** + * Returns information about a user by their identifier. This is an offline request + * if the current user is not a bot + */ + readonly _: 'getUser', + /** User identifier */ + readonly user_id?: number, + } + + export type getUserFullInfo = { + /** Returns full information about a user by their identifier */ + readonly _: 'getUserFullInfo', + /** User identifier */ + readonly user_id?: number, + } + + export type getBasicGroup = { + /** + * Returns information about a basic group by its identifier. This is an offline + * request if the current user is not a bot + */ + readonly _: 'getBasicGroup', + /** Basic group identifier */ + readonly basic_group_id?: number, + } + + export type getBasicGroupFullInfo = { + /** Returns full information about a basic group by its identifier */ + readonly _: 'getBasicGroupFullInfo', + /** Basic group identifier */ + readonly basic_group_id?: number, + } + + export type getSupergroup = { + /** + * Returns information about a supergroup or a channel by its identifier. This + * is an offline request if the current user is not a bot + */ + readonly _: 'getSupergroup', + /** Supergroup or channel identifier */ + readonly supergroup_id?: number, + } + + export type getSupergroupFullInfo = { + /** + * Returns full information about a supergroup or a channel by its identifier, + * cached for up to 1 minute + */ + readonly _: 'getSupergroupFullInfo', + /** Supergroup or channel identifier */ + readonly supergroup_id?: number, + } + + export type getSecretChat = { + /** + * Returns information about a secret chat by its identifier. This is an offline + * request + */ + readonly _: 'getSecretChat', + /** Secret chat identifier */ + readonly secret_chat_id?: number, + } + + export type getChat = { + /** + * Returns information about a chat by its identifier, this is an offline request + * if the current user is not a bot + */ + readonly _: 'getChat', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type getMessage = { + /** Returns information about a message */ + readonly _: 'getMessage', + /** Identifier of the chat the message belongs to */ + readonly chat_id?: number, + /** Identifier of the message to get */ + readonly message_id?: number, + } + + export type getMessageLocally = { + /** + * Returns information about a message, if it is available locally without sending + * network request. This is an offline request + */ + readonly _: 'getMessageLocally', + /** Identifier of the chat the message belongs to */ + readonly chat_id?: number, + /** Identifier of the message to get */ + readonly message_id?: number, + } + + export type getRepliedMessage = { + /** + * Returns information about a message that is replied by a given message. Also + * returns the pinned message, the game message, and the invoice message for messages + * of the types messagePinMessage, messageGameScore, and messagePaymentSuccessful + * respectively + */ + readonly _: 'getRepliedMessage', + /** Identifier of the chat the message belongs to */ + readonly chat_id?: number, + /** Identifier of the reply message */ + readonly message_id?: number, + } + + export type getChatPinnedMessage = { + /** Returns information about a newest pinned message in the chat */ + readonly _: 'getChatPinnedMessage', + /** Identifier of the chat the message belongs to */ + readonly chat_id?: number, + } + + export type getCallbackQueryMessage = { + /** + * Returns information about a message with the callback button that originated + * a callback query; for bots only + */ + readonly _: 'getCallbackQueryMessage', + /** Identifier of the chat the message belongs to */ + readonly chat_id?: number, + /** Message identifier */ + readonly message_id?: number, + /** Identifier of the callback query */ + readonly callback_query_id?: number | string, + } + + export type getMessages = { + /** + * Returns information about messages. If a message is not found, returns null + * on the corresponding position of the result + */ + readonly _: 'getMessages', + /** Identifier of the chat the messages belong to */ + readonly chat_id?: number, + /** Identifiers of the messages to get */ + readonly message_ids?: ReadonlyArray, + } + + export type getMessageThread = { + /** + * Returns information about a message thread. Can be used only if message.can_get_message_thread + * == true + */ + readonly _: 'getMessageThread', + /** Chat identifier */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + } + + export type getMessageViewers = { + /** + * Returns viewers of a recent outgoing message in a basic group or a supergroup + * chat. For video notes and voice notes only users, opened content of the message, + * are returned. The method can be called if message.can_get_viewers == true + */ + readonly _: 'getMessageViewers', + /** Chat identifier */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + } + + export type getFile = { + /** Returns information about a file; this is an offline request */ + readonly _: 'getFile', + /** Identifier of the file to get */ + readonly file_id?: number, + } + + export type getRemoteFile = { + /** + * Returns information about a file by its remote ID; this is an offline request. + * Can be used to register a URL as a file for further uploading, or sending as + * a message. Even the request succeeds, the file can be used only if it is still + * accessible to the user. For example, if the file is from a message, then the + * message must be not deleted and accessible to the user. If the file database + * is disabled, then the corresponding object with the file must be preloaded by + * the application + */ + readonly _: 'getRemoteFile', + /** Remote identifier of the file to get */ + readonly remote_file_id?: string, + /** File type; pass null if unknown */ + readonly file_type?: FileType$Input, + } + + export type loadChats = { + /** + * Loads more chats from a chat list. The loaded chats and their positions in the + * chat list will be sent through updates. Chats are sorted by the pair (chat.position.order, + * chat.id) in descending order. Returns a 404 error if all chats have been loaded + */ + readonly _: 'loadChats', + /** + * The chat list in which to load chats; pass null to load chats from the main + * chat list + */ + readonly chat_list?: ChatList$Input, + /** + * The maximum number of chats to be loaded. For optimal performance, the number + * of loaded chats is chosen by TDLib and can be smaller than the specified limit, + * even if the end of the list is not reached + */ + readonly limit?: number, + } + + export type getChats = { + /** + * Returns an ordered list of chats from the beginning of a chat list. For informational + * purposes only. Use loadChats and updates processing instead to maintain chat + * lists in a consistent state + */ + readonly _: 'getChats', + /** + * The chat list in which to return chats; pass null to get chats from the main + * chat list + */ + readonly chat_list?: ChatList$Input, + /** The maximum number of chats to be returned */ + readonly limit?: number, + } + + export type searchPublicChat = { + /** + * Searches a public chat by its username. Currently, only private chats, supergroups + * and channels can be public. Returns the chat if found; otherwise an error is + * returned + */ + readonly _: 'searchPublicChat', + /** Username to be resolved */ + readonly username?: string, + } + + export type searchPublicChats = { + /** + * Searches public chats by looking for specified query in their username and title. + * Currently, only private chats, supergroups and channels can be public. Returns + * a meaningful number of results. Excludes private chats with contacts and chats + * from the chat list from the results + */ + readonly _: 'searchPublicChats', + /** Query to search for */ + readonly query?: string, + } + + export type searchChats = { + /** + * Searches for the specified query in the title and username of already known + * chats, this is an offline request. Returns chats in the order seen in the main + * chat list + */ + readonly _: 'searchChats', + /** + * Query to search for. If the query is empty, returns up to 50 recently found + * chats + */ + readonly query?: string, + /** The maximum number of chats to be returned */ + readonly limit?: number, + } + + export type searchChatsOnServer = { + /** + * Searches for the specified query in the title and username of already known + * chats via request to the server. Returns chats in the order seen in the main + * chat list + */ + readonly _: 'searchChatsOnServer', + /** Query to search for */ + readonly query?: string, + /** The maximum number of chats to be returned */ + readonly limit?: number, + } + + export type searchChatsNearby = { + /** + * Returns a list of users and location-based supergroups nearby. The list of users + * nearby will be updated for 60 seconds after the request by the updates updateUsersNearby. + * The request must be sent again every 25 seconds with adjusted location to not + * miss new chats + */ + readonly _: 'searchChatsNearby', + /** Current user location */ + readonly location?: location$Input, + } + + export type getTopChats = { + /** + * Returns a list of frequently used chats. Supported only if the chat info database + * is enabled + */ + readonly _: 'getTopChats', + /** Category of chats to be returned */ + readonly category?: TopChatCategory$Input, + /** The maximum number of chats to be returned; up to 30 */ + readonly limit?: number, + } + + export type removeTopChat = { + /** + * Removes a chat from the list of frequently used chats. Supported only if the + * chat info database is enabled + */ + readonly _: 'removeTopChat', + /** Category of frequently used chats */ + readonly category?: TopChatCategory$Input, + /** Chat identifier */ + readonly chat_id?: number, + } + + export type addRecentlyFoundChat = { + /** + * Adds a chat to the list of recently found chats. The chat is added to the beginning + * of the list. If the chat is already in the list, it will be removed from the + * list first + */ + readonly _: 'addRecentlyFoundChat', + /** Identifier of the chat to add */ + readonly chat_id?: number, + } + + export type removeRecentlyFoundChat = { + /** Removes a chat from the list of recently found chats */ + readonly _: 'removeRecentlyFoundChat', + /** Identifier of the chat to be removed */ + readonly chat_id?: number, + } + + export type clearRecentlyFoundChats = { + /** Clears the list of recently found chats */ + readonly _: 'clearRecentlyFoundChats', + } + + export type getRecentlyOpenedChats = { + /** + * Returns recently opened chats, this is an offline request. Returns chats in + * the order of last opening + */ + readonly _: 'getRecentlyOpenedChats', + /** The maximum number of chats to be returned */ + readonly limit?: number, + } + + export type checkChatUsername = { + /** Checks whether a username can be set for a chat */ + readonly _: 'checkChatUsername', + /** + * Chat identifier; must be identifier of a supergroup chat, or a channel chat, + * or a private chat with self, or zero if the chat is being created + */ + readonly chat_id?: number, + /** Username to be checked */ + readonly username?: string, + } + + export type getCreatedPublicChats = { + /** Returns a list of public chats of the specified type, owned by the user */ + readonly _: 'getCreatedPublicChats', + /** Type of the public chats to return */ + readonly type?: PublicChatType$Input, + } + + export type checkCreatedPublicChatsLimit = { + /** + * Checks whether the maximum number of owned public chats has been reached. Returns + * corresponding error if the limit was reached + */ + readonly _: 'checkCreatedPublicChatsLimit', + /** Type of the public chats, for which to check the limit */ + readonly type?: PublicChatType$Input, + } + + export type getSuitableDiscussionChats = { + /** + * Returns a list of basic group and supergroup chats, which can be used as a discussion + * group for a channel. Returned basic group chats must be first upgraded to supergroups + * before they can be set as a discussion group. To set a returned supergroup as + * a discussion group, access to its old messages must be enabled using toggleSupergroupIsAllHistoryAvailable + * first + */ + readonly _: 'getSuitableDiscussionChats', + } + + export type getInactiveSupergroupChats = { + /** + * Returns a list of recently inactive supergroups and channels. Can be used when + * user reaches limit on the number of joined supergroups and channels and receives + * CHANNELS_TOO_MUCH error + */ + readonly _: 'getInactiveSupergroupChats', + } + + export type getGroupsInCommon = { + /** + * Returns a list of common group chats with a given user. Chats are sorted by + * their type and creation date + */ + readonly _: 'getGroupsInCommon', + /** User identifier */ + readonly user_id?: number, + /** Chat identifier starting from which to return chats; use 0 for the first request */ + readonly offset_chat_id?: number, + /** The maximum number of chats to be returned; up to 100 */ + readonly limit?: number, + } + + export type getChatHistory = { + /** + * Returns messages in a chat. The messages are returned in a reverse chronological + * order (i.e., in order of decreasing message_id). For optimal performance, the + * number of returned messages is chosen by TDLib. This is an offline request if + * only_local is true + */ + readonly _: 'getChatHistory', + /** Chat identifier */ + readonly chat_id?: number, + /** + * Identifier of the message starting from which history must be fetched; use 0 + * to get results from the last message + */ + readonly from_message_id?: number, + /** + * Specify 0 to get results from exactly the from_message_id or a negative offset + * up to 99 to get additionally some newer messages + */ + readonly offset?: number, + /** + * The maximum number of messages to be returned; must be positive and can't be + * greater than 100. If the offset is negative, the limit must be greater than + * or equal to -offset. For optimal performance, the number of returned messages + * is chosen by TDLib and can be smaller than the specified limit + */ + readonly limit?: number, + /** + * If true, returns only messages that are available locally without sending network + * requests + */ + readonly only_local?: boolean, + } + + export type getMessageThreadHistory = { + /** + * Returns messages in a message thread of a message. Can be used only if message.can_get_message_thread + * == true. Message thread of a channel message is in the channel's linked supergroup. + * The messages are returned in a reverse chronological order (i.e., in order of + * decreasing message_id). For optimal performance, the number of returned messages + * is chosen by TDLib + */ + readonly _: 'getMessageThreadHistory', + /** Chat identifier */ + readonly chat_id?: number, + /** Message identifier, which thread history needs to be returned */ + readonly message_id?: number, + /** + * Identifier of the message starting from which history must be fetched; use 0 + * to get results from the last message + */ + readonly from_message_id?: number, + /** + * Specify 0 to get results from exactly the from_message_id or a negative offset + * up to 99 to get additionally some newer messages + */ + readonly offset?: number, + /** + * The maximum number of messages to be returned; must be positive and can't be + * greater than 100. If the offset is negative, the limit must be greater than + * or equal to -offset. For optimal performance, the number of returned messages + * is chosen by TDLib and can be smaller than the specified limit + */ + readonly limit?: number, + } + + export type deleteChatHistory = { + /** + * Deletes all messages in the chat. Use chat.can_be_deleted_only_for_self and + * chat.can_be_deleted_for_all_users fields to find whether and how the method + * can be applied to the chat + */ + readonly _: 'deleteChatHistory', + /** Chat identifier */ + readonly chat_id?: number, + /** Pass true if the chat needs to be removed from the chat list */ + readonly remove_from_chat_list?: boolean, + /** Pass true to delete chat history for all users */ + readonly revoke?: boolean, + } + + export type deleteChat = { + /** + * Deletes a chat along with all messages in the corresponding chat for all chat + * members; requires owner privileges. For group chats this will release the username + * and remove all members. Chats with more than 1000 members can't be deleted using + * this method + */ + readonly _: 'deleteChat', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type searchChatMessages = { + /** + * Searches for messages with given words in the chat. Returns the results in reverse + * chronological order, i.e. in order of decreasing message_id. Cannot be used + * in secret chats with a non-empty query (searchSecretMessages must be used instead), + * or without an enabled message database. For optimal performance, the number + * of returned messages is chosen by TDLib and can be smaller than the specified + * limit + */ + readonly _: 'searchChatMessages', + /** Identifier of the chat in which to search messages */ + readonly chat_id?: number, + /** Query to search for */ + readonly query?: string, + /** + * Identifier of the sender of messages to search for; pass null to search for + * messages from any sender. Not supported in secret chats + */ + readonly sender_id?: MessageSender$Input, + /** + * Identifier of the message starting from which history must be fetched; use 0 + * to get results from the last message + */ + readonly from_message_id?: number, + /** + * Specify 0 to get results from exactly the from_message_id or a negative offset + * to get the specified message and some newer messages + */ + readonly offset?: number, + /** + * The maximum number of messages to be returned; must be positive and can't be + * greater than 100. If the offset is negative, the limit must be greater than + * -offset. For optimal performance, the number of returned messages is chosen + * by TDLib and can be smaller than the specified limit + */ + readonly limit?: number, + /** Additional filter for messages to search; pass null to search for all messages */ + readonly filter?: SearchMessagesFilter$Input, + /** + * If not 0, only messages in the specified thread will be returned; supergroups + * only + */ + readonly message_thread_id?: number, + } + + export type searchMessages = { + /** + * Searches for messages in all chats except secret chats. Returns the results + * in reverse chronological order (i.e., in order of decreasing (date, chat_id, + * message_id)). For optimal performance, the number of returned messages is chosen + * by TDLib and can be smaller than the specified limit + */ + readonly _: 'searchMessages', + /** + * Chat list in which to search messages; pass null to search in all chats regardless + * of their chat list. Only Main and Archive chat lists are supported + */ + readonly chat_list?: ChatList$Input, + /** Query to search for */ + readonly query?: string, + /** + * The date of the message starting from which the results need to be fetched. + * Use 0 or any date in the future to get results from the last message + */ + readonly offset_date?: number, + /** The chat identifier of the last found message, or 0 for the first request */ + readonly offset_chat_id?: number, + /** The message identifier of the last found message, or 0 for the first request */ + readonly offset_message_id?: number, + /** + * The maximum number of messages to be returned; up to 100. For optimal performance, + * the number of returned messages is chosen by TDLib and can be smaller than the + * specified limit + */ + readonly limit?: number, + /** + * Additional filter for messages to search; pass null to search for all messages. + * Filters searchMessagesFilterMention, searchMessagesFilterUnreadMention, searchMessagesFilterFailedToSend + * and searchMessagesFilterPinned are unsupported in this function + */ + readonly filter?: SearchMessagesFilter$Input, + /** If not 0, the minimum date of the messages to return */ + readonly min_date?: number, + /** If not 0, the maximum date of the messages to return */ + readonly max_date?: number, + } + + export type searchSecretMessages = { + /** + * Searches for messages in secret chats. Returns the results in reverse chronological + * order. For optimal performance, the number of returned messages is chosen by + * TDLib + */ + readonly _: 'searchSecretMessages', + /** + * Identifier of the chat in which to search. Specify 0 to search in all secret + * chats + */ + readonly chat_id?: number, + /** Query to search for. If empty, searchChatMessages must be used instead */ + readonly query?: string, + /** + * Offset of the first entry to return as received from the previous request; use + * empty string to get first chunk of results + */ + readonly offset?: string, + /** + * The maximum number of messages to be returned; up to 100. For optimal performance, + * the number of returned messages is chosen by TDLib and can be smaller than the + * specified limit + */ + readonly limit?: number, + /** Additional filter for messages to search; pass null to search for all messages */ + readonly filter?: SearchMessagesFilter$Input, + } + + export type searchCallMessages = { + /** + * Searches for call messages. Returns the results in reverse chronological order + * (i. e., in order of decreasing message_id). For optimal performance, the number + * of returned messages is chosen by TDLib + */ + readonly _: 'searchCallMessages', + /** + * Identifier of the message from which to search; use 0 to get results from the + * last message + */ + readonly from_message_id?: number, + /** + * The maximum number of messages to be returned; up to 100. For optimal performance, + * the number of returned messages is chosen by TDLib and can be smaller than the + * specified limit + */ + readonly limit?: number, + /** If true, returns only messages with missed/declined calls */ + readonly only_missed?: boolean, + } + + export type deleteAllCallMessages = { + /** Deletes all call messages */ + readonly _: 'deleteAllCallMessages', + /** Pass true to delete the messages for all users */ + readonly revoke?: boolean, + } + + export type searchChatRecentLocationMessages = { + /** + * Returns information about the recent locations of chat members that were sent + * to the chat. Returns up to 1 location message per user + */ + readonly _: 'searchChatRecentLocationMessages', + /** Chat identifier */ + readonly chat_id?: number, + /** The maximum number of messages to be returned */ + readonly limit?: number, + } + + export type getActiveLiveLocationMessages = { + /** + * Returns all active live locations that need to be updated by the application. + * The list is persistent across application restarts only if the message database + * is used + */ + readonly _: 'getActiveLiveLocationMessages', + } + + export type getChatMessageByDate = { + /** Returns the last message sent in a chat no later than the specified date */ + readonly _: 'getChatMessageByDate', + /** Chat identifier */ + readonly chat_id?: number, + /** Point in time (Unix timestamp) relative to which to search for messages */ + readonly date?: number, + } + + export type getChatSparseMessagePositions = { + /** + * Returns sparse positions of messages of the specified type in the chat to be + * used for shared media scroll implementation. Returns the results in reverse + * chronological order (i.e., in order of decreasing message_id). Cannot be used + * in secret chats or with searchMessagesFilterFailedToSend filter without an enabled + * message database + */ + readonly _: 'getChatSparseMessagePositions', + /** Identifier of the chat in which to return information about message positions */ + readonly chat_id?: number, + /** + * Filter for message content. Filters searchMessagesFilterEmpty, searchMessagesFilterMention + * and searchMessagesFilterUnreadMention are unsupported in this function + */ + readonly filter?: SearchMessagesFilter$Input, + /** The message identifier from which to return information about message positions */ + readonly from_message_id?: number, + /** + * The expected number of message positions to be returned; 50-2000. A smaller + * number of positions can be returned, if there are not enough appropriate messages + */ + readonly limit?: number, + } + + export type getChatMessageCalendar = { + /** + * Returns information about the next messages of the specified type in the chat + * split by days. Returns the results in reverse chronological order. Can return + * partial result for the last returned day. Behavior of this method depends on + * the value of the option "utc_time_offset" + */ + readonly _: 'getChatMessageCalendar', + /** Identifier of the chat in which to return information about messages */ + readonly chat_id?: number, + /** + * Filter for message content. Filters searchMessagesFilterEmpty, searchMessagesFilterMention + * and searchMessagesFilterUnreadMention are unsupported in this function + */ + readonly filter?: SearchMessagesFilter$Input, + /** + * The message identifier from which to return information about messages; use + * 0 to get results from the last message + */ + readonly from_message_id?: number, + } + + export type getChatMessageCount = { + /** Returns approximate number of messages of the specified type in the chat */ + readonly _: 'getChatMessageCount', + /** Identifier of the chat in which to count messages */ + readonly chat_id?: number, + /** + * Filter for message content; searchMessagesFilterEmpty is unsupported in this + * function + */ + readonly filter?: SearchMessagesFilter$Input, + /** + * If true, returns count that is available locally without sending network requests, + * returning -1 if the number of messages is unknown + */ + readonly return_local?: boolean, + } + + export type getChatScheduledMessages = { + /** + * Returns all scheduled messages in a chat. The messages are returned in a reverse + * chronological order (i.e., in order of decreasing message_id) + */ + readonly _: 'getChatScheduledMessages', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type getMessagePublicForwards = { + /** + * Returns forwarded copies of a channel message to different public channels. + * For optimal performance, the number of returned messages is chosen by TDLib + */ + readonly _: 'getMessagePublicForwards', + /** Chat identifier of the message */ + readonly chat_id?: number, + /** Message identifier */ + readonly message_id?: number, + /** + * Offset of the first entry to return as received from the previous request; use + * empty string to get first chunk of results + */ + readonly offset?: string, + /** + * The maximum number of messages to be returned; must be positive and can't be + * greater than 100. For optimal performance, the number of returned messages is + * chosen by TDLib and can be smaller than the specified limit + */ + readonly limit?: number, + } + + export type getChatSponsoredMessage = { + /** + * Returns sponsored message to be shown in a chat; for channel chats only. Returns + * a 404 error if there is no sponsored message in the chat + */ + readonly _: 'getChatSponsoredMessage', + /** Identifier of the chat */ + readonly chat_id?: number, + } + + export type removeNotification = { + /** + * Removes an active notification from notification list. Needs to be called only + * if the notification is removed by the current user + */ + readonly _: 'removeNotification', + /** Identifier of notification group to which the notification belongs */ + readonly notification_group_id?: number, + /** Identifier of removed notification */ + readonly notification_id?: number, + } + + export type removeNotificationGroup = { + /** + * Removes a group of active notifications. Needs to be called only if the notification + * group is removed by the current user + */ + readonly _: 'removeNotificationGroup', + /** Notification group identifier */ + readonly notification_group_id?: number, + /** The maximum identifier of removed notifications */ + readonly max_notification_id?: number, + } + + export type getMessageLink = { + /** + * Returns an HTTPS link to a message in a chat. Available only for already sent + * messages in supergroups and channels, or if message.can_get_media_timestamp_links + * and a media timestamp link is generated. This is an offline request + */ + readonly _: 'getMessageLink', + /** Identifier of the chat to which the message belongs */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + /** + * If not 0, timestamp from which the video/audio/video note/voice note playing + * must start, in seconds. The media can be in the message content or in its web + * page preview + */ + readonly media_timestamp?: number, + /** Pass true to create a link for the whole media album */ + readonly for_album?: boolean, + /** + * Pass true to create a link to the message as a channel post comment, or from + * a message thread + */ + readonly for_comment?: boolean, + } + + export type getMessageEmbeddingCode = { + /** + * Returns an HTML code for embedding the message. Available only for messages + * in supergroups and channels with a username + */ + readonly _: 'getMessageEmbeddingCode', + /** Identifier of the chat to which the message belongs */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + /** Pass true to return an HTML code for embedding of the whole media album */ + readonly for_album?: boolean, + } + + export type getMessageLinkInfo = { + /** + * Returns information about a public or private message link. Can be called for + * any internal link of the type internalLinkTypeMessage + */ + readonly _: 'getMessageLinkInfo', + /** The message link */ + readonly url?: string, + } + + export type getChatAvailableMessageSenders = { + /** + * Returns list of message sender identifiers, which can be used to send messages + * in a chat + */ + readonly _: 'getChatAvailableMessageSenders', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type setChatMessageSender = { + /** Selects a message sender to send messages in a chat */ + readonly _: 'setChatMessageSender', + /** Chat identifier */ + readonly chat_id?: number, + /** New message sender for the chat */ + readonly message_sender_id?: MessageSender$Input, + } + + export type sendMessage = { + /** Sends a message. Returns the sent message */ + readonly _: 'sendMessage', + /** Target chat */ + readonly chat_id?: number, + /** If not 0, a message thread identifier in which the message will be sent */ + readonly message_thread_id?: number, + /** Identifier of the message to reply to or 0 */ + readonly reply_to_message_id?: number, + /** Options to be used to send the message; pass null to use default options */ + readonly options?: messageSendOptions$Input, + /** Markup for replying to the message; pass null if none; for bots only */ + readonly reply_markup?: ReplyMarkup$Input, + /** The content of the message to be sent */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type sendMessageAlbum = { + /** + * Sends 2-10 messages grouped together into an album. Currently, only audio, document, + * photo and video messages can be grouped into an album. Documents and audio files + * can be only grouped in an album with messages of the same type. Returns sent + * messages + */ + readonly _: 'sendMessageAlbum', + /** Target chat */ + readonly chat_id?: number, + /** If not 0, a message thread identifier in which the messages will be sent */ + readonly message_thread_id?: number, + /** Identifier of a message to reply to or 0 */ + readonly reply_to_message_id?: number, + /** Options to be used to send the messages; pass null to use default options */ + readonly options?: messageSendOptions$Input, + /** Contents of messages to be sent. At most 10 messages can be added to an album */ + readonly input_message_contents?: ReadonlyArray, + } + + export type sendBotStartMessage = { + /** + * Invites a bot to a chat (if it is not yet a member) and sends it the /start + * command. Bots can't be invited to a private chat other than the chat with the + * bot. Bots can't be invited to channels (although they can be added as admins) + * and secret chats. Returns the sent message + */ + readonly _: 'sendBotStartMessage', + /** Identifier of the bot */ + readonly bot_user_id?: number, + /** Identifier of the target chat */ + readonly chat_id?: number, + /** A hidden parameter sent to the bot for deep linking purposes (https://core.telegram.org/bots#deep-linking) */ + readonly parameter?: string, + } + + export type sendInlineQueryResultMessage = { + /** + * Sends the result of an inline query as a message. Returns the sent message. + * Always clears a chat draft message + */ + readonly _: 'sendInlineQueryResultMessage', + /** Target chat */ + readonly chat_id?: number, + /** If not 0, a message thread identifier in which the message will be sent */ + readonly message_thread_id?: number, + /** Identifier of a message to reply to or 0 */ + readonly reply_to_message_id?: number, + /** Options to be used to send the message; pass null to use default options */ + readonly options?: messageSendOptions$Input, + /** Identifier of the inline query */ + readonly query_id?: number | string, + /** Identifier of the inline result */ + readonly result_id?: string, + /** + * If true, there will be no mention of a bot, via which the message is sent. Can + * be used only for bots GetOption("animation_search_bot_username"), GetOption("photo_search_bot_username") + * and GetOption("venue_search_bot_username") + */ + readonly hide_via_bot?: boolean, + } + + export type forwardMessages = { + /** + * Forwards previously sent messages. Returns the forwarded messages in the same + * order as the message identifiers passed in message_ids. If a message can't be + * forwarded, null will be returned instead of the message + */ + readonly _: 'forwardMessages', + /** Identifier of the chat to which to forward messages */ + readonly chat_id?: number, + /** Identifier of the chat from which to forward messages */ + readonly from_chat_id?: number, + /** + * Identifiers of the messages to forward. Message identifiers must be in a strictly + * increasing order. At most 100 messages can be forwarded simultaneously + */ + readonly message_ids?: ReadonlyArray, + /** Options to be used to send the messages; pass null to use default options */ + readonly options?: messageSendOptions$Input, + /** + * If true, content of the messages will be copied without reference to the original + * sender. Always true if the messages are forwarded to a secret chat or are local + */ + readonly send_copy?: boolean, + /** + * If true, media caption of message copies will be removed. Ignored if send_copy + * is false + */ + readonly remove_caption?: boolean, + /** If true, messages will not be forwarded and instead fake messages will be returned */ + readonly only_preview?: boolean, + } + + export type resendMessages = { + /** + * Resends messages which failed to send. Can be called only for messages for which + * messageSendingStateFailed.can_retry is true and after specified in messageSendingStateFailed.retry_after + * time passed. If a message is re-sent, the corresponding failed to send message + * is deleted. Returns the sent messages in the same order as the message identifiers + * passed in message_ids. If a message can't be re-sent, null will be returned + * instead of the message + */ + readonly _: 'resendMessages', + /** Identifier of the chat to send messages */ + readonly chat_id?: number, + /** + * Identifiers of the messages to resend. Message identifiers must be in a strictly + * increasing order + */ + readonly message_ids?: ReadonlyArray, + } + + export type sendChatScreenshotTakenNotification = { + /** + * Sends a notification about a screenshot taken in a chat. Supported only in private + * and secret chats + */ + readonly _: 'sendChatScreenshotTakenNotification', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type addLocalMessage = { + /** + * Adds a local message to a chat. The message is persistent across application + * restarts only if the message database is used. Returns the added message + */ + readonly _: 'addLocalMessage', + /** Target chat */ + readonly chat_id?: number, + /** Identifier of the sender of the message */ + readonly sender_id?: MessageSender$Input, + /** Identifier of the message to reply to or 0 */ + readonly reply_to_message_id?: number, + /** Pass true to disable notification for the message */ + readonly disable_notification?: boolean, + /** The content of the message to be added */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type deleteMessages = { + /** Deletes messages */ + readonly _: 'deleteMessages', + /** Chat identifier */ + readonly chat_id?: number, + /** Identifiers of the messages to be deleted */ + readonly message_ids?: ReadonlyArray, + /** + * Pass true to delete messages for all chat members. Always true for supergroups, + * channels and secret chats + */ + readonly revoke?: boolean, + } + + export type deleteChatMessagesBySender = { + /** + * Deletes all messages sent by the specified message sender in a chat. Supported + * only for supergroups; requires can_delete_messages administrator privileges + */ + readonly _: 'deleteChatMessagesBySender', + /** Chat identifier */ + readonly chat_id?: number, + /** Identifier of the sender of messages to delete */ + readonly sender_id?: MessageSender$Input, + } + + export type deleteChatMessagesByDate = { + /** + * Deletes all messages between the specified dates in a chat. Supported only for + * private chats and basic groups. Messages sent in the last 30 seconds will not + * be deleted + */ + readonly _: 'deleteChatMessagesByDate', + /** Chat identifier */ + readonly chat_id?: number, + /** The minimum date of the messages to delete */ + readonly min_date?: number, + /** The maximum date of the messages to delete */ + readonly max_date?: number, + /** Pass true to delete chat messages for all users; private chats only */ + readonly revoke?: boolean, + } + + export type editMessageText = { + /** + * Edits the text of a message (or a text of a game message). Returns the edited + * message after the edit is completed on the server side + */ + readonly _: 'editMessageText', + /** The chat the message belongs to */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + /** The new message reply markup; pass null if none; for bots only */ + readonly reply_markup?: ReplyMarkup$Input, + /** New text content of the message. Must be of type inputMessageText */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type editMessageLiveLocation = { + /** + * Edits the message content of a live location. Messages can be edited for a limited + * period of time specified in the live location. Returns the edited message after + * the edit is completed on the server side + */ + readonly _: 'editMessageLiveLocation', + /** The chat the message belongs to */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + /** The new message reply markup; pass null if none; for bots only */ + readonly reply_markup?: ReplyMarkup$Input, + /** New location content of the message; pass null to stop sharing the live location */ + readonly location?: location$Input, + /** + * The new direction in which the location moves, in degrees; 1-360. Pass 0 if + * unknown + */ + readonly heading?: number, + /** + * The new maximum distance for proximity alerts, in meters (0-100000). Pass 0 + * if the notification is disabled + */ + readonly proximity_alert_radius?: number, + } + + export type editMessageMedia = { + /** + * Edits the content of a message with an animation, an audio, a document, a photo + * or a video, including message caption. If only the caption needs to be edited, + * use editMessageCaption instead. The media can't be edited if the message was + * set to self-destruct or to a self-destructing media. The type of message content + * in an album can't be changed with exception of replacing a photo with a video + * or vice versa. Returns the edited message after the edit is completed on the + * server side + */ + readonly _: 'editMessageMedia', + /** The chat the message belongs to */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + /** The new message reply markup; pass null if none; for bots only */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * New content of the message. Must be one of the following types: inputMessageAnimation, + * inputMessageAudio, inputMessageDocument, inputMessagePhoto or inputMessageVideo + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type editMessageCaption = { + /** + * Edits the message content caption. Returns the edited message after the edit + * is completed on the server side + */ + readonly _: 'editMessageCaption', + /** The chat the message belongs to */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + /** The new message reply markup; pass null if none; for bots only */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * New message content caption; 0-GetOption("message_caption_length_max") characters; + * pass null to remove caption + */ + readonly caption?: formattedText$Input, + } + + export type editMessageReplyMarkup = { + /** + * Edits the message reply markup; for bots only. Returns the edited message after + * the edit is completed on the server side + */ + readonly _: 'editMessageReplyMarkup', + /** The chat the message belongs to */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + /** The new message reply markup; pass null if none */ + readonly reply_markup?: ReplyMarkup$Input, + } + + export type editInlineMessageText = { + /** Edits the text of an inline text or game message sent via a bot; for bots only */ + readonly _: 'editInlineMessageText', + /** Inline message identifier */ + readonly inline_message_id?: string, + /** The new message reply markup; pass null if none */ + readonly reply_markup?: ReplyMarkup$Input, + /** New text content of the message. Must be of type inputMessageText */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type editInlineMessageLiveLocation = { + /** + * Edits the content of a live location in an inline message sent via a bot; for + * bots only + */ + readonly _: 'editInlineMessageLiveLocation', + /** Inline message identifier */ + readonly inline_message_id?: string, + /** The new message reply markup; pass null if none */ + readonly reply_markup?: ReplyMarkup$Input, + /** New location content of the message; pass null to stop sharing the live location */ + readonly location?: location$Input, + /** + * The new direction in which the location moves, in degrees; 1-360. Pass 0 if + * unknown + */ + readonly heading?: number, + /** + * The new maximum distance for proximity alerts, in meters (0-100000). Pass 0 + * if the notification is disabled + */ + readonly proximity_alert_radius?: number, + } + + export type editInlineMessageMedia = { + /** + * Edits the content of a message with an animation, an audio, a document, a photo + * or a video in an inline message sent via a bot; for bots only + */ + readonly _: 'editInlineMessageMedia', + /** Inline message identifier */ + readonly inline_message_id?: string, + /** The new message reply markup; pass null if none; for bots only */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * New content of the message. Must be one of the following types: inputMessageAnimation, + * inputMessageAudio, inputMessageDocument, inputMessagePhoto or inputMessageVideo + */ + readonly input_message_content?: InputMessageContent$Input, + } + + export type editInlineMessageCaption = { + /** Edits the caption of an inline message sent via a bot; for bots only */ + readonly _: 'editInlineMessageCaption', + /** Inline message identifier */ + readonly inline_message_id?: string, + /** The new message reply markup; pass null if none */ + readonly reply_markup?: ReplyMarkup$Input, + /** + * New message content caption; pass null to remove caption; 0-GetOption("message_caption_length_max") + * characters + */ + readonly caption?: formattedText$Input, + } + + export type editInlineMessageReplyMarkup = { + /** Edits the reply markup of an inline message sent via a bot; for bots only */ + readonly _: 'editInlineMessageReplyMarkup', + /** Inline message identifier */ + readonly inline_message_id?: string, + /** The new message reply markup; pass null if none */ + readonly reply_markup?: ReplyMarkup$Input, + } + + export type editMessageSchedulingState = { + /** + * Edits the time when a scheduled message will be sent. Scheduling state of all + * messages in the same album or forwarded together with the message will be also + * changed + */ + readonly _: 'editMessageSchedulingState', + /** The chat the message belongs to */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + /** The new message scheduling state; pass null to send the message immediately */ + readonly scheduling_state?: MessageSchedulingState$Input, + } + + export type getTextEntities = { + /** + * Returns all entities (mentions, hashtags, cashtags, bot commands, bank card + * numbers, URLs, and email addresses) contained in the text. Can be called synchronously + */ + readonly _: 'getTextEntities', + /** The text in which to look for entites */ + readonly text?: string, + } + + export type parseTextEntities = { + /** + * Parses Bold, Italic, Underline, Strikethrough, Code, Pre, PreCode, TextUrl and + * MentionName entities contained in the text. Can be called synchronously + */ + readonly _: 'parseTextEntities', + /** The text to parse */ + readonly text?: string, + /** Text parse mode */ + readonly parse_mode?: TextParseMode$Input, + } + + export type parseMarkdown = { + /** + * Parses Markdown entities in a human-friendly format, ignoring markup errors. + * Can be called synchronously + */ + readonly _: 'parseMarkdown', + /** + * The text to parse. For example, "__italic__ ~~strikethrough~~ **bold** `code` + * ```pre``` __[italic__ text_url](telegram.org) __italic**bold italic__bold**" + */ + readonly text?: formattedText$Input, + } + + export type getMarkdownText = { + /** + * Replaces text entities with Markdown formatting in a human-friendly format. + * Entities that can't be represented in Markdown unambiguously are kept as is. + * Can be called synchronously + */ + readonly _: 'getMarkdownText', + /** The text */ + readonly text?: formattedText$Input, + } + + export type getFileMimeType = { + /** + * Returns the MIME type of a file, guessed by its extension. Returns an empty + * string on failure. Can be called synchronously + */ + readonly _: 'getFileMimeType', + /** The name of the file or path to the file */ + readonly file_name?: string, + } + + export type getFileExtension = { + /** + * Returns the extension of a file, guessed by its MIME type. Returns an empty + * string on failure. Can be called synchronously + */ + readonly _: 'getFileExtension', + /** The MIME type of the file */ + readonly mime_type?: string, + } + + export type cleanFileName = { + /** + * Removes potentially dangerous characters from the name of a file. The encoding + * of the file name is supposed to be UTF-8. Returns an empty string on failure. + * Can be called synchronously + */ + readonly _: 'cleanFileName', + /** File name or path to the file */ + readonly file_name?: string, + } + + export type getLanguagePackString = { + /** + * Returns a string stored in the local database from the specified localization + * target and language pack by its key. Returns a 404 error if the string is not + * found. Can be called synchronously + */ + readonly _: 'getLanguagePackString', + /** Path to the language pack database in which strings are stored */ + readonly language_pack_database_path?: string, + /** Localization target to which the language pack belongs */ + readonly localization_target?: string, + /** Language pack identifier */ + readonly language_pack_id?: string, + /** Language pack key of the string to be returned */ + readonly key?: string, + } + + export type getJsonValue = { + /** + * Converts a JSON-serialized string to corresponding JsonValue object. Can be + * called synchronously + */ + readonly _: 'getJsonValue', + /** The JSON-serialized string */ + readonly json?: string, + } + + export type getJsonString = { + /** + * Converts a JsonValue object to corresponding JSON-serialized string. Can be + * called synchronously + */ + readonly _: 'getJsonString', + /** The JsonValue object */ + readonly json_value?: JsonValue$Input, + } + + export type setPollAnswer = { + /** + * Changes the user answer to a poll. A poll in quiz mode can be answered only + * once + */ + readonly _: 'setPollAnswer', + /** Identifier of the chat to which the poll belongs */ + readonly chat_id?: number, + /** Identifier of the message containing the poll */ + readonly message_id?: number, + /** + * 0-based identifiers of answer options, chosen by the user. User can choose more + * than 1 answer option only is the poll allows multiple answers + */ + readonly option_ids?: ReadonlyArray, + } + + export type getPollVoters = { + /** + * Returns users voted for the specified option in a non-anonymous polls. For optimal + * performance, the number of returned users is chosen by TDLib + */ + readonly _: 'getPollVoters', + /** Identifier of the chat to which the poll belongs */ + readonly chat_id?: number, + /** Identifier of the message containing the poll */ + readonly message_id?: number, + /** 0-based identifier of the answer option */ + readonly option_id?: number, + /** Number of users to skip in the result; must be non-negative */ + readonly offset?: number, + /** + * The maximum number of users to be returned; must be positive and can't be greater + * than 50. For optimal performance, the number of returned users is chosen by + * TDLib and can be smaller than the specified limit, even if the end of the voter + * list has not been reached + */ + readonly limit?: number, + } + + export type stopPoll = { + /** + * Stops a poll. A poll in a message can be stopped when the message has can_be_edited + * flag set + */ + readonly _: 'stopPoll', + /** Identifier of the chat to which the poll belongs */ + readonly chat_id?: number, + /** Identifier of the message containing the poll */ + readonly message_id?: number, + /** The new message reply markup; pass null if none; for bots only */ + readonly reply_markup?: ReplyMarkup$Input, + } + + export type hideSuggestedAction = { + /** Hides a suggested action */ + readonly _: 'hideSuggestedAction', + /** Suggested action to hide */ + readonly action?: SuggestedAction$Input, + } + + export type getLoginUrlInfo = { + /** + * Returns information about a button of type inlineKeyboardButtonTypeLoginUrl. + * The method needs to be called when the user presses the button + */ + readonly _: 'getLoginUrlInfo', + /** Chat identifier of the message with the button */ + readonly chat_id?: number, + /** Message identifier of the message with the button */ + readonly message_id?: number, + /** Button identifier */ + readonly button_id?: number, + } + + export type getLoginUrl = { + /** + * Returns an HTTP URL which can be used to automatically authorize the user on + * a website after clicking an inline button of type inlineKeyboardButtonTypeLoginUrl. + * Use the method getLoginUrlInfo to find whether a prior user confirmation is + * needed. If an error is returned, then the button must be handled as an ordinary + * URL button + */ + readonly _: 'getLoginUrl', + /** Chat identifier of the message with the button */ + readonly chat_id?: number, + /** Message identifier of the message with the button */ + readonly message_id?: number, + /** Button identifier */ + readonly button_id?: number, + /** True, if the user allowed the bot to send them messages */ + readonly allow_write_access?: boolean, + } + + export type getInlineQueryResults = { + /** + * Sends an inline query to a bot and returns its results. Returns an error with + * code 502 if the bot fails to answer the query before the query timeout expires + */ + readonly _: 'getInlineQueryResults', + /** The identifier of the target bot */ + readonly bot_user_id?: number, + /** Identifier of the chat where the query was sent */ + readonly chat_id?: number, + /** Location of the user; pass null if unknown or the bot doesn't need user's location */ + readonly user_location?: location$Input, + /** Text of the query */ + readonly query?: string, + /** Offset of the first entry to return */ + readonly offset?: string, + } + + export type answerInlineQuery = { + /** Sets the result of an inline query; for bots only */ + readonly _: 'answerInlineQuery', + /** Identifier of the inline query */ + readonly inline_query_id?: number | string, + /** True, if the result of the query can be cached for the specified user */ + readonly is_personal?: boolean, + /** The results of the query */ + readonly results?: ReadonlyArray, + /** Allowed time to cache the results of the query, in seconds */ + readonly cache_time?: number, + /** + * Offset for the next inline query; pass an empty string if there are no more + * results + */ + readonly next_offset?: string, + /** + * If non-empty, this text must be shown on the button that opens a private chat + * with the bot and sends a start message to the bot with the parameter switch_pm_parameter + */ + readonly switch_pm_text?: string, + /** The parameter for the bot start message */ + readonly switch_pm_parameter?: string, + } + + export type getCallbackQueryAnswer = { + /** + * Sends a callback query to a bot and returns an answer. Returns an error with + * code 502 if the bot fails to answer the query before the query timeout expires + */ + readonly _: 'getCallbackQueryAnswer', + /** Identifier of the chat with the message */ + readonly chat_id?: number, + /** Identifier of the message from which the query originated */ + readonly message_id?: number, + /** Query payload */ + readonly payload?: CallbackQueryPayload$Input, + } + + export type answerCallbackQuery = { + /** Sets the result of a callback query; for bots only */ + readonly _: 'answerCallbackQuery', + /** Identifier of the callback query */ + readonly callback_query_id?: number | string, + /** Text of the answer */ + readonly text?: string, + /** If true, an alert must be shown to the user instead of a toast notification */ + readonly show_alert?: boolean, + /** URL to be opened */ + readonly url?: string, + /** Time during which the result of the query can be cached, in seconds */ + readonly cache_time?: number, + } + + export type answerShippingQuery = { + /** Sets the result of a shipping query; for bots only */ + readonly _: 'answerShippingQuery', + /** Identifier of the shipping query */ + readonly shipping_query_id?: number | string, + /** Available shipping options */ + readonly shipping_options?: ReadonlyArray, + /** An error message, empty on success */ + readonly error_message?: string, + } + + export type answerPreCheckoutQuery = { + /** Sets the result of a pre-checkout query; for bots only */ + readonly _: 'answerPreCheckoutQuery', + /** Identifier of the pre-checkout query */ + readonly pre_checkout_query_id?: number | string, + /** An error message, empty on success */ + readonly error_message?: string, + } + + export type setGameScore = { + /** Updates the game score of the specified user in the game; for bots only */ + readonly _: 'setGameScore', + /** The chat to which the message with the game belongs */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + /** True, if the message needs to be edited */ + readonly edit_message?: boolean, + /** User identifier */ + readonly user_id?: number, + /** The new score */ + readonly score?: number, + /** + * Pass true to update the score even if it decreases. If the score is 0, the user + * will be deleted from the high score table + */ + readonly force?: boolean, + } + + export type setInlineGameScore = { + /** Updates the game score of the specified user in a game; for bots only */ + readonly _: 'setInlineGameScore', + /** Inline message identifier */ + readonly inline_message_id?: string, + /** True, if the message needs to be edited */ + readonly edit_message?: boolean, + /** User identifier */ + readonly user_id?: number, + /** The new score */ + readonly score?: number, + /** + * Pass true to update the score even if it decreases. If the score is 0, the user + * will be deleted from the high score table + */ + readonly force?: boolean, + } + + export type getGameHighScores = { + /** + * Returns the high scores for a game and some part of the high score table in + * the range of the specified user; for bots only + */ + readonly _: 'getGameHighScores', + /** The chat that contains the message with the game */ + readonly chat_id?: number, + /** Identifier of the message */ + readonly message_id?: number, + /** User identifier */ + readonly user_id?: number, + } + + export type getInlineGameHighScores = { + /** + * Returns game high scores and some part of the high score table in the range + * of the specified user; for bots only + */ + readonly _: 'getInlineGameHighScores', + /** Inline message identifier */ + readonly inline_message_id?: string, + /** User identifier */ + readonly user_id?: number, + } + + export type deleteChatReplyMarkup = { + /** + * Deletes the default reply markup from a chat. Must be called after a one-time + * keyboard or a ForceReply reply markup has been used. UpdateChatReplyMarkup will + * be sent if the reply markup is changed + */ + readonly _: 'deleteChatReplyMarkup', + /** Chat identifier */ + readonly chat_id?: number, + /** The message identifier of the used keyboard */ + readonly message_id?: number, + } + + export type sendChatAction = { + /** Sends a notification about user activity in a chat */ + readonly _: 'sendChatAction', + /** Chat identifier */ + readonly chat_id?: number, + /** If not 0, a message thread identifier in which the action was performed */ + readonly message_thread_id?: number, + /** The action description; pass null to cancel the currently active action */ + readonly action?: ChatAction$Input, + } + + export type openChat = { + /** + * Informs TDLib that the chat is opened by the user. Many useful activities depend + * on the chat being opened or closed (e.g., in supergroups and channels all updates + * are received only for opened chats) + */ + readonly _: 'openChat', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type closeChat = { + /** + * Informs TDLib that the chat is closed by the user. Many useful activities depend + * on the chat being opened or closed + */ + readonly _: 'closeChat', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type viewMessages = { + /** + * Informs TDLib that messages are being viewed by the user. Sponsored messages + * must be marked as viewed only when the entire text of the message is shown on + * the screen (excluding the button). Many useful activities depend on whether + * the messages are currently being viewed or not (e.g., marking messages as read, + * incrementing a view counter, updating a view counter, removing deleted messages + * in supergroups and channels) + */ + readonly _: 'viewMessages', + /** Chat identifier */ + readonly chat_id?: number, + /** If not 0, a message thread identifier in which the messages are being viewed */ + readonly message_thread_id?: number, + /** The identifiers of the messages being viewed */ + readonly message_ids?: ReadonlyArray, + /** True, if messages in closed chats must be marked as read by the request */ + readonly force_read?: boolean, + } + + export type openMessageContent = { + /** + * Informs TDLib that the message content has been opened (e.g., the user has opened + * a photo, video, document, location or venue, or has listened to an audio file + * or voice note message). An updateMessageContentOpened update will be generated + * if something has changed + */ + readonly _: 'openMessageContent', + /** Chat identifier of the message */ + readonly chat_id?: number, + /** Identifier of the message with the opened content */ + readonly message_id?: number, + } + + export type clickAnimatedEmojiMessage = { + /** + * Informs TDLib that a message with an animated emoji was clicked by the user. + * Returns a big animated sticker to be played or a 404 error if usual animation + * needs to be played + */ + readonly _: 'clickAnimatedEmojiMessage', + /** Chat identifier of the message */ + readonly chat_id?: number, + /** Identifier of the clicked message */ + readonly message_id?: number, + } + + export type getInternalLinkType = { + /** + * Returns information about the type of an internal link. Returns a 404 error + * if the link is not internal. Can be called before authorization + */ + readonly _: 'getInternalLinkType', + /** The link */ + readonly link?: string, + } + + export type getExternalLinkInfo = { + /** + * Returns information about an action to be done when the current user clicks + * an external link. Don't use this method for links from secret chats if web page + * preview is disabled in secret chats + */ + readonly _: 'getExternalLinkInfo', + /** The link */ + readonly link?: string, + } + + export type getExternalLink = { + /** + * Returns an HTTP URL which can be used to automatically authorize the current + * user on a website after clicking an HTTP link. Use the method getExternalLinkInfo + * to find whether a prior user confirmation is needed + */ + readonly _: 'getExternalLink', + /** The HTTP link */ + readonly link?: string, + /** + * True, if the current user allowed the bot, returned in getExternalLinkInfo, + * to send them messages + */ + readonly allow_write_access?: boolean, + } + + export type readAllChatMentions = { + /** Marks all mentions in a chat as read */ + readonly _: 'readAllChatMentions', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type createPrivateChat = { + /** Returns an existing chat corresponding to a given user */ + readonly _: 'createPrivateChat', + /** User identifier */ + readonly user_id?: number, + /** + * If true, the chat will be created without network request. In this case all + * information about the chat except its type, title and photo can be incorrect + */ + readonly force?: boolean, + } + + export type createBasicGroupChat = { + /** Returns an existing chat corresponding to a known basic group */ + readonly _: 'createBasicGroupChat', + /** Basic group identifier */ + readonly basic_group_id?: number, + /** + * If true, the chat will be created without network request. In this case all + * information about the chat except its type, title and photo can be incorrect + */ + readonly force?: boolean, + } + + export type createSupergroupChat = { + /** Returns an existing chat corresponding to a known supergroup or channel */ + readonly _: 'createSupergroupChat', + /** Supergroup or channel identifier */ + readonly supergroup_id?: number, + /** + * If true, the chat will be created without network request. In this case all + * information about the chat except its type, title and photo can be incorrect + */ + readonly force?: boolean, + } + + export type createSecretChat = { + /** Returns an existing chat corresponding to a known secret chat */ + readonly _: 'createSecretChat', + /** Secret chat identifier */ + readonly secret_chat_id?: number, + } + + export type createNewBasicGroupChat = { + /** + * Creates a new basic group and sends a corresponding messageBasicGroupChatCreate. + * Returns the newly created chat + */ + readonly _: 'createNewBasicGroupChat', + /** Identifiers of users to be added to the basic group */ + readonly user_ids?: ReadonlyArray, + /** Title of the new basic group; 1-128 characters */ + readonly title?: string, + } + + export type createNewSupergroupChat = { + /** + * Creates a new supergroup or channel and sends a corresponding messageSupergroupChatCreate. + * Returns the newly created chat + */ + readonly _: 'createNewSupergroupChat', + /** Title of the new chat; 1-128 characters */ + readonly title?: string, + /** True, if a channel chat needs to be created */ + readonly is_channel?: boolean, + /** Chat description; 0-255 characters */ + readonly description?: string, + /** + * Chat location if a location-based supergroup is being created; pass null to + * create an ordinary supergroup chat + */ + readonly location?: chatLocation$Input, + /** True, if the supergroup is created for importing messages using importMessage */ + readonly for_import?: boolean, + } + + export type createNewSecretChat = { + /** Creates a new secret chat. Returns the newly created chat */ + readonly _: 'createNewSecretChat', + /** Identifier of the target user */ + readonly user_id?: number, + } + + export type upgradeBasicGroupChatToSupergroupChat = { + /** + * Creates a new supergroup from an existing basic group and sends a corresponding + * messageChatUpgradeTo and messageChatUpgradeFrom; requires creator privileges. + * Deactivates the original basic group + */ + readonly _: 'upgradeBasicGroupChatToSupergroupChat', + /** Identifier of the chat to upgrade */ + readonly chat_id?: number, + } + + export type getChatListsToAddChat = { + /** Returns chat lists to which the chat can be added. This is an offline request */ + readonly _: 'getChatListsToAddChat', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type addChatToList = { + /** + * Adds a chat to a chat list. A chat can't be simultaneously in Main and Archive + * chat lists, so it is automatically removed from another one if needed + */ + readonly _: 'addChatToList', + /** Chat identifier */ + readonly chat_id?: number, + /** The chat list. Use getChatListsToAddChat to get suitable chat lists */ + readonly chat_list?: ChatList$Input, + } + + export type getChatFilter = { + /** Returns information about a chat filter by its identifier */ + readonly _: 'getChatFilter', + /** Chat filter identifier */ + readonly chat_filter_id?: number, + } + + export type createChatFilter = { + /** Creates new chat filter. Returns information about the created chat filter */ + readonly _: 'createChatFilter', + /** Chat filter */ + readonly filter?: chatFilter$Input, + } + + export type editChatFilter = { + /** Edits existing chat filter. Returns information about the edited chat filter */ + readonly _: 'editChatFilter', + /** Chat filter identifier */ + readonly chat_filter_id?: number, + /** The edited chat filter */ + readonly filter?: chatFilter$Input, + } + + export type deleteChatFilter = { + /** Deletes existing chat filter */ + readonly _: 'deleteChatFilter', + /** Chat filter identifier */ + readonly chat_filter_id?: number, + } + + export type reorderChatFilters = { + /** Changes the order of chat filters */ + readonly _: 'reorderChatFilters', + /** Identifiers of chat filters in the new correct order */ + readonly chat_filter_ids?: ReadonlyArray, + } + + export type getRecommendedChatFilters = { + /** Returns recommended chat filters for the current user */ + readonly _: 'getRecommendedChatFilters', + } + + export type getChatFilterDefaultIconName = { + /** Returns default icon name for a filter. Can be called synchronously */ + readonly _: 'getChatFilterDefaultIconName', + /** Chat filter */ + readonly filter?: chatFilter$Input, + } + + export type setChatTitle = { + /** + * Changes the chat title. Supported only for basic groups, supergroups and channels. + * Requires can_change_info administrator right + */ + readonly _: 'setChatTitle', + /** Chat identifier */ + readonly chat_id?: number, + /** New title of the chat; 1-128 characters */ + readonly title?: string, + } + + export type setChatPhoto = { + /** + * Changes the photo of a chat. Supported only for basic groups, supergroups and + * channels. Requires can_change_info administrator right + */ + readonly _: 'setChatPhoto', + /** Chat identifier */ + readonly chat_id?: number, + /** New chat photo; pass null to delete the chat photo */ + readonly photo?: InputChatPhoto$Input, + } + + export type setChatMessageTtl = { + /** + * Changes the message TTL in a chat. Requires can_delete_messages administrator + * right in basic groups, supergroups and channels Message TTL can't be changed + * in a chat with the current user (Saved Messages) and the chat 777000 (Telegram) + */ + readonly _: 'setChatMessageTtl', + /** Chat identifier */ + readonly chat_id?: number, + /** + * New TTL value, in seconds; must be one of 0, 86400, 7 * 86400, or 31 * 86400 + * unless the chat is secret + */ + readonly ttl?: number, + } + + export type setChatPermissions = { + /** + * Changes the chat members permissions. Supported only for basic groups and supergroups. + * Requires can_restrict_members administrator right + */ + readonly _: 'setChatPermissions', + /** Chat identifier */ + readonly chat_id?: number, + /** New non-administrator members permissions in the chat */ + readonly permissions?: chatPermissions$Input, + } + + export type setChatTheme = { + /** Changes the chat theme. Supported only in private and secret chats */ + readonly _: 'setChatTheme', + /** Chat identifier */ + readonly chat_id?: number, + /** Name of the new chat theme; pass an empty string to return the default theme */ + readonly theme_name?: string, + } + + export type setChatDraftMessage = { + /** Changes the draft message in a chat */ + readonly _: 'setChatDraftMessage', + /** Chat identifier */ + readonly chat_id?: number, + /** If not 0, a message thread identifier in which the draft was changed */ + readonly message_thread_id?: number, + /** New draft message; pass null to remove the draft */ + readonly draft_message?: draftMessage$Input, + } + + export type setChatNotificationSettings = { + /** + * Changes the notification settings of a chat. Notification settings of a chat + * with the current user (Saved Messages) can't be changed + */ + readonly _: 'setChatNotificationSettings', + /** Chat identifier */ + readonly chat_id?: number, + /** + * New notification settings for the chat. If the chat is muted for more than 1 + * week, it is considered to be muted forever + */ + readonly notification_settings?: chatNotificationSettings$Input, + } + + export type toggleChatHasProtectedContent = { + /** + * Changes the ability of users to save, forward, or copy chat content. Supported + * only for basic groups, supergroups and channels. Requires owner privileges + */ + readonly _: 'toggleChatHasProtectedContent', + /** Chat identifier */ + readonly chat_id?: number, + /** True, if chat content can't be saved locally, forwarded, or copied */ + readonly has_protected_content?: boolean, + } + + export type toggleChatIsMarkedAsUnread = { + /** Changes the marked as unread state of a chat */ + readonly _: 'toggleChatIsMarkedAsUnread', + /** Chat identifier */ + readonly chat_id?: number, + /** New value of is_marked_as_unread */ + readonly is_marked_as_unread?: boolean, + } + + export type toggleChatDefaultDisableNotification = { + /** + * Changes the value of the default disable_notification parameter, used when a + * message is sent to a chat + */ + readonly _: 'toggleChatDefaultDisableNotification', + /** Chat identifier */ + readonly chat_id?: number, + /** New value of default_disable_notification */ + readonly default_disable_notification?: boolean, + } + + export type setChatClientData = { + /** Changes application-specific data associated with a chat */ + readonly _: 'setChatClientData', + /** Chat identifier */ + readonly chat_id?: number, + /** New value of client_data */ + readonly client_data?: string, + } + + export type setChatDescription = { + /** + * Changes information about a chat. Available for basic groups, supergroups, and + * channels. Requires can_change_info administrator right + */ + readonly _: 'setChatDescription', + /** Identifier of the chat */ + readonly chat_id?: number, + /** New chat description; 0-255 characters */ + readonly description?: string, + } + + export type setChatDiscussionGroup = { + /** + * Changes the discussion group of a channel chat; requires can_change_info administrator + * right in the channel if it is specified + */ + readonly _: 'setChatDiscussionGroup', + /** + * Identifier of the channel chat. Pass 0 to remove a link from the supergroup + * passed in the second argument to a linked channel chat (requires can_pin_messages + * rights in the supergroup) + */ + readonly chat_id?: number, + /** + * Identifier of a new channel's discussion group. Use 0 to remove the discussion + * group. Use the method getSuitableDiscussionChats to find all suitable groups. + * Basic group chats must be first upgraded to supergroup chats. If new chat members + * don't have access to old messages in the supergroup, then toggleSupergroupIsAllHistoryAvailable + * must be used first to change that + */ + readonly discussion_chat_id?: number, + } + + export type setChatLocation = { + /** + * Changes the location of a chat. Available only for some location-based supergroups, + * use supergroupFullInfo.can_set_location to check whether the method is allowed + * to use + */ + readonly _: 'setChatLocation', + /** Chat identifier */ + readonly chat_id?: number, + /** New location for the chat; must be valid and not null */ + readonly location?: chatLocation$Input, + } + + export type setChatSlowModeDelay = { + /** + * Changes the slow mode delay of a chat. Available only for supergroups; requires + * can_restrict_members rights + */ + readonly _: 'setChatSlowModeDelay', + /** Chat identifier */ + readonly chat_id?: number, + /** + * New slow mode delay for the chat, in seconds; must be one of 0, 10, 30, 60, + * 300, 900, 3600 + */ + readonly slow_mode_delay?: number, + } + + export type pinChatMessage = { + /** + * Pins a message in a chat; requires can_pin_messages rights or can_edit_messages + * rights in the channel + */ + readonly _: 'pinChatMessage', + /** Identifier of the chat */ + readonly chat_id?: number, + /** Identifier of the new pinned message */ + readonly message_id?: number, + /** + * True, if there must be no notification about the pinned message. Notifications + * are always disabled in channels and private chats + */ + readonly disable_notification?: boolean, + /** True, if the message needs to be pinned for one side only; private chats only */ + readonly only_for_self?: boolean, + } + + export type unpinChatMessage = { + /** + * Removes a pinned message from a chat; requires can_pin_messages rights in the + * group or can_edit_messages rights in the channel + */ + readonly _: 'unpinChatMessage', + /** Identifier of the chat */ + readonly chat_id?: number, + /** Identifier of the removed pinned message */ + readonly message_id?: number, + } + + export type unpinAllChatMessages = { + /** + * Removes all pinned messages from a chat; requires can_pin_messages rights in + * the group or can_edit_messages rights in the channel + */ + readonly _: 'unpinAllChatMessages', + /** Identifier of the chat */ + readonly chat_id?: number, + } + + export type joinChat = { + /** + * Adds the current user as a new member to a chat. Private and secret chats can't + * be joined using this method + */ + readonly _: 'joinChat', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type leaveChat = { + /** + * Removes the current user from chat members. Private and secret chats can't be + * left using this method + */ + readonly _: 'leaveChat', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type addChatMember = { + /** Adds a new member to a chat. Members can't be added to private or secret chats */ + readonly _: 'addChatMember', + /** Chat identifier */ + readonly chat_id?: number, + /** Identifier of the user */ + readonly user_id?: number, + /** + * The number of earlier messages from the chat to be forwarded to the new member; + * up to 100. Ignored for supergroups and channels, or if the added user is a bot + */ + readonly forward_limit?: number, + } + + export type addChatMembers = { + /** + * Adds multiple new members to a chat. Currently, this method is only available + * for supergroups and channels. This method can't be used to join a chat. Members + * can't be added to a channel if it has more than 200 members + */ + readonly _: 'addChatMembers', + /** Chat identifier */ + readonly chat_id?: number, + /** + * Identifiers of the users to be added to the chat. The maximum number of added + * users is 20 for supergroups and 100 for channels + */ + readonly user_ids?: ReadonlyArray, + } + + export type setChatMemberStatus = { + /** + * Changes the status of a chat member, needs appropriate privileges. This function + * is currently not suitable for transferring chat ownership; use transferChatOwnership + * instead. Use addChatMember or banChatMember if some additional parameters needs + * to be passed + */ + readonly _: 'setChatMemberStatus', + /** Chat identifier */ + readonly chat_id?: number, + /** + * Member identifier. Chats can be only banned and unbanned in supergroups and + * channels + */ + readonly member_id?: MessageSender$Input, + /** The new status of the member in the chat */ + readonly status?: ChatMemberStatus$Input, + } + + export type banChatMember = { + /** + * Bans a member in a chat. Members can't be banned in private or secret chats. + * In supergroups and channels, the user will not be able to return to the group + * on their own using invite links, etc., unless unbanned first + */ + readonly _: 'banChatMember', + /** Chat identifier */ + readonly chat_id?: number, + /** Member identifier */ + readonly member_id?: MessageSender$Input, + /** + * Point in time (Unix timestamp) when the user will be unbanned; 0 if never. If + * the user is banned for more than 366 days or for less than 30 seconds from the + * current time, the user is considered to be banned forever. Ignored in basic + * groups and if a chat is banned + */ + readonly banned_until_date?: number, + /** + * Pass true to delete all messages in the chat for the user that is being removed. + * Always true for supergroups and channels + */ + readonly revoke_messages?: boolean, + } + + export type canTransferOwnership = { + /** + * Checks whether the current session can be used to transfer a chat ownership + * to another user + */ + readonly _: 'canTransferOwnership', + } + + export type transferChatOwnership = { + /** + * Changes the owner of a chat. The current user must be a current owner of the + * chat. Use the method canTransferOwnership to check whether the ownership can + * be transferred from the current session. Available only for supergroups and + * channel chats + */ + readonly _: 'transferChatOwnership', + /** Chat identifier */ + readonly chat_id?: number, + /** + * Identifier of the user to which transfer the ownership. The ownership can't + * be transferred to a bot or to a deleted user + */ + readonly user_id?: number, + /** The password of the current user */ + readonly password?: string, + } + + export type getChatMember = { + /** Returns information about a single member of a chat */ + readonly _: 'getChatMember', + /** Chat identifier */ + readonly chat_id?: number, + /** Member identifier */ + readonly member_id?: MessageSender$Input, + } + + export type searchChatMembers = { + /** + * Searches for a specified query in the first name, last name and username of + * the members of a specified chat. Requires administrator rights in channels + */ + readonly _: 'searchChatMembers', + /** Chat identifier */ + readonly chat_id?: number, + /** Query to search for */ + readonly query?: string, + /** The maximum number of users to be returned; up to 200 */ + readonly limit?: number, + /** The type of users to search for; pass null to search among all chat members */ + readonly filter?: ChatMembersFilter$Input, + } + + export type getChatAdministrators = { + /** Returns a list of administrators of the chat with their custom titles */ + readonly _: 'getChatAdministrators', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type clearAllDraftMessages = { + /** Clears draft messages in all chats */ + readonly _: 'clearAllDraftMessages', + /** If true, local draft messages in secret chats will not be cleared */ + readonly exclude_secret_chats?: boolean, + } + + export type getChatNotificationSettingsExceptions = { + /** Returns list of chats with non-default notification settings */ + readonly _: 'getChatNotificationSettingsExceptions', + /** + * If specified, only chats from the scope will be returned; pass null to return + * chats from all scopes + */ + readonly scope?: NotificationSettingsScope$Input, + /** If true, also chats with non-default sound will be returned */ + readonly compare_sound?: boolean, + } + + export type getScopeNotificationSettings = { + /** Returns the notification settings for chats of a given type */ + readonly _: 'getScopeNotificationSettings', + /** Types of chats for which to return the notification settings information */ + readonly scope?: NotificationSettingsScope$Input, + } + + export type setScopeNotificationSettings = { + /** Changes notification settings for chats of a given type */ + readonly _: 'setScopeNotificationSettings', + /** Types of chats for which to change the notification settings */ + readonly scope?: NotificationSettingsScope$Input, + /** The new notification settings for the given scope */ + readonly notification_settings?: scopeNotificationSettings$Input, + } + + export type resetAllNotificationSettings = { + /** + * Resets all notification settings to their default values. By default, all chats + * are unmuted, the sound is set to "default" and message previews are shown + */ + readonly _: 'resetAllNotificationSettings', + } + + export type toggleChatIsPinned = { + /** + * Changes the pinned state of a chat. There can be up to GetOption("pinned_chat_count_max")/GetOption("pinned_archived_chat_count_max") + * pinned non-secret chats and the same number of secret chats in the main/arhive + * chat list + */ + readonly _: 'toggleChatIsPinned', + /** Chat list in which to change the pinned state of the chat */ + readonly chat_list?: ChatList$Input, + /** Chat identifier */ + readonly chat_id?: number, + /** True, if the chat is pinned */ + readonly is_pinned?: boolean, + } + + export type setPinnedChats = { + /** Changes the order of pinned chats */ + readonly _: 'setPinnedChats', + /** Chat list in which to change the order of pinned chats */ + readonly chat_list?: ChatList$Input, + /** The new list of pinned chats */ + readonly chat_ids?: ReadonlyArray, + } + + export type downloadFile = { + /** + * Downloads a file from the cloud. Download progress and completion of the download + * will be notified through updateFile updates + */ + readonly _: 'downloadFile', + /** Identifier of the file to download */ + readonly file_id?: number, + /** + * Priority of the download (1-32). The higher the priority, the earlier the file + * will be downloaded. If the priorities of two files are equal, then the last + * one for which downloadFile was called will be downloaded first + */ + readonly priority?: number, + /** The starting position from which the file needs to be downloaded */ + readonly offset?: number, + /** + * Number of bytes which need to be downloaded starting from the "offset" position + * before the download will automatically be canceled; use 0 to download without + * a limit + */ + readonly limit?: number, + /** + * If false, this request returns file state just after the download has been started. + * If true, this request returns file state only after the download has succeeded, + * has failed, has been canceled or a new downloadFile request with different offset/limit + * parameters was sent + */ + readonly synchronous?: boolean, + } + + export type getFileDownloadedPrefixSize = { + /** Returns file downloaded prefix size from a given offset, in bytes */ + readonly _: 'getFileDownloadedPrefixSize', + /** Identifier of the file */ + readonly file_id?: number, + /** Offset from which downloaded prefix size needs to be calculated */ + readonly offset?: number, + } + + export type cancelDownloadFile = { + /** + * Stops the downloading of a file. If a file has already been downloaded, does + * nothing + */ + readonly _: 'cancelDownloadFile', + /** Identifier of a file to stop downloading */ + readonly file_id?: number, + /** + * Pass true to stop downloading only if it hasn't been started, i.e. request hasn't + * been sent to server + */ + readonly only_if_pending?: boolean, + } + + export type getSuggestedFileName = { + /** Returns suggested name for saving a file in a given directory */ + readonly _: 'getSuggestedFileName', + /** Identifier of the file */ + readonly file_id?: number, + /** Directory in which the file is supposed to be saved */ + readonly directory?: string, + } + + export type uploadFile = { + /** + * Asynchronously uploads a file to the cloud without sending it in a message. + * updateFile will be used to notify about upload progress and successful completion + * of the upload. The file will not have a persistent remote identifier until it + * will be sent in a message + */ + readonly _: 'uploadFile', + /** File to upload */ + readonly file?: InputFile$Input, + /** File type; pass null if unknown */ + readonly file_type?: FileType$Input, + /** + * Priority of the upload (1-32). The higher the priority, the earlier the file + * will be uploaded. If the priorities of two files are equal, then the first one + * for which uploadFile was called will be uploaded first + */ + readonly priority?: number, + } + + export type cancelUploadFile = { + /** + * Stops the uploading of a file. Supported only for files uploaded by using uploadFile. + * For other files the behavior is undefined + */ + readonly _: 'cancelUploadFile', + /** Identifier of the file to stop uploading */ + readonly file_id?: number, + } + + export type writeGeneratedFilePart = { + /** + * Writes a part of a generated file. This method is intended to be used only if + * the application has no direct access to TDLib's file system, because it is usually + * slower than a direct write to the destination file + */ + readonly _: 'writeGeneratedFilePart', + /** The identifier of the generation process */ + readonly generation_id?: number | string, + /** The offset from which to write the data to the file */ + readonly offset?: number, + /** The data to write */ + readonly data?: string /* base64 */, + } + + export type setFileGenerationProgress = { + /** Informs TDLib on a file generation progress */ + readonly _: 'setFileGenerationProgress', + /** The identifier of the generation process */ + readonly generation_id?: number | string, + /** Expected size of the generated file, in bytes; 0 if unknown */ + readonly expected_size?: number, + /** The number of bytes already generated */ + readonly local_prefix_size?: number, + } + + export type finishFileGeneration = { + /** Finishes the file generation */ + readonly _: 'finishFileGeneration', + /** The identifier of the generation process */ + readonly generation_id?: number | string, + /** + * If passed, the file generation has failed and must be terminated; pass null + * if the file generation succeeded + */ + readonly error?: error$Input, + } + + export type readFilePart = { + /** + * Reads a part of a file from the TDLib file cache and returns read bytes. This + * method is intended to be used only if the application has no direct access to + * TDLib's file system, because it is usually slower than a direct read from the + * file + */ + readonly _: 'readFilePart', + /** Identifier of the file. The file must be located in the TDLib file cache */ + readonly file_id?: number, + /** The offset from which to read the file */ + readonly offset?: number, + /** + * Number of bytes to read. An error will be returned if there are not enough bytes + * available in the file from the specified position. Pass 0 to read all available + * data from the specified position + */ + readonly count?: number, + } + + export type deleteFile = { + /** Deletes a file from the TDLib file cache */ + readonly _: 'deleteFile', + /** Identifier of the file to delete */ + readonly file_id?: number, + } + + export type getMessageFileType = { + /** Returns information about a file with messages exported from another app */ + readonly _: 'getMessageFileType', + /** Beginning of the message file; up to 100 first lines */ + readonly message_file_head?: string, + } + + export type getMessageImportConfirmationText = { + /** + * Returns a confirmation text to be shown to the user before starting message + * import + */ + readonly _: 'getMessageImportConfirmationText', + /** + * Identifier of a chat to which the messages will be imported. It must be an identifier + * of a private chat with a mutual contact or an identifier of a supergroup chat + * with can_change_info administrator right + */ + readonly chat_id?: number, + } + + export type importMessages = { + /** Imports messages exported from another app */ + readonly _: 'importMessages', + /** + * Identifier of a chat to which the messages will be imported. It must be an identifier + * of a private chat with a mutual contact or an identifier of a supergroup chat + * with can_change_info administrator right + */ + readonly chat_id?: number, + /** + * File with messages to import. Only inputFileLocal and inputFileGenerated are + * supported. The file must not be previously uploaded + */ + readonly message_file?: InputFile$Input, + /** + * Files used in the imported messages. Only inputFileLocal and inputFileGenerated + * are supported. The files must not be previously uploaded + */ + readonly attached_files?: ReadonlyArray, + } + + export type replacePrimaryChatInviteLink = { + /** + * Replaces current primary invite link for a chat with a new primary invite link. + * Available for basic groups, supergroups, and channels. Requires administrator + * privileges and can_invite_users right + */ + readonly _: 'replacePrimaryChatInviteLink', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type createChatInviteLink = { + /** + * Creates a new invite link for a chat. Available for basic groups, supergroups, + * and channels. Requires administrator privileges and can_invite_users right in + * the chat + */ + readonly _: 'createChatInviteLink', + /** Chat identifier */ + readonly chat_id?: number, + /** Invite link name; 0-32 characters */ + readonly name?: string, + /** Point in time (Unix timestamp) when the link will expire; pass 0 if never */ + readonly expiration_date?: number, + /** + * The maximum number of chat members that can join the chat via the link simultaneously; + * 0-99999; pass 0 if not limited + */ + readonly member_limit?: number, + /** + * True, if the link only creates join request. If true, member_limit must not + * be specified + */ + readonly creates_join_request?: boolean, + } + + export type editChatInviteLink = { + /** + * Edits a non-primary invite link for a chat. Available for basic groups, supergroups, + * and channels. Requires administrator privileges and can_invite_users right in + * the chat for own links and owner privileges for other links + */ + readonly _: 'editChatInviteLink', + /** Chat identifier */ + readonly chat_id?: number, + /** Invite link to be edited */ + readonly invite_link?: string, + /** Invite link name; 0-32 characters */ + readonly name?: string, + /** Point in time (Unix timestamp) when the link will expire; pass 0 if never */ + readonly expiration_date?: number, + /** + * The maximum number of chat members that can join the chat via the link simultaneously; + * 0-99999; pass 0 if not limited + */ + readonly member_limit?: number, + /** + * True, if the link only creates join request. If true, member_limit must not + * be specified + */ + readonly creates_join_request?: boolean, + } + + export type getChatInviteLink = { + /** + * Returns information about an invite link. Requires administrator privileges + * and can_invite_users right in the chat to get own links and owner privileges + * to get other links + */ + readonly _: 'getChatInviteLink', + /** Chat identifier */ + readonly chat_id?: number, + /** Invite link to get */ + readonly invite_link?: string, + } + + export type getChatInviteLinkCounts = { + /** + * Returns list of chat administrators with number of their invite links. Requires + * owner privileges in the chat + */ + readonly _: 'getChatInviteLinkCounts', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type getChatInviteLinks = { + /** + * Returns invite links for a chat created by specified administrator. Requires + * administrator privileges and can_invite_users right in the chat to get own links + * and owner privileges to get other links + */ + readonly _: 'getChatInviteLinks', + /** Chat identifier */ + readonly chat_id?: number, + /** + * User identifier of a chat administrator. Must be an identifier of the current + * user for non-owner + */ + readonly creator_user_id?: number, + /** Pass true if revoked links needs to be returned instead of active or expired */ + readonly is_revoked?: boolean, + /** + * Creation date of an invite link starting after which to return invite links; + * use 0 to get results from the beginning + */ + readonly offset_date?: number, + /** + * Invite link starting after which to return invite links; use empty string to + * get results from the beginning + */ + readonly offset_invite_link?: string, + /** The maximum number of invite links to return; up to 100 */ + readonly limit?: number, + } + + export type getChatInviteLinkMembers = { + /** + * Returns chat members joined a chat via an invite link. Requires administrator + * privileges and can_invite_users right in the chat for own links and owner privileges + * for other links + */ + readonly _: 'getChatInviteLinkMembers', + /** Chat identifier */ + readonly chat_id?: number, + /** Invite link for which to return chat members */ + readonly invite_link?: string, + /** + * A chat member from which to return next chat members; pass null to get results + * from the beginning + */ + readonly offset_member?: chatInviteLinkMember$Input, + /** The maximum number of chat members to return; up to 100 */ + readonly limit?: number, + } + + export type revokeChatInviteLink = { + /** + * Revokes invite link for a chat. Available for basic groups, supergroups, and + * channels. Requires administrator privileges and can_invite_users right in the + * chat for own links and owner privileges for other links. If a primary link is + * revoked, then additionally to the revoked link returns new primary link + */ + readonly _: 'revokeChatInviteLink', + /** Chat identifier */ + readonly chat_id?: number, + /** Invite link to be revoked */ + readonly invite_link?: string, + } + + export type deleteRevokedChatInviteLink = { + /** + * Deletes revoked chat invite links. Requires administrator privileges and can_invite_users + * right in the chat for own links and owner privileges for other links + */ + readonly _: 'deleteRevokedChatInviteLink', + /** Chat identifier */ + readonly chat_id?: number, + /** Invite link to revoke */ + readonly invite_link?: string, + } + + export type deleteAllRevokedChatInviteLinks = { + /** + * Deletes all revoked chat invite links created by a given chat administrator. + * Requires administrator privileges and can_invite_users right in the chat for + * own links and owner privileges for other links + */ + readonly _: 'deleteAllRevokedChatInviteLinks', + /** Chat identifier */ + readonly chat_id?: number, + /** + * User identifier of a chat administrator, which links will be deleted. Must be + * an identifier of the current user for non-owner + */ + readonly creator_user_id?: number, + } + + export type checkChatInviteLink = { + /** + * Checks the validity of an invite link for a chat and returns information about + * the corresponding chat + */ + readonly _: 'checkChatInviteLink', + /** Invite link to be checked */ + readonly invite_link?: string, + } + + export type joinChatByInviteLink = { + /** Uses an invite link to add the current user to the chat if possible */ + readonly _: 'joinChatByInviteLink', + /** Invite link to use */ + readonly invite_link?: string, + } + + export type getChatJoinRequests = { + /** Returns pending join requests in a chat */ + readonly _: 'getChatJoinRequests', + /** Chat identifier */ + readonly chat_id?: number, + /** + * Invite link for which to return join requests. If empty, all join requests will + * be returned. Requires administrator privileges and can_invite_users right in + * the chat for own links and owner privileges for other links + */ + readonly invite_link?: string, + /** + * A query to search for in the first names, last names and usernames of the users + * to return + */ + readonly query?: string, + /** + * A chat join request from which to return next requests; pass null to get results + * from the beginning + */ + readonly offset_request?: chatJoinRequest$Input, + /** The maximum number of requests to join the chat to return */ + readonly limit?: number, + } + + export type processChatJoinRequest = { + /** Handles a pending join request in a chat */ + readonly _: 'processChatJoinRequest', + /** Chat identifier */ + readonly chat_id?: number, + /** Identifier of the user that sent the request */ + readonly user_id?: number, + /** True, if the request is approved. Otherwise the request is declived */ + readonly approve?: boolean, + } + + export type processChatJoinRequests = { + /** Handles all pending join requests for a given link in a chat */ + readonly _: 'processChatJoinRequests', + /** Chat identifier */ + readonly chat_id?: number, + /** + * Invite link for which to process join requests. If empty, all join requests + * will be processed. Requires administrator privileges and can_invite_users right + * in the chat for own links and owner privileges for other links + */ + readonly invite_link?: string, + /** True, if the requests are approved. Otherwise the requests are declived */ + readonly approve?: boolean, + } + + export type createCall = { + /** Creates a new call */ + readonly _: 'createCall', + /** Identifier of the user to be called */ + readonly user_id?: number, + /** The call protocols supported by the application */ + readonly protocol?: callProtocol$Input, + /** True, if a video call needs to be created */ + readonly is_video?: boolean, + } + + export type acceptCall = { + /** Accepts an incoming call */ + readonly _: 'acceptCall', + /** Call identifier */ + readonly call_id?: number, + /** The call protocols supported by the application */ + readonly protocol?: callProtocol$Input, + } + + export type sendCallSignalingData = { + /** Sends call signaling data */ + readonly _: 'sendCallSignalingData', + /** Call identifier */ + readonly call_id?: number, + /** The data */ + readonly data?: string /* base64 */, + } + + export type discardCall = { + /** Discards a call */ + readonly _: 'discardCall', + /** Call identifier */ + readonly call_id?: number, + /** True, if the user was disconnected */ + readonly is_disconnected?: boolean, + /** The call duration, in seconds */ + readonly duration?: number, + /** True, if the call was a video call */ + readonly is_video?: boolean, + /** Identifier of the connection used during the call */ + readonly connection_id?: number | string, + } + + export type sendCallRating = { + /** Sends a call rating */ + readonly _: 'sendCallRating', + /** Call identifier */ + readonly call_id?: number, + /** Call rating; 1-5 */ + readonly rating?: number, + /** An optional user comment if the rating is less than 5 */ + readonly comment?: string, + /** List of the exact types of problems with the call, specified by the user */ + readonly problems?: ReadonlyArray, + } + + export type sendCallDebugInformation = { + /** Sends debug information for a call */ + readonly _: 'sendCallDebugInformation', + /** Call identifier */ + readonly call_id?: number, + /** Debug information in application-specific format */ + readonly debug_information?: string, + } + + export type getVideoChatAvailableParticipants = { + /** + * Returns list of participant identifiers, on whose behalf a video chat in the + * chat can be joined + */ + readonly _: 'getVideoChatAvailableParticipants', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type setVideoChatDefaultParticipant = { + /** + * Changes default participant identifier, on whose behalf a video chat in the + * chat will be joined + */ + readonly _: 'setVideoChatDefaultParticipant', + /** Chat identifier */ + readonly chat_id?: number, + /** Default group call participant identifier to join the video chats */ + readonly default_participant_id?: MessageSender$Input, + } + + export type createVideoChat = { + /** + * Creates a video chat (a group call bound to a chat). Available only for basic + * groups, supergroups and channels; requires can_manage_video_chats rights + */ + readonly _: 'createVideoChat', + /** Chat identifier, in which the video chat will be created */ + readonly chat_id?: number, + /** Group call title; if empty, chat title will be used */ + readonly title?: string, + /** + * Point in time (Unix timestamp) when the group call is supposed to be started + * by an administrator; 0 to start the video chat immediately. The date must be + * at least 10 seconds and at most 8 days in the future + */ + readonly start_date?: number, + } + + export type getGroupCall = { + /** Returns information about a group call */ + readonly _: 'getGroupCall', + /** Group call identifier */ + readonly group_call_id?: number, + } + + export type startScheduledGroupCall = { + /** Starts a scheduled group call */ + readonly _: 'startScheduledGroupCall', + /** Group call identifier */ + readonly group_call_id?: number, + } + + export type toggleGroupCallEnabledStartNotification = { + /** + * Toggles whether the current user will receive a notification when the group + * call will start; scheduled group calls only + */ + readonly _: 'toggleGroupCallEnabledStartNotification', + /** Group call identifier */ + readonly group_call_id?: number, + /** New value of the enabled_start_notification setting */ + readonly enabled_start_notification?: boolean, + } + + export type joinGroupCall = { + /** Joins an active group call. Returns join response payload for tgcalls */ + readonly _: 'joinGroupCall', + /** Group call identifier */ + readonly group_call_id?: number, + /** + * Identifier of a group call participant, which will be used to join the call; + * pass null to join as self; video chats only + */ + readonly participant_id?: MessageSender$Input, + /** Caller audio channel synchronization source identifier; received from tgcalls */ + readonly audio_source_id?: number, + /** Group call join payload; received from tgcalls */ + readonly payload?: string, + /** True, if the user's microphone is muted */ + readonly is_muted?: boolean, + /** True, if the user's video is enabled */ + readonly is_my_video_enabled?: boolean, + /** + * If non-empty, invite hash to be used to join the group call without being muted + * by administrators + */ + readonly invite_hash?: string, + } + + export type startGroupCallScreenSharing = { + /** + * Starts screen sharing in a joined group call. Returns join response payload + * for tgcalls + */ + readonly _: 'startGroupCallScreenSharing', + /** Group call identifier */ + readonly group_call_id?: number, + /** + * Screen sharing audio channel synchronization source identifier; received from + * tgcalls + */ + readonly audio_source_id?: number, + /** Group call join payload; received from tgcalls */ + readonly payload?: string, + } + + export type toggleGroupCallScreenSharingIsPaused = { + /** Pauses or unpauses screen sharing in a joined group call */ + readonly _: 'toggleGroupCallScreenSharingIsPaused', + /** Group call identifier */ + readonly group_call_id?: number, + /** True if screen sharing is paused */ + readonly is_paused?: boolean, + } + + export type endGroupCallScreenSharing = { + /** Ends screen sharing in a joined group call */ + readonly _: 'endGroupCallScreenSharing', + /** Group call identifier */ + readonly group_call_id?: number, + } + + export type setGroupCallTitle = { + /** Sets group call title. Requires groupCall.can_be_managed group call flag */ + readonly _: 'setGroupCallTitle', + /** Group call identifier */ + readonly group_call_id?: number, + /** New group call title; 1-64 characters */ + readonly title?: string, + } + + export type toggleGroupCallMuteNewParticipants = { + /** + * Toggles whether new participants of a group call can be unmuted only by administrators + * of the group call. Requires groupCall.can_toggle_mute_new_participants group + * call flag + */ + readonly _: 'toggleGroupCallMuteNewParticipants', + /** Group call identifier */ + readonly group_call_id?: number, + /** New value of the mute_new_participants setting */ + readonly mute_new_participants?: boolean, + } + + export type inviteGroupCallParticipants = { + /** + * Invites users to an active group call. Sends a service message of type messageInviteToGroupCall + * for video chats + */ + readonly _: 'inviteGroupCallParticipants', + /** Group call identifier */ + readonly group_call_id?: number, + /** User identifiers. At most 10 users can be invited simultaneously */ + readonly user_ids?: ReadonlyArray, + } + + export type getGroupCallInviteLink = { + /** Returns invite link to a video chat in a public chat */ + readonly _: 'getGroupCallInviteLink', + /** Group call identifier */ + readonly group_call_id?: number, + /** + * Pass true if the invite link needs to contain an invite hash, passing which + * to joinGroupCall would allow the invited user to unmute themselves. Requires + * groupCall.can_be_managed group call flag + */ + readonly can_self_unmute?: boolean, + } + + export type revokeGroupCallInviteLink = { + /** + * Revokes invite link for a group call. Requires groupCall.can_be_managed group + * call flag + */ + readonly _: 'revokeGroupCallInviteLink', + /** Group call identifier */ + readonly group_call_id?: number, + } + + export type startGroupCallRecording = { + /** + * Starts recording of an active group call. Requires groupCall.can_be_managed + * group call flag + */ + readonly _: 'startGroupCallRecording', + /** Group call identifier */ + readonly group_call_id?: number, + /** Group call recording title; 0-64 characters */ + readonly title?: string, + /** Pass true to record a video file instead of an audio file */ + readonly record_video?: boolean, + /** Pass true to use portrait orientation for video instead of landscape one */ + readonly use_portrait_orientation?: boolean, + } + + export type endGroupCallRecording = { + /** + * Ends recording of an active group call. Requires groupCall.can_be_managed group + * call flag + */ + readonly _: 'endGroupCallRecording', + /** Group call identifier */ + readonly group_call_id?: number, + } + + export type toggleGroupCallIsMyVideoPaused = { + /** Toggles whether current user's video is paused */ + readonly _: 'toggleGroupCallIsMyVideoPaused', + /** Group call identifier */ + readonly group_call_id?: number, + /** Pass true if the current user's video is paused */ + readonly is_my_video_paused?: boolean, + } + + export type toggleGroupCallIsMyVideoEnabled = { + /** Toggles whether current user's video is enabled */ + readonly _: 'toggleGroupCallIsMyVideoEnabled', + /** Group call identifier */ + readonly group_call_id?: number, + /** Pass true if the current user's video is enabled */ + readonly is_my_video_enabled?: boolean, + } + + export type setGroupCallParticipantIsSpeaking = { + /** Informs TDLib that speaking state of a participant of an active group has changed */ + readonly _: 'setGroupCallParticipantIsSpeaking', + /** Group call identifier */ + readonly group_call_id?: number, + /** + * Group call participant's synchronization audio source identifier, or 0 for the + * current user + */ + readonly audio_source?: number, + /** True, if the user is speaking */ + readonly is_speaking?: boolean, + } + + export type toggleGroupCallParticipantIsMuted = { + /** + * Toggles whether a participant of an active group call is muted, unmuted, or + * allowed to unmute themselves + */ + readonly _: 'toggleGroupCallParticipantIsMuted', + /** Group call identifier */ + readonly group_call_id?: number, + /** Participant identifier */ + readonly participant_id?: MessageSender$Input, + /** Pass true if the user must be muted and false otherwise */ + readonly is_muted?: boolean, + } + + export type setGroupCallParticipantVolumeLevel = { + /** + * Changes volume level of a participant of an active group call. If the current + * user can manage the group call, then the participant's volume level will be + * changed for all users with the default volume level + */ + readonly _: 'setGroupCallParticipantVolumeLevel', + /** Group call identifier */ + readonly group_call_id?: number, + /** Participant identifier */ + readonly participant_id?: MessageSender$Input, + /** New participant's volume level; 1-20000 in hundreds of percents */ + readonly volume_level?: number, + } + + export type toggleGroupCallParticipantIsHandRaised = { + /** Toggles whether a group call participant hand is rased */ + readonly _: 'toggleGroupCallParticipantIsHandRaised', + /** Group call identifier */ + readonly group_call_id?: number, + /** Participant identifier */ + readonly participant_id?: MessageSender$Input, + /** + * Pass true if the user's hand needs to be raised. Only self hand can be raised. + * Requires groupCall.can_be_managed group call flag to lower other's hand + */ + readonly is_hand_raised?: boolean, + } + + export type loadGroupCallParticipants = { + /** + * Loads more participants of a group call. The loaded participants will be received + * through updates. Use the field groupCall.loaded_all_participants to check whether + * all participants have already been loaded + */ + readonly _: 'loadGroupCallParticipants', + /** + * Group call identifier. The group call must be previously received through getGroupCall + * and must be joined or being joined + */ + readonly group_call_id?: number, + /** The maximum number of participants to load; up to 100 */ + readonly limit?: number, + } + + export type leaveGroupCall = { + /** Leaves a group call */ + readonly _: 'leaveGroupCall', + /** Group call identifier */ + readonly group_call_id?: number, + } + + export type endGroupCall = { + /** Ends a group call. Requires groupCall.can_be_managed */ + readonly _: 'endGroupCall', + /** Group call identifier */ + readonly group_call_id?: number, + } + + export type getGroupCallStreamSegment = { + /** + * Returns a file with a segment of a group call stream in a modified OGG format + * for audio or MPEG-4 format for video + */ + readonly _: 'getGroupCallStreamSegment', + /** Group call identifier */ + readonly group_call_id?: number, + /** Point in time when the stream segment begins; Unix timestamp in milliseconds */ + readonly time_offset?: number, + /** Segment duration scale; 0-1. Segment's duration is 1000/(2**scale) milliseconds */ + readonly scale?: number, + /** Identifier of an audio/video channel to get as received from tgcalls */ + readonly channel_id?: number, + /** + * Video quality as received from tgcalls; pass null to get the worst available + * quality + */ + readonly video_quality?: GroupCallVideoQuality$Input, + } + + export type toggleMessageSenderIsBlocked = { + /** + * Changes the block state of a message sender. Currently, only users and supergroup + * chats can be blocked + */ + readonly _: 'toggleMessageSenderIsBlocked', + /** Identifier of a message sender to block/unblock */ + readonly sender_id?: MessageSender$Input, + /** New value of is_blocked */ + readonly is_blocked?: boolean, + } + + export type blockMessageSenderFromReplies = { + /** Blocks an original sender of a message in the Replies chat */ + readonly _: 'blockMessageSenderFromReplies', + /** The identifier of an incoming message in the Replies chat */ + readonly message_id?: number, + /** Pass true if the message must be deleted */ + readonly delete_message?: boolean, + /** Pass true if all messages from the same sender must be deleted */ + readonly delete_all_messages?: boolean, + /** Pass true if the sender must be reported to the Telegram moderators */ + readonly report_spam?: boolean, + } + + export type getBlockedMessageSenders = { + /** Returns users and chats that were blocked by the current user */ + readonly _: 'getBlockedMessageSenders', + /** Number of users and chats to skip in the result; must be non-negative */ + readonly offset?: number, + /** The maximum number of users and chats to return; up to 100 */ + readonly limit?: number, + } + + export type addContact = { + /** Adds a user to the contact list or edits an existing contact by their user identifier */ + readonly _: 'addContact', + /** + * The contact to add or edit; phone number can be empty and needs to be specified + * only if known, vCard is ignored + */ + readonly contact?: contact$Input, + /** + * True, if the new contact needs to be allowed to see current user's phone number. + * A corresponding rule to userPrivacySettingShowPhoneNumber will be added if needed. + * Use the field userFullInfo.need_phone_number_privacy_exception to check whether + * the current user needs to be asked to share their phone number + */ + readonly share_phone_number?: boolean, + } + + export type importContacts = { + /** + * Adds new contacts or edits existing contacts by their phone numbers; contacts' + * user identifiers are ignored + */ + readonly _: 'importContacts', + /** + * The list of contacts to import or edit; contacts' vCard are ignored and are + * not imported + */ + readonly contacts?: ReadonlyArray, + } + + export type getContacts = { + /** Returns all user contacts */ + readonly _: 'getContacts', + } + + export type searchContacts = { + /** + * Searches for the specified query in the first names, last names and usernames + * of the known user contacts + */ + readonly _: 'searchContacts', + /** Query to search for; may be empty to return all contacts */ + readonly query?: string, + /** The maximum number of users to be returned */ + readonly limit?: number, + } + + export type removeContacts = { + /** Removes users from the contact list */ + readonly _: 'removeContacts', + /** Identifiers of users to be deleted */ + readonly user_ids?: ReadonlyArray, + } + + export type getImportedContactCount = { + /** Returns the total number of imported contacts */ + readonly _: 'getImportedContactCount', + } + + export type changeImportedContacts = { + /** + * Changes imported contacts using the list of contacts saved on the device. Imports + * newly added contacts and, if at least the file database is enabled, deletes + * recently deleted contacts. Query result depends on the result of the previous + * query, so only one query is possible at the same time + */ + readonly _: 'changeImportedContacts', + /** The new list of contacts, contact's vCard are ignored and are not imported */ + readonly contacts?: ReadonlyArray, + } + + export type clearImportedContacts = { + /** Clears all imported contacts, contact list remains unchanged */ + readonly _: 'clearImportedContacts', + } + + export type sharePhoneNumber = { + /** + * Shares the phone number of the current user with a mutual contact. Supposed + * to be called when the user clicks on chatActionBarSharePhoneNumber + */ + readonly _: 'sharePhoneNumber', + /** + * Identifier of the user with whom to share the phone number. The user must be + * a mutual contact + */ + readonly user_id?: number, + } + + export type getUserProfilePhotos = { + /** + * Returns the profile photos of a user. The result of this query may be outdated: + * some photos might have been deleted already + */ + readonly _: 'getUserProfilePhotos', + /** User identifier */ + readonly user_id?: number, + /** The number of photos to skip; must be non-negative */ + readonly offset?: number, + /** The maximum number of photos to be returned; up to 100 */ + readonly limit?: number, + } + + export type getStickers = { + /** + * Returns stickers from the installed sticker sets that correspond to a given + * emoji. If the emoji is non-empty, favorite and recently used stickers may also + * be returned + */ + readonly _: 'getStickers', + /** String representation of emoji. If empty, returns all known installed stickers */ + readonly emoji?: string, + /** The maximum number of stickers to be returned */ + readonly limit?: number, + } + + export type searchStickers = { + /** Searches for stickers from public sticker sets that correspond to a given emoji */ + readonly _: 'searchStickers', + /** String representation of emoji; must be non-empty */ + readonly emoji?: string, + /** The maximum number of stickers to be returned */ + readonly limit?: number, + } + + export type getInstalledStickerSets = { + /** Returns a list of installed sticker sets */ + readonly _: 'getInstalledStickerSets', + /** + * Pass true to return mask sticker sets; pass false to return ordinary sticker + * sets + */ + readonly is_masks?: boolean, + } + + export type getArchivedStickerSets = { + /** Returns a list of archived sticker sets */ + readonly _: 'getArchivedStickerSets', + /** + * Pass true to return mask stickers sets; pass false to return ordinary sticker + * sets + */ + readonly is_masks?: boolean, + /** Identifier of the sticker set from which to return the result */ + readonly offset_sticker_set_id?: number | string, + /** The maximum number of sticker sets to return; up to 100 */ + readonly limit?: number, + } + + export type getTrendingStickerSets = { + /** + * Returns a list of trending sticker sets. For optimal performance, the number + * of returned sticker sets is chosen by TDLib + */ + readonly _: 'getTrendingStickerSets', + /** The offset from which to return the sticker sets; must be non-negative */ + readonly offset?: number, + /** + * The maximum number of sticker sets to be returned; up to 100. For optimal performance, + * the number of returned sticker sets is chosen by TDLib and can be smaller than + * the specified limit, even if the end of the list has not been reached + */ + readonly limit?: number, + } + + export type getAttachedStickerSets = { + /** + * Returns a list of sticker sets attached to a file. Currently, only photos and + * videos can have attached sticker sets + */ + readonly _: 'getAttachedStickerSets', + /** File identifier */ + readonly file_id?: number, + } + + export type getStickerSet = { + /** Returns information about a sticker set by its identifier */ + readonly _: 'getStickerSet', + /** Identifier of the sticker set */ + readonly set_id?: number | string, + } + + export type searchStickerSet = { + /** Searches for a sticker set by its name */ + readonly _: 'searchStickerSet', + /** Name of the sticker set */ + readonly name?: string, + } + + export type searchInstalledStickerSets = { + /** + * Searches for installed sticker sets by looking for specified query in their + * title and name + */ + readonly _: 'searchInstalledStickerSets', + /** + * Pass true to return mask sticker sets; pass false to return ordinary sticker + * sets + */ + readonly is_masks?: boolean, + /** Query to search for */ + readonly query?: string, + /** The maximum number of sticker sets to return */ + readonly limit?: number, + } + + export type searchStickerSets = { + /** + * Searches for ordinary sticker sets by looking for specified query in their title + * and name. Excludes installed sticker sets from the results + */ + readonly _: 'searchStickerSets', + /** Query to search for */ + readonly query?: string, + } + + export type changeStickerSet = { + /** Installs/uninstalls or activates/archives a sticker set */ + readonly _: 'changeStickerSet', + /** Identifier of the sticker set */ + readonly set_id?: number | string, + /** The new value of is_installed */ + readonly is_installed?: boolean, + /** + * The new value of is_archived. A sticker set can't be installed and archived + * simultaneously + */ + readonly is_archived?: boolean, + } + + export type viewTrendingStickerSets = { + /** Informs the server that some trending sticker sets have been viewed by the user */ + readonly _: 'viewTrendingStickerSets', + /** Identifiers of viewed trending sticker sets */ + readonly sticker_set_ids?: ReadonlyArray, + } + + export type reorderInstalledStickerSets = { + /** Changes the order of installed sticker sets */ + readonly _: 'reorderInstalledStickerSets', + /** + * Pass true to change the order of mask sticker sets; pass false to change the + * order of ordinary sticker sets + */ + readonly is_masks?: boolean, + /** Identifiers of installed sticker sets in the new correct order */ + readonly sticker_set_ids?: ReadonlyArray, + } + + export type getRecentStickers = { + /** Returns a list of recently used stickers */ + readonly _: 'getRecentStickers', + /** + * Pass true to return stickers and masks that were recently attached to photos + * or video files; pass false to return recently sent stickers + */ + readonly is_attached?: boolean, + } + + export type addRecentSticker = { + /** + * Manually adds a new sticker to the list of recently used stickers. The new sticker + * is added to the top of the list. If the sticker was already in the list, it + * is removed from the list first. Only stickers belonging to a sticker set can + * be added to this list + */ + readonly _: 'addRecentSticker', + /** + * Pass true to add the sticker to the list of stickers recently attached to photo + * or video files; pass false to add the sticker to the list of recently sent stickers + */ + readonly is_attached?: boolean, + /** Sticker file to add */ + readonly sticker?: InputFile$Input, + } + + export type removeRecentSticker = { + /** Removes a sticker from the list of recently used stickers */ + readonly _: 'removeRecentSticker', + /** + * Pass true to remove the sticker from the list of stickers recently attached + * to photo or video files; pass false to remove the sticker from the list of recently + * sent stickers + */ + readonly is_attached?: boolean, + /** Sticker file to delete */ + readonly sticker?: InputFile$Input, + } + + export type clearRecentStickers = { + /** Clears the list of recently used stickers */ + readonly _: 'clearRecentStickers', + /** + * Pass true to clear the list of stickers recently attached to photo or video + * files; pass false to clear the list of recently sent stickers + */ + readonly is_attached?: boolean, + } + + export type getFavoriteStickers = { + /** Returns favorite stickers */ + readonly _: 'getFavoriteStickers', + } + + export type addFavoriteSticker = { + /** + * Adds a new sticker to the list of favorite stickers. The new sticker is added + * to the top of the list. If the sticker was already in the list, it is removed + * from the list first. Only stickers belonging to a sticker set can be added to + * this list + */ + readonly _: 'addFavoriteSticker', + /** Sticker file to add */ + readonly sticker?: InputFile$Input, + } + + export type removeFavoriteSticker = { + /** Removes a sticker from the list of favorite stickers */ + readonly _: 'removeFavoriteSticker', + /** Sticker file to delete from the list */ + readonly sticker?: InputFile$Input, + } + + export type getStickerEmojis = { + /** + * Returns emoji corresponding to a sticker. The list is only for informational + * purposes, because a sticker is always sent with a fixed emoji from the corresponding + * Sticker object + */ + readonly _: 'getStickerEmojis', + /** Sticker file identifier */ + readonly sticker?: InputFile$Input, + } + + export type searchEmojis = { + /** Searches for emojis by keywords. Supported only if the file database is enabled */ + readonly _: 'searchEmojis', + /** Text to search for */ + readonly text?: string, + /** True, if only emojis, which exactly match text needs to be returned */ + readonly exact_match?: boolean, + /** + * List of possible IETF language tags of the user's input language; may be empty + * if unknown + */ + readonly input_language_codes?: ReadonlyArray, + } + + export type getAnimatedEmoji = { + /** + * Returns an animated emoji corresponding to a given emoji. Returns a 404 error + * if the emoji has no animated emoji + */ + readonly _: 'getAnimatedEmoji', + /** The emoji */ + readonly emoji?: string, + } + + export type getEmojiSuggestionsUrl = { + /** + * Returns an HTTP URL which can be used to automatically log in to the translation + * platform and suggest new emoji replacements. The URL will be valid for 30 seconds + * after generation + */ + readonly _: 'getEmojiSuggestionsUrl', + /** Language code for which the emoji replacements will be suggested */ + readonly language_code?: string, + } + + export type getSavedAnimations = { + /** Returns saved animations */ + readonly _: 'getSavedAnimations', + } + + export type addSavedAnimation = { + /** + * Manually adds a new animation to the list of saved animations. The new animation + * is added to the beginning of the list. If the animation was already in the list, + * it is removed first. Only non-secret video animations with MIME type "video/mp4" + * can be added to the list + */ + readonly _: 'addSavedAnimation', + /** + * The animation file to be added. Only animations known to the server (i.e., successfully + * sent via a message) can be added to the list + */ + readonly animation?: InputFile$Input, + } + + export type removeSavedAnimation = { + /** Removes an animation from the list of saved animations */ + readonly _: 'removeSavedAnimation', + /** Animation file to be removed */ + readonly animation?: InputFile$Input, + } + + export type getRecentInlineBots = { + /** Returns up to 20 recently used inline bots in the order of their last usage */ + readonly _: 'getRecentInlineBots', + } + + export type searchHashtags = { + /** Searches for recently used hashtags by their prefix */ + readonly _: 'searchHashtags', + /** Hashtag prefix to search for */ + readonly prefix?: string, + /** The maximum number of hashtags to be returned */ + readonly limit?: number, + } + + export type removeRecentHashtag = { + /** Removes a hashtag from the list of recently used hashtags */ + readonly _: 'removeRecentHashtag', + /** Hashtag to delete */ + readonly hashtag?: string, + } + + export type getWebPagePreview = { + /** + * Returns a web page preview by the text of the message. Do not call this function + * too often. Returns a 404 error if the web page has no preview + */ + readonly _: 'getWebPagePreview', + /** Message text with formatting */ + readonly text?: formattedText$Input, + } + + export type getWebPageInstantView = { + /** + * Returns an instant view version of a web page if available. Returns a 404 error + * if the web page has no instant view page + */ + readonly _: 'getWebPageInstantView', + /** The web page URL */ + readonly url?: string, + /** If true, the full instant view for the web page will be returned */ + readonly force_full?: boolean, + } + + export type setProfilePhoto = { + /** Changes a profile photo for the current user */ + readonly _: 'setProfilePhoto', + /** Profile photo to set */ + readonly photo?: InputChatPhoto$Input, + } + + export type deleteProfilePhoto = { + /** Deletes a profile photo */ + readonly _: 'deleteProfilePhoto', + /** Identifier of the profile photo to delete */ + readonly profile_photo_id?: number | string, + } + + export type setName = { + /** Changes the first and last name of the current user */ + readonly _: 'setName', + /** The new value of the first name for the current user; 1-64 characters */ + readonly first_name?: string, + /** The new value of the optional last name for the current user; 0-64 characters */ + readonly last_name?: string, + } + + export type setBio = { + /** Changes the bio of the current user */ + readonly _: 'setBio', + /** The new value of the user bio; 0-70 characters without line feeds */ + readonly bio?: string, + } + + export type setUsername = { + /** Changes the username of the current user */ + readonly _: 'setUsername', + /** The new value of the username. Use an empty string to remove the username */ + readonly username?: string, + } + + export type setLocation = { + /** + * Changes the location of the current user. Needs to be called if GetOption("is_location_visible") + * is true and location changes for more than 1 kilometer + */ + readonly _: 'setLocation', + /** The new location of the user */ + readonly location?: location$Input, + } + + export type changePhoneNumber = { + /** + * Changes the phone number of the user and sends an authentication code to the + * user's new phone number. On success, returns information about the sent code + */ + readonly _: 'changePhoneNumber', + /** The new phone number of the user in international format */ + readonly phone_number?: string, + /** + * Settings for the authentication of the user's phone number; pass null to use + * default settings + */ + readonly settings?: phoneNumberAuthenticationSettings$Input, + } + + export type resendChangePhoneNumberCode = { + /** + * Re-sends the authentication code sent to confirm a new phone number for the + * current user. Works only if the previously received authenticationCodeInfo next_code_type + * was not null and the server-specified timeout has passed + */ + readonly _: 'resendChangePhoneNumberCode', + } + + export type checkChangePhoneNumberCode = { + /** Checks the authentication code sent to confirm a new phone number of the user */ + readonly _: 'checkChangePhoneNumberCode', + /** Authentication code to check */ + readonly code?: string, + } + + export type setCommands = { + /** + * Sets the list of commands supported by the bot for the given user scope and + * language; for bots only + */ + readonly _: 'setCommands', + /** + * The scope to which the commands are relevant; pass null to change commands in + * the default bot command scope + */ + readonly scope?: BotCommandScope$Input, + /** + * A two-letter ISO 639-1 country code. If empty, the commands will be applied + * to all users from the given scope, for which language there are no dedicated + * commands + */ + readonly language_code?: string, + /** List of the bot's commands */ + readonly commands?: ReadonlyArray, + } + + export type deleteCommands = { + /** + * Deletes commands supported by the bot for the given user scope and language; + * for bots only + */ + readonly _: 'deleteCommands', + /** + * The scope to which the commands are relevant; pass null to delete commands in + * the default bot command scope + */ + readonly scope?: BotCommandScope$Input, + /** A two-letter ISO 639-1 country code or an empty string */ + readonly language_code?: string, + } + + export type getCommands = { + /** + * Returns the list of commands supported by the bot for the given user scope and + * language; for bots only + */ + readonly _: 'getCommands', + /** + * The scope to which the commands are relevant; pass null to get commands in the + * default bot command scope + */ + readonly scope?: BotCommandScope$Input, + /** A two-letter ISO 639-1 country code or an empty string */ + readonly language_code?: string, + } + + export type getActiveSessions = { + /** Returns all active sessions of the current user */ + readonly _: 'getActiveSessions', + } + + export type terminateSession = { + /** Terminates a session of the current user */ + readonly _: 'terminateSession', + /** Session identifier */ + readonly session_id?: number | string, + } + + export type terminateAllOtherSessions = { + /** Terminates all other sessions of the current user */ + readonly _: 'terminateAllOtherSessions', + } + + export type toggleSessionCanAcceptCalls = { + /** Toggles whether a session can accept incoming calls */ + readonly _: 'toggleSessionCanAcceptCalls', + /** Session identifier */ + readonly session_id?: number | string, + /** True, if incoming calls can be accepted by the session */ + readonly can_accept_calls?: boolean, + } + + export type toggleSessionCanAcceptSecretChats = { + /** Toggles whether a session can accept incoming secret chats */ + readonly _: 'toggleSessionCanAcceptSecretChats', + /** Session identifier */ + readonly session_id?: number | string, + /** True, if incoming secret chats can be accepted by the session */ + readonly can_accept_secret_chats?: boolean, + } + + export type setInactiveSessionTtl = { + /** + * Changes the period of inactivity after which sessions will automatically be + * terminated + */ + readonly _: 'setInactiveSessionTtl', + /** + * New number of days of inactivity before sessions will be automatically terminated; + * 1-366 days + */ + readonly inactive_session_ttl_days?: number, + } + + export type getConnectedWebsites = { + /** Returns all website where the current user used Telegram to log in */ + readonly _: 'getConnectedWebsites', + } + + export type disconnectWebsite = { + /** Disconnects website from the current user's Telegram account */ + readonly _: 'disconnectWebsite', + /** Website identifier */ + readonly website_id?: number | string, + } + + export type disconnectAllWebsites = { + /** Disconnects all websites from the current user's Telegram account */ + readonly _: 'disconnectAllWebsites', + } + + export type setSupergroupUsername = { + /** + * Changes the username of a supergroup or channel, requires owner privileges in + * the supergroup or channel + */ + readonly _: 'setSupergroupUsername', + /** Identifier of the supergroup or channel */ + readonly supergroup_id?: number, + /** New value of the username. Use an empty string to remove the username */ + readonly username?: string, + } + + export type setSupergroupStickerSet = { + /** + * Changes the sticker set of a supergroup; requires can_change_info administrator + * right + */ + readonly _: 'setSupergroupStickerSet', + /** Identifier of the supergroup */ + readonly supergroup_id?: number, + /** + * New value of the supergroup sticker set identifier. Use 0 to remove the supergroup + * sticker set + */ + readonly sticker_set_id?: number | string, + } + + export type toggleSupergroupSignMessages = { + /** + * Toggles whether sender signature is added to sent messages in a channel; requires + * can_change_info administrator right + */ + readonly _: 'toggleSupergroupSignMessages', + /** Identifier of the channel */ + readonly supergroup_id?: number, + /** New value of sign_messages */ + readonly sign_messages?: boolean, + } + + export type toggleSupergroupIsAllHistoryAvailable = { + /** + * Toggles whether the message history of a supergroup is available to new members; + * requires can_change_info administrator right + */ + readonly _: 'toggleSupergroupIsAllHistoryAvailable', + /** The identifier of the supergroup */ + readonly supergroup_id?: number, + /** The new value of is_all_history_available */ + readonly is_all_history_available?: boolean, + } + + export type toggleSupergroupIsBroadcastGroup = { + /** Upgrades supergroup to a broadcast group; requires owner privileges in the supergroup */ + readonly _: 'toggleSupergroupIsBroadcastGroup', + /** Identifier of the supergroup */ + readonly supergroup_id?: number, + } + + export type reportSupergroupSpam = { + /** + * Reports messages in a supergroup as spam; requires administrator rights in the + * supergroup + */ + readonly _: 'reportSupergroupSpam', + /** Supergroup identifier */ + readonly supergroup_id?: number, + /** Identifiers of messages to report */ + readonly message_ids?: ReadonlyArray, + } + + export type getSupergroupMembers = { + /** + * Returns information about members or banned users in a supergroup or channel. + * Can be used only if supergroupFullInfo.can_get_members == true; additionally, + * administrator privileges may be required for some filters + */ + readonly _: 'getSupergroupMembers', + /** Identifier of the supergroup or channel */ + readonly supergroup_id?: number, + /** The type of users to return; pass null to use supergroupMembersFilterRecent */ + readonly filter?: SupergroupMembersFilter$Input, + /** Number of users to skip */ + readonly offset?: number, + /** The maximum number of users be returned; up to 200 */ + readonly limit?: number, + } + + export type closeSecretChat = { + /** Closes a secret chat, effectively transferring its state to secretChatStateClosed */ + readonly _: 'closeSecretChat', + /** Secret chat identifier */ + readonly secret_chat_id?: number, + } + + export type getChatEventLog = { + /** + * Returns a list of service actions taken by chat members and administrators in + * the last 48 hours. Available only for supergroups and channels. Requires administrator + * rights. Returns results in reverse chronological order (i. e., in order of decreasing + * event_id) + */ + readonly _: 'getChatEventLog', + /** Chat identifier */ + readonly chat_id?: number, + /** Search query by which to filter events */ + readonly query?: string, + /** + * Identifier of an event from which to return results. Use 0 to get results from + * the latest events + */ + readonly from_event_id?: number | string, + /** The maximum number of events to return; up to 100 */ + readonly limit?: number, + /** The types of events to return; pass null to get chat events of all types */ + readonly filters?: chatEventLogFilters$Input, + /** + * User identifiers by which to filter events. By default, events relating to all + * users will be returned + */ + readonly user_ids?: ReadonlyArray, + } + + export type getPaymentForm = { + /** + * Returns an invoice payment form. This method must be called when the user presses + * inlineKeyboardButtonBuy + */ + readonly _: 'getPaymentForm', + /** Chat identifier of the Invoice message */ + readonly chat_id?: number, + /** Message identifier */ + readonly message_id?: number, + /** Preferred payment form theme; pass null to use the default theme */ + readonly theme?: paymentFormTheme$Input, + } + + export type validateOrderInfo = { + /** + * Validates the order information provided by a user and returns the available + * shipping options for a flexible invoice + */ + readonly _: 'validateOrderInfo', + /** Chat identifier of the Invoice message */ + readonly chat_id?: number, + /** Message identifier */ + readonly message_id?: number, + /** The order information, provided by the user; pass null if empty */ + readonly order_info?: orderInfo$Input, + /** True, if the order information can be saved */ + readonly allow_save?: boolean, + } + + export type sendPaymentForm = { + /** Sends a filled-out payment form to the bot for final verification */ + readonly _: 'sendPaymentForm', + /** Chat identifier of the Invoice message */ + readonly chat_id?: number, + /** Message identifier */ + readonly message_id?: number, + /** Payment form identifier returned by getPaymentForm */ + readonly payment_form_id?: number | string, + /** Identifier returned by validateOrderInfo, or an empty string */ + readonly order_info_id?: string, + /** Identifier of a chosen shipping option, if applicable */ + readonly shipping_option_id?: string, + /** The credentials chosen by user for payment */ + readonly credentials?: InputCredentials$Input, + /** Chosen by the user amount of tip in the smallest units of the currency */ + readonly tip_amount?: number, + } + + export type getPaymentReceipt = { + /** Returns information about a successful payment */ + readonly _: 'getPaymentReceipt', + /** Chat identifier of the PaymentSuccessful message */ + readonly chat_id?: number, + /** Message identifier */ + readonly message_id?: number, + } + + export type getSavedOrderInfo = { + /** Returns saved order info, if any */ + readonly _: 'getSavedOrderInfo', + } + + export type deleteSavedOrderInfo = { + /** Deletes saved order info */ + readonly _: 'deleteSavedOrderInfo', + } + + export type deleteSavedCredentials = { + /** Deletes saved credentials for all payment provider bots */ + readonly _: 'deleteSavedCredentials', + } + + export type getSupportUser = { + /** Returns a user that can be contacted to get support */ + readonly _: 'getSupportUser', + } + + export type getBackgrounds = { + /** Returns backgrounds installed by the user */ + readonly _: 'getBackgrounds', + /** True, if the backgrounds must be ordered for dark theme */ + readonly for_dark_theme?: boolean, + } + + export type getBackgroundUrl = { + /** Constructs a persistent HTTP URL for a background */ + readonly _: 'getBackgroundUrl', + /** Background name */ + readonly name?: string, + /** Background type */ + readonly type?: BackgroundType$Input, + } + + export type searchBackground = { + /** Searches for a background by its name */ + readonly _: 'searchBackground', + /** The name of the background */ + readonly name?: string, + } + + export type setBackground = { + /** + * Changes the background selected by the user; adds background to the list of + * installed backgrounds + */ + readonly _: 'setBackground', + /** + * The input background to use; pass null to create a new filled backgrounds or + * to remove the current background + */ + readonly background?: InputBackground$Input, + /** + * Background type; pass null to use the default type of the remote background + * or to remove the current background + */ + readonly type?: BackgroundType$Input, + /** True, if the background is chosen for dark theme */ + readonly for_dark_theme?: boolean, + } + + export type removeBackground = { + /** Removes background from the list of installed backgrounds */ + readonly _: 'removeBackground', + /** The background identifier */ + readonly background_id?: number | string, + } + + export type resetBackgrounds = { + /** Resets list of installed backgrounds to its default value */ + readonly _: 'resetBackgrounds', + } + + export type getLocalizationTargetInfo = { + /** + * Returns information about the current localization target. This is an offline + * request if only_local is true. Can be called before authorization + */ + readonly _: 'getLocalizationTargetInfo', + /** + * If true, returns only locally available information without sending network + * requests + */ + readonly only_local?: boolean, + } + + export type getLanguagePackInfo = { + /** + * Returns information about a language pack. Returned language pack identifier + * may be different from a provided one. Can be called before authorization + */ + readonly _: 'getLanguagePackInfo', + /** Language pack identifier */ + readonly language_pack_id?: string, + } + + export type getLanguagePackStrings = { + /** + * Returns strings from a language pack in the current localization target by their + * keys. Can be called before authorization + */ + readonly _: 'getLanguagePackStrings', + /** Language pack identifier of the strings to be returned */ + readonly language_pack_id?: string, + /** + * Language pack keys of the strings to be returned; leave empty to request all + * available strings + */ + readonly keys?: ReadonlyArray, + } + + export type synchronizeLanguagePack = { + /** + * Fetches the latest versions of all strings from a language pack in the current + * localization target from the server. This method doesn't need to be called explicitly + * for the current used/base language packs. Can be called before authorization + */ + readonly _: 'synchronizeLanguagePack', + /** Language pack identifier */ + readonly language_pack_id?: string, + } + + export type addCustomServerLanguagePack = { + /** + * Adds a custom server language pack to the list of installed language packs in + * current localization target. Can be called before authorization + */ + readonly _: 'addCustomServerLanguagePack', + /** + * Identifier of a language pack to be added; may be different from a name that + * is used in an "https://t.me/setlanguage/" link + */ + readonly language_pack_id?: string, + } + + export type setCustomLanguagePack = { + /** Adds or changes a custom local language pack to the current localization target */ + readonly _: 'setCustomLanguagePack', + /** + * Information about the language pack. Language pack ID must start with 'X', consist + * only of English letters, digits and hyphens, and must not exceed 64 characters. + * Can be called before authorization + */ + readonly info?: languagePackInfo$Input, + /** Strings of the new language pack */ + readonly strings?: ReadonlyArray, + } + + export type editCustomLanguagePackInfo = { + /** + * Edits information about a custom local language pack in the current localization + * target. Can be called before authorization + */ + readonly _: 'editCustomLanguagePackInfo', + /** New information about the custom local language pack */ + readonly info?: languagePackInfo$Input, + } + + export type setCustomLanguagePackString = { + /** + * Adds, edits or deletes a string in a custom local language pack. Can be called + * before authorization + */ + readonly _: 'setCustomLanguagePackString', + /** + * Identifier of a previously added custom local language pack in the current localization + * target + */ + readonly language_pack_id?: string, + /** New language pack string */ + readonly new_string?: languagePackString$Input, + } + + export type deleteLanguagePack = { + /** + * Deletes all information about a language pack in the current localization target. + * The language pack which is currently in use (including base language pack) or + * is being synchronized can't be deleted. Can be called before authorization + */ + readonly _: 'deleteLanguagePack', + /** Identifier of the language pack to delete */ + readonly language_pack_id?: string, + } + + export type registerDevice = { + /** + * Registers the currently used device for receiving push notifications. Returns + * a globally unique identifier of the push notification subscription + */ + readonly _: 'registerDevice', + /** Device token */ + readonly device_token?: DeviceToken$Input, + /** List of user identifiers of other users currently using the application */ + readonly other_user_ids?: ReadonlyArray, + } + + export type processPushNotification = { + /** + * Handles a push notification. Returns error with code 406 if the push notification + * is not supported and connection to the server is required to fetch new data. + * Can be called before authorization + */ + readonly _: 'processPushNotification', + /** + * JSON-encoded push notification payload with all fields sent by the server, and + * "google.sent_time" and "google.notification.sound" fields added + */ + readonly payload?: string, + } + + export type getPushReceiverId = { + /** + * Returns a globally unique push notification subscription identifier for identification + * of an account, which has received a push notification. Can be called synchronously + */ + readonly _: 'getPushReceiverId', + /** JSON-encoded push notification payload */ + readonly payload?: string, + } + + export type getRecentlyVisitedTMeUrls = { + /** Returns t.me URLs recently visited by a newly registered user */ + readonly _: 'getRecentlyVisitedTMeUrls', + /** Google Play referrer to identify the user */ + readonly referrer?: string, + } + + export type setUserPrivacySettingRules = { + /** Changes user privacy settings */ + readonly _: 'setUserPrivacySettingRules', + /** The privacy setting */ + readonly setting?: UserPrivacySetting$Input, + /** The new privacy rules */ + readonly rules?: userPrivacySettingRules$Input, + } + + export type getUserPrivacySettingRules = { + /** Returns the current privacy settings */ + readonly _: 'getUserPrivacySettingRules', + /** The privacy setting */ + readonly setting?: UserPrivacySetting$Input, + } + + export type getOption = { + /** + * Returns the value of an option by its name. (Check the list of available options + * on https://core.telegram.org/tdlib/options.) Can be called before authorization + */ + readonly _: 'getOption', + /** The name of the option */ + readonly name?: string, + } + + export type setOption = { + /** + * Sets the value of an option. (Check the list of available options on https://core.telegram.org/tdlib/options.) + * Only writable options can be set. Can be called before authorization + */ + readonly _: 'setOption', + /** The name of the option */ + readonly name?: string, + /** The new value of the option; pass null to reset option value to a default value */ + readonly value?: OptionValue$Input, + } + + export type setAccountTtl = { + /** + * Changes the period of inactivity after which the account of the current user + * will automatically be deleted + */ + readonly _: 'setAccountTtl', + /** New account TTL */ + readonly ttl?: accountTtl$Input, + } + + export type getAccountTtl = { + /** + * Returns the period of inactivity after which the account of the current user + * will automatically be deleted + */ + readonly _: 'getAccountTtl', + } + + export type deleteAccount = { + /** + * Deletes the account of the current user, deleting all information associated + * with the user from the server. The phone number of the account can be used to + * create a new account. Can be called before authorization when the current authorization + * state is authorizationStateWaitPassword + */ + readonly _: 'deleteAccount', + /** The reason why the account was deleted; optional */ + readonly reason?: string, + } + + export type removeChatActionBar = { + /** Removes a chat action bar without any other action */ + readonly _: 'removeChatActionBar', + /** Chat identifier */ + readonly chat_id?: number, + } + + export type reportChat = { + /** + * Reports a chat to the Telegram moderators. A chat can be reported only from + * the chat action bar, or if chat.can_be_reported + */ + readonly _: 'reportChat', + /** Chat identifier */ + readonly chat_id?: number, + /** Identifiers of reported messages, if any */ + readonly message_ids?: ReadonlyArray, + /** The reason for reporting the chat */ + readonly reason?: ChatReportReason$Input, + /** Additional report details; 0-1024 characters */ + readonly text?: string, + } + + export type reportChatPhoto = { + /** + * Reports a chat photo to the Telegram moderators. A chat photo can be reported + * only if chat.can_be_reported + */ + readonly _: 'reportChatPhoto', + /** Chat identifier */ + readonly chat_id?: number, + /** Identifier of the photo to report. Only full photos from chatPhoto can be reported */ + readonly file_id?: number, + /** The reason for reporting the chat photo */ + readonly reason?: ChatReportReason$Input, + /** Additional report details; 0-1024 characters */ + readonly text?: string, + } + + export type getChatStatistics = { + /** + * Returns detailed statistics about a chat. Currently, this method can be used + * only for supergroups and channels. Can be used only if supergroupFullInfo.can_get_statistics + * == true + */ + readonly _: 'getChatStatistics', + /** Chat identifier */ + readonly chat_id?: number, + /** Pass true if a dark theme is used by the application */ + readonly is_dark?: boolean, + } + + export type getMessageStatistics = { + /** + * Returns detailed statistics about a message. Can be used only if message.can_get_statistics + * == true + */ + readonly _: 'getMessageStatistics', + /** Chat identifier */ + readonly chat_id?: number, + /** Message identifier */ + readonly message_id?: number, + /** Pass true if a dark theme is used by the application */ + readonly is_dark?: boolean, + } + + export type getStatisticalGraph = { + /** Loads an asynchronous or a zoomed in statistical graph */ + readonly _: 'getStatisticalGraph', + /** Chat identifier */ + readonly chat_id?: number, + /** The token for graph loading */ + readonly token?: string, + /** X-value for zoomed in graph or 0 otherwise */ + readonly x?: number, + } + + export type getStorageStatistics = { + /** Returns storage usage statistics. Can be called before authorization */ + readonly _: 'getStorageStatistics', + /** + * The maximum number of chats with the largest storage usage for which separate + * statistics need to be returned. All other chats will be grouped in entries with + * chat_id == 0. If the chat info database is not used, the chat_limit is ignored + * and is always set to 0 + */ + readonly chat_limit?: number, + } + + export type getStorageStatisticsFast = { + /** Quickly returns approximate storage usage statistics. Can be called before authorization */ + readonly _: 'getStorageStatisticsFast', + } + + export type getDatabaseStatistics = { + /** Returns database statistics */ + readonly _: 'getDatabaseStatistics', + } + + export type optimizeStorage = { + /** + * Optimizes storage usage, i.e. deletes some files and returns new storage usage + * statistics. Secret thumbnails can't be deleted + */ + readonly _: 'optimizeStorage', + /** + * Limit on the total size of files after deletion, in bytes. Pass -1 to use the + * default limit + */ + readonly size?: number, + /** + * Limit on the time that has passed since the last time a file was accessed (or + * creation time for some filesystems). Pass -1 to use the default limit + */ + readonly ttl?: number, + /** + * Limit on the total count of files after deletion. Pass -1 to use the default + * limit + */ + readonly count?: number, + /** + * The amount of time after the creation of a file during which it can't be deleted, + * in seconds. Pass -1 to use the default value + */ + readonly immunity_delay?: number, + /** + * If non-empty, only files with the given types are considered. By default, all + * types except thumbnails, profile photos, stickers and wallpapers are deleted + */ + readonly file_types?: ReadonlyArray, + /** + * If non-empty, only files from the given chats are considered. Use 0 as chat + * identifier to delete files not belonging to any chat (e.g., profile photos) + */ + readonly chat_ids?: ReadonlyArray, + /** + * If non-empty, files from the given chats are excluded. Use 0 as chat identifier + * to exclude all files not belonging to any chat (e.g., profile photos) + */ + readonly exclude_chat_ids?: ReadonlyArray, + /** + * Pass true if statistics about the files that were deleted must be returned instead + * of the whole storage usage statistics. Affects only returned statistics + */ + readonly return_deleted_file_statistics?: boolean, + /** Same as in getStorageStatistics. Affects only returned statistics */ + readonly chat_limit?: number, + } + + export type setNetworkType = { + /** + * Sets the current network type. Can be called before authorization. Calling this + * method forces all network connections to reopen, mitigating the delay in switching + * between different networks, so it must be called whenever the network is changed, + * even if the network type remains the same. Network type is used to check whether + * the library can use the network at all and also for collecting detailed network + * data usage statistics + */ + readonly _: 'setNetworkType', + /** The new network type; pass null to set network type to networkTypeOther */ + readonly type?: NetworkType$Input, + } + + export type getNetworkStatistics = { + /** Returns network data usage statistics. Can be called before authorization */ + readonly _: 'getNetworkStatistics', + /** If true, returns only data for the current library launch */ + readonly only_current?: boolean, + } + + export type addNetworkStatistics = { + /** Adds the specified data to data usage statistics. Can be called before authorization */ + readonly _: 'addNetworkStatistics', + /** The network statistics entry with the data to be added to statistics */ + readonly entry?: NetworkStatisticsEntry$Input, + } + + export type resetNetworkStatistics = { + /** Resets all network data usage statistics to zero. Can be called before authorization */ + readonly _: 'resetNetworkStatistics', + } + + export type getAutoDownloadSettingsPresets = { + /** Returns auto-download settings presets for the current user */ + readonly _: 'getAutoDownloadSettingsPresets', + } + + export type setAutoDownloadSettings = { + /** Sets auto-download settings */ + readonly _: 'setAutoDownloadSettings', + /** New user auto-download settings */ + readonly settings?: autoDownloadSettings$Input, + /** Type of the network for which the new settings are relevant */ + readonly type?: NetworkType$Input, + } + + export type getBankCardInfo = { + /** Returns information about a bank card */ + readonly _: 'getBankCardInfo', + /** The bank card number */ + readonly bank_card_number?: string, + } + + export type getPassportElement = { + /** Returns one of the available Telegram Passport elements */ + readonly _: 'getPassportElement', + /** Telegram Passport element type */ + readonly type?: PassportElementType$Input, + /** Password of the current user */ + readonly password?: string, + } + + export type getAllPassportElements = { + /** Returns all available Telegram Passport elements */ + readonly _: 'getAllPassportElements', + /** Password of the current user */ + readonly password?: string, + } + + export type setPassportElement = { + /** + * Adds an element to the user's Telegram Passport. May return an error with a + * message "PHONE_VERIFICATION_NEEDED" or "EMAIL_VERIFICATION_NEEDED" if the chosen + * phone number or the chosen email address must be verified first + */ + readonly _: 'setPassportElement', + /** Input Telegram Passport element */ + readonly element?: InputPassportElement$Input, + /** Password of the current user */ + readonly password?: string, + } + + export type deletePassportElement = { + /** Deletes a Telegram Passport element */ + readonly _: 'deletePassportElement', + /** Element type */ + readonly type?: PassportElementType$Input, + } + + export type setPassportElementErrors = { + /** + * Informs the user that some of the elements in their Telegram Passport contain + * errors; for bots only. The user will not be able to resend the elements, until + * the errors are fixed + */ + readonly _: 'setPassportElementErrors', + /** User identifier */ + readonly user_id?: number, + /** The errors */ + readonly errors?: ReadonlyArray, + } + + export type getPreferredCountryLanguage = { + /** + * Returns an IETF language tag of the language preferred in the country, which + * must be used to fill native fields in Telegram Passport personal details. Returns + * a 404 error if unknown + */ + readonly _: 'getPreferredCountryLanguage', + /** A two-letter ISO 3166-1 alpha-2 country code */ + readonly country_code?: string, + } + + export type sendPhoneNumberVerificationCode = { + /** Sends a code to verify a phone number to be added to a user's Telegram Passport */ + readonly _: 'sendPhoneNumberVerificationCode', + /** The phone number of the user, in international format */ + readonly phone_number?: string, + /** + * Settings for the authentication of the user's phone number; pass null to use + * default settings + */ + readonly settings?: phoneNumberAuthenticationSettings$Input, + } + + export type resendPhoneNumberVerificationCode = { + /** + * Re-sends the code to verify a phone number to be added to a user's Telegram + * Passport + */ + readonly _: 'resendPhoneNumberVerificationCode', + } + + export type checkPhoneNumberVerificationCode = { + /** Checks the phone number verification code for Telegram Passport */ + readonly _: 'checkPhoneNumberVerificationCode', + /** Verification code to check */ + readonly code?: string, + } + + export type sendEmailAddressVerificationCode = { + /** Sends a code to verify an email address to be added to a user's Telegram Passport */ + readonly _: 'sendEmailAddressVerificationCode', + /** Email address */ + readonly email_address?: string, + } + + export type resendEmailAddressVerificationCode = { + /** + * Re-sends the code to verify an email address to be added to a user's Telegram + * Passport + */ + readonly _: 'resendEmailAddressVerificationCode', + } + + export type checkEmailAddressVerificationCode = { + /** Checks the email address verification code for Telegram Passport */ + readonly _: 'checkEmailAddressVerificationCode', + /** Verification code to check */ + readonly code?: string, + } + + export type getPassportAuthorizationForm = { + /** Returns a Telegram Passport authorization form for sharing data with a service */ + readonly _: 'getPassportAuthorizationForm', + /** User identifier of the service's bot */ + readonly bot_user_id?: number, + /** Telegram Passport element types requested by the service */ + readonly scope?: string, + /** Service's public key */ + readonly public_key?: string, + /** Unique request identifier provided by the service */ + readonly nonce?: string, + } + + export type getPassportAuthorizationFormAvailableElements = { + /** + * Returns already available Telegram Passport elements suitable for completing + * a Telegram Passport authorization form. Result can be received only once for + * each authorization form + */ + readonly _: 'getPassportAuthorizationFormAvailableElements', + /** Authorization form identifier */ + readonly autorization_form_id?: number, + /** Password of the current user */ + readonly password?: string, + } + + export type sendPassportAuthorizationForm = { + /** + * Sends a Telegram Passport authorization form, effectively sharing data with + * the service. This method must be called after getPassportAuthorizationFormAvailableElements + * if some previously available elements are going to be reused + */ + readonly _: 'sendPassportAuthorizationForm', + /** Authorization form identifier */ + readonly autorization_form_id?: number, + /** + * Types of Telegram Passport elements chosen by user to complete the authorization + * form + */ + readonly types?: ReadonlyArray, + } + + export type sendPhoneNumberConfirmationCode = { + /** Sends phone number confirmation code to handle links of the type internalLinkTypePhoneNumberConfirmation */ + readonly _: 'sendPhoneNumberConfirmationCode', + /** Hash value from the link */ + readonly hash?: string, + /** Phone number value from the link */ + readonly phone_number?: string, + /** + * Settings for the authentication of the user's phone number; pass null to use + * default settings + */ + readonly settings?: phoneNumberAuthenticationSettings$Input, + } + + export type resendPhoneNumberConfirmationCode = { + /** Resends phone number confirmation code */ + readonly _: 'resendPhoneNumberConfirmationCode', + } + + export type checkPhoneNumberConfirmationCode = { + /** Checks phone number confirmation code */ + readonly _: 'checkPhoneNumberConfirmationCode', + /** Confirmation code to check */ + readonly code?: string, + } + + export type setBotUpdatesStatus = { + /** + * Informs the server about the number of pending bot updates if they haven't been + * processed for a long time; for bots only + */ + readonly _: 'setBotUpdatesStatus', + /** The number of pending updates */ + readonly pending_update_count?: number, + /** The last error message */ + readonly error_message?: string, + } + + export type uploadStickerFile = { + /** Uploads a file with a sticker; returns the uploaded file */ + readonly _: 'uploadStickerFile', + /** Sticker file owner; ignored for regular users */ + readonly user_id?: number, + /** Sticker file to upload */ + readonly sticker?: InputSticker$Input, + } + + export type getSuggestedStickerSetName = { + /** Returns a suggested name for a new sticker set with a given title */ + readonly _: 'getSuggestedStickerSetName', + /** Sticker set title; 1-64 characters */ + readonly title?: string, + } + + export type checkStickerSetName = { + /** Checks whether a name can be used for a new sticker set */ + readonly _: 'checkStickerSetName', + /** Name to be checked */ + readonly name?: string, + } + + export type createNewStickerSet = { + /** Creates a new sticker set. Returns the newly created sticker set */ + readonly _: 'createNewStickerSet', + /** Sticker set owner; ignored for regular users */ + readonly user_id?: number, + /** Sticker set title; 1-64 characters */ + readonly title?: string, + /** + * Sticker set name. Can contain only English letters, digits and underscores. + * Must end with *"_by_"* (** is case insensitive) + * for bots; 1-64 characters + */ + readonly name?: string, + /** True, if stickers are masks. Animated stickers can't be masks */ + readonly is_masks?: boolean, + /** + * List of stickers to be added to the set; must be non-empty. All stickers must + * be of the same type. For animated stickers, uploadStickerFile must be used before + * the sticker is shown + */ + readonly stickers?: ReadonlyArray, + /** Source of the sticker set; may be empty if unknown */ + readonly source?: string, + } + + export type addStickerToSet = { + /** Adds a new sticker to a set; for bots only. Returns the sticker set */ + readonly _: 'addStickerToSet', + /** Sticker set owner */ + readonly user_id?: number, + /** Sticker set name */ + readonly name?: string, + /** Sticker to add to the set */ + readonly sticker?: InputSticker$Input, + } + + export type setStickerSetThumbnail = { + /** Sets a sticker set thumbnail; for bots only. Returns the sticker set */ + readonly _: 'setStickerSetThumbnail', + /** Sticker set owner */ + readonly user_id?: number, + /** Sticker set name */ + readonly name?: string, + /** + * Thumbnail to set in PNG or TGS format; pass null to remove the sticker set thumbnail. + * Animated thumbnail must be set for animated sticker sets and only for them + */ + readonly thumbnail?: InputFile$Input, + } + + export type setStickerPositionInSet = { + /** + * Changes the position of a sticker in the set to which it belongs; for bots only. + * The sticker set must have been created by the bot + */ + readonly _: 'setStickerPositionInSet', + /** Sticker */ + readonly sticker?: InputFile$Input, + /** New position of the sticker in the set, zero-based */ + readonly position?: number, + } + + export type removeStickerFromSet = { + /** + * Removes a sticker from the set to which it belongs; for bots only. The sticker + * set must have been created by the bot + */ + readonly _: 'removeStickerFromSet', + /** Sticker */ + readonly sticker?: InputFile$Input, + } + + export type getMapThumbnailFile = { + /** + * Returns information about a file with a map thumbnail in PNG format. Only map + * thumbnail files with size less than 1MB can be downloaded + */ + readonly _: 'getMapThumbnailFile', + /** Location of the map center */ + readonly location?: location$Input, + /** Map zoom level; 13-20 */ + readonly zoom?: number, + /** Map width in pixels before applying scale; 16-1024 */ + readonly width?: number, + /** Map height in pixels before applying scale; 16-1024 */ + readonly height?: number, + /** Map scale; 1-3 */ + readonly scale?: number, + /** Identifier of a chat, in which the thumbnail will be shown. Use 0 if unknown */ + readonly chat_id?: number, + } + + export type acceptTermsOfService = { + /** Accepts Telegram terms of services */ + readonly _: 'acceptTermsOfService', + /** Terms of service identifier */ + readonly terms_of_service_id?: string, + } + + export type sendCustomRequest = { + /** Sends a custom request; for bots only */ + readonly _: 'sendCustomRequest', + /** The method name */ + readonly method?: string, + /** JSON-serialized method parameters */ + readonly parameters?: string, + } + + export type answerCustomQuery = { + /** Answers a custom query; for bots only */ + readonly _: 'answerCustomQuery', + /** Identifier of a custom query */ + readonly custom_query_id?: number | string, + /** JSON-serialized answer to the query */ + readonly data?: string, + } + + export type setAlarm = { + /** Succeeds after a specified amount of time has passed. Can be called before initialization */ + readonly _: 'setAlarm', + /** Number of seconds before the function returns */ + readonly seconds?: number, + } + + export type getCountries = { + /** Returns information about existing countries. Can be called before authorization */ + readonly _: 'getCountries', + } + + export type getCountryCode = { + /** + * Uses the current IP address to find the current country. Returns two-letter + * ISO 3166-1 alpha-2 country code. Can be called before authorization + */ + readonly _: 'getCountryCode', + } + + export type getPhoneNumberInfo = { + /** + * Returns information about a phone number by its prefix. Can be called before + * authorization + */ + readonly _: 'getPhoneNumberInfo', + /** The phone number prefix */ + readonly phone_number_prefix?: string, + } + + export type getPhoneNumberInfoSync = { + /** + * Returns information about a phone number by its prefix synchronously. getCountries + * must be called at least once after changing localization to the specified language + * if properly localized country information is expected. Can be called synchronously + */ + readonly _: 'getPhoneNumberInfoSync', + /** A two-letter ISO 639-1 country code for country information localization */ + readonly language_code?: string, + /** The phone number prefix */ + readonly phone_number_prefix?: string, + } + + export type getApplicationDownloadLink = { + /** + * Returns the link for downloading official Telegram application to be used when + * the current user invites friends to Telegram + */ + readonly _: 'getApplicationDownloadLink', + } + + export type getDeepLinkInfo = { + /** + * Returns information about a tg:// deep link. Use "tg://need_update_for_some_feature" + * or "tg:some_unsupported_feature" for testing. Returns a 404 error for unknown + * links. Can be called before authorization + */ + readonly _: 'getDeepLinkInfo', + /** The link */ + readonly link?: string, + } + + export type getApplicationConfig = { + /** Returns application config, provided by the server. Can be called before authorization */ + readonly _: 'getApplicationConfig', + } + + export type saveApplicationLogEvent = { + /** Saves application log event on the server. Can be called before authorization */ + readonly _: 'saveApplicationLogEvent', + /** Event type */ + readonly type?: string, + /** Optional chat identifier, associated with the event */ + readonly chat_id?: number, + /** The log event data */ + readonly data?: JsonValue$Input, + } + + export type addProxy = { + /** Adds a proxy server for network requests. Can be called before authorization */ + readonly _: 'addProxy', + /** Proxy server IP address */ + readonly server?: string, + /** Proxy server port */ + readonly port?: number, + /** True, if the proxy needs to be enabled */ + readonly enable?: boolean, + /** Proxy type */ + readonly type?: ProxyType$Input, + } + + export type editProxy = { + /** Edits an existing proxy server for network requests. Can be called before authorization */ + readonly _: 'editProxy', + /** Proxy identifier */ + readonly proxy_id?: number, + /** Proxy server IP address */ + readonly server?: string, + /** Proxy server port */ + readonly port?: number, + /** True, if the proxy needs to be enabled */ + readonly enable?: boolean, + /** Proxy type */ + readonly type?: ProxyType$Input, + } + + export type enableProxy = { + /** + * Enables a proxy. Only one proxy can be enabled at a time. Can be called before + * authorization + */ + readonly _: 'enableProxy', + /** Proxy identifier */ + readonly proxy_id?: number, + } + + export type disableProxy = { + /** Disables the currently enabled proxy. Can be called before authorization */ + readonly _: 'disableProxy', + } + + export type removeProxy = { + /** Removes a proxy server. Can be called before authorization */ + readonly _: 'removeProxy', + /** Proxy identifier */ + readonly proxy_id?: number, + } + + export type getProxies = { + /** Returns list of proxies that are currently set up. Can be called before authorization */ + readonly _: 'getProxies', + } + + export type getProxyLink = { + /** + * Returns an HTTPS link, which can be used to add a proxy. Available only for + * SOCKS5 and MTProto proxies. Can be called before authorization + */ + readonly _: 'getProxyLink', + /** Proxy identifier */ + readonly proxy_id?: number, + } + + export type pingProxy = { + /** + * Computes time needed to receive a response from a Telegram server through a + * proxy. Can be called before authorization + */ + readonly _: 'pingProxy', + /** Proxy identifier. Use 0 to ping a Telegram server without a proxy */ + readonly proxy_id?: number, + } + + export type setLogStream = { + /** Sets new log stream for internal logging of TDLib. Can be called synchronously */ + readonly _: 'setLogStream', + /** New log stream */ + readonly log_stream?: LogStream$Input, + } + + export type getLogStream = { + /** + * Returns information about currently used log stream for internal logging of + * TDLib. Can be called synchronously + */ + readonly _: 'getLogStream', + } + + export type setLogVerbosityLevel = { + /** Sets the verbosity level of the internal logging of TDLib. Can be called synchronously */ + readonly _: 'setLogVerbosityLevel', + /** + * New value of the verbosity level for logging. Value 0 corresponds to fatal errors, + * value 1 corresponds to errors, value 2 corresponds to warnings and debug warnings, + * value 3 corresponds to informational, value 4 corresponds to debug, value 5 + * corresponds to verbose debug, value greater than 5 and up to 1023 can be used + * to enable even more logging + */ + readonly new_verbosity_level?: number, + } + + export type getLogVerbosityLevel = { + /** + * Returns current verbosity level of the internal logging of TDLib. Can be called + * synchronously + */ + readonly _: 'getLogVerbosityLevel', + } + + export type getLogTags = { + /** + * Returns list of available TDLib internal log tags, for example, ["actor", "binlog", + * "connections", "notifications", "proxy"]. Can be called synchronously + */ + readonly _: 'getLogTags', + } + + export type setLogTagVerbosityLevel = { + /** + * Sets the verbosity level for a specified TDLib internal log tag. Can be called + * synchronously + */ + readonly _: 'setLogTagVerbosityLevel', + /** Logging tag to change verbosity level */ + readonly tag?: string, + /** New verbosity level; 1-1024 */ + readonly new_verbosity_level?: number, + } + + export type getLogTagVerbosityLevel = { + /** + * Returns current verbosity level for a specified TDLib internal log tag. Can + * be called synchronously + */ + readonly _: 'getLogTagVerbosityLevel', + /** Logging tag to change verbosity level */ + readonly tag?: string, + } + + export type addLogMessage = { + /** Adds a message to TDLib internal log. Can be called synchronously */ + readonly _: 'addLogMessage', + /** The minimum verbosity level needed for the message to be logged; 0-1023 */ + readonly verbosity_level?: number, + /** Text of a message to log */ + readonly text?: string, + } + + export type testCallEmpty = { + /** + * Does nothing; for testing only. This is an offline method. Can be called before + * authorization + */ + readonly _: 'testCallEmpty', + } + + export type testCallString = { + /** + * Returns the received string; for testing only. This is an offline method. Can + * be called before authorization + */ + readonly _: 'testCallString', + /** String to return */ + readonly x?: string, + } + + export type testCallBytes = { + /** + * Returns the received bytes; for testing only. This is an offline method. Can + * be called before authorization + */ + readonly _: 'testCallBytes', + /** Bytes to return */ + readonly x?: string /* base64 */, + } + + export type testCallVectorInt = { + /** + * Returns the received vector of numbers; for testing only. This is an offline + * method. Can be called before authorization + */ + readonly _: 'testCallVectorInt', + /** Vector of numbers to return */ + readonly x?: ReadonlyArray, + } + + export type testCallVectorIntObject = { + /** + * Returns the received vector of objects containing a number; for testing only. + * This is an offline method. Can be called before authorization + */ + readonly _: 'testCallVectorIntObject', + /** Vector of objects to return */ + readonly x?: ReadonlyArray, + } + + export type testCallVectorString = { + /** + * Returns the received vector of strings; for testing only. This is an offline + * method. Can be called before authorization + */ + readonly _: 'testCallVectorString', + /** Vector of strings to return */ + readonly x?: ReadonlyArray, + } + + export type testCallVectorStringObject = { + /** + * Returns the received vector of objects containing a string; for testing only. + * This is an offline method. Can be called before authorization + */ + readonly _: 'testCallVectorStringObject', + /** Vector of objects to return */ + readonly x?: ReadonlyArray, + } + + export type testSquareInt = { + /** + * Returns the squared received number; for testing only. This is an offline method. + * Can be called before authorization + */ + readonly _: 'testSquareInt', + /** Number to square */ + readonly x?: number, + } + + export type testNetwork = { + /** + * Sends a simple network request to the Telegram servers; for testing only. Can + * be called before authorization + */ + readonly _: 'testNetwork', + } + + export type testProxy = { + /** + * Sends a simple network request to the Telegram servers via proxy; for testing + * only. Can be called before authorization + */ + readonly _: 'testProxy', + /** Proxy server IP address */ + readonly server?: string, + /** Proxy server port */ + readonly port?: number, + /** Proxy type */ + readonly type?: ProxyType$Input, + /** Identifier of a datacenter, with which to test connection */ + readonly dc_id?: number, + /** The maximum overall timeout for the request */ + readonly timeout?: number, + } + + export type testGetDifference = { + /** Forces an updates.getDifference call to the Telegram servers; for testing only */ + readonly _: 'testGetDifference', + } + + export type testUseUpdate = { + /** + * Does nothing and ensures that the Update object is used; for testing only. This + * is an offline method. Can be called before authorization + */ + readonly _: 'testUseUpdate', + } + + export type testReturnError = { + /** + * Returns the specified error and ensures that the Error object is used; for testing + * only. Can be called synchronously + */ + readonly _: 'testReturnError', + /** The error to be returned */ + readonly error?: error$Input, + } + + // --- --- + + export type Error = error + + export type Ok = ok + + /** + * Provides information about the method by which an authentication code is delivered + * to the user + */ + export type AuthenticationCodeType = + | authenticationCodeTypeTelegramMessage + | authenticationCodeTypeSms + | authenticationCodeTypeCall + | authenticationCodeTypeFlashCall + | authenticationCodeTypeMissedCall + + export type AuthenticationCodeInfo = authenticationCodeInfo + + export type EmailAddressAuthenticationCodeInfo = emailAddressAuthenticationCodeInfo + + export type TextEntities = textEntities + + export type FormattedText = formattedText + + /** Represents the current authorization state of the TDLib client */ + export type AuthorizationState = + | authorizationStateWaitTdlibParameters + | authorizationStateWaitEncryptionKey + | authorizationStateWaitPhoneNumber + | authorizationStateWaitCode + | authorizationStateWaitOtherDeviceConfirmation + | authorizationStateWaitRegistration + | authorizationStateWaitPassword + | authorizationStateReady + | authorizationStateLoggingOut + | authorizationStateClosing + | authorizationStateClosed + + export type PasswordState = passwordState + + export type RecoveryEmailAddress = recoveryEmailAddress + + export type TemporaryPasswordState = temporaryPasswordState + + export type File = file + + /** Points to a file */ + export type InputFile = + | inputFileId + | inputFileRemote + | inputFileLocal + | inputFileGenerated + + /** Points to a file */ + export type InputFile$Input = + | inputFileId$Input + | inputFileRemote$Input + | inputFileLocal$Input + | inputFileGenerated$Input + + /** Describes format of the thumbnail */ + export type ThumbnailFormat = + | thumbnailFormatJpeg + | thumbnailFormatPng + | thumbnailFormatWebp + | thumbnailFormatGif + | thumbnailFormatTgs + | thumbnailFormatMpeg4 + + /** Part of the face, relative to which a mask is placed */ + export type MaskPoint = + | maskPointForehead + | maskPointEyes + | maskPointMouth + | maskPointChin + + /** Part of the face, relative to which a mask is placed */ + export type MaskPoint$Input = + | maskPointForehead$Input + | maskPointEyes$Input + | maskPointMouth$Input + | maskPointChin$Input + + /** Describes the type of a poll */ + export type PollType = + | pollTypeRegular + | pollTypeQuiz + + /** Describes the type of a poll */ + export type PollType$Input = + | pollTypeRegular$Input + | pollTypeQuiz$Input + + export type Sticker = sticker + + export type AnimatedEmoji = animatedEmoji + + /** + * Represents the type of a user. The following types are possible: regular users, + * deleted users and bots + */ + export type UserType = + | userTypeRegular + | userTypeDeleted + | userTypeBot + | userTypeUnknown + + export type BotCommands = botCommands + + export type ChatPhotos = chatPhotos + + /** Describes a photo to be set as a user profile or chat photo */ + export type InputChatPhoto$Input = + | inputChatPhotoPrevious$Input + | inputChatPhotoStatic$Input + | inputChatPhotoAnimation$Input + + export type User = user + + export type UserFullInfo = userFullInfo + + export type Users = users + + export type ChatAdministrators = chatAdministrators + + /** Provides information about the status of a member in a chat */ + export type ChatMemberStatus = + | chatMemberStatusCreator + | chatMemberStatusAdministrator + | chatMemberStatusMember + | chatMemberStatusRestricted + | chatMemberStatusLeft + | chatMemberStatusBanned + + /** Provides information about the status of a member in a chat */ + export type ChatMemberStatus$Input = + | chatMemberStatusCreator$Input + | chatMemberStatusAdministrator$Input + | chatMemberStatusMember$Input + | chatMemberStatusRestricted$Input + | chatMemberStatusLeft$Input + | chatMemberStatusBanned$Input + + export type ChatMember = chatMember + + export type ChatMembers = chatMembers + + /** Specifies the kind of chat members to return in searchChatMembers */ + export type ChatMembersFilter$Input = + | chatMembersFilterContacts$Input + | chatMembersFilterAdministrators$Input + | chatMembersFilterMembers$Input + | chatMembersFilterMention$Input + | chatMembersFilterRestricted$Input + | chatMembersFilterBanned$Input + | chatMembersFilterBots$Input + + /** Specifies the kind of chat members to return in getSupergroupMembers */ + export type SupergroupMembersFilter$Input = + | supergroupMembersFilterRecent$Input + | supergroupMembersFilterContacts$Input + | supergroupMembersFilterAdministrators$Input + | supergroupMembersFilterSearch$Input + | supergroupMembersFilterRestricted$Input + | supergroupMembersFilterBanned$Input + | supergroupMembersFilterMention$Input + | supergroupMembersFilterBots$Input + + export type ChatInviteLink = chatInviteLink + + export type ChatInviteLinks = chatInviteLinks + + export type ChatInviteLinkCounts = chatInviteLinkCounts + + export type ChatInviteLinkMembers = chatInviteLinkMembers + + export type ChatInviteLinkInfo = chatInviteLinkInfo + + export type ChatJoinRequests = chatJoinRequests + + export type BasicGroup = basicGroup + + export type BasicGroupFullInfo = basicGroupFullInfo + + export type Supergroup = supergroup + + export type SupergroupFullInfo = supergroupFullInfo + + /** Describes the current secret chat state */ + export type SecretChatState = + | secretChatStatePending + | secretChatStateReady + | secretChatStateClosed + + export type SecretChat = secretChat + + /** Contains information about the sender of a message */ + export type MessageSender = + | messageSenderUser + | messageSenderChat + + /** Contains information about the sender of a message */ + export type MessageSender$Input = + | messageSenderUser$Input + | messageSenderChat$Input + + export type MessageSenders = messageSenders + + /** Contains information about the origin of a forwarded message */ + export type MessageForwardOrigin = + | messageForwardOriginUser + | messageForwardOriginChat + | messageForwardOriginHiddenUser + | messageForwardOriginChannel + | messageForwardOriginMessageImport + + /** Contains information about the sending state of the message */ + export type MessageSendingState = + | messageSendingStatePending + | messageSendingStateFailed + + export type Message = message + + export type Messages = messages + + export type FoundMessages = foundMessages + + export type MessagePositions = messagePositions + + export type MessageCalendar = messageCalendar + + export type SponsoredMessage = sponsoredMessage + + /** Describes the types of chats to which notification settings are relevant */ + export type NotificationSettingsScope = + | notificationSettingsScopePrivateChats + | notificationSettingsScopeGroupChats + | notificationSettingsScopeChannelChats + + /** Describes the types of chats to which notification settings are relevant */ + export type NotificationSettingsScope$Input = + | notificationSettingsScopePrivateChats$Input + | notificationSettingsScopeGroupChats$Input + | notificationSettingsScopeChannelChats$Input + + export type ScopeNotificationSettings = scopeNotificationSettings + + /** Describes the type of a chat */ + export type ChatType = + | chatTypePrivate + | chatTypeBasicGroup + | chatTypeSupergroup + | chatTypeSecret + + export type ChatFilter = chatFilter + + export type ChatFilterInfo = chatFilterInfo + + export type RecommendedChatFilters = recommendedChatFilters + + /** Describes a list of chats */ + export type ChatList = + | chatListMain + | chatListArchive + | chatListFilter + + /** Describes a list of chats */ + export type ChatList$Input = + | chatListMain$Input + | chatListArchive$Input + | chatListFilter$Input + + export type ChatLists = chatLists + + /** Describes a reason why an external chat is shown in a chat list */ + export type ChatSource = + | chatSourceMtprotoProxy + | chatSourcePublicServiceAnnouncement + + export type Chat = chat + + export type Chats = chats + + export type ChatsNearby = chatsNearby + + /** Describes a type of public chats */ + export type PublicChatType$Input = + | publicChatTypeHasUsername$Input + | publicChatTypeIsLocationBased$Input + + /** Describes actions which must be possible to do through a chat action bar */ + export type ChatActionBar = + | chatActionBarReportSpam + | chatActionBarReportUnrelatedLocation + | chatActionBarInviteMembers + | chatActionBarReportAddBlock + | chatActionBarAddContact + | chatActionBarSharePhoneNumber + | chatActionBarJoinRequest + + /** Describes a keyboard button type */ + export type KeyboardButtonType = + | keyboardButtonTypeText + | keyboardButtonTypeRequestPhoneNumber + | keyboardButtonTypeRequestLocation + | keyboardButtonTypeRequestPoll + + /** Describes a keyboard button type */ + export type KeyboardButtonType$Input = + | keyboardButtonTypeText$Input + | keyboardButtonTypeRequestPhoneNumber$Input + | keyboardButtonTypeRequestLocation$Input + | keyboardButtonTypeRequestPoll$Input + + /** Describes the type of an inline keyboard button */ + export type InlineKeyboardButtonType = + | inlineKeyboardButtonTypeUrl + | inlineKeyboardButtonTypeLoginUrl + | inlineKeyboardButtonTypeCallback + | inlineKeyboardButtonTypeCallbackWithPassword + | inlineKeyboardButtonTypeCallbackGame + | inlineKeyboardButtonTypeSwitchInline + | inlineKeyboardButtonTypeBuy + | inlineKeyboardButtonTypeUser + + /** Describes the type of an inline keyboard button */ + export type InlineKeyboardButtonType$Input = + | inlineKeyboardButtonTypeUrl$Input + | inlineKeyboardButtonTypeLoginUrl$Input + | inlineKeyboardButtonTypeCallback$Input + | inlineKeyboardButtonTypeCallbackWithPassword$Input + | inlineKeyboardButtonTypeCallbackGame$Input + | inlineKeyboardButtonTypeSwitchInline$Input + | inlineKeyboardButtonTypeBuy$Input + | inlineKeyboardButtonTypeUser$Input + + /** + * Contains a description of a custom keyboard and actions that can be done with + * it to quickly reply to bots + */ + export type ReplyMarkup = + | replyMarkupRemoveKeyboard + | replyMarkupForceReply + | replyMarkupShowKeyboard + | replyMarkupInlineKeyboard + + /** + * Contains a description of a custom keyboard and actions that can be done with + * it to quickly reply to bots + */ + export type ReplyMarkup$Input = + | replyMarkupRemoveKeyboard$Input + | replyMarkupForceReply$Input + | replyMarkupShowKeyboard$Input + | replyMarkupInlineKeyboard$Input + + /** Contains information about an inline button of type inlineKeyboardButtonTypeLoginUrl */ + export type LoginUrlInfo = + | loginUrlInfoOpen + | loginUrlInfoRequestConfirmation + + export type MessageThreadInfo = messageThreadInfo + + /** Describes a text object inside an instant-view web page */ + export type RichText = + | richTextPlain + | richTextBold + | richTextItalic + | richTextUnderline + | richTextStrikethrough + | richTextFixed + | richTextUrl + | richTextEmailAddress + | richTextSubscript + | richTextSuperscript + | richTextMarked + | richTextPhoneNumber + | richTextIcon + | richTextReference + | richTextAnchor + | richTextAnchorLink + | richTexts + + /** Describes a horizontal alignment of a table cell content */ + export type PageBlockHorizontalAlignment = + | pageBlockHorizontalAlignmentLeft + | pageBlockHorizontalAlignmentCenter + | pageBlockHorizontalAlignmentRight + + /** Describes a Vertical alignment of a table cell content */ + export type PageBlockVerticalAlignment = + | pageBlockVerticalAlignmentTop + | pageBlockVerticalAlignmentMiddle + | pageBlockVerticalAlignmentBottom + + /** Describes a block of an instant view web page */ + export type PageBlock = + | pageBlockTitle + | pageBlockSubtitle + | pageBlockAuthorDate + | pageBlockHeader + | pageBlockSubheader + | pageBlockKicker + | pageBlockParagraph + | pageBlockPreformatted + | pageBlockFooter + | pageBlockDivider + | pageBlockAnchor + | pageBlockList + | pageBlockBlockQuote + | pageBlockPullQuote + | pageBlockAnimation + | pageBlockAudio + | pageBlockPhoto + | pageBlockVideo + | pageBlockVoiceNote + | pageBlockCover + | pageBlockEmbedded + | pageBlockEmbeddedPost + | pageBlockCollage + | pageBlockSlideshow + | pageBlockChatLink + | pageBlockTable + | pageBlockDetails + | pageBlockRelatedArticles + | pageBlockMap + + export type WebPageInstantView = webPageInstantView + + export type WebPage = webPage + + export type Countries = countries + + export type PhoneNumberInfo = phoneNumberInfo + + export type BankCardInfo = bankCardInfo + + export type OrderInfo = orderInfo + + /** Contains information about the payment method chosen by the user */ + export type InputCredentials$Input = + | inputCredentialsSaved$Input + | inputCredentialsNew$Input + | inputCredentialsApplePay$Input + | inputCredentialsGooglePay$Input + + export type PaymentForm = paymentForm + + export type ValidatedOrderInfo = validatedOrderInfo + + export type PaymentResult = paymentResult + + export type PaymentReceipt = paymentReceipt + + /** Contains the type of a Telegram Passport element */ + export type PassportElementType = + | passportElementTypePersonalDetails + | passportElementTypePassport + | passportElementTypeDriverLicense + | passportElementTypeIdentityCard + | passportElementTypeInternalPassport + | passportElementTypeAddress + | passportElementTypeUtilityBill + | passportElementTypeBankStatement + | passportElementTypeRentalAgreement + | passportElementTypePassportRegistration + | passportElementTypeTemporaryRegistration + | passportElementTypePhoneNumber + | passportElementTypeEmailAddress + + /** Contains the type of a Telegram Passport element */ + export type PassportElementType$Input = + | passportElementTypePersonalDetails$Input + | passportElementTypePassport$Input + | passportElementTypeDriverLicense$Input + | passportElementTypeIdentityCard$Input + | passportElementTypeInternalPassport$Input + | passportElementTypeAddress$Input + | passportElementTypeUtilityBill$Input + | passportElementTypeBankStatement$Input + | passportElementTypeRentalAgreement$Input + | passportElementTypePassportRegistration$Input + | passportElementTypeTemporaryRegistration$Input + | passportElementTypePhoneNumber$Input + | passportElementTypeEmailAddress$Input + + /** Contains information about a Telegram Passport element */ + export type PassportElement = + | passportElementPersonalDetails + | passportElementPassport + | passportElementDriverLicense + | passportElementIdentityCard + | passportElementInternalPassport + | passportElementAddress + | passportElementUtilityBill + | passportElementBankStatement + | passportElementRentalAgreement + | passportElementPassportRegistration + | passportElementTemporaryRegistration + | passportElementPhoneNumber + | passportElementEmailAddress + + /** Contains information about a Telegram Passport element to be saved */ + export type InputPassportElement$Input = + | inputPassportElementPersonalDetails$Input + | inputPassportElementPassport$Input + | inputPassportElementDriverLicense$Input + | inputPassportElementIdentityCard$Input + | inputPassportElementInternalPassport$Input + | inputPassportElementAddress$Input + | inputPassportElementUtilityBill$Input + | inputPassportElementBankStatement$Input + | inputPassportElementRentalAgreement$Input + | inputPassportElementPassportRegistration$Input + | inputPassportElementTemporaryRegistration$Input + | inputPassportElementPhoneNumber$Input + | inputPassportElementEmailAddress$Input + + export type PassportElements = passportElements + + /** Contains the description of an error in a Telegram Passport element */ + export type PassportElementErrorSource = + | passportElementErrorSourceUnspecified + | passportElementErrorSourceDataField + | passportElementErrorSourceFrontSide + | passportElementErrorSourceReverseSide + | passportElementErrorSourceSelfie + | passportElementErrorSourceTranslationFile + | passportElementErrorSourceTranslationFiles + | passportElementErrorSourceFile + | passportElementErrorSourceFiles + + export type PassportAuthorizationForm = passportAuthorizationForm + + export type PassportElementsWithErrors = passportElementsWithErrors + + /** + * Contains the description of an error in a Telegram Passport element; for bots + * only + */ + export type InputPassportElementErrorSource$Input = + | inputPassportElementErrorSourceUnspecified$Input + | inputPassportElementErrorSourceDataField$Input + | inputPassportElementErrorSourceFrontSide$Input + | inputPassportElementErrorSourceReverseSide$Input + | inputPassportElementErrorSourceSelfie$Input + | inputPassportElementErrorSourceTranslationFile$Input + | inputPassportElementErrorSourceTranslationFiles$Input + | inputPassportElementErrorSourceFile$Input + | inputPassportElementErrorSourceFiles$Input + + /** Contains the content of a message */ + export type MessageContent = + | messageText + | messageAnimation + | messageAudio + | messageDocument + | messagePhoto + | messageExpiredPhoto + | messageSticker + | messageVideo + | messageExpiredVideo + | messageVideoNote + | messageVoiceNote + | messageLocation + | messageVenue + | messageContact + | messageAnimatedEmoji + | messageDice + | messageGame + | messagePoll + | messageInvoice + | messageCall + | messageVideoChatScheduled + | messageVideoChatStarted + | messageVideoChatEnded + | messageInviteVideoChatParticipants + | messageBasicGroupChatCreate + | messageSupergroupChatCreate + | messageChatChangeTitle + | messageChatChangePhoto + | messageChatDeletePhoto + | messageChatAddMembers + | messageChatJoinByLink + | messageChatJoinByRequest + | messageChatDeleteMember + | messageChatUpgradeTo + | messageChatUpgradeFrom + | messagePinMessage + | messageScreenshotTaken + | messageChatSetTheme + | messageChatSetTtl + | messageCustomServiceAction + | messageGameScore + | messagePaymentSuccessful + | messagePaymentSuccessfulBot + | messageContactRegistered + | messageWebsiteConnected + | messagePassportDataSent + | messagePassportDataReceived + | messageProximityAlertTriggered + | messageUnsupported + + /** Represents a part of the text which must be formatted differently */ + export type TextEntityType = + | textEntityTypeMention + | textEntityTypeHashtag + | textEntityTypeCashtag + | textEntityTypeBotCommand + | textEntityTypeUrl + | textEntityTypeEmailAddress + | textEntityTypePhoneNumber + | textEntityTypeBankCardNumber + | textEntityTypeBold + | textEntityTypeItalic + | textEntityTypeUnderline + | textEntityTypeStrikethrough + | textEntityTypeCode + | textEntityTypePre + | textEntityTypePreCode + | textEntityTypeTextUrl + | textEntityTypeMentionName + | textEntityTypeMediaTimestamp + + /** Represents a part of the text which must be formatted differently */ + export type TextEntityType$Input = + | textEntityTypeMention$Input + | textEntityTypeHashtag$Input + | textEntityTypeCashtag$Input + | textEntityTypeBotCommand$Input + | textEntityTypeUrl$Input + | textEntityTypeEmailAddress$Input + | textEntityTypePhoneNumber$Input + | textEntityTypeBankCardNumber$Input + | textEntityTypeBold$Input + | textEntityTypeItalic$Input + | textEntityTypeUnderline$Input + | textEntityTypeStrikethrough$Input + | textEntityTypeCode$Input + | textEntityTypePre$Input + | textEntityTypePreCode$Input + | textEntityTypeTextUrl$Input + | textEntityTypeMentionName$Input + | textEntityTypeMediaTimestamp$Input + + /** Contains information about the time when a scheduled message will be sent */ + export type MessageSchedulingState = + | messageSchedulingStateSendAtDate + | messageSchedulingStateSendWhenOnline + + /** Contains information about the time when a scheduled message will be sent */ + export type MessageSchedulingState$Input = + | messageSchedulingStateSendAtDate$Input + | messageSchedulingStateSendWhenOnline$Input + + /** The content of a message to send */ + export type InputMessageContent = + | inputMessageText + | inputMessageAnimation + | inputMessageAudio + | inputMessageDocument + | inputMessagePhoto + | inputMessageSticker + | inputMessageVideo + | inputMessageVideoNote + | inputMessageVoiceNote + | inputMessageLocation + | inputMessageVenue + | inputMessageContact + | inputMessageDice + | inputMessageGame + | inputMessageInvoice + | inputMessagePoll + | inputMessageForwarded + + /** The content of a message to send */ + export type InputMessageContent$Input = + | inputMessageText$Input + | inputMessageAnimation$Input + | inputMessageAudio$Input + | inputMessageDocument$Input + | inputMessagePhoto$Input + | inputMessageSticker$Input + | inputMessageVideo$Input + | inputMessageVideoNote$Input + | inputMessageVoiceNote$Input + | inputMessageLocation$Input + | inputMessageVenue$Input + | inputMessageContact$Input + | inputMessageDice$Input + | inputMessageGame$Input + | inputMessageInvoice$Input + | inputMessagePoll$Input + | inputMessageForwarded$Input + + /** Represents a filter for message search results */ + export type SearchMessagesFilter$Input = + | searchMessagesFilterEmpty$Input + | searchMessagesFilterAnimation$Input + | searchMessagesFilterAudio$Input + | searchMessagesFilterDocument$Input + | searchMessagesFilterPhoto$Input + | searchMessagesFilterVideo$Input + | searchMessagesFilterVoiceNote$Input + | searchMessagesFilterPhotoAndVideo$Input + | searchMessagesFilterUrl$Input + | searchMessagesFilterChatPhoto$Input + | searchMessagesFilterVideoNote$Input + | searchMessagesFilterVoiceAndVideoNote$Input + | searchMessagesFilterMention$Input + | searchMessagesFilterUnreadMention$Input + | searchMessagesFilterFailedToSend$Input + | searchMessagesFilterPinned$Input + + /** Describes the different types of activity in a chat */ + export type ChatAction = + | chatActionTyping + | chatActionRecordingVideo + | chatActionUploadingVideo + | chatActionRecordingVoiceNote + | chatActionUploadingVoiceNote + | chatActionUploadingPhoto + | chatActionUploadingDocument + | chatActionChoosingSticker + | chatActionChoosingLocation + | chatActionChoosingContact + | chatActionStartPlayingGame + | chatActionRecordingVideoNote + | chatActionUploadingVideoNote + | chatActionWatchingAnimations + | chatActionCancel + + /** Describes the different types of activity in a chat */ + export type ChatAction$Input = + | chatActionTyping$Input + | chatActionRecordingVideo$Input + | chatActionUploadingVideo$Input + | chatActionRecordingVoiceNote$Input + | chatActionUploadingVoiceNote$Input + | chatActionUploadingPhoto$Input + | chatActionUploadingDocument$Input + | chatActionChoosingSticker$Input + | chatActionChoosingLocation$Input + | chatActionChoosingContact$Input + | chatActionStartPlayingGame$Input + | chatActionRecordingVideoNote$Input + | chatActionUploadingVideoNote$Input + | chatActionWatchingAnimations$Input + | chatActionCancel$Input + + /** Describes the last time the user was online */ + export type UserStatus = + | userStatusEmpty + | userStatusOnline + | userStatusOffline + | userStatusRecently + | userStatusLastWeek + | userStatusLastMonth + + export type Stickers = stickers + + export type Emojis = emojis + + export type StickerSet = stickerSet + + export type StickerSets = stickerSets + + /** Describes the reason why a call was discarded */ + export type CallDiscardReason = + | callDiscardReasonEmpty + | callDiscardReasonMissed + | callDiscardReasonDeclined + | callDiscardReasonDisconnected + | callDiscardReasonHungUp + + /** Describes the type of a call server */ + export type CallServerType = + | callServerTypeTelegramReflector + | callServerTypeWebrtc + + export type CallId = callId + + export type GroupCallId = groupCallId + + /** Describes the current call state */ + export type CallState = + | callStatePending + | callStateExchangingKeys + | callStateReady + | callStateHangingUp + | callStateDiscarded + | callStateError + + /** Describes the quality of a group call video */ + export type GroupCallVideoQuality$Input = + | groupCallVideoQualityThumbnail$Input + | groupCallVideoQualityMedium$Input + | groupCallVideoQualityFull$Input + + export type GroupCall = groupCall + + /** Describes the exact type of a problem with a call */ + export type CallProblem$Input = + | callProblemEcho$Input + | callProblemNoise$Input + | callProblemInterruptions$Input + | callProblemDistortedSpeech$Input + | callProblemSilentLocal$Input + | callProblemSilentRemote$Input + | callProblemDropped$Input + | callProblemDistortedVideo$Input + | callProblemPixelatedVideo$Input + + export type Animations = animations + + /** Contains animated stickers which must be used for dice animation rendering */ + export type DiceStickers = + | diceStickersRegular + | diceStickersSlotMachine + + export type ImportedContacts = importedContacts + + export type HttpUrl = httpUrl + + /** Represents a single result of an inline query; for bots only */ + export type InputInlineQueryResult$Input = + | inputInlineQueryResultAnimation$Input + | inputInlineQueryResultArticle$Input + | inputInlineQueryResultAudio$Input + | inputInlineQueryResultContact$Input + | inputInlineQueryResultDocument$Input + | inputInlineQueryResultGame$Input + | inputInlineQueryResultLocation$Input + | inputInlineQueryResultPhoto$Input + | inputInlineQueryResultSticker$Input + | inputInlineQueryResultVenue$Input + | inputInlineQueryResultVideo$Input + | inputInlineQueryResultVoiceNote$Input + + /** Represents a single result of an inline query */ + export type InlineQueryResult = + | inlineQueryResultArticle + | inlineQueryResultContact + | inlineQueryResultLocation + | inlineQueryResultVenue + | inlineQueryResultGame + | inlineQueryResultAnimation + | inlineQueryResultAudio + | inlineQueryResultDocument + | inlineQueryResultPhoto + | inlineQueryResultSticker + | inlineQueryResultVideo + | inlineQueryResultVoiceNote + + export type InlineQueryResults = inlineQueryResults + + /** Represents a payload of a callback query */ + export type CallbackQueryPayload = + | callbackQueryPayloadData + | callbackQueryPayloadDataWithPassword + | callbackQueryPayloadGame + + /** Represents a payload of a callback query */ + export type CallbackQueryPayload$Input = + | callbackQueryPayloadData$Input + | callbackQueryPayloadDataWithPassword$Input + | callbackQueryPayloadGame$Input + + export type CallbackQueryAnswer = callbackQueryAnswer + + export type CustomRequestResult = customRequestResult + + export type GameHighScores = gameHighScores + + /** Represents a chat event */ + export type ChatEventAction = + | chatEventMessageEdited + | chatEventMessageDeleted + | chatEventPollStopped + | chatEventMessagePinned + | chatEventMessageUnpinned + | chatEventMemberJoined + | chatEventMemberJoinedByInviteLink + | chatEventMemberJoinedByRequest + | chatEventMemberLeft + | chatEventMemberInvited + | chatEventMemberPromoted + | chatEventMemberRestricted + | chatEventTitleChanged + | chatEventPermissionsChanged + | chatEventDescriptionChanged + | chatEventUsernameChanged + | chatEventPhotoChanged + | chatEventInvitesToggled + | chatEventLinkedChatChanged + | chatEventSlowModeDelayChanged + | chatEventMessageTtlChanged + | chatEventSignMessagesToggled + | chatEventHasProtectedContentToggled + | chatEventStickerSetChanged + | chatEventLocationChanged + | chatEventIsAllHistoryAvailableToggled + | chatEventInviteLinkEdited + | chatEventInviteLinkRevoked + | chatEventInviteLinkDeleted + | chatEventVideoChatCreated + | chatEventVideoChatEnded + | chatEventVideoChatParticipantIsMutedToggled + | chatEventVideoChatParticipantVolumeLevelChanged + | chatEventVideoChatMuteNewParticipantsToggled + + export type ChatEvents = chatEvents + + /** Represents the value of a string in a language pack */ + export type LanguagePackStringValue = + | languagePackStringValueOrdinary + | languagePackStringValuePluralized + | languagePackStringValueDeleted + + /** Represents the value of a string in a language pack */ + export type LanguagePackStringValue$Input = + | languagePackStringValueOrdinary$Input + | languagePackStringValuePluralized$Input + | languagePackStringValueDeleted$Input + + export type LanguagePackStrings = languagePackStrings + + export type LanguagePackInfo = languagePackInfo + + export type LocalizationTargetInfo = localizationTargetInfo + + /** + * Represents a data needed to subscribe for push notifications through registerDevice + * method. To use specific push notification service, the correct application platform + * must be specified and a valid server authentication data must be uploaded at + * https://my.telegram.org + */ + export type DeviceToken$Input = + | deviceTokenFirebaseCloudMessaging$Input + | deviceTokenApplePush$Input + | deviceTokenApplePushVoIP$Input + | deviceTokenWindowsPush$Input + | deviceTokenMicrosoftPush$Input + | deviceTokenMicrosoftPushVoIP$Input + | deviceTokenWebPush$Input + | deviceTokenSimplePush$Input + | deviceTokenUbuntuPush$Input + | deviceTokenBlackBerryPush$Input + | deviceTokenTizenPush$Input + + export type PushReceiverId = pushReceiverId + + /** Describes a fill of a background */ + export type BackgroundFill = + | backgroundFillSolid + | backgroundFillGradient + | backgroundFillFreeformGradient + + /** Describes a fill of a background */ + export type BackgroundFill$Input = + | backgroundFillSolid$Input + | backgroundFillGradient$Input + | backgroundFillFreeformGradient$Input + + /** Describes the type of a background */ + export type BackgroundType = + | backgroundTypeWallpaper + | backgroundTypePattern + | backgroundTypeFill + + /** Describes the type of a background */ + export type BackgroundType$Input = + | backgroundTypeWallpaper$Input + | backgroundTypePattern$Input + | backgroundTypeFill$Input + + export type Background = background + + export type Backgrounds = backgrounds + + /** Contains information about background to set */ + export type InputBackground$Input = + | inputBackgroundLocal$Input + | inputBackgroundRemote$Input + + export type Hashtags = hashtags + + /** + * Represents result of checking whether the current session can be used to transfer + * a chat ownership to another user + */ + export type CanTransferOwnershipResult = + | canTransferOwnershipResultOk + | canTransferOwnershipResultPasswordNeeded + | canTransferOwnershipResultPasswordTooFresh + | canTransferOwnershipResultSessionTooFresh + + /** Represents result of checking whether a username can be set for a chat */ + export type CheckChatUsernameResult = + | checkChatUsernameResultOk + | checkChatUsernameResultUsernameInvalid + | checkChatUsernameResultUsernameOccupied + | checkChatUsernameResultPublicChatsTooMuch + | checkChatUsernameResultPublicGroupsUnavailable + + /** Represents result of checking whether a name can be used for a new sticker set */ + export type CheckStickerSetNameResult = + | checkStickerSetNameResultOk + | checkStickerSetNameResultNameInvalid + | checkStickerSetNameResultNameOccupied + + /** Represents result of 2-step verification password reset */ + export type ResetPasswordResult = + | resetPasswordResultOk + | resetPasswordResultPending + | resetPasswordResultDeclined + + /** Contains information about a file with messages exported from another app */ + export type MessageFileType = + | messageFileTypePrivate + | messageFileTypeGroup + | messageFileTypeUnknown + + /** Contains content of a push message notification */ + export type PushMessageContent = + | pushMessageContentHidden + | pushMessageContentAnimation + | pushMessageContentAudio + | pushMessageContentContact + | pushMessageContentContactRegistered + | pushMessageContentDocument + | pushMessageContentGame + | pushMessageContentGameScore + | pushMessageContentInvoice + | pushMessageContentLocation + | pushMessageContentPhoto + | pushMessageContentPoll + | pushMessageContentScreenshotTaken + | pushMessageContentSticker + | pushMessageContentText + | pushMessageContentVideo + | pushMessageContentVideoNote + | pushMessageContentVoiceNote + | pushMessageContentBasicGroupChatCreate + | pushMessageContentChatAddMembers + | pushMessageContentChatChangePhoto + | pushMessageContentChatChangeTitle + | pushMessageContentChatSetTheme + | pushMessageContentChatDeleteMember + | pushMessageContentChatJoinByLink + | pushMessageContentChatJoinByRequest + | pushMessageContentMessageForwards + | pushMessageContentMediaAlbum + + /** Contains detailed information about a notification */ + export type NotificationType = + | notificationTypeNewMessage + | notificationTypeNewSecretChat + | notificationTypeNewCall + | notificationTypeNewPushMessage + + /** Describes the type of notifications in a notification group */ + export type NotificationGroupType = + | notificationGroupTypeMessages + | notificationGroupTypeMentions + | notificationGroupTypeSecretChat + | notificationGroupTypeCalls + + /** Represents the value of an option */ + export type OptionValue = + | optionValueBoolean + | optionValueEmpty + | optionValueInteger + | optionValueString + + /** Represents the value of an option */ + export type OptionValue$Input = + | optionValueBoolean$Input + | optionValueEmpty$Input + | optionValueInteger$Input + | optionValueString$Input + + /** Represents a JSON value */ + export type JsonValue = + | jsonValueNull + | jsonValueBoolean + | jsonValueNumber + | jsonValueString + | jsonValueArray + | jsonValueObject + + /** Represents a JSON value */ + export type JsonValue$Input = + | jsonValueNull$Input + | jsonValueBoolean$Input + | jsonValueNumber$Input + | jsonValueString$Input + | jsonValueArray$Input + | jsonValueObject$Input + + /** Represents a single rule for managing privacy settings */ + export type UserPrivacySettingRule = + | userPrivacySettingRuleAllowAll + | userPrivacySettingRuleAllowContacts + | userPrivacySettingRuleAllowUsers + | userPrivacySettingRuleAllowChatMembers + | userPrivacySettingRuleRestrictAll + | userPrivacySettingRuleRestrictContacts + | userPrivacySettingRuleRestrictUsers + | userPrivacySettingRuleRestrictChatMembers + + /** Represents a single rule for managing privacy settings */ + export type UserPrivacySettingRule$Input = + | userPrivacySettingRuleAllowAll$Input + | userPrivacySettingRuleAllowContacts$Input + | userPrivacySettingRuleAllowUsers$Input + | userPrivacySettingRuleAllowChatMembers$Input + | userPrivacySettingRuleRestrictAll$Input + | userPrivacySettingRuleRestrictContacts$Input + | userPrivacySettingRuleRestrictUsers$Input + | userPrivacySettingRuleRestrictChatMembers$Input + + export type UserPrivacySettingRules = userPrivacySettingRules + + /** Describes available user privacy settings */ + export type UserPrivacySetting = + | userPrivacySettingShowStatus + | userPrivacySettingShowProfilePhoto + | userPrivacySettingShowLinkInForwardedMessages + | userPrivacySettingShowPhoneNumber + | userPrivacySettingAllowChatInvites + | userPrivacySettingAllowCalls + | userPrivacySettingAllowPeerToPeerCalls + | userPrivacySettingAllowFindingByPhoneNumber + + /** Describes available user privacy settings */ + export type UserPrivacySetting$Input = + | userPrivacySettingShowStatus$Input + | userPrivacySettingShowProfilePhoto$Input + | userPrivacySettingShowLinkInForwardedMessages$Input + | userPrivacySettingShowPhoneNumber$Input + | userPrivacySettingAllowChatInvites$Input + | userPrivacySettingAllowCalls$Input + | userPrivacySettingAllowPeerToPeerCalls$Input + | userPrivacySettingAllowFindingByPhoneNumber$Input + + export type AccountTtl = accountTtl + + export type Session = session + + export type Sessions = sessions + + export type ConnectedWebsites = connectedWebsites + + /** Describes the reason why a chat is reported */ + export type ChatReportReason$Input = + | chatReportReasonSpam$Input + | chatReportReasonViolence$Input + | chatReportReasonPornography$Input + | chatReportReasonChildAbuse$Input + | chatReportReasonCopyright$Input + | chatReportReasonUnrelatedLocation$Input + | chatReportReasonFake$Input + | chatReportReasonCustom$Input + + /** + * Describes an internal https://t.me or tg: link, which must be processed by the + * app in a special way + */ + export type InternalLinkType = + | internalLinkTypeActiveSessions + | internalLinkTypeAuthenticationCode + | internalLinkTypeBackground + | internalLinkTypeBotStart + | internalLinkTypeBotStartInGroup + | internalLinkTypeChangePhoneNumber + | internalLinkTypeChatInvite + | internalLinkTypeFilterSettings + | internalLinkTypeGame + | internalLinkTypeLanguagePack + | internalLinkTypeMessage + | internalLinkTypeMessageDraft + | internalLinkTypePassportDataRequest + | internalLinkTypePhoneNumberConfirmation + | internalLinkTypeProxy + | internalLinkTypePublicChat + | internalLinkTypeQrCodeAuthentication + | internalLinkTypeSettings + | internalLinkTypeStickerSet + | internalLinkTypeTheme + | internalLinkTypeThemeSettings + | internalLinkTypeUnknownDeepLink + | internalLinkTypeUnsupportedProxy + | internalLinkTypeVideoChat + + export type MessageLink = messageLink + + export type MessageLinkInfo = messageLinkInfo + + export type FilePart = filePart + + /** Represents the type of a file */ + export type FileType = + | fileTypeNone + | fileTypeAnimation + | fileTypeAudio + | fileTypeDocument + | fileTypePhoto + | fileTypeProfilePhoto + | fileTypeSecret + | fileTypeSecretThumbnail + | fileTypeSecure + | fileTypeSticker + | fileTypeThumbnail + | fileTypeUnknown + | fileTypeVideo + | fileTypeVideoNote + | fileTypeVoiceNote + | fileTypeWallpaper + + /** Represents the type of a file */ + export type FileType$Input = + | fileTypeNone$Input + | fileTypeAnimation$Input + | fileTypeAudio$Input + | fileTypeDocument$Input + | fileTypePhoto$Input + | fileTypeProfilePhoto$Input + | fileTypeSecret$Input + | fileTypeSecretThumbnail$Input + | fileTypeSecure$Input + | fileTypeSticker$Input + | fileTypeThumbnail$Input + | fileTypeUnknown$Input + | fileTypeVideo$Input + | fileTypeVideoNote$Input + | fileTypeVoiceNote$Input + | fileTypeWallpaper$Input + + export type StorageStatistics = storageStatistics + + export type StorageStatisticsFast = storageStatisticsFast + + export type DatabaseStatistics = databaseStatistics + + /** Represents the type of a network */ + export type NetworkType = + | networkTypeNone + | networkTypeMobile + | networkTypeMobileRoaming + | networkTypeWiFi + | networkTypeOther + + /** Represents the type of a network */ + export type NetworkType$Input = + | networkTypeNone$Input + | networkTypeMobile$Input + | networkTypeMobileRoaming$Input + | networkTypeWiFi$Input + | networkTypeOther$Input + + /** Contains statistics about network usage */ + export type NetworkStatisticsEntry = + | networkStatisticsEntryFile + | networkStatisticsEntryCall + + /** Contains statistics about network usage */ + export type NetworkStatisticsEntry$Input = + | networkStatisticsEntryFile$Input + | networkStatisticsEntryCall$Input + + export type NetworkStatistics = networkStatistics + + export type AutoDownloadSettingsPresets = autoDownloadSettingsPresets + + /** Describes the current state of the connection to Telegram servers */ + export type ConnectionState = + | connectionStateWaitingForNetwork + | connectionStateConnectingToProxy + | connectionStateConnecting + | connectionStateUpdating + | connectionStateReady + + /** + * Represents the categories of chats for which a list of frequently used chats + * can be retrieved + */ + export type TopChatCategory$Input = + | topChatCategoryUsers$Input + | topChatCategoryBots$Input + | topChatCategoryGroups$Input + | topChatCategoryChannels$Input + | topChatCategoryInlineBots$Input + | topChatCategoryCalls$Input + | topChatCategoryForwardChats$Input + + /** Describes the type of a URL linking to an internal Telegram entity */ + export type TMeUrlType = + | tMeUrlTypeUser + | tMeUrlTypeSupergroup + | tMeUrlTypeChatInvite + | tMeUrlTypeStickerSet + + export type TMeUrls = tMeUrls + + /** Describes an action suggested to the current user */ + export type SuggestedAction = + | suggestedActionEnableArchiveAndMuteNewChats + | suggestedActionCheckPassword + | suggestedActionCheckPhoneNumber + | suggestedActionViewChecksHint + | suggestedActionConvertToBroadcastGroup + | suggestedActionSetPassword + + /** Describes an action suggested to the current user */ + export type SuggestedAction$Input = + | suggestedActionEnableArchiveAndMuteNewChats$Input + | suggestedActionCheckPassword$Input + | suggestedActionCheckPhoneNumber$Input + | suggestedActionViewChecksHint$Input + | suggestedActionConvertToBroadcastGroup$Input + | suggestedActionSetPassword$Input + + export type Count = count + + export type Text = text + + export type Seconds = seconds + + export type DeepLinkInfo = deepLinkInfo + + /** Describes the way the text needs to be parsed for TextEntities */ + export type TextParseMode$Input = + | textParseModeMarkdown$Input + | textParseModeHTML$Input + + /** Describes the type of a proxy server */ + export type ProxyType = + | proxyTypeSocks5 + | proxyTypeHttp + | proxyTypeMtproto + + /** Describes the type of a proxy server */ + export type ProxyType$Input = + | proxyTypeSocks5$Input + | proxyTypeHttp$Input + | proxyTypeMtproto$Input + + export type Proxy = proxy + + export type Proxies = proxies + + /** Describes a sticker that needs to be added to a sticker set */ + export type InputSticker$Input = + | inputStickerStatic$Input + | inputStickerAnimated$Input + + /** Describes a statistical graph */ + export type StatisticalGraph = + | statisticalGraphData + | statisticalGraphAsync + | statisticalGraphError + + /** Contains a detailed statistics about a chat */ + export type ChatStatistics = + | chatStatisticsSupergroup + | chatStatisticsChannel + + export type MessageStatistics = messageStatistics + + /** Represents a vector path command */ + export type VectorPathCommand = + | vectorPathCommandLine + | vectorPathCommandCubicBezierCurve + + /** Represents the scope to which bot commands are relevant */ + export type BotCommandScope$Input = + | botCommandScopeDefault$Input + | botCommandScopeAllPrivateChats$Input + | botCommandScopeAllGroupChats$Input + | botCommandScopeAllChatAdministrators$Input + | botCommandScopeChat$Input + | botCommandScopeChatAdministrators$Input + | botCommandScopeChatMember$Input + + /** Contains notifications about data changes */ + export type Update = + | updateAuthorizationState + | updateNewMessage + | updateMessageSendAcknowledged + | updateMessageSendSucceeded + | updateMessageSendFailed + | updateMessageContent + | updateMessageEdited + | updateMessageIsPinned + | updateMessageInteractionInfo + | updateMessageContentOpened + | updateMessageMentionRead + | updateMessageLiveLocationViewed + | updateNewChat + | updateChatTitle + | updateChatPhoto + | updateChatPermissions + | updateChatLastMessage + | updateChatPosition + | updateChatReadInbox + | updateChatReadOutbox + | updateChatActionBar + | updateChatDraftMessage + | updateChatMessageSender + | updateChatMessageTtl + | updateChatNotificationSettings + | updateChatPendingJoinRequests + | updateChatReplyMarkup + | updateChatTheme + | updateChatUnreadMentionCount + | updateChatVideoChat + | updateChatDefaultDisableNotification + | updateChatHasProtectedContent + | updateChatHasScheduledMessages + | updateChatIsBlocked + | updateChatIsMarkedAsUnread + | updateChatFilters + | updateChatOnlineMemberCount + | updateScopeNotificationSettings + | updateNotification + | updateNotificationGroup + | updateActiveNotifications + | updateHavePendingNotifications + | updateDeleteMessages + | updateChatAction + | updateUserStatus + | updateUser + | updateBasicGroup + | updateSupergroup + | updateSecretChat + | updateUserFullInfo + | updateBasicGroupFullInfo + | updateSupergroupFullInfo + | updateServiceNotification + | updateFile + | updateFileGenerationStart + | updateFileGenerationStop + | updateCall + | updateGroupCall + | updateGroupCallParticipant + | updateNewCallSignalingData + | updateUserPrivacySettingRules + | updateUnreadMessageCount + | updateUnreadChatCount + | updateOption + | updateStickerSet + | updateInstalledStickerSets + | updateTrendingStickerSets + | updateRecentStickers + | updateFavoriteStickers + | updateSavedAnimations + | updateSelectedBackground + | updateChatThemes + | updateLanguagePackStrings + | updateConnectionState + | updateTermsOfService + | updateUsersNearby + | updateDiceEmojis + | updateAnimatedEmojiMessageClicked + | updateAnimationSearchParameters + | updateSuggestedActions + | updateNewInlineQuery + | updateNewChosenInlineResult + | updateNewCallbackQuery + | updateNewInlineCallbackQuery + | updateNewShippingQuery + | updateNewPreCheckoutQuery + | updateNewCustomEvent + | updateNewCustomQuery + | updatePoll + | updatePollAnswer + | updateChatMember + | updateNewChatJoinRequest + + export type Updates = updates + + /** Describes a stream to which TDLib internal log is written */ + export type LogStream = + | logStreamDefault + | logStreamFile + | logStreamEmpty + + /** Describes a stream to which TDLib internal log is written */ + export type LogStream$Input = + | logStreamDefault$Input + | logStreamFile$Input + | logStreamEmpty$Input + + export type LogVerbosityLevel = logVerbosityLevel + + export type LogTags = logTags + + export type TestInt = testInt + + export type TestString = testString + + export type TestBytes = testBytes + + export type TestVectorInt = testVectorInt + + export type TestVectorIntObject = testVectorIntObject + + export type TestVectorString = testVectorString + + export type TestVectorStringObject = testVectorStringObject + + // --- Special types --- + + export type $Function = + | getAuthorizationState + | setTdlibParameters + | checkDatabaseEncryptionKey + | setAuthenticationPhoneNumber + | resendAuthenticationCode + | checkAuthenticationCode + | requestQrCodeAuthentication + | registerUser + | checkAuthenticationPassword + | requestAuthenticationPasswordRecovery + | checkAuthenticationPasswordRecoveryCode + | recoverAuthenticationPassword + | checkAuthenticationBotToken + | logOut + | close + | destroy + | confirmQrCodeAuthentication + | getCurrentState + | setDatabaseEncryptionKey + | getPasswordState + | setPassword + | getRecoveryEmailAddress + | setRecoveryEmailAddress + | checkRecoveryEmailAddressCode + | resendRecoveryEmailAddressCode + | requestPasswordRecovery + | checkPasswordRecoveryCode + | recoverPassword + | resetPassword + | cancelPasswordReset + | createTemporaryPassword + | getTemporaryPasswordState + | getMe + | getUser + | getUserFullInfo + | getBasicGroup + | getBasicGroupFullInfo + | getSupergroup + | getSupergroupFullInfo + | getSecretChat + | getChat + | getMessage + | getMessageLocally + | getRepliedMessage + | getChatPinnedMessage + | getCallbackQueryMessage + | getMessages + | getMessageThread + | getMessageViewers + | getFile + | getRemoteFile + | loadChats + | getChats + | searchPublicChat + | searchPublicChats + | searchChats + | searchChatsOnServer + | searchChatsNearby + | getTopChats + | removeTopChat + | addRecentlyFoundChat + | removeRecentlyFoundChat + | clearRecentlyFoundChats + | getRecentlyOpenedChats + | checkChatUsername + | getCreatedPublicChats + | checkCreatedPublicChatsLimit + | getSuitableDiscussionChats + | getInactiveSupergroupChats + | getGroupsInCommon + | getChatHistory + | getMessageThreadHistory + | deleteChatHistory + | deleteChat + | searchChatMessages + | searchMessages + | searchSecretMessages + | searchCallMessages + | deleteAllCallMessages + | searchChatRecentLocationMessages + | getActiveLiveLocationMessages + | getChatMessageByDate + | getChatSparseMessagePositions + | getChatMessageCalendar + | getChatMessageCount + | getChatScheduledMessages + | getMessagePublicForwards + | getChatSponsoredMessage + | removeNotification + | removeNotificationGroup + | getMessageLink + | getMessageEmbeddingCode + | getMessageLinkInfo + | getChatAvailableMessageSenders + | setChatMessageSender + | sendMessage + | sendMessageAlbum + | sendBotStartMessage + | sendInlineQueryResultMessage + | forwardMessages + | resendMessages + | sendChatScreenshotTakenNotification + | addLocalMessage + | deleteMessages + | deleteChatMessagesBySender + | deleteChatMessagesByDate + | editMessageText + | editMessageLiveLocation + | editMessageMedia + | editMessageCaption + | editMessageReplyMarkup + | editInlineMessageText + | editInlineMessageLiveLocation + | editInlineMessageMedia + | editInlineMessageCaption + | editInlineMessageReplyMarkup + | editMessageSchedulingState + | getTextEntities + | parseTextEntities + | parseMarkdown + | getMarkdownText + | getFileMimeType + | getFileExtension + | cleanFileName + | getLanguagePackString + | getJsonValue + | getJsonString + | setPollAnswer + | getPollVoters + | stopPoll + | hideSuggestedAction + | getLoginUrlInfo + | getLoginUrl + | getInlineQueryResults + | answerInlineQuery + | getCallbackQueryAnswer + | answerCallbackQuery + | answerShippingQuery + | answerPreCheckoutQuery + | setGameScore + | setInlineGameScore + | getGameHighScores + | getInlineGameHighScores + | deleteChatReplyMarkup + | sendChatAction + | openChat + | closeChat + | viewMessages + | openMessageContent + | clickAnimatedEmojiMessage + | getInternalLinkType + | getExternalLinkInfo + | getExternalLink + | readAllChatMentions + | createPrivateChat + | createBasicGroupChat + | createSupergroupChat + | createSecretChat + | createNewBasicGroupChat + | createNewSupergroupChat + | createNewSecretChat + | upgradeBasicGroupChatToSupergroupChat + | getChatListsToAddChat + | addChatToList + | getChatFilter + | createChatFilter + | editChatFilter + | deleteChatFilter + | reorderChatFilters + | getRecommendedChatFilters + | getChatFilterDefaultIconName + | setChatTitle + | setChatPhoto + | setChatMessageTtl + | setChatPermissions + | setChatTheme + | setChatDraftMessage + | setChatNotificationSettings + | toggleChatHasProtectedContent + | toggleChatIsMarkedAsUnread + | toggleChatDefaultDisableNotification + | setChatClientData + | setChatDescription + | setChatDiscussionGroup + | setChatLocation + | setChatSlowModeDelay + | pinChatMessage + | unpinChatMessage + | unpinAllChatMessages + | joinChat + | leaveChat + | addChatMember + | addChatMembers + | setChatMemberStatus + | banChatMember + | canTransferOwnership + | transferChatOwnership + | getChatMember + | searchChatMembers + | getChatAdministrators + | clearAllDraftMessages + | getChatNotificationSettingsExceptions + | getScopeNotificationSettings + | setScopeNotificationSettings + | resetAllNotificationSettings + | toggleChatIsPinned + | setPinnedChats + | downloadFile + | getFileDownloadedPrefixSize + | cancelDownloadFile + | getSuggestedFileName + | uploadFile + | cancelUploadFile + | writeGeneratedFilePart + | setFileGenerationProgress + | finishFileGeneration + | readFilePart + | deleteFile + | getMessageFileType + | getMessageImportConfirmationText + | importMessages + | replacePrimaryChatInviteLink + | createChatInviteLink + | editChatInviteLink + | getChatInviteLink + | getChatInviteLinkCounts + | getChatInviteLinks + | getChatInviteLinkMembers + | revokeChatInviteLink + | deleteRevokedChatInviteLink + | deleteAllRevokedChatInviteLinks + | checkChatInviteLink + | joinChatByInviteLink + | getChatJoinRequests + | processChatJoinRequest + | processChatJoinRequests + | createCall + | acceptCall + | sendCallSignalingData + | discardCall + | sendCallRating + | sendCallDebugInformation + | getVideoChatAvailableParticipants + | setVideoChatDefaultParticipant + | createVideoChat + | getGroupCall + | startScheduledGroupCall + | toggleGroupCallEnabledStartNotification + | joinGroupCall + | startGroupCallScreenSharing + | toggleGroupCallScreenSharingIsPaused + | endGroupCallScreenSharing + | setGroupCallTitle + | toggleGroupCallMuteNewParticipants + | inviteGroupCallParticipants + | getGroupCallInviteLink + | revokeGroupCallInviteLink + | startGroupCallRecording + | endGroupCallRecording + | toggleGroupCallIsMyVideoPaused + | toggleGroupCallIsMyVideoEnabled + | setGroupCallParticipantIsSpeaking + | toggleGroupCallParticipantIsMuted + | setGroupCallParticipantVolumeLevel + | toggleGroupCallParticipantIsHandRaised + | loadGroupCallParticipants + | leaveGroupCall + | endGroupCall + | getGroupCallStreamSegment + | toggleMessageSenderIsBlocked + | blockMessageSenderFromReplies + | getBlockedMessageSenders + | addContact + | importContacts + | getContacts + | searchContacts + | removeContacts + | getImportedContactCount + | changeImportedContacts + | clearImportedContacts + | sharePhoneNumber + | getUserProfilePhotos + | getStickers + | searchStickers + | getInstalledStickerSets + | getArchivedStickerSets + | getTrendingStickerSets + | getAttachedStickerSets + | getStickerSet + | searchStickerSet + | searchInstalledStickerSets + | searchStickerSets + | changeStickerSet + | viewTrendingStickerSets + | reorderInstalledStickerSets + | getRecentStickers + | addRecentSticker + | removeRecentSticker + | clearRecentStickers + | getFavoriteStickers + | addFavoriteSticker + | removeFavoriteSticker + | getStickerEmojis + | searchEmojis + | getAnimatedEmoji + | getEmojiSuggestionsUrl + | getSavedAnimations + | addSavedAnimation + | removeSavedAnimation + | getRecentInlineBots + | searchHashtags + | removeRecentHashtag + | getWebPagePreview + | getWebPageInstantView + | setProfilePhoto + | deleteProfilePhoto + | setName + | setBio + | setUsername + | setLocation + | changePhoneNumber + | resendChangePhoneNumberCode + | checkChangePhoneNumberCode + | setCommands + | deleteCommands + | getCommands + | getActiveSessions + | terminateSession + | terminateAllOtherSessions + | toggleSessionCanAcceptCalls + | toggleSessionCanAcceptSecretChats + | setInactiveSessionTtl + | getConnectedWebsites + | disconnectWebsite + | disconnectAllWebsites + | setSupergroupUsername + | setSupergroupStickerSet + | toggleSupergroupSignMessages + | toggleSupergroupIsAllHistoryAvailable + | toggleSupergroupIsBroadcastGroup + | reportSupergroupSpam + | getSupergroupMembers + | closeSecretChat + | getChatEventLog + | getPaymentForm + | validateOrderInfo + | sendPaymentForm + | getPaymentReceipt + | getSavedOrderInfo + | deleteSavedOrderInfo + | deleteSavedCredentials + | getSupportUser + | getBackgrounds + | getBackgroundUrl + | searchBackground + | setBackground + | removeBackground + | resetBackgrounds + | getLocalizationTargetInfo + | getLanguagePackInfo + | getLanguagePackStrings + | synchronizeLanguagePack + | addCustomServerLanguagePack + | setCustomLanguagePack + | editCustomLanguagePackInfo + | setCustomLanguagePackString + | deleteLanguagePack + | registerDevice + | processPushNotification + | getPushReceiverId + | getRecentlyVisitedTMeUrls + | setUserPrivacySettingRules + | getUserPrivacySettingRules + | getOption + | setOption + | setAccountTtl + | getAccountTtl + | deleteAccount + | removeChatActionBar + | reportChat + | reportChatPhoto + | getChatStatistics + | getMessageStatistics + | getStatisticalGraph + | getStorageStatistics + | getStorageStatisticsFast + | getDatabaseStatistics + | optimizeStorage + | setNetworkType + | getNetworkStatistics + | addNetworkStatistics + | resetNetworkStatistics + | getAutoDownloadSettingsPresets + | setAutoDownloadSettings + | getBankCardInfo + | getPassportElement + | getAllPassportElements + | setPassportElement + | deletePassportElement + | setPassportElementErrors + | getPreferredCountryLanguage + | sendPhoneNumberVerificationCode + | resendPhoneNumberVerificationCode + | checkPhoneNumberVerificationCode + | sendEmailAddressVerificationCode + | resendEmailAddressVerificationCode + | checkEmailAddressVerificationCode + | getPassportAuthorizationForm + | getPassportAuthorizationFormAvailableElements + | sendPassportAuthorizationForm + | sendPhoneNumberConfirmationCode + | resendPhoneNumberConfirmationCode + | checkPhoneNumberConfirmationCode + | setBotUpdatesStatus + | uploadStickerFile + | getSuggestedStickerSetName + | checkStickerSetName + | createNewStickerSet + | addStickerToSet + | setStickerSetThumbnail + | setStickerPositionInSet + | removeStickerFromSet + | getMapThumbnailFile + | acceptTermsOfService + | sendCustomRequest + | answerCustomQuery + | setAlarm + | getCountries + | getCountryCode + | getPhoneNumberInfo + | getPhoneNumberInfoSync + | getApplicationDownloadLink + | getDeepLinkInfo + | getApplicationConfig + | saveApplicationLogEvent + | addProxy + | editProxy + | enableProxy + | disableProxy + | removeProxy + | getProxies + | getProxyLink + | pingProxy + | setLogStream + | getLogStream + | setLogVerbosityLevel + | getLogVerbosityLevel + | getLogTags + | setLogTagVerbosityLevel + | getLogTagVerbosityLevel + | addLogMessage + | testCallEmpty + | testCallString + | testCallBytes + | testCallVectorInt + | testCallVectorIntObject + | testCallVectorString + | testCallVectorStringObject + | testSquareInt + | testNetwork + | testProxy + | testGetDifference + | testUseUpdate + | testReturnError + + export type $FunctionResultByName = { + getAuthorizationState: AuthorizationState, + setTdlibParameters: Ok, + checkDatabaseEncryptionKey: Ok, + setAuthenticationPhoneNumber: Ok, + resendAuthenticationCode: Ok, + checkAuthenticationCode: Ok, + requestQrCodeAuthentication: Ok, + registerUser: Ok, + checkAuthenticationPassword: Ok, + requestAuthenticationPasswordRecovery: Ok, + checkAuthenticationPasswordRecoveryCode: Ok, + recoverAuthenticationPassword: Ok, + checkAuthenticationBotToken: Ok, + logOut: Ok, + close: Ok, + destroy: Ok, + confirmQrCodeAuthentication: Session, + getCurrentState: Updates, + setDatabaseEncryptionKey: Ok, + getPasswordState: PasswordState, + setPassword: PasswordState, + getRecoveryEmailAddress: RecoveryEmailAddress, + setRecoveryEmailAddress: PasswordState, + checkRecoveryEmailAddressCode: PasswordState, + resendRecoveryEmailAddressCode: PasswordState, + requestPasswordRecovery: EmailAddressAuthenticationCodeInfo, + checkPasswordRecoveryCode: Ok, + recoverPassword: PasswordState, + resetPassword: ResetPasswordResult, + cancelPasswordReset: Ok, + createTemporaryPassword: TemporaryPasswordState, + getTemporaryPasswordState: TemporaryPasswordState, + getMe: User, + getUser: User, + getUserFullInfo: UserFullInfo, + getBasicGroup: BasicGroup, + getBasicGroupFullInfo: BasicGroupFullInfo, + getSupergroup: Supergroup, + getSupergroupFullInfo: SupergroupFullInfo, + getSecretChat: SecretChat, + getChat: Chat, + getMessage: Message, + getMessageLocally: Message, + getRepliedMessage: Message, + getChatPinnedMessage: Message, + getCallbackQueryMessage: Message, + getMessages: Messages, + getMessageThread: MessageThreadInfo, + getMessageViewers: Users, + getFile: File, + getRemoteFile: File, + loadChats: Ok, + getChats: Chats, + searchPublicChat: Chat, + searchPublicChats: Chats, + searchChats: Chats, + searchChatsOnServer: Chats, + searchChatsNearby: ChatsNearby, + getTopChats: Chats, + removeTopChat: Ok, + addRecentlyFoundChat: Ok, + removeRecentlyFoundChat: Ok, + clearRecentlyFoundChats: Ok, + getRecentlyOpenedChats: Chats, + checkChatUsername: CheckChatUsernameResult, + getCreatedPublicChats: Chats, + checkCreatedPublicChatsLimit: Ok, + getSuitableDiscussionChats: Chats, + getInactiveSupergroupChats: Chats, + getGroupsInCommon: Chats, + getChatHistory: Messages, + getMessageThreadHistory: Messages, + deleteChatHistory: Ok, + deleteChat: Ok, + searchChatMessages: Messages, + searchMessages: Messages, + searchSecretMessages: FoundMessages, + searchCallMessages: Messages, + deleteAllCallMessages: Ok, + searchChatRecentLocationMessages: Messages, + getActiveLiveLocationMessages: Messages, + getChatMessageByDate: Message, + getChatSparseMessagePositions: MessagePositions, + getChatMessageCalendar: MessageCalendar, + getChatMessageCount: Count, + getChatScheduledMessages: Messages, + getMessagePublicForwards: FoundMessages, + getChatSponsoredMessage: SponsoredMessage, + removeNotification: Ok, + removeNotificationGroup: Ok, + getMessageLink: MessageLink, + getMessageEmbeddingCode: Text, + getMessageLinkInfo: MessageLinkInfo, + getChatAvailableMessageSenders: MessageSenders, + setChatMessageSender: Ok, + sendMessage: Message, + sendMessageAlbum: Messages, + sendBotStartMessage: Message, + sendInlineQueryResultMessage: Message, + forwardMessages: Messages, + resendMessages: Messages, + sendChatScreenshotTakenNotification: Ok, + addLocalMessage: Message, + deleteMessages: Ok, + deleteChatMessagesBySender: Ok, + deleteChatMessagesByDate: Ok, + editMessageText: Message, + editMessageLiveLocation: Message, + editMessageMedia: Message, + editMessageCaption: Message, + editMessageReplyMarkup: Message, + editInlineMessageText: Ok, + editInlineMessageLiveLocation: Ok, + editInlineMessageMedia: Ok, + editInlineMessageCaption: Ok, + editInlineMessageReplyMarkup: Ok, + editMessageSchedulingState: Ok, + getTextEntities: TextEntities, + parseTextEntities: FormattedText, + parseMarkdown: FormattedText, + getMarkdownText: FormattedText, + getFileMimeType: Text, + getFileExtension: Text, + cleanFileName: Text, + getLanguagePackString: LanguagePackStringValue, + getJsonValue: JsonValue, + getJsonString: Text, + setPollAnswer: Ok, + getPollVoters: Users, + stopPoll: Ok, + hideSuggestedAction: Ok, + getLoginUrlInfo: LoginUrlInfo, + getLoginUrl: HttpUrl, + getInlineQueryResults: InlineQueryResults, + answerInlineQuery: Ok, + getCallbackQueryAnswer: CallbackQueryAnswer, + answerCallbackQuery: Ok, + answerShippingQuery: Ok, + answerPreCheckoutQuery: Ok, + setGameScore: Message, + setInlineGameScore: Ok, + getGameHighScores: GameHighScores, + getInlineGameHighScores: GameHighScores, + deleteChatReplyMarkup: Ok, + sendChatAction: Ok, + openChat: Ok, + closeChat: Ok, + viewMessages: Ok, + openMessageContent: Ok, + clickAnimatedEmojiMessage: Sticker, + getInternalLinkType: InternalLinkType, + getExternalLinkInfo: LoginUrlInfo, + getExternalLink: HttpUrl, + readAllChatMentions: Ok, + createPrivateChat: Chat, + createBasicGroupChat: Chat, + createSupergroupChat: Chat, + createSecretChat: Chat, + createNewBasicGroupChat: Chat, + createNewSupergroupChat: Chat, + createNewSecretChat: Chat, + upgradeBasicGroupChatToSupergroupChat: Chat, + getChatListsToAddChat: ChatLists, + addChatToList: Ok, + getChatFilter: ChatFilter, + createChatFilter: ChatFilterInfo, + editChatFilter: ChatFilterInfo, + deleteChatFilter: Ok, + reorderChatFilters: Ok, + getRecommendedChatFilters: RecommendedChatFilters, + getChatFilterDefaultIconName: Text, + setChatTitle: Ok, + setChatPhoto: Ok, + setChatMessageTtl: Ok, + setChatPermissions: Ok, + setChatTheme: Ok, + setChatDraftMessage: Ok, + setChatNotificationSettings: Ok, + toggleChatHasProtectedContent: Ok, + toggleChatIsMarkedAsUnread: Ok, + toggleChatDefaultDisableNotification: Ok, + setChatClientData: Ok, + setChatDescription: Ok, + setChatDiscussionGroup: Ok, + setChatLocation: Ok, + setChatSlowModeDelay: Ok, + pinChatMessage: Ok, + unpinChatMessage: Ok, + unpinAllChatMessages: Ok, + joinChat: Ok, + leaveChat: Ok, + addChatMember: Ok, + addChatMembers: Ok, + setChatMemberStatus: Ok, + banChatMember: Ok, + canTransferOwnership: CanTransferOwnershipResult, + transferChatOwnership: Ok, + getChatMember: ChatMember, + searchChatMembers: ChatMembers, + getChatAdministrators: ChatAdministrators, + clearAllDraftMessages: Ok, + getChatNotificationSettingsExceptions: Chats, + getScopeNotificationSettings: ScopeNotificationSettings, + setScopeNotificationSettings: Ok, + resetAllNotificationSettings: Ok, + toggleChatIsPinned: Ok, + setPinnedChats: Ok, + downloadFile: File, + getFileDownloadedPrefixSize: Count, + cancelDownloadFile: Ok, + getSuggestedFileName: Text, + uploadFile: File, + cancelUploadFile: Ok, + writeGeneratedFilePart: Ok, + setFileGenerationProgress: Ok, + finishFileGeneration: Ok, + readFilePart: FilePart, + deleteFile: Ok, + getMessageFileType: MessageFileType, + getMessageImportConfirmationText: Text, + importMessages: Ok, + replacePrimaryChatInviteLink: ChatInviteLink, + createChatInviteLink: ChatInviteLink, + editChatInviteLink: ChatInviteLink, + getChatInviteLink: ChatInviteLink, + getChatInviteLinkCounts: ChatInviteLinkCounts, + getChatInviteLinks: ChatInviteLinks, + getChatInviteLinkMembers: ChatInviteLinkMembers, + revokeChatInviteLink: ChatInviteLinks, + deleteRevokedChatInviteLink: Ok, + deleteAllRevokedChatInviteLinks: Ok, + checkChatInviteLink: ChatInviteLinkInfo, + joinChatByInviteLink: Chat, + getChatJoinRequests: ChatJoinRequests, + processChatJoinRequest: Ok, + processChatJoinRequests: Ok, + createCall: CallId, + acceptCall: Ok, + sendCallSignalingData: Ok, + discardCall: Ok, + sendCallRating: Ok, + sendCallDebugInformation: Ok, + getVideoChatAvailableParticipants: MessageSenders, + setVideoChatDefaultParticipant: Ok, + createVideoChat: GroupCallId, + getGroupCall: GroupCall, + startScheduledGroupCall: Ok, + toggleGroupCallEnabledStartNotification: Ok, + joinGroupCall: Text, + startGroupCallScreenSharing: Text, + toggleGroupCallScreenSharingIsPaused: Ok, + endGroupCallScreenSharing: Ok, + setGroupCallTitle: Ok, + toggleGroupCallMuteNewParticipants: Ok, + inviteGroupCallParticipants: Ok, + getGroupCallInviteLink: HttpUrl, + revokeGroupCallInviteLink: Ok, + startGroupCallRecording: Ok, + endGroupCallRecording: Ok, + toggleGroupCallIsMyVideoPaused: Ok, + toggleGroupCallIsMyVideoEnabled: Ok, + setGroupCallParticipantIsSpeaking: Ok, + toggleGroupCallParticipantIsMuted: Ok, + setGroupCallParticipantVolumeLevel: Ok, + toggleGroupCallParticipantIsHandRaised: Ok, + loadGroupCallParticipants: Ok, + leaveGroupCall: Ok, + endGroupCall: Ok, + getGroupCallStreamSegment: FilePart, + toggleMessageSenderIsBlocked: Ok, + blockMessageSenderFromReplies: Ok, + getBlockedMessageSenders: MessageSenders, + addContact: Ok, + importContacts: ImportedContacts, + getContacts: Users, + searchContacts: Users, + removeContacts: Ok, + getImportedContactCount: Count, + changeImportedContacts: ImportedContacts, + clearImportedContacts: Ok, + sharePhoneNumber: Ok, + getUserProfilePhotos: ChatPhotos, + getStickers: Stickers, + searchStickers: Stickers, + getInstalledStickerSets: StickerSets, + getArchivedStickerSets: StickerSets, + getTrendingStickerSets: StickerSets, + getAttachedStickerSets: StickerSets, + getStickerSet: StickerSet, + searchStickerSet: StickerSet, + searchInstalledStickerSets: StickerSets, + searchStickerSets: StickerSets, + changeStickerSet: Ok, + viewTrendingStickerSets: Ok, + reorderInstalledStickerSets: Ok, + getRecentStickers: Stickers, + addRecentSticker: Stickers, + removeRecentSticker: Ok, + clearRecentStickers: Ok, + getFavoriteStickers: Stickers, + addFavoriteSticker: Ok, + removeFavoriteSticker: Ok, + getStickerEmojis: Emojis, + searchEmojis: Emojis, + getAnimatedEmoji: AnimatedEmoji, + getEmojiSuggestionsUrl: HttpUrl, + getSavedAnimations: Animations, + addSavedAnimation: Ok, + removeSavedAnimation: Ok, + getRecentInlineBots: Users, + searchHashtags: Hashtags, + removeRecentHashtag: Ok, + getWebPagePreview: WebPage, + getWebPageInstantView: WebPageInstantView, + setProfilePhoto: Ok, + deleteProfilePhoto: Ok, + setName: Ok, + setBio: Ok, + setUsername: Ok, + setLocation: Ok, + changePhoneNumber: AuthenticationCodeInfo, + resendChangePhoneNumberCode: AuthenticationCodeInfo, + checkChangePhoneNumberCode: Ok, + setCommands: Ok, + deleteCommands: Ok, + getCommands: BotCommands, + getActiveSessions: Sessions, + terminateSession: Ok, + terminateAllOtherSessions: Ok, + toggleSessionCanAcceptCalls: Ok, + toggleSessionCanAcceptSecretChats: Ok, + setInactiveSessionTtl: Ok, + getConnectedWebsites: ConnectedWebsites, + disconnectWebsite: Ok, + disconnectAllWebsites: Ok, + setSupergroupUsername: Ok, + setSupergroupStickerSet: Ok, + toggleSupergroupSignMessages: Ok, + toggleSupergroupIsAllHistoryAvailable: Ok, + toggleSupergroupIsBroadcastGroup: Ok, + reportSupergroupSpam: Ok, + getSupergroupMembers: ChatMembers, + closeSecretChat: Ok, + getChatEventLog: ChatEvents, + getPaymentForm: PaymentForm, + validateOrderInfo: ValidatedOrderInfo, + sendPaymentForm: PaymentResult, + getPaymentReceipt: PaymentReceipt, + getSavedOrderInfo: OrderInfo, + deleteSavedOrderInfo: Ok, + deleteSavedCredentials: Ok, + getSupportUser: User, + getBackgrounds: Backgrounds, + getBackgroundUrl: HttpUrl, + searchBackground: Background, + setBackground: Background, + removeBackground: Ok, + resetBackgrounds: Ok, + getLocalizationTargetInfo: LocalizationTargetInfo, + getLanguagePackInfo: LanguagePackInfo, + getLanguagePackStrings: LanguagePackStrings, + synchronizeLanguagePack: Ok, + addCustomServerLanguagePack: Ok, + setCustomLanguagePack: Ok, + editCustomLanguagePackInfo: Ok, + setCustomLanguagePackString: Ok, + deleteLanguagePack: Ok, + registerDevice: PushReceiverId, + processPushNotification: Ok, + getPushReceiverId: PushReceiverId, + getRecentlyVisitedTMeUrls: TMeUrls, + setUserPrivacySettingRules: Ok, + getUserPrivacySettingRules: UserPrivacySettingRules, + getOption: OptionValue, + setOption: Ok, + setAccountTtl: Ok, + getAccountTtl: AccountTtl, + deleteAccount: Ok, + removeChatActionBar: Ok, + reportChat: Ok, + reportChatPhoto: Ok, + getChatStatistics: ChatStatistics, + getMessageStatistics: MessageStatistics, + getStatisticalGraph: StatisticalGraph, + getStorageStatistics: StorageStatistics, + getStorageStatisticsFast: StorageStatisticsFast, + getDatabaseStatistics: DatabaseStatistics, + optimizeStorage: StorageStatistics, + setNetworkType: Ok, + getNetworkStatistics: NetworkStatistics, + addNetworkStatistics: Ok, + resetNetworkStatistics: Ok, + getAutoDownloadSettingsPresets: AutoDownloadSettingsPresets, + setAutoDownloadSettings: Ok, + getBankCardInfo: BankCardInfo, + getPassportElement: PassportElement, + getAllPassportElements: PassportElements, + setPassportElement: PassportElement, + deletePassportElement: Ok, + setPassportElementErrors: Ok, + getPreferredCountryLanguage: Text, + sendPhoneNumberVerificationCode: AuthenticationCodeInfo, + resendPhoneNumberVerificationCode: AuthenticationCodeInfo, + checkPhoneNumberVerificationCode: Ok, + sendEmailAddressVerificationCode: EmailAddressAuthenticationCodeInfo, + resendEmailAddressVerificationCode: EmailAddressAuthenticationCodeInfo, + checkEmailAddressVerificationCode: Ok, + getPassportAuthorizationForm: PassportAuthorizationForm, + getPassportAuthorizationFormAvailableElements: PassportElementsWithErrors, + sendPassportAuthorizationForm: Ok, + sendPhoneNumberConfirmationCode: AuthenticationCodeInfo, + resendPhoneNumberConfirmationCode: AuthenticationCodeInfo, + checkPhoneNumberConfirmationCode: Ok, + setBotUpdatesStatus: Ok, + uploadStickerFile: File, + getSuggestedStickerSetName: Text, + checkStickerSetName: CheckStickerSetNameResult, + createNewStickerSet: StickerSet, + addStickerToSet: StickerSet, + setStickerSetThumbnail: StickerSet, + setStickerPositionInSet: Ok, + removeStickerFromSet: Ok, + getMapThumbnailFile: File, + acceptTermsOfService: Ok, + sendCustomRequest: CustomRequestResult, + answerCustomQuery: Ok, + setAlarm: Ok, + getCountries: Countries, + getCountryCode: Text, + getPhoneNumberInfo: PhoneNumberInfo, + getPhoneNumberInfoSync: PhoneNumberInfo, + getApplicationDownloadLink: HttpUrl, + getDeepLinkInfo: DeepLinkInfo, + getApplicationConfig: JsonValue, + saveApplicationLogEvent: Ok, + addProxy: Proxy, + editProxy: Proxy, + enableProxy: Ok, + disableProxy: Ok, + removeProxy: Ok, + getProxies: Proxies, + getProxyLink: HttpUrl, + pingProxy: Seconds, + setLogStream: Ok, + getLogStream: LogStream, + setLogVerbosityLevel: Ok, + getLogVerbosityLevel: LogVerbosityLevel, + getLogTags: LogTags, + setLogTagVerbosityLevel: Ok, + getLogTagVerbosityLevel: LogVerbosityLevel, + addLogMessage: Ok, + testCallEmpty: Ok, + testCallString: TestString, + testCallBytes: TestBytes, + testCallVectorInt: TestVectorInt, + testCallVectorIntObject: TestVectorIntObject, + testCallVectorString: TestVectorString, + testCallVectorStringObject: TestVectorStringObject, + testSquareInt: TestInt, + testNetwork: Ok, + testProxy: Ok, + testGetDifference: Ok, + testUseUpdate: Update, + testReturnError: Error, + } + + export type $FunctionInputByName = { + getAuthorizationState: getAuthorizationState, + setTdlibParameters: setTdlibParameters, + checkDatabaseEncryptionKey: checkDatabaseEncryptionKey, + setAuthenticationPhoneNumber: setAuthenticationPhoneNumber, + resendAuthenticationCode: resendAuthenticationCode, + checkAuthenticationCode: checkAuthenticationCode, + requestQrCodeAuthentication: requestQrCodeAuthentication, + registerUser: registerUser, + checkAuthenticationPassword: checkAuthenticationPassword, + requestAuthenticationPasswordRecovery: requestAuthenticationPasswordRecovery, + checkAuthenticationPasswordRecoveryCode: checkAuthenticationPasswordRecoveryCode, + recoverAuthenticationPassword: recoverAuthenticationPassword, + checkAuthenticationBotToken: checkAuthenticationBotToken, + logOut: logOut, + close: close, + destroy: destroy, + confirmQrCodeAuthentication: confirmQrCodeAuthentication, + getCurrentState: getCurrentState, + setDatabaseEncryptionKey: setDatabaseEncryptionKey, + getPasswordState: getPasswordState, + setPassword: setPassword, + getRecoveryEmailAddress: getRecoveryEmailAddress, + setRecoveryEmailAddress: setRecoveryEmailAddress, + checkRecoveryEmailAddressCode: checkRecoveryEmailAddressCode, + resendRecoveryEmailAddressCode: resendRecoveryEmailAddressCode, + requestPasswordRecovery: requestPasswordRecovery, + checkPasswordRecoveryCode: checkPasswordRecoveryCode, + recoverPassword: recoverPassword, + resetPassword: resetPassword, + cancelPasswordReset: cancelPasswordReset, + createTemporaryPassword: createTemporaryPassword, + getTemporaryPasswordState: getTemporaryPasswordState, + getMe: getMe, + getUser: getUser, + getUserFullInfo: getUserFullInfo, + getBasicGroup: getBasicGroup, + getBasicGroupFullInfo: getBasicGroupFullInfo, + getSupergroup: getSupergroup, + getSupergroupFullInfo: getSupergroupFullInfo, + getSecretChat: getSecretChat, + getChat: getChat, + getMessage: getMessage, + getMessageLocally: getMessageLocally, + getRepliedMessage: getRepliedMessage, + getChatPinnedMessage: getChatPinnedMessage, + getCallbackQueryMessage: getCallbackQueryMessage, + getMessages: getMessages, + getMessageThread: getMessageThread, + getMessageViewers: getMessageViewers, + getFile: getFile, + getRemoteFile: getRemoteFile, + loadChats: loadChats, + getChats: getChats, + searchPublicChat: searchPublicChat, + searchPublicChats: searchPublicChats, + searchChats: searchChats, + searchChatsOnServer: searchChatsOnServer, + searchChatsNearby: searchChatsNearby, + getTopChats: getTopChats, + removeTopChat: removeTopChat, + addRecentlyFoundChat: addRecentlyFoundChat, + removeRecentlyFoundChat: removeRecentlyFoundChat, + clearRecentlyFoundChats: clearRecentlyFoundChats, + getRecentlyOpenedChats: getRecentlyOpenedChats, + checkChatUsername: checkChatUsername, + getCreatedPublicChats: getCreatedPublicChats, + checkCreatedPublicChatsLimit: checkCreatedPublicChatsLimit, + getSuitableDiscussionChats: getSuitableDiscussionChats, + getInactiveSupergroupChats: getInactiveSupergroupChats, + getGroupsInCommon: getGroupsInCommon, + getChatHistory: getChatHistory, + getMessageThreadHistory: getMessageThreadHistory, + deleteChatHistory: deleteChatHistory, + deleteChat: deleteChat, + searchChatMessages: searchChatMessages, + searchMessages: searchMessages, + searchSecretMessages: searchSecretMessages, + searchCallMessages: searchCallMessages, + deleteAllCallMessages: deleteAllCallMessages, + searchChatRecentLocationMessages: searchChatRecentLocationMessages, + getActiveLiveLocationMessages: getActiveLiveLocationMessages, + getChatMessageByDate: getChatMessageByDate, + getChatSparseMessagePositions: getChatSparseMessagePositions, + getChatMessageCalendar: getChatMessageCalendar, + getChatMessageCount: getChatMessageCount, + getChatScheduledMessages: getChatScheduledMessages, + getMessagePublicForwards: getMessagePublicForwards, + getChatSponsoredMessage: getChatSponsoredMessage, + removeNotification: removeNotification, + removeNotificationGroup: removeNotificationGroup, + getMessageLink: getMessageLink, + getMessageEmbeddingCode: getMessageEmbeddingCode, + getMessageLinkInfo: getMessageLinkInfo, + getChatAvailableMessageSenders: getChatAvailableMessageSenders, + setChatMessageSender: setChatMessageSender, + sendMessage: sendMessage, + sendMessageAlbum: sendMessageAlbum, + sendBotStartMessage: sendBotStartMessage, + sendInlineQueryResultMessage: sendInlineQueryResultMessage, + forwardMessages: forwardMessages, + resendMessages: resendMessages, + sendChatScreenshotTakenNotification: sendChatScreenshotTakenNotification, + addLocalMessage: addLocalMessage, + deleteMessages: deleteMessages, + deleteChatMessagesBySender: deleteChatMessagesBySender, + deleteChatMessagesByDate: deleteChatMessagesByDate, + editMessageText: editMessageText, + editMessageLiveLocation: editMessageLiveLocation, + editMessageMedia: editMessageMedia, + editMessageCaption: editMessageCaption, + editMessageReplyMarkup: editMessageReplyMarkup, + editInlineMessageText: editInlineMessageText, + editInlineMessageLiveLocation: editInlineMessageLiveLocation, + editInlineMessageMedia: editInlineMessageMedia, + editInlineMessageCaption: editInlineMessageCaption, + editInlineMessageReplyMarkup: editInlineMessageReplyMarkup, + editMessageSchedulingState: editMessageSchedulingState, + getTextEntities: getTextEntities, + parseTextEntities: parseTextEntities, + parseMarkdown: parseMarkdown, + getMarkdownText: getMarkdownText, + getFileMimeType: getFileMimeType, + getFileExtension: getFileExtension, + cleanFileName: cleanFileName, + getLanguagePackString: getLanguagePackString, + getJsonValue: getJsonValue, + getJsonString: getJsonString, + setPollAnswer: setPollAnswer, + getPollVoters: getPollVoters, + stopPoll: stopPoll, + hideSuggestedAction: hideSuggestedAction, + getLoginUrlInfo: getLoginUrlInfo, + getLoginUrl: getLoginUrl, + getInlineQueryResults: getInlineQueryResults, + answerInlineQuery: answerInlineQuery, + getCallbackQueryAnswer: getCallbackQueryAnswer, + answerCallbackQuery: answerCallbackQuery, + answerShippingQuery: answerShippingQuery, + answerPreCheckoutQuery: answerPreCheckoutQuery, + setGameScore: setGameScore, + setInlineGameScore: setInlineGameScore, + getGameHighScores: getGameHighScores, + getInlineGameHighScores: getInlineGameHighScores, + deleteChatReplyMarkup: deleteChatReplyMarkup, + sendChatAction: sendChatAction, + openChat: openChat, + closeChat: closeChat, + viewMessages: viewMessages, + openMessageContent: openMessageContent, + clickAnimatedEmojiMessage: clickAnimatedEmojiMessage, + getInternalLinkType: getInternalLinkType, + getExternalLinkInfo: getExternalLinkInfo, + getExternalLink: getExternalLink, + readAllChatMentions: readAllChatMentions, + createPrivateChat: createPrivateChat, + createBasicGroupChat: createBasicGroupChat, + createSupergroupChat: createSupergroupChat, + createSecretChat: createSecretChat, + createNewBasicGroupChat: createNewBasicGroupChat, + createNewSupergroupChat: createNewSupergroupChat, + createNewSecretChat: createNewSecretChat, + upgradeBasicGroupChatToSupergroupChat: upgradeBasicGroupChatToSupergroupChat, + getChatListsToAddChat: getChatListsToAddChat, + addChatToList: addChatToList, + getChatFilter: getChatFilter, + createChatFilter: createChatFilter, + editChatFilter: editChatFilter, + deleteChatFilter: deleteChatFilter, + reorderChatFilters: reorderChatFilters, + getRecommendedChatFilters: getRecommendedChatFilters, + getChatFilterDefaultIconName: getChatFilterDefaultIconName, + setChatTitle: setChatTitle, + setChatPhoto: setChatPhoto, + setChatMessageTtl: setChatMessageTtl, + setChatPermissions: setChatPermissions, + setChatTheme: setChatTheme, + setChatDraftMessage: setChatDraftMessage, + setChatNotificationSettings: setChatNotificationSettings, + toggleChatHasProtectedContent: toggleChatHasProtectedContent, + toggleChatIsMarkedAsUnread: toggleChatIsMarkedAsUnread, + toggleChatDefaultDisableNotification: toggleChatDefaultDisableNotification, + setChatClientData: setChatClientData, + setChatDescription: setChatDescription, + setChatDiscussionGroup: setChatDiscussionGroup, + setChatLocation: setChatLocation, + setChatSlowModeDelay: setChatSlowModeDelay, + pinChatMessage: pinChatMessage, + unpinChatMessage: unpinChatMessage, + unpinAllChatMessages: unpinAllChatMessages, + joinChat: joinChat, + leaveChat: leaveChat, + addChatMember: addChatMember, + addChatMembers: addChatMembers, + setChatMemberStatus: setChatMemberStatus, + banChatMember: banChatMember, + canTransferOwnership: canTransferOwnership, + transferChatOwnership: transferChatOwnership, + getChatMember: getChatMember, + searchChatMembers: searchChatMembers, + getChatAdministrators: getChatAdministrators, + clearAllDraftMessages: clearAllDraftMessages, + getChatNotificationSettingsExceptions: getChatNotificationSettingsExceptions, + getScopeNotificationSettings: getScopeNotificationSettings, + setScopeNotificationSettings: setScopeNotificationSettings, + resetAllNotificationSettings: resetAllNotificationSettings, + toggleChatIsPinned: toggleChatIsPinned, + setPinnedChats: setPinnedChats, + downloadFile: downloadFile, + getFileDownloadedPrefixSize: getFileDownloadedPrefixSize, + cancelDownloadFile: cancelDownloadFile, + getSuggestedFileName: getSuggestedFileName, + uploadFile: uploadFile, + cancelUploadFile: cancelUploadFile, + writeGeneratedFilePart: writeGeneratedFilePart, + setFileGenerationProgress: setFileGenerationProgress, + finishFileGeneration: finishFileGeneration, + readFilePart: readFilePart, + deleteFile: deleteFile, + getMessageFileType: getMessageFileType, + getMessageImportConfirmationText: getMessageImportConfirmationText, + importMessages: importMessages, + replacePrimaryChatInviteLink: replacePrimaryChatInviteLink, + createChatInviteLink: createChatInviteLink, + editChatInviteLink: editChatInviteLink, + getChatInviteLink: getChatInviteLink, + getChatInviteLinkCounts: getChatInviteLinkCounts, + getChatInviteLinks: getChatInviteLinks, + getChatInviteLinkMembers: getChatInviteLinkMembers, + revokeChatInviteLink: revokeChatInviteLink, + deleteRevokedChatInviteLink: deleteRevokedChatInviteLink, + deleteAllRevokedChatInviteLinks: deleteAllRevokedChatInviteLinks, + checkChatInviteLink: checkChatInviteLink, + joinChatByInviteLink: joinChatByInviteLink, + getChatJoinRequests: getChatJoinRequests, + processChatJoinRequest: processChatJoinRequest, + processChatJoinRequests: processChatJoinRequests, + createCall: createCall, + acceptCall: acceptCall, + sendCallSignalingData: sendCallSignalingData, + discardCall: discardCall, + sendCallRating: sendCallRating, + sendCallDebugInformation: sendCallDebugInformation, + getVideoChatAvailableParticipants: getVideoChatAvailableParticipants, + setVideoChatDefaultParticipant: setVideoChatDefaultParticipant, + createVideoChat: createVideoChat, + getGroupCall: getGroupCall, + startScheduledGroupCall: startScheduledGroupCall, + toggleGroupCallEnabledStartNotification: toggleGroupCallEnabledStartNotification, + joinGroupCall: joinGroupCall, + startGroupCallScreenSharing: startGroupCallScreenSharing, + toggleGroupCallScreenSharingIsPaused: toggleGroupCallScreenSharingIsPaused, + endGroupCallScreenSharing: endGroupCallScreenSharing, + setGroupCallTitle: setGroupCallTitle, + toggleGroupCallMuteNewParticipants: toggleGroupCallMuteNewParticipants, + inviteGroupCallParticipants: inviteGroupCallParticipants, + getGroupCallInviteLink: getGroupCallInviteLink, + revokeGroupCallInviteLink: revokeGroupCallInviteLink, + startGroupCallRecording: startGroupCallRecording, + endGroupCallRecording: endGroupCallRecording, + toggleGroupCallIsMyVideoPaused: toggleGroupCallIsMyVideoPaused, + toggleGroupCallIsMyVideoEnabled: toggleGroupCallIsMyVideoEnabled, + setGroupCallParticipantIsSpeaking: setGroupCallParticipantIsSpeaking, + toggleGroupCallParticipantIsMuted: toggleGroupCallParticipantIsMuted, + setGroupCallParticipantVolumeLevel: setGroupCallParticipantVolumeLevel, + toggleGroupCallParticipantIsHandRaised: toggleGroupCallParticipantIsHandRaised, + loadGroupCallParticipants: loadGroupCallParticipants, + leaveGroupCall: leaveGroupCall, + endGroupCall: endGroupCall, + getGroupCallStreamSegment: getGroupCallStreamSegment, + toggleMessageSenderIsBlocked: toggleMessageSenderIsBlocked, + blockMessageSenderFromReplies: blockMessageSenderFromReplies, + getBlockedMessageSenders: getBlockedMessageSenders, + addContact: addContact, + importContacts: importContacts, + getContacts: getContacts, + searchContacts: searchContacts, + removeContacts: removeContacts, + getImportedContactCount: getImportedContactCount, + changeImportedContacts: changeImportedContacts, + clearImportedContacts: clearImportedContacts, + sharePhoneNumber: sharePhoneNumber, + getUserProfilePhotos: getUserProfilePhotos, + getStickers: getStickers, + searchStickers: searchStickers, + getInstalledStickerSets: getInstalledStickerSets, + getArchivedStickerSets: getArchivedStickerSets, + getTrendingStickerSets: getTrendingStickerSets, + getAttachedStickerSets: getAttachedStickerSets, + getStickerSet: getStickerSet, + searchStickerSet: searchStickerSet, + searchInstalledStickerSets: searchInstalledStickerSets, + searchStickerSets: searchStickerSets, + changeStickerSet: changeStickerSet, + viewTrendingStickerSets: viewTrendingStickerSets, + reorderInstalledStickerSets: reorderInstalledStickerSets, + getRecentStickers: getRecentStickers, + addRecentSticker: addRecentSticker, + removeRecentSticker: removeRecentSticker, + clearRecentStickers: clearRecentStickers, + getFavoriteStickers: getFavoriteStickers, + addFavoriteSticker: addFavoriteSticker, + removeFavoriteSticker: removeFavoriteSticker, + getStickerEmojis: getStickerEmojis, + searchEmojis: searchEmojis, + getAnimatedEmoji: getAnimatedEmoji, + getEmojiSuggestionsUrl: getEmojiSuggestionsUrl, + getSavedAnimations: getSavedAnimations, + addSavedAnimation: addSavedAnimation, + removeSavedAnimation: removeSavedAnimation, + getRecentInlineBots: getRecentInlineBots, + searchHashtags: searchHashtags, + removeRecentHashtag: removeRecentHashtag, + getWebPagePreview: getWebPagePreview, + getWebPageInstantView: getWebPageInstantView, + setProfilePhoto: setProfilePhoto, + deleteProfilePhoto: deleteProfilePhoto, + setName: setName, + setBio: setBio, + setUsername: setUsername, + setLocation: setLocation, + changePhoneNumber: changePhoneNumber, + resendChangePhoneNumberCode: resendChangePhoneNumberCode, + checkChangePhoneNumberCode: checkChangePhoneNumberCode, + setCommands: setCommands, + deleteCommands: deleteCommands, + getCommands: getCommands, + getActiveSessions: getActiveSessions, + terminateSession: terminateSession, + terminateAllOtherSessions: terminateAllOtherSessions, + toggleSessionCanAcceptCalls: toggleSessionCanAcceptCalls, + toggleSessionCanAcceptSecretChats: toggleSessionCanAcceptSecretChats, + setInactiveSessionTtl: setInactiveSessionTtl, + getConnectedWebsites: getConnectedWebsites, + disconnectWebsite: disconnectWebsite, + disconnectAllWebsites: disconnectAllWebsites, + setSupergroupUsername: setSupergroupUsername, + setSupergroupStickerSet: setSupergroupStickerSet, + toggleSupergroupSignMessages: toggleSupergroupSignMessages, + toggleSupergroupIsAllHistoryAvailable: toggleSupergroupIsAllHistoryAvailable, + toggleSupergroupIsBroadcastGroup: toggleSupergroupIsBroadcastGroup, + reportSupergroupSpam: reportSupergroupSpam, + getSupergroupMembers: getSupergroupMembers, + closeSecretChat: closeSecretChat, + getChatEventLog: getChatEventLog, + getPaymentForm: getPaymentForm, + validateOrderInfo: validateOrderInfo, + sendPaymentForm: sendPaymentForm, + getPaymentReceipt: getPaymentReceipt, + getSavedOrderInfo: getSavedOrderInfo, + deleteSavedOrderInfo: deleteSavedOrderInfo, + deleteSavedCredentials: deleteSavedCredentials, + getSupportUser: getSupportUser, + getBackgrounds: getBackgrounds, + getBackgroundUrl: getBackgroundUrl, + searchBackground: searchBackground, + setBackground: setBackground, + removeBackground: removeBackground, + resetBackgrounds: resetBackgrounds, + getLocalizationTargetInfo: getLocalizationTargetInfo, + getLanguagePackInfo: getLanguagePackInfo, + getLanguagePackStrings: getLanguagePackStrings, + synchronizeLanguagePack: synchronizeLanguagePack, + addCustomServerLanguagePack: addCustomServerLanguagePack, + setCustomLanguagePack: setCustomLanguagePack, + editCustomLanguagePackInfo: editCustomLanguagePackInfo, + setCustomLanguagePackString: setCustomLanguagePackString, + deleteLanguagePack: deleteLanguagePack, + registerDevice: registerDevice, + processPushNotification: processPushNotification, + getPushReceiverId: getPushReceiverId, + getRecentlyVisitedTMeUrls: getRecentlyVisitedTMeUrls, + setUserPrivacySettingRules: setUserPrivacySettingRules, + getUserPrivacySettingRules: getUserPrivacySettingRules, + getOption: getOption, + setOption: setOption, + setAccountTtl: setAccountTtl, + getAccountTtl: getAccountTtl, + deleteAccount: deleteAccount, + removeChatActionBar: removeChatActionBar, + reportChat: reportChat, + reportChatPhoto: reportChatPhoto, + getChatStatistics: getChatStatistics, + getMessageStatistics: getMessageStatistics, + getStatisticalGraph: getStatisticalGraph, + getStorageStatistics: getStorageStatistics, + getStorageStatisticsFast: getStorageStatisticsFast, + getDatabaseStatistics: getDatabaseStatistics, + optimizeStorage: optimizeStorage, + setNetworkType: setNetworkType, + getNetworkStatistics: getNetworkStatistics, + addNetworkStatistics: addNetworkStatistics, + resetNetworkStatistics: resetNetworkStatistics, + getAutoDownloadSettingsPresets: getAutoDownloadSettingsPresets, + setAutoDownloadSettings: setAutoDownloadSettings, + getBankCardInfo: getBankCardInfo, + getPassportElement: getPassportElement, + getAllPassportElements: getAllPassportElements, + setPassportElement: setPassportElement, + deletePassportElement: deletePassportElement, + setPassportElementErrors: setPassportElementErrors, + getPreferredCountryLanguage: getPreferredCountryLanguage, + sendPhoneNumberVerificationCode: sendPhoneNumberVerificationCode, + resendPhoneNumberVerificationCode: resendPhoneNumberVerificationCode, + checkPhoneNumberVerificationCode: checkPhoneNumberVerificationCode, + sendEmailAddressVerificationCode: sendEmailAddressVerificationCode, + resendEmailAddressVerificationCode: resendEmailAddressVerificationCode, + checkEmailAddressVerificationCode: checkEmailAddressVerificationCode, + getPassportAuthorizationForm: getPassportAuthorizationForm, + getPassportAuthorizationFormAvailableElements: getPassportAuthorizationFormAvailableElements, + sendPassportAuthorizationForm: sendPassportAuthorizationForm, + sendPhoneNumberConfirmationCode: sendPhoneNumberConfirmationCode, + resendPhoneNumberConfirmationCode: resendPhoneNumberConfirmationCode, + checkPhoneNumberConfirmationCode: checkPhoneNumberConfirmationCode, + setBotUpdatesStatus: setBotUpdatesStatus, + uploadStickerFile: uploadStickerFile, + getSuggestedStickerSetName: getSuggestedStickerSetName, + checkStickerSetName: checkStickerSetName, + createNewStickerSet: createNewStickerSet, + addStickerToSet: addStickerToSet, + setStickerSetThumbnail: setStickerSetThumbnail, + setStickerPositionInSet: setStickerPositionInSet, + removeStickerFromSet: removeStickerFromSet, + getMapThumbnailFile: getMapThumbnailFile, + acceptTermsOfService: acceptTermsOfService, + sendCustomRequest: sendCustomRequest, + answerCustomQuery: answerCustomQuery, + setAlarm: setAlarm, + getCountries: getCountries, + getCountryCode: getCountryCode, + getPhoneNumberInfo: getPhoneNumberInfo, + getPhoneNumberInfoSync: getPhoneNumberInfoSync, + getApplicationDownloadLink: getApplicationDownloadLink, + getDeepLinkInfo: getDeepLinkInfo, + getApplicationConfig: getApplicationConfig, + saveApplicationLogEvent: saveApplicationLogEvent, + addProxy: addProxy, + editProxy: editProxy, + enableProxy: enableProxy, + disableProxy: disableProxy, + removeProxy: removeProxy, + getProxies: getProxies, + getProxyLink: getProxyLink, + pingProxy: pingProxy, + setLogStream: setLogStream, + getLogStream: getLogStream, + setLogVerbosityLevel: setLogVerbosityLevel, + getLogVerbosityLevel: getLogVerbosityLevel, + getLogTags: getLogTags, + setLogTagVerbosityLevel: setLogTagVerbosityLevel, + getLogTagVerbosityLevel: getLogTagVerbosityLevel, + addLogMessage: addLogMessage, + testCallEmpty: testCallEmpty, + testCallString: testCallString, + testCallBytes: testCallBytes, + testCallVectorInt: testCallVectorInt, + testCallVectorIntObject: testCallVectorIntObject, + testCallVectorString: testCallVectorString, + testCallVectorStringObject: testCallVectorStringObject, + testSquareInt: testSquareInt, + testNetwork: testNetwork, + testProxy: testProxy, + testGetDifference: testGetDifference, + testUseUpdate: testUseUpdate, + testReturnError: testReturnError, + } + + export type $FunctionName = keyof $FunctionResultByName + + export type $SyncFunctionName = + | 'getTextEntities' + | 'parseTextEntities' + | 'parseMarkdown' + | 'getMarkdownText' + | 'getFileMimeType' + | 'getFileExtension' + | 'cleanFileName' + | 'getLanguagePackString' + | 'getJsonValue' + | 'getJsonString' + | 'getChatFilterDefaultIconName' + | 'getPushReceiverId' + | 'getPhoneNumberInfoSync' + | 'setLogStream' + | 'getLogStream' + | 'setLogVerbosityLevel' + | 'getLogVerbosityLevel' + | 'getLogTags' + | 'setLogTagVerbosityLevel' + | 'getLogTagVerbosityLevel' + | 'addLogMessage' + | 'testReturnError' + + export type Invoke = ( + query: { readonly _: T } & $FunctionInputByName[T] + ) => Promise<$FunctionResultByName[T]> + + export type Execute = ( + query: { readonly _: T } & $FunctionInputByName[T] + ) => error | $FunctionResultByName[T] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..334fddc --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,110 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + "rootDir": "./src/", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + //"outFile": "./index.js", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./build", /* Specify an output folder for all emitted files. */ + "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +}