94 lines
3.2 KiB
JavaScript
94 lines
3.2 KiB
JavaScript
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;
|
|
|
|
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);
|
|
|
|
// 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,
|
|
};
|
|
|
|
if (offsetDate) {
|
|
params.offsetDate = new Date(offsetDate).getTime() / 1000;
|
|
}
|
|
|
|
if (chatId[0] === "@") {
|
|
peerId = await client.getEntity(chatId);
|
|
}
|
|
const messages = {};
|
|
|
|
const filters = msg.payload?.filters || config.filters || [];
|
|
|
|
// 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);
|
|
}
|
|
});
|
|
}
|
|
|
|
RED.nodes.registerType("iter-messages", IterMessages);
|
|
};
|