windkh / node-red-contrib-telegrambot

Telegram bot nodes for node-red.
Other
265 stars 118 forks source link

callback_query throws "Cannot read property 'message_id' of undefined" #191

Closed MorbidDevil closed 3 years ago

MorbidDevil commented 3 years ago

callback_query throws this error when callback event triggered by inline_query result message.

example flow

[{"id":"3b0db5d830a948bd","type":"telegram event","z":"95afda0e0dc1a9a1","name":"","bot":"38996105.8d2c4e","event":"inline_query","autoanswer":false,"x":330,"y":260,"wires":[["45b00d85c952c03c","b702e81303f9bfa3"]]},{"id":"45b00d85c952c03c","type":"debug","z":"95afda0e0dc1a9a1","name":"inline_query","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":330,"y":220,"wires":[]},{"id":"b702e81303f9bfa3","type":"function","z":"95afda0e0dc1a9a1","name":"create results","func":"const data = [\n    { id: \"id2\", title: \"Cool Title\", url: \"https://javascript.plainenglish.io/how-to-bypass-captchas-with-javascript-13f6eb126f8\" },\n    { id: \"id4\", title: \"Another Cool Title\", url: \"https://dev.to/logrocket/optimize-node-js-performance-with-clustering-7ki\" },\n    { id: \"id5\", title: \"Next Title\", url: \"https://80.lv/articles/nvidia-s-rtx-3090s-can-t-handle-amazon-s-new-world-mmo/\" },\n];\n\nmsg.payload.results = data.map( (x) => { \n    return {\n        id: x.id,\n        type: \"article\",\n        title: `${x.title}`,\n        thumb_url: `https://freesvg.org/img/Placeholder.png`,\n\n        input_message_content: {\n            message_text: `${x.title}`,\n            parse_mode: \"Markdown\",\n            disable_web_page_preview: true\n        },\n        \n        reply_markup: {\n            inline_keyboard: [\n                [\n                    { text: \"request\", callback_data: x.id },\n                    { text: \"cancel\", callback_data: \"XCANCEL\" },\n                ],\n                x.url ? [{ text: \"visit web\", url: x.url }] : [],\n            ],\n        },\n    }\n});\n\n// msg.payload.inline_message_id = msg.originalMessage.inline_message_id;\n\nreturn msg;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":260,"wires":[["6cf911dcd0b8099e"]]},{"id":"6cf911dcd0b8099e","type":"telegram sender","z":"95afda0e0dc1a9a1","name":"answer inline_query","bot":"38996105.8d2c4e","haserroroutput":false,"outputs":1,"x":820,"y":260,"wires":[["aeb263b15dfd8532"]]},{"id":"aeb263b15dfd8532","type":"debug","z":"95afda0e0dc1a9a1","name":"answer inline_query","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1060,"y":260,"wires":[]},{"id":"8f4f184c6941072a","type":"telegram event","z":"95afda0e0dc1a9a1","name":"","bot":"38996105.8d2c4e","event":"chosen_inline_result","autoanswer":true,"x":350,"y":400,"wires":[["12fc3b2c3e97de33"]]},{"id":"12fc3b2c3e97de33","type":"debug","z":"95afda0e0dc1a9a1","name":"choosen inline result","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":360,"y":360,"wires":[]},{"id":"dbabe7eb65cc7bdf","type":"telegram event","z":"95afda0e0dc1a9a1","name":"","bot":"38996105.8d2c4e","event":"callback_query","autoanswer":true,"x":340,"y":520,"wires":[["e90d20918beafd35","92c019d97d5fa554"]]},{"id":"e90d20918beafd35","type":"function","z":"95afda0e0dc1a9a1","name":"set  answer options","func":"if (msg.payload.inline_message_id) {\n    msg.payload.options = {\n        inline_message_id: msg.payload.inline_message_id,\n    };\n\n    if ( msg.payload.content === \"XCANCEL\") {\n        msg.payload.type = \"editMessageReplyMarkup\";\n        msg.payload.content = JSON.stringify({\n            \"inline_keyboard\": []\n        });\n        return [ msg ];\n    }\n\n    // do cool stuff\n\n    return [ msg ];\n}\n\n\nmsg.payload.options = false;\nreturn [ msg ];\n","outputs":"1","noerr":0,"initialize":"","finalize":"","libs":[{"var":"fetch","module":"node-fetch"}],"x":590,"y":520,"wires":[["a1e28e4c82943a43","92fbc958a5eb1fb9"]]},{"id":"a1e28e4c82943a43","type":"telegram sender","z":"95afda0e0dc1a9a1","name":"answer callback query","bot":"38996105.8d2c4e","haserroroutput":false,"outputs":1,"x":880,"y":520,"wires":[["5d6a3d72e0455c2d"]]},{"id":"92c019d97d5fa554","type":"debug","z":"95afda0e0dc1a9a1","name":"callback query","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":340,"y":480,"wires":[]},{"id":"92fbc958a5eb1fb9","type":"debug","z":"95afda0e0dc1a9a1","name":"answer callback query","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":600,"y":480,"wires":[]},{"id":"5d6a3d72e0455c2d","type":"debug","z":"95afda0e0dc1a9a1","name":"callback query done","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":880,"y":480,"wires":[]},{"id":"d00920cead4dcc7d","type":"debug","z":"95afda0e0dc1a9a1","name":"ERROR","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1100,"y":120,"wires":[]},{"id":"ef6469249b2e7216","type":"catch","z":"95afda0e0dc1a9a1","name":"","scope":null,"x":860,"y":120,"wires":[["d00920cead4dcc7d"]]},{"id":"38996105.8d2c4e","type":"telegram bot","botname":"MorbidHomeBot","usernames":"MorbidDevil","chatids":"","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","botpath":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"sslterminated":false,"verboselogging":true}]

i have fixed this for me with

diff --git a/telegrambot/99-telegrambot.js b/telegrambot/99-telegrambot.js
index 6104734..948f7c1 100644
--- a/telegrambot/99-telegrambot.js
+++ b/telegrambot/99-telegrambot.js
@@ -1242,7 +1242,8 @@ module.exports = function (RED) {
                             case 'callback_query':
                                 messageDetails = {
                                     chatId: chatid,
-                                    messageId: botMsg.message.message_id,
+                                    messageId: botMsg.message?.message_id,
+                                    inline_message_id: botMsg?.inline_message_id,
                                     type: this.event,
                                     content: botMsg.data,
                                     callbackQueryId: botMsg.id,
windkh commented 3 years ago

@MorbidDevil thanks for reporting... there are so many cases that can happen here depending if the input comes from a group chat, channel,.... maybe you are right I will make this a little bit more robust