n8n-nodes-telegram-mtproto
Version:
Telegram MTPROTO API integration for n8n - Real-time new message listening and automation
125 lines • 4.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.TelegramApiTrigger = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const TelegramConnectionManager_1 = require("./TelegramConnectionManager");
const events_1 = require("telegram/events");
class TelegramApiTrigger {
constructor() {
this.description = {
displayName: 'Telegram MTPROTO API Trigger',
name: 'telegramApiTrigger',
icon: { light: 'file:TelegramApiTrigger.svg', dark: 'file:TelegramApiTrigger.svg' },
group: ['trigger'],
version: 1,
description: 'Listens for new messages from Telegram using MTPROTO API',
defaults: {
name: 'Telegram MTPROTO API Trigger',
},
inputs: [],
outputs: ["main"],
credentials: [
{
name: 'telegramMTPROTOApi',
required: true,
},
],
properties: [],
};
}
async trigger() {
const credentials = (await this.getCredentials('telegramMTPROTOApi'));
const connectionManager = TelegramConnectionManager_1.TelegramConnectionManager.getInstance();
let client;
try {
client = await connectionManager.getClient(credentials);
}
catch (error) {
throw new n8n_workflow_1.ApplicationError(`Failed to connect to Telegram: ${error}. Please ensure your credentials are correct and you have authorized this application.`);
}
const emit = (data) => {
this.emit([this.helpers.returnJsonArray([data])]);
};
const handleNewMessage = async (event) => {
var _a, _b;
try {
const messageData = {
peer: await client.getEntity(event.message.peerId),
message: event.message,
isGroup: (_a = event.isGroup) !== null && _a !== void 0 ? _a : false,
isChannel: event.isChannel,
isPrivate: (_b = event.isPrivate) !== null && _b !== void 0 ? _b : false,
chat: event.chat,
};
emit(messageData);
}
catch (error) {
console.error('Error processing new message:', error);
}
};
let eventHandlerAdded = false;
let newMessageEvent = null;
if (this.getMode() !== 'manual') {
try {
newMessageEvent = new events_1.NewMessage({});
client.addEventHandler(handleNewMessage, newMessageEvent);
eventHandlerAdded = true;
}
catch (error) {
console.error('Error adding event handler:', error);
}
}
const closeFunction = async () => {
try {
if (eventHandlerAdded && newMessageEvent) {
client.removeEventHandler(handleNewMessage, newMessageEvent);
}
}
catch (error) {
console.error('Error removing event handler:', error);
}
};
const manualTriggerFunction = async () => {
return new Promise((resolve, reject) => {
const timeoutHandler = setTimeout(() => {
try {
if (manualEvent) {
client.removeEventHandler(manualTestHandler, manualEvent);
}
}
catch (error) {
console.error('Error removing manual handler:', error);
}
reject(new Error('Timeout: No message received within 30 seconds'));
}, 30000);
const manualTestHandler = async (event) => {
try {
handleNewMessage(event);
clearTimeout(timeoutHandler);
try {
if (manualEvent) {
client.removeEventHandler(manualTestHandler, manualEvent);
}
}
catch (error) {
console.error('Error removing manual handler:', error);
}
resolve();
}
catch (error) {
clearTimeout(timeoutHandler);
reject(error);
}
};
const manualEvent = new events_1.NewMessage({});
client.addEventHandler(manualTestHandler, manualEvent);
});
};
return {
closeFunction,
manualTriggerFunction,
};
}
}
exports.TelegramApiTrigger = TelegramApiTrigger;
//# sourceMappingURL=TelegramApiTrigger.node.js.map