From 3390e6f0930f21023c02ea9b53779ed6509d7aba Mon Sep 17 00:00:00 2001 From: Pijus Kamandulis Date: Sun, 19 Jan 2025 22:03:57 +0200 Subject: [PATCH] Reformat and translate --- README.md | 4 +- package-lock.json | 144 ++++--- package.json | 4 +- sample/auth.html | 254 ++++++----- sample/auth.js | 98 +++-- sample/command.html | 251 ++++++----- sample/command.js | 53 +-- sample/config.html | 326 ++++++++++---- sample/config.js | 99 ++--- sample/delete-message.html | 177 ++++---- sample/delete-message.js | 46 +- sample/get-entity.html | 160 ++++--- sample/get-entity.js | 58 +-- sample/iter-dialogs.html | 402 +++++++++-------- sample/iter-dialogs.js | 89 ++-- sample/iter-messages.html | 753 ++++++++++++++++++-------------- sample/iter-messages.js | 157 ++++--- sample/receiver.html | 226 ++++++---- sample/receiver.js | 24 +- sample/send-file.html | 859 +++++++++++++++++++------------------ sample/send-file.js | 135 +++--- sample/send-message.html | 585 +++++++++++++------------ sample/send-message.js | 140 +++--- 23 files changed, 2820 insertions(+), 2224 deletions(-) diff --git a/README.md b/README.md index c8d6779..e31b5f9 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ -Node-red and telegram (gramjs) integration \ No newline at end of file +Node-red and telegram (gramjs) integration + +Fork of `https://github.com/borovlioff/node-red-telegram-account` diff --git a/package-lock.json b/package-lock.json index 1b5a97e..81de3d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,9 +45,9 @@ ] }, "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "version": "1.6.52", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", "engines": { "node": ">=0.6" } @@ -76,9 +76,9 @@ } }, "node_modules/bufferutil": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.7.tgz", - "integrity": "sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==", + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", + "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", "hasInstallScript": true, "dependencies": { "node-gyp-build": "^4.3.0" @@ -88,12 +88,15 @@ } }, "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" } }, "node_modules/debug": { @@ -164,13 +167,14 @@ } }, "node_modules/es5-ext": { - "version": "0.10.62", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", - "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "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, "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", "next-tick": "^1.1.0" }, "engines": { @@ -188,12 +192,38 @@ } }, "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "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==", "dependencies": { "d": "^1.0.1", - "ext": "^1.1.2" + "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==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" } }, "node_modules/ext": { @@ -204,11 +234,6 @@ "type": "^2.7.2" } }, - "node_modules/ext/node_modules/type": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", - "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -259,16 +284,28 @@ "node": ">=0.8.19" } }, - "node_modules/ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "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==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, + "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==" + }, "node_modules/mime": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", @@ -291,9 +328,9 @@ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" }, "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "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==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -344,27 +381,32 @@ } }, "node_modules/socks": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", - "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dependencies": { - "ip": "^2.0.0", + "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" }, "engines": { - "node": ">= 10.13.0", + "node": ">= 10.0.0", "npm": ">= 3.0.0" } }, + "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==" + }, "node_modules/store2": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.2.tgz", - "integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==" + "version": "2.14.4", + "resolved": "https://registry.npmjs.org/store2/-/store2-2.14.4.tgz", + "integrity": "sha512-srTItn1GOvyvOycgxjAnPA63FZNwy0PTyUBFMHRM+hVFltAeoh0LmNBz9SZqUS9mMqGk8rfyWyXn3GH5ReJ8Zw==" }, "node_modules/telegram": { - "version": "2.17.10", - "resolved": "https://registry.npmjs.org/telegram/-/telegram-2.17.10.tgz", - "integrity": "sha512-BeWrH6jrTjtmZtGi63mM2UWwciOivqQknhRIysULVRQkDbo+MW4I2jI6d3sPM5m8Ge9mhjeKg1aVZf2qG4vh2Q==", + "version": "2.26.16", + "resolved": "https://registry.npmjs.org/telegram/-/telegram-2.26.16.tgz", + "integrity": "sha512-5tqL9HicCxRqEi+9JjXBteVDnoZ+1ggsBFxLQTO49aXwTI2d7To7xb2vOU/ahLwgKuE+Db9ra5xDJZ76Kk0NEA==", "dependencies": { "@cryptography/aes": "^0.1.1", "async-mutex": "^0.3.0", @@ -395,14 +437,14 @@ } }, "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "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==" }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", @@ -425,13 +467,13 @@ } }, "node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", "dependencies": { "bufferutil": "^4.0.1", "debug": "^2.2.0", - "es5-ext": "^0.10.50", + "es5-ext": "^0.10.63", "typedarray-to-buffer": "^3.1.5", "utf-8-validate": "^5.0.2", "yaeti": "^0.0.6" diff --git a/package.json b/package.json index a5c9526..741e152 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "node-red-telegram-account", - "version": "1.0.4", + "name": "@random-mirrors/node-red-telegram-account", + "version": "2.0.1", "description": "", "main": "index.js", "scripts": { diff --git a/sample/auth.html b/sample/auth.html index 28e44c0..6368f5c 100644 --- a/sample/auth.html +++ b/sample/auth.html @@ -1,130 +1,167 @@ - diff --git a/sample/auth.js b/sample/auth.js index 6ac6186..fa00b23 100644 --- a/sample/auth.js +++ b/sample/auth.js @@ -2,59 +2,57 @@ const { TelegramClient } = require("telegram"); const { StringSession } = require("telegram/sessions"); module.exports = function (RED) { - function TelegramClientConfig(config) { - RED.nodes.createNode(this, config); - const node = this; + function TelegramClientConfig(config) { + RED.nodes.createNode(this, config); + const node = this; - this.on("input", async (msg) => { - const api_idString = msg.payload.api_id || config.api_id; - const api_hash = msg.payload.api_hash || config.api_hash; - const phoneNumber = msg.payload.phoneNumber || config.phoneNumber; - const password = msg.payload.password || config.password; - const api_id = parseInt(api_idString); + this.on("input", async (msg) => { + const api_idString = msg.payload.api_id || config.api_id; + const api_hash = msg.payload.api_hash || config.api_hash; + const phoneNumber = msg.payload.phoneNumber || config.phoneNumber; + const password = msg.payload.password || config.password; + const api_id = parseInt(api_idString); - const session = new StringSession(""); - const client = new TelegramClient(session, api_id, api_hash, { - connectionRetries: 5, + const session = new StringSession(""); + const client = new TelegramClient(session, api_id, api_hash, { + connectionRetries: 5, + }); + + let resolvePhoneCode; + const context = node.context().flow; + + try { + await client.start({ + phoneNumber: () => phoneNumber, + password: () => password, + phoneCode: async () => { + return new Promise((resolve) => { + resolvePhoneCode = resolve; + context.set("phoneCode", resolvePhoneCode); }); - - - let resolvePhoneCode; - const context = node.context().flow; - - try { - await client.start({ - phoneNumber: () => phoneNumber, - password: () => password, - phoneCode: async () =>{ - return new Promise((resolve) => { - resolvePhoneCode = resolve; - context.set("phoneCode", resolvePhoneCode); - }) - }, - onError: (err) => node.error(`Ошибка: ${err.message}`), - }); - - const stringSession = client.session.save(); // Сохраняем сессию - node.send({ - topic: "auth_success", - payload: { - stringSession, - message: "Авторизация прошла успешно!", - }, - }); - - } catch (error) { - node.error(`Ошибка авторизации: ${error.message}`); - node.send({ - topic: "auth_error", - payload: { - error: error.message, - }, - }); - } + }, + onError: (err) => node.error(`Error: ${err.message}`), }); - } - RED.nodes.registerType("auth", TelegramClientConfig); + const stringSession = client.session.save(); // Save the session + node.send({ + topic: "auth_success", + payload: { + stringSession, + message: "Authorization was successful!", + }, + }); + } catch (error) { + node.error(`Authorization error: ${error.message}`); + node.send({ + topic: "auth_error", + payload: { + error: error.message, + }, + }); + } + }); + } + + RED.nodes.registerType("auth", TelegramClientConfig); }; diff --git a/sample/command.html b/sample/command.html index 243ad5a..0f33fb6 100644 --- a/sample/command.html +++ b/sample/command.html @@ -1,100 +1,126 @@ +
+ + +
+ - - diff --git a/sample/command.js b/sample/command.js index a49e1c9..23a54db 100644 --- a/sample/command.js +++ b/sample/command.js @@ -1,53 +1,44 @@ const { NewMessage } = require("telegram/events"); - module.exports = function (RED) { function Command(config) { RED.nodes.createNode(this, config); this.config = RED.nodes.getNode(config.config); var node = this; /** @type {TelegramClient} */ - const client = this.config.client; - - + const client = this.config.client; try { client.addEventHandler((update) => { - const message = update.message.message + const message = update.message.message; if (message) { - if (config.regex) { - const regex = new RegExp(config.command); + if (config.regex) { + const regex = new RegExp(config.command); - if (regex.test(message)) { - - var msg = { - payload: { - update - } - }; + if (regex.test(message)) { + var msg = { + payload: { + update, + }, + }; - - node.send(msg); - } - } else if (message === config.command) { - - var msg = { - payload: { - update - } - }; - - - node.send(msg); + node.send(msg); } + } else if (message === config.command) { + var msg = { + payload: { + update, + }, + }; + + node.send(msg); + } } }, new NewMessage()); - } catch (err) { - node.error('Ошибка авторизации: ' + err.message); + node.error("Authorization error: " + err.message); } - } - RED.nodes.registerType('command', Command); + RED.nodes.registerType("command", Command); }; diff --git a/sample/config.html b/sample/config.html index 658235d..9a7ea10 100644 --- a/sample/config.html +++ b/sample/config.html @@ -1,131 +1,299 @@ diff --git a/sample/config.js b/sample/config.js index ddf70ad..0dbc57c 100644 --- a/sample/config.js +++ b/sample/config.js @@ -2,57 +2,58 @@ const { TelegramClient } = require("telegram"); const { StringSession } = require("telegram/sessions"); module.exports = function (RED) { - function TelegramClientConfig(config) { - RED.nodes.createNode(this, config); - this.apiId = config.api_id; - this.apiHash = config.api_hash; - this.session = new StringSession(config.session); - this.useIPV6 = config.useIPV6; - this.timeout = config.timeout; - this.requestRetries = config.requestRetries; - this.connectionRetries = config.connectionRetries; - this.proxy = config.proxy; - this.downloadRetries = config.downloadRetries; - this.retryDelay = config.retryDelay; - this.autoReconnect = config.autoReconnect; - this.sequentialUpdates = config.sequentialUpdates; - this.floodSleepThreshold = config.floodSleepThreshold; - this.deviceModel = config.deviceModel; - this.systemVersion = config.systemVersion; - this.appVersion = config.appVersion; - this.langCode = config.langCode; - this.systemLangCode = config.systemLangCode; - this.useWSS = config.useWSS; - this.maxConcurrentDownloads = config.maxConcurrentDownloads; - this.securityChecks = config.securityChecks; - this.testServers = config.testServers; - const node = this; + function TelegramClientConfig(config) { + RED.nodes.createNode(this, config); + this.apiId = config.api_id; + this.apiHash = config.api_hash; + this.session = new StringSession(config.session); + this.useIPV6 = config.useIPV6; + this.timeout = config.timeout; + this.requestRetries = config.requestRetries; + this.connectionRetries = config.connectionRetries; + this.proxy = config.proxy; + this.downloadRetries = config.downloadRetries; + this.retryDelay = config.retryDelay; + this.autoReconnect = config.autoReconnect; + this.sequentialUpdates = config.sequentialUpdates; + this.floodSleepThreshold = config.floodSleepThreshold; + this.deviceModel = config.deviceModel; + this.systemVersion = config.systemVersion; + this.appVersion = config.appVersion; + this.langCode = config.langCode; + this.systemLangCode = config.systemLangCode; + this.useWSS = config.useWSS; + this.maxConcurrentDownloads = config.maxConcurrentDownloads; + this.securityChecks = config.securityChecks; + this.testServers = config.testServers; + const node = this; + this.client = new TelegramClient( + this.session, + parseInt(this.apiId), + this.apiHash, + {} + ); - this.client = new TelegramClient(this.session, parseInt(this.apiId), this.apiHash, { - - - }); - - try { - this.client.connect().then(async () => { - let isAuthorized = await this.client.isUserAuthorized(); - if (!isAuthorized) { - node.error(`Session is invalid`); - } else { - node.status({ fill: "green", shape: "dot", text: "Connected" }); - } - }); - } catch (err) { - node.error('Authorisation error: ' + err.message); + try { + this.client.connect().then(async () => { + let isAuthorized = await this.client.isUserAuthorized(); + if (!isAuthorized) { + node.error(`Session is invalid`); + } else { + node.status({ fill: "green", shape: "dot", text: "Connected" }); } - - this.on("close", () => { - if (this.client) { - this.client.disconnect(); - node.status({ fill: "red", shape: "ring", text: "Disconnected" }); - } - }); + }); + } catch (err) { + node.error("Authorization error: " + err.message); } - RED.nodes.registerType('config', TelegramClientConfig); + + this.on("close", () => { + if (this.client) { + this.client.disconnect(); + node.status({ fill: "red", shape: "ring", text: "Disconnected" }); + } + }); + } + RED.nodes.registerType("config", TelegramClientConfig); }; diff --git a/sample/delete-message.html b/sample/delete-message.html index 22c7282..51de4ad 100644 --- a/sample/delete-message.html +++ b/sample/delete-message.html @@ -1,86 +1,101 @@ +
+ + +
+
+ + +
+ + diff --git a/sample/delete-message.js b/sample/delete-message.js index 77f4c82..5694f48 100644 --- a/sample/delete-message.js +++ b/sample/delete-message.js @@ -1,27 +1,33 @@ module.exports = function (RED) { - function DeleteMessage(config) { - RED.nodes.createNode(this, config); - this.config = RED.nodes.getNode(config.config); - var node = this; + function DeleteMessage(config) { + RED.nodes.createNode(this, config); + this.config = RED.nodes.getNode(config.config); + var node = this; - this.on('input', async function (msg) { - const chatId = msg.payload.chatId || config.chatId; - const messageIds = msg.payload.messageIds || config.messageIds; - const revoke = msg.payload.revoke || config.revoke || { revoke: true }; - /** @type {TelegramClient} */ - const client = msg.payload?.client ? msg.payload.client : this.config.client; + this.on("input", async function (msg) { + const chatId = msg.payload.chatId || config.chatId; + const messageIds = msg.payload.messageIds || config.messageIds; + const revoke = msg.payload.revoke || config.revoke || { revoke: true }; + /** @type {TelegramClient} */ + const client = msg.payload?.client + ? msg.payload.client + : this.config.client; - try { - const response = await client.deleteMessages(chatId, messageIds, revoke); + try { + const response = await client.deleteMessages( + chatId, + messageIds, + revoke + ); - node.send({ - payload: response, - }); - } catch (err) { - node.error('Error deleting message: ' + err.message); - } + node.send({ + payload: response, }); - } + } catch (err) { + node.error("Error deleting message: " + err.message); + } + }); + } - RED.nodes.registerType('delete-message', DeleteMessage); + RED.nodes.registerType("delete-message", DeleteMessage); }; diff --git a/sample/get-entity.html b/sample/get-entity.html index e74e719..238473b 100644 --- a/sample/get-entity.html +++ b/sample/get-entity.html @@ -1,87 +1,113 @@ - diff --git a/sample/get-entity.js b/sample/get-entity.js index a502b5c..b6e20d8 100644 --- a/sample/get-entity.js +++ b/sample/get-entity.js @@ -1,36 +1,38 @@ module.exports = function (RED) { - function GetEntity(config) { - RED.nodes.createNode(this, config); - this.config = RED.nodes.getNode(config.config); - var node = this; + function GetEntity(config) { + RED.nodes.createNode(this, config); + this.config = RED.nodes.getNode(config.config); + var node = this; - this.on('input', async function (msg) { - const input = msg.payload.input || config.input; - /** @type {TelegramClient} */ - const client = msg.payload?.client ? msg.payload.client : this.config.client; + this.on("input", async function (msg) { + const input = msg.payload.input || config.input; + /** @type {TelegramClient} */ + const client = msg.payload?.client + ? msg.payload.client + : this.config.client; - try { - let entity; + try { + let entity; - // Check if the input is a URL - if (input.includes('https://t.me/')) { - const username = input.split('/').pop(); - entity = await client.getEntity(username); - } else { - entity = await client.getEntity(input); - } + // Check if the input is a URL + if (input.includes("https://t.me/")) { + const username = input.split("/").pop(); + entity = await client.getEntity(username); + } else { + entity = await client.getEntity(input); + } - node.send({ - payload: {input:entity}, - }); - } catch (err) { - node.error('Error getting entity: ' + err.message); - node.send({ - payload:{ input: null} - }) - } + node.send({ + payload: { input: entity }, }); - } + } catch (err) { + node.error("Error getting entity: " + err.message); + node.send({ + payload: { input: null }, + }); + } + }); + } - RED.nodes.registerType('get-entity', GetEntity); + RED.nodes.registerType("get-entity", GetEntity); }; diff --git a/sample/iter-dialogs.html b/sample/iter-dialogs.html index 1c53823..1c00b56 100644 --- a/sample/iter-dialogs.html +++ b/sample/iter-dialogs.html @@ -1,198 +1,224 @@ - diff --git a/sample/iter-dialogs.js b/sample/iter-dialogs.js index 6f14113..c21b3a1 100644 --- a/sample/iter-dialogs.js +++ b/sample/iter-dialogs.js @@ -1,54 +1,55 @@ const { TelegramClient } = require("telegram"); module.exports = function (RED) { - function IterDialogs(config) { - RED.nodes.createNode(this, config); - this.config = RED.nodes.getNode(config.config); - var node = this; + function IterDialogs(config) { + RED.nodes.createNode(this, config); + this.config = RED.nodes.getNode(config.config); + var node = this; - this.on('input', async function (msg) { - - /** @type {TelegramClient} */ - const client = msg.payload?.client ? msg.payload.client : this.config.client; - const limit = msg.payload.limit || config.limit; - const offsetDate = msg.payload.offsetDate || config.offsetDate; - const offsetId = msg.payload.offsetId || config.offsetId; - const offsetPeer = msg.payload?.offsetPeer || undefined; - const ignorePinned = msg.payload.ignorePinned || config.ignorePinned; - const ignoreMigrated = msg.payload.ignoreMigrated || config.ignoreMigrated; - const folder = msg.payload.folder || config.folder; - const archived = msg.payload.archived || config.archived; - - const params = { - limit: limit !== ""? parseInt(limit) : undefined, - offsetDate: offsetDate !== "" ? offsetDate:undefined, - offsetId: offsetId !== "" ? parseInt(offsetId):undefined, - offsetPeer: offsetPeer, - ignorePinned: ignorePinned, - ignoreMigrated: ignoreMigrated, - folder: folder !== "" ? parseInt(folder):undefined, - archived: archived, - } + this.on("input", async function (msg) { + /** @type {TelegramClient} */ + const client = msg.payload?.client + ? msg.payload.client + : this.config.client; + const limit = msg.payload.limit || config.limit; + const offsetDate = msg.payload.offsetDate || config.offsetDate; + const offsetId = msg.payload.offsetId || config.offsetId; + const offsetPeer = msg.payload?.offsetPeer || undefined; + const ignorePinned = msg.payload.ignorePinned || config.ignorePinned; + const ignoreMigrated = + msg.payload.ignoreMigrated || config.ignoreMigrated; + const folder = msg.payload.folder || config.folder; + const archived = msg.payload.archived || config.archived; - if (offsetDate) { - params.offsetDate = new Date(offsetDate).getTime() / 1000; - } + const params = { + limit: limit !== "" ? parseInt(limit) : undefined, + offsetDate: offsetDate !== "" ? offsetDate : undefined, + offsetId: offsetId !== "" ? parseInt(offsetId) : undefined, + offsetPeer: offsetPeer, + ignorePinned: ignorePinned, + ignoreMigrated: ignoreMigrated, + folder: folder !== "" ? parseInt(folder) : undefined, + archived: archived, + }; - try { - const dialogs = {}; - for await (const dialog of client.iterDialogs(params)){ - dialogs[dialog.id] = dialog; - console.log(`${dialog.id}: ${dialog.title}`); - } - node.send({ - payload: { dialogs }, - }); - } catch (err) { - node.error('Error iter dialogs: ' + err.message); - } + if (offsetDate) { + params.offsetDate = new Date(offsetDate).getTime() / 1000; + } + try { + const dialogs = {}; + for await (const dialog of client.iterDialogs(params)) { + dialogs[dialog.id] = dialog; + console.log(`${dialog.id}: ${dialog.title}`); + } + node.send({ + payload: { dialogs }, }); - } + } catch (err) { + node.error("Error iter dialogs: " + err.message); + } + }); + } - RED.nodes.registerType('iter-dialogs', IterDialogs); + RED.nodes.registerType("iter-dialogs", IterDialogs); }; diff --git a/sample/iter-messages.html b/sample/iter-messages.html index 8513f58..6f27002 100644 --- a/sample/iter-messages.html +++ b/sample/iter-messages.html @@ -1,351 +1,433 @@ diff --git a/sample/iter-messages.js b/sample/iter-messages.js index cceba1c..c46c3c4 100644 --- a/sample/iter-messages.js +++ b/sample/iter-messages.js @@ -1,94 +1,93 @@ const { TelegramClient, utils, Api } = require("telegram"); module.exports = function (RED) { - function IterMessages(config) { - RED.nodes.createNode(this, config); - this.config = RED.nodes.getNode(config.config); - var node = this; + function IterMessages(config) { + RED.nodes.createNode(this, config); + this.config = RED.nodes.getNode(config.config); + var node = this; - this.on('input', async function (msg) { - - /** @type {TelegramClient} */ - const client = msg.payload?.client ? msg.payload.client : this.config.client; - const chatId = msg.payload?.chatId ? msg.payload.chatId : config.chatId; - let peerId = chatId === "me" ? chatId : utils.parseID(chatId); + this.on("input", async function (msg) { + /** @type {TelegramClient} */ + const client = msg.payload?.client + ? msg.payload.client + : this.config.client; + const chatId = msg.payload?.chatId ? msg.payload.chatId : config.chatId; + let peerId = chatId === "me" ? chatId : utils.parseID(chatId); - // Получаем параметры из входного сообщения или из конфигурации узла - const limit = msg.payload?.limit || config.limit; - const offsetDate = msg.payload?.offsetDate || config.offsetDate; - const offsetId = msg.payload?.offsetId || config.offsetId; - const maxId = msg.payload?.maxId || config.maxId; - const minId = msg.payload?.minId || config.minId; - const addOffset = msg.payload?.addOffset || config.addOffset; - const search = msg.payload?.search || config.search; - const filter = msg.payload?.filter || config.filter; - const fromUser = msg.payload?.fromUser || config.fromUser; - const waitTime = msg.payload?.waitTime || config.waitTime; - const ids = msg.payload?.ids || config.ids; - const reverse = msg.payload?.reverse || config.reverse; - const replyTo = msg.payload?.replyTo || config.replyTo; - const scheduled = msg.payload?.scheduled || config.scheduled; + // We receive parameters from the input message or from the node configuration + const limit = msg.payload?.limit || config.limit; + const offsetDate = msg.payload?.offsetDate || config.offsetDate; + const offsetId = msg.payload?.offsetId || config.offsetId; + const maxId = msg.payload?.maxId || config.maxId; + const minId = msg.payload?.minId || config.minId; + const addOffset = msg.payload?.addOffset || config.addOffset; + const search = msg.payload?.search || config.search; + const filter = msg.payload?.filter || config.filter; + const fromUser = msg.payload?.fromUser || config.fromUser; + const waitTime = msg.payload?.waitTime || config.waitTime; + const ids = msg.payload?.ids || config.ids; + const reverse = msg.payload?.reverse || config.reverse; + const replyTo = msg.payload?.replyTo || config.replyTo; + const scheduled = msg.payload?.scheduled || config.scheduled; - try { - - const params = { - limit: limit !== ""? parseInt(limit) : undefined, - offsetDate: offsetDate !== "" ? offsetDate:undefined, - offsetId: offsetId !== "" ? parseInt(offsetId):undefined, - maxId: maxId, - minId: minId, - addOffset: addOffset, - search: search !== "" ? search : undefined, - filter: filter, - // fromUser: fromUser, - waitTime: waitTime, - ids: ids, - reverse: reverse, - replyTo: replyTo, - scheduled: scheduled, - }; + try { + const params = { + limit: limit !== "" ? parseInt(limit) : undefined, + offsetDate: offsetDate !== "" ? offsetDate : undefined, + offsetId: offsetId !== "" ? parseInt(offsetId) : undefined, + maxId: maxId, + minId: minId, + addOffset: addOffset, + search: search !== "" ? search : undefined, + filter: filter, + // fromUser: fromUser, + waitTime: waitTime, + ids: ids, + reverse: reverse, + replyTo: replyTo, + scheduled: scheduled, + }; - if (offsetDate) { - params.offsetDate = new Date(offsetDate).getTime() / 1000; - } + if (offsetDate) { + params.offsetDate = new Date(offsetDate).getTime() / 1000; + } - if (chatId[0] === "@") { - peerId = await client.getEntity(chatId); - } - const messages = {}; + if (chatId[0] === "@") { + peerId = await client.getEntity(chatId); + } + const messages = {}; - const filters = msg.payload?.filters || config.filters || []; + const filters = msg.payload?.filters || config.filters || []; - // Обработка выбранных фильтров - if (filters.length > 0) { - params.filter = []; - filters.forEach((filter) => { - params.filter.push( Api[filter]); - }); - } + // Processing selected filters + if (filters.length > 0) { + params.filter = []; + filters.forEach((filter) => { + params.filter.push(Api[filter]); + }); + } - try { - for await (const message of client.iterMessages(peerId, params)){ - messages[message.id] = message; - console.log(message.id, message.text); - } - } catch (error) { - const entity = await client.getInputEntity(peerId) - for await (const message of client.iterMessages(entity, params)){ - messages[message.id] = message; - console.log(message.id, message.text); - } - } - - node.send({ - payload: { messages }, - }); - } catch (err) { - node.error('Error iter messages: ' + err.message); - } + try { + for await (const message of client.iterMessages(peerId, params)) { + messages[message.id] = message; + console.log(message.id, message.text); + } + } catch (error) { + const entity = await client.getInputEntity(peerId); + for await (const message of client.iterMessages(entity, params)) { + messages[message.id] = message; + console.log(message.id, message.text); + } + } + node.send({ + payload: { messages }, }); - } + } catch (err) { + node.error("Error iter messages: " + err.message); + } + }); + } - RED.nodes.registerType('iter-messages', IterMessages); + RED.nodes.registerType("iter-messages", IterMessages); }; diff --git a/sample/receiver.html b/sample/receiver.html index 534e09c..3ff2891 100644 --- a/sample/receiver.html +++ b/sample/receiver.html @@ -1,91 +1,108 @@ +
+ + +
+
+ + +
+
+ + +
+ - - - diff --git a/sample/receiver.js b/sample/receiver.js index 36e8e58..6cf1d40 100644 --- a/sample/receiver.js +++ b/sample/receiver.js @@ -5,28 +5,26 @@ module.exports = function (RED) { RED.nodes.createNode(this, config); this.config = RED.nodes.getNode(config.config); var node = this; - const client = this.config.client; + const client = this.config.client; const ignore = config.ignore.split(/\n/); - try { client.addEventHandler((update) => { - if(update.message.fromId != null && !ignore.includes(update.message.fromId.userId.toString())){ - + if ( + update.message.fromId != null && + !ignore.includes(update.message.fromId.userId.toString()) + ) { node.send({ - payload:{ - update - } - } ) + payload: { + update, + }, + }); } - }, new NewMessage()); - } catch (err) { - node.error('Ошибка авторизации: ' + err.message); + node.error("Authorization error: " + err.message); } - } - RED.nodes.registerType('receiver', Receiver); + RED.nodes.registerType("receiver", Receiver); }; diff --git a/sample/send-file.html b/sample/send-file.html index 90e033d..2cc20bc 100644 --- a/sample/send-file.html +++ b/sample/send-file.html @@ -1,444 +1,459 @@ - diff --git a/sample/send-file.js b/sample/send-file.js index d27e60b..65532d1 100644 --- a/sample/send-file.js +++ b/sample/send-file.js @@ -1,72 +1,77 @@ module.exports = function (RED) { - function SendFile(config) { - RED.nodes.createNode(this, config); - this.config = RED.nodes.getNode(config.config); - var node = this; + function SendFile(config) { + RED.nodes.createNode(this, config); + this.config = RED.nodes.getNode(config.config); + var node = this; - this.on('input', async function (msg) { - const chatId = msg.payload.chatId || config.chatId; - const files = msg.payload.files || config.files.split(',').map(file => file.trim()); - const caption = msg.payload.caption || config.caption; - const forceDocument = msg.payload.forceDocument || config.forceDocument; - const fileSize = msg.payload.fileSize || config.fileSize; - const clearDraft = msg.payload.clearDraft || config.clearDraft; - const progressCallback = msg.payload.progressCallback || config.progressCallback; - const replyTo = msg.payload.replyTo || config.replyTo; - const attributes = msg.payload.attributes || config.attributes; - const thumb = msg.payload.thumb || config.thumb; - const voiceNote = msg.payload.voiceNote || config.voiceNote; - const videoNote = msg.payload.videoNote || config.videoNote; - const supportsStreaming = msg.payload.supportsStreaming || config.supportsStreaming; - const parseMode = msg.payload.parseMode || config.parseMode; - const formattingEntities = msg.payload.formattingEntities || config.formattingEntities; - const silent = msg.payload.silent || config.silent; - const scheduleDate = msg.payload.scheduleDate || config.scheduleDate; - const buttons = msg.payload.buttons || config.buttons; - const workers = msg.payload.workers || config.workers; - const noforwards = msg.payload.noforwards || config.noforwards; - const commentTo = msg.payload.commentTo || config.commentTo; - const topMsgId = msg.payload.topMsgId || config.topMsgId; + this.on("input", async function (msg) { + const chatId = msg.payload.chatId || config.chatId; + const files = + msg.payload.files || config.files.split(",").map((file) => file.trim()); + const caption = msg.payload.caption || config.caption; + const forceDocument = msg.payload.forceDocument || config.forceDocument; + const fileSize = msg.payload.fileSize || config.fileSize; + const clearDraft = msg.payload.clearDraft || config.clearDraft; + const progressCallback = + msg.payload.progressCallback || config.progressCallback; + const replyTo = msg.payload.replyTo || config.replyTo; + const attributes = msg.payload.attributes || config.attributes; + const thumb = msg.payload.thumb || config.thumb; + const voiceNote = msg.payload.voiceNote || config.voiceNote; + const videoNote = msg.payload.videoNote || config.videoNote; + const supportsStreaming = + msg.payload.supportsStreaming || config.supportsStreaming; + const parseMode = msg.payload.parseMode || config.parseMode; + const formattingEntities = + msg.payload.formattingEntities || config.formattingEntities; + const silent = msg.payload.silent || config.silent; + const scheduleDate = msg.payload.scheduleDate || config.scheduleDate; + const buttons = msg.payload.buttons || config.buttons; + const workers = msg.payload.workers || config.workers; + const noforwards = msg.payload.noforwards || config.noforwards; + const commentTo = msg.payload.commentTo || config.commentTo; + const topMsgId = msg.payload.topMsgId || config.topMsgId; - /** @type {TelegramClient} */ - const client = msg.payload?.client ? msg.payload.client : this.config.client; + /** @type {TelegramClient} */ + const client = msg.payload?.client + ? msg.payload.client + : this.config.client; - try { - const params = { - file: files, - caption: caption, - forceDocument: forceDocument, - fileSize: fileSize, - clearDraft: clearDraft, - progressCallback: progressCallback, - replyTo: replyTo, - attributes: attributes, - thumb: thumb, - voiceNote: voiceNote, - videoNote: videoNote, - supportsStreaming: supportsStreaming, - parseMode: parseMode, - formattingEntities: formattingEntities, - silent: silent, - scheduleDate: scheduleDate, - buttons: buttons, - workers: workers, - noforwards: noforwards, - commentTo: commentTo, - topMsgId: topMsgId, - }; - - - // Отправка файлов - const response = await client.sendFile(chatId, params); - node.send({ - payload: response, - }); - } catch (err) { - node.error('Error sending files: ' + err.message); - } + try { + const params = { + file: files, + caption: caption, + forceDocument: forceDocument, + fileSize: fileSize, + clearDraft: clearDraft, + progressCallback: progressCallback, + replyTo: replyTo, + attributes: attributes, + thumb: thumb, + voiceNote: voiceNote, + videoNote: videoNote, + supportsStreaming: supportsStreaming, + parseMode: parseMode, + formattingEntities: formattingEntities, + silent: silent, + scheduleDate: scheduleDate, + buttons: buttons, + workers: workers, + noforwards: noforwards, + commentTo: commentTo, + topMsgId: topMsgId, + }; + + // Sending files + const response = await client.sendFile(chatId, params); + node.send({ + payload: response, }); - } + } catch (err) { + node.error("Error sending files: " + err.message); + } + }); + } - RED.nodes.registerType('send-files', SendFile); + RED.nodes.registerType("send-files", SendFile); }; diff --git a/sample/send-message.html b/sample/send-message.html index f38fb43..999fead 100644 --- a/sample/send-message.html +++ b/sample/send-message.html @@ -1,292 +1,335 @@ - - + + diff --git a/sample/send-message.js b/sample/send-message.js index ee968a1..1957031 100644 --- a/sample/send-message.js +++ b/sample/send-message.js @@ -2,82 +2,84 @@ const { TelegramClient } = require("telegram"); const { parseID } = require("telegram/Utils"); module.exports = function (RED) { - function SendMessage(config) { - RED.nodes.createNode(this, config); - this.config = RED.nodes.getNode(config.config); - var node = this; + function SendMessage(config) { + RED.nodes.createNode(this, config); + this.config = RED.nodes.getNode(config.config); + var node = this; - this.on('input', async function (msg) { - let chatId = msg.payload.chatId || config.chatId; - const message = msg.payload.message || config.message; - const parseMode = msg.payload.parseMode || config.parseMode; - const schedule = msg.payload.schedule || config.schedule; - const replyTo = msg.payload.replyTo || config.replyTo; - const attributes = msg.payload.attributes || config.attributes; - const formattingEntities = msg.payload.formattingEntities || config.formattingEntities; - const linkPreview = msg.payload.linkPreview || config.linkPreview; - const file = msg.payload.file || config.file; - const thumb = msg.payload.thumb || config.thumb; - const forceDocument = msg.payload.forceDocument || config.forceDocument; - const clearDraft = msg.payload.clearDraft || config.clearDraft; - const buttons = msg.payload.buttons || config.buttons; - const silent = msg.payload.silent || config.silent; - const supportStreaming = msg.payload.supportStreaming || config.supportStreaming; - const noforwards = msg.payload.noforwards || config.noforwards; - const commentTo = msg.payload.commentTo || config.commentTo; - const topMsgId = msg.payload.topMsgId || config.topMsgId; + this.on("input", async function (msg) { + let chatId = msg.payload.chatId || config.chatId; + const message = msg.payload.message || config.message; + const parseMode = msg.payload.parseMode || config.parseMode; + const schedule = msg.payload.schedule || config.schedule; + const replyTo = msg.payload.replyTo || config.replyTo; + const attributes = msg.payload.attributes || config.attributes; + const formattingEntities = + msg.payload.formattingEntities || config.formattingEntities; + const linkPreview = msg.payload.linkPreview || config.linkPreview; + const file = msg.payload.file || config.file; + const thumb = msg.payload.thumb || config.thumb; + const forceDocument = msg.payload.forceDocument || config.forceDocument; + const clearDraft = msg.payload.clearDraft || config.clearDraft; + const buttons = msg.payload.buttons || config.buttons; + const silent = msg.payload.silent || config.silent; + const supportStreaming = + msg.payload.supportStreaming || config.supportStreaming; + const noforwards = msg.payload.noforwards || config.noforwards; + const commentTo = msg.payload.commentTo || config.commentTo; + const topMsgId = msg.payload.topMsgId || config.topMsgId; - /** @type {TelegramClient} */ - const client = msg.payload?.client ? msg.payload.client : this.config.client; - let peerId = chatId === "me" ? chatId : parseID(chatId); + /** @type {TelegramClient} */ + const client = msg.payload?.client + ? msg.payload.client + : this.config.client; + let peerId = chatId === "me" ? chatId : parseID(chatId); - try { - const params = { - message: message, - parseMode: parseMode, - replyTo: replyTo !== ""? replyTo:undefined, - attributes: attributes, - formattingEntities: formattingEntities !== ""? formattingEntities:undefined, - linkPreview: linkPreview, - file: file !== "" && file.length > 1? file:undefined, - thumb: thumb, - forceDocument: forceDocument, - clearDraft: clearDraft, - buttons: buttons !== "" ? buttons : undefined, - silent: silent, - supportStreaming: supportStreaming, - noforwards: noforwards, - commentTo: commentTo !== "" ? commentTo : undefined, - topMsgId: topMsgId !== topMsgId ? commentTo : undefined, - }; + try { + const params = { + message: message, + parseMode: parseMode, + replyTo: replyTo !== "" ? replyTo : undefined, + attributes: attributes, + formattingEntities: + formattingEntities !== "" ? formattingEntities : undefined, + linkPreview: linkPreview, + file: file !== "" && file.length > 1 ? file : undefined, + thumb: thumb, + forceDocument: forceDocument, + clearDraft: clearDraft, + buttons: buttons !== "" ? buttons : undefined, + silent: silent, + supportStreaming: supportStreaming, + noforwards: noforwards, + commentTo: commentTo !== "" ? commentTo : undefined, + topMsgId: topMsgId !== topMsgId ? commentTo : undefined, + }; - if (schedule) { - params.schedule = new Date(schedule).getTime() / 1000; - } + if (schedule) { + params.schedule = new Date(schedule).getTime() / 1000; + } - let response; - if (chatId[0] === "@") { - peerId = await client.getEntity(chatId); - } - + let response; + if (chatId[0] === "@") { + peerId = await client.getEntity(chatId); + } - try { - response = await client.sendMessage(peerId, params); - } catch (error) { - const entity = await client.getInputEntity(peerId) - await client.sendMessage(entity, params); - } - - node.send({ - payload: { response }, - }); - } catch (err) { - node.error('Error send message: ' + err.message); - } + try { + response = await client.sendMessage(peerId, params); + } catch (error) { + const entity = await client.getInputEntity(peerId); + await client.sendMessage(entity, params); + } + node.send({ + payload: { response }, }); + } catch (err) { + node.error("Error send message: " + err.message); + } + }); + } - } - - RED.nodes.registerType('send-message', SendMessage); + RED.nodes.registerType("send-message", SendMessage); };