Skip to content

Commit 44a5ef6

Browse files
author
windka
committed
fixed #3
1 parent a7ac927 commit 44a5ef6

File tree

4 files changed

+163
-11
lines changed

4 files changed

+163
-11
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# Changelog
22
All notable changes to this project will be documented in this file.
33

4+
# [0.1.4] - 2023-10-15
5+
### added further filters - [#3](https://github.com/windkh/node-red-node-telegrambot/issues/3)
6+
47
# [0.1.3] - 2023-10-12
58
### added proxy support - [#2](https://github.com/windkh/node-red-node-telegrambot/issues/2)
69

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "node-red-node-telegrambot",
3-
"version": "0.1.3",
3+
"version": "0.1.4",
44
"description": "Telegram userbot nodes for Node-RED",
55
"dependencies": {
66
"telegram": "^2.18.38"

telegrambot/telegrambot.html

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,11 @@ <h3>Details</h3>
324324
name: { value: "" },
325325
bot: { value:"", type: "telegram client config", required: true },
326326
sendrawevents: { value: false, required: false },
327+
sendnewmessage: { value: false, required: false },
328+
sendeditedmessage: { value: false, required: false },
329+
senddeletedmessage: { value: false, required: false },
330+
sendalbum: { value: false, required: false },
331+
sendcallbackquery: { value: false, required: false },
327332
},
328333
inputs: 0,
329334
outputs: 1,
@@ -353,11 +358,35 @@ <h3>Details</h3>
353358
<hr align="middle"/>
354359

355360
<div class="form-row">
356-
<label for="node-config-input-sendrawevents"><i class="fa fa-filter"></i> Send raw events</label>
357-
<input type="checkbox" id="node-config-input-sendrawevents" style="display: inline-block; width: auto; vertical-align: top;">
361+
<label for="node-input-sendnewmessage"><i class="fa fa-filter"></i> New messages</label>
362+
<input type="checkbox" id="node-input-sendnewmessage" style="display: inline-block; width: 50%; vertical-align: top;">
363+
</div>
364+
365+
<div class="form-row">
366+
<label for="node-input-senddeletedmessage"><i class="fa fa-filter"></i> Deleted messages</label>
367+
<input type="checkbox" id="node-input-senddeletedmessage" style="display: inline-block; width: 50%; vertical-align: top;">
368+
</div>
369+
370+
<div class="form-row">
371+
<label for="node-input-sendeditedmessage"><i class="fa fa-filter"></i> Edited messages</label>
372+
<input type="checkbox" id="node-input-sendeditedmessage" style="display: inline-block; width: 50%; vertical-align: top;">
358373
</div>
359374

360-
<div class="form-tips" style="width: auto"><b>Tip:</b> When raw events is turned on, all events are sent to the output without further filtering.</div>
375+
<div class="form-row">
376+
<label for="node-input-sendalbum"><i class="fa fa-filter"></i> Albums (list of mesages)</label>
377+
<input type="checkbox" id="node-input-sendalbum" style="display: inline-block; width: 50%; vertical-align: top;">
378+
</div>
379+
380+
<div class="form-row">
381+
<label for="node-input-sendcallbackquery"><i class="fa fa-filter"></i> Callback query</label>
382+
<input type="checkbox" id="node-input-sendcallbackquery" style="display: inline-block; width: 50%; vertical-align: top;">
383+
</div>
384+
385+
<div class="form-row">
386+
<label for="node-input-sendrawevents"><i class="fa fa-filter"></i> Raw events</label>
387+
<input type="checkbox" id="node-input-sendrawevents" style="display: inline-block; width: 50%; vertical-align: top;">
388+
<div class="form-tips" style="width: auto"><b>Tip:</b> When raw events is turned on, all events are sent to the output without further filtering.</div>
389+
</div>
361390

362391
</script>
363392

telegrambot/telegrambot.js

