@@ -6,6 +6,10 @@ module.exports = function (RED) {
6
6
const { Api, TelegramClient } = require ( 'telegram' ) ;
7
7
const { StringSession } = require ( 'telegram/sessions' ) ;
8
8
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' ) ;
9
13
10
14
// --------------------------------------------------------------------------------------------
11
15
let getPhoneCodeResolve ;
@@ -290,11 +294,22 @@ module.exports = function (RED) {
290
294
this . bot = config . bot ;
291
295
this . config = RED . nodes . getNode ( this . bot ) ;
292
296
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
+
293
303
this . rawEventHandlerAdded = false ;
294
304
this . newMessageEventHandlerAdded = false ;
305
+ this . deletedMessageEventHandlerAdded = false ;
306
+ this . editedMessageEventHandlerAdded = false ;
307
+ this . albumEventHandlerAdded = false ;
308
+ this . callbackQueryEventHandlerAdded = false ;
295
309
296
310
this . rawEventHandler = async ( event ) => {
297
311
let msg = {
312
+ type : 'Raw' ,
298
313
payload : event ,
299
314
} ;
300
315
node . send ( msg ) ;
@@ -304,6 +319,34 @@ module.exports = function (RED) {
304
319
let message = event . message ;
305
320
let msg = {
306
321
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' ,
307
350
message : message ,
308
351
sender : await message . getSender ( ) ,
309
352
chat : await message . getChat ( ) ,
@@ -313,6 +356,29 @@ module.exports = function (RED) {
313
356
node . send ( msg ) ;
314
357
} ;
315
358
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
+
316
382
this . stop = async ( ) => {
317
383
if ( node . config ) {
318
384
let client = await node . config . getTelegramClient ( node ) ;
@@ -326,6 +392,26 @@ module.exports = function (RED) {
326
392
client . removeEventHandler ( node . newMessageEventHandler , new NewMessage ( { } ) ) ;
327
393
node . newMessageEventHandlerAdded = false ;
328
394
}
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
+ }
329
415
}
330
416
}
331
417
@@ -340,19 +426,47 @@ module.exports = function (RED) {
340
426
if ( node . config ) {
341
427
let client = await node . config . getTelegramClient ( node ) ;
342
428
if ( client ) {
343
- node . status ( {
344
- fill : 'green' ,
345
- shape : 'ring' ,
346
- text : 'connected' ,
347
- } ) ;
348
-
349
429
if ( node . sendRawEvents ) {
350
430
client . addEventHandler ( node . rawEventHandler ) ;
351
431
node . rawEventHandlerAdded = true ;
352
- } else {
432
+ }
433
+
434
+ if ( node . sendNewMessage ) {
353
435
client . addEventHandler ( node . newMessageEventHandler , new NewMessage ( { } ) ) ;
354
436
node . newMessageEventHandlerAdded = true ;
355
437
}
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
+ } ) ;
356
470
}
357
471
} else {
358
472
// no config node?
@@ -385,6 +499,12 @@ module.exports = function (RED) {
385
499
shape : 'ring' ,
386
500
text : 'connected' ,
387
501
} ) ;
502
+ } else {
503
+ node . status ( {
504
+ fill : 'red' ,
505
+ shape : 'ring' ,
506
+ text : 'disconnected' ,
507
+ } ) ;
388
508
}
389
509
} else {
390
510
// no config node?
0 commit comments