Lines changed: 127 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ module.exports = function (RED) {
66
const { Api, TelegramClient } = require('telegram');
77
const { StringSession } = require('telegram/sessions');
88
const { NewMessage } = require('telegram/events');
9+
const { DeletedMessage } = require('telegram/events/DeletedMessage');
10+
const { EditedMessage } = require('telegram/events/EditedMessage');
11+
const { Album } = require('telegram/events/Album');
12+
const { CallbackQuery } = require('telegram/events/CallbackQuery');
913

1014
// --------------------------------------------------------------------------------------------
1115
let getPhoneCodeResolve;
@@ -290,11 +294,22 @@ module.exports = function (RED) {
290294
this.bot = config.bot;
291295
this.config = RED.nodes.getNode(this.bot);
292296
this.sendRawEvents = config.sendrawevents || false;
297+
this.sendNewMessage = config.sendnewmessage || false;
298+
this.sendDeletedMessage = config.senddeletedmessage || false;
299+
this.sendEditedMessage = config.sendeditedmessage || false;
300+
this.sendAlbum = config.sendalbum || false;
301+
this.sendCallbackQuery = config.sendcallbackquery || false;
302+
293303
this.rawEventHandlerAdded = false;
294304
this.newMessageEventHandlerAdded = false;
305+
this.deletedMessageEventHandlerAdded = false;
306+
this.editedMessageEventHandlerAdded = false;
307+
this.albumEventHandlerAdded = false;
308+
this.callbackQueryEventHandlerAdded = false;
295309

296310
this.rawEventHandler = async (event) => {
297311
let msg = {
312+
type: 'Raw',
298313
payload: event,
299314
};
300315
node.send(msg);
@@ -304,6 +319,34 @@ module.exports = function (RED) {
304319
let message = event.message;
305320
let msg = {
306321
payload: {
322+
type: 'NewMessage',
323+
message: message,
324+
originalUpdate: message.originalUpdate,
325+
sender: await message.getSender(),
326+
chat: await message.getChat(),
327+
event: event,
328+
},
329+
};
330+
node.send(msg);
331+
};
332+
333+
this.deletedMessageEventHandler = async (event) => {
334+
let msg = {
335+
payload: {
336+
type: 'DeletedMessage',
337+
// peer, chatPeer ?
338+
deletedIds: event.deletedIds,
339+
event: event,
340+
},
341+
};
342+
node.send(msg);
343+
};
344+
345+
this.editedMessageEventHandler = async (event) => {
346+
let message = event.message;
347+
let msg = {
348+
payload: {
349+
type: 'EditedMessage',
307350
message: message,
308351
sender: await message.getSender(),
309352
chat: await message.getChat(),
@@ -313,6 +356,29 @@ module.exports = function (RED) {
313356
node.send(msg);
314357
};
315358

359+
this.albumEventHandler = async (event) => {
360+
let msg = {
361+
payload: {
362+
type: 'Album',
363+
messages: event.messages,
364+
originalUpdates: event.originalUpdates,
365+
event: event,
366+
},
367+
};
368+
node.send(msg);
369+
};
370+
371+
this.callbackQueryEventHandler = async (event) => {
372+
let msg = {
373+
payload: {
374+
type: 'CallbackQuery',
375+
query: event.query,
376+
event: event,
377+
},
378+
};
379+
node.send(msg);
380+
};
381+
316382
this.stop = async () => {
317383
if (node.config) {
318384
let client = await node.config.getTelegramClient(node);
@@ -326,6 +392,26 @@ module.exports = function (RED) {
326392
client.removeEventHandler(node.newMessageEventHandler, new NewMessage({}));
327393
node.newMessageEventHandlerAdded = false;
328394
}
395+
396+
if (node.deletedMessageEventHandlerAdded) {
397+
client.removeEventHandler(node.deletedMessageEventHandler, new DeletedMessage({}));
398+
node.deletedMessageEventHandlerAdded = false;
399+
}
400+
401+
if (node.editedMessageEventHandlerAdded) {
402+
client.removeEventHandler(node.editedMessageEventHandler, new EditedMessage({}));
403+
node.editedMessageEventHandlerAdded = false;
404+
}
405+
406+
if (node.albumEventHandlerAdded) {
407+
client.removeEventHandler(node.albumEventHandler, new Album({}));
408+
node.albumEventHandlerAdded = false;
409+
}
410+
411+
if (node.callbackQueryEventHandlerAdded) {
412+
client.removeEventHandler(node.callbackQueryEventHandler, new CallbackQuery({}));
413+
node.callbackQueryEventHandlerAdded = false;
414+
}
329415
}
330416
}
331417

@@ -340,19 +426,47 @@ module.exports = function (RED) {
340426
if (node.config) {
341427
let client = await node.config.getTelegramClient(node);
342428
if (client) {
343-
node.status({
344-
fill: 'green',
345-
shape: 'ring',
346-
text: 'connected',
347-
});
348-
349429
if (node.sendRawEvents) {
350430
client.addEventHandler(node.rawEventHandler);
351431
node.rawEventHandlerAdded = true;
352-
} else {
432+
}
433+
434+
if (node.sendNewMessage) {
353435
client.addEventHandler(node.newMessageEventHandler, new NewMessage({}));
354436
node.newMessageEventHandlerAdded = true;
355437
}
438+
439+
if (node.sendDeletedMessage) {
440+
client.addEventHandler(node.deletedMessageEventHandler, new DeletedMessage({}));
441+
node.deletedMessageEventHandlerAdded = true;
442+
}
443+
444+
if (node.sendEditedMessage) {
445+
client.addEventHandler(node.editedMessageEventHandler, new EditedMessage({}));
446+
node.editedMessageEventHandlerAdded = true;
447+
}
448+
449+
if (node.sendAlbum) {
450+
client.addEventHandler(node.albumEventHandler, new Album({}));
451+
node.albumEventHandlerAdded = true;
452+
}
453+
454+
if (node.sendCallbackQuery) {
455+
client.addEventHandler(node.callbackQueryEventHandler, new CallbackQuery({}));
456+
node.callbackQueryEventHandlerAdded = true;
457+
}
458+
459+
node.status({
460+
fill: 'green',
461+
shape: 'ring',
462+
text: 'connected',
463+
});
464+
} else {
465+
node.status({
466+
fill: 'red',
467+
shape: 'ring',
468+
text: 'disconnected',
469+
});
356470
}
357471
} else {
358472
// no config node?
@@ -385,6 +499,12 @@ module.exports = function (RED) {
385499
shape: 'ring',
386500
text: 'connected',
387501
});
502+
} else {
503+
node.status({
504+
fill: 'red',
505+
shape: 'ring',
506+
text: 'disconnected',
507+
});
388508
}
389509
} else {
390510
// no config node?

0 commit comments

Comments
 (0)