{"version":3,"sources":["jsdelivr-header.js","/npm/nodebb-plugin-telegram-notifications@0.3.1/library.js"],"names":[],"mappings":"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","file":"/npm/nodebb-plugin-telegram-notifications@0.3.1/library.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/nodebb-plugin-telegram-notifications@0.3.1/library.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function(module) {\n\"use strict\";\n\nrequire('./lib/nodebb.js');\n\nvar Telegram = {};\n\nvar db = module.parent.require('./database'),\n\tmeta = module.parent.require('./meta'),\n\tUser = module.parent.require('./user'),\n\tposts = module.parent.require('./posts'),\n\tTopics = module.parent.require('./topics'),\n\tCategories = module.parent.require('./categories'),\n\tmessaging = module.parent.require('./messaging'),\n\tSocketPlugins = module.parent.require('./socket.io/plugins'),\n\twinston = module.parent.require('winston'),\n\tnconf = module.parent.require('nconf'),\n\tasync = module.parent.require('async'),\n\tS = module.parent.require('string'),\n\tcache = require('lru-cache'),\n\tlang_cache,\n\ttranslator = module.parent.require('../public/src/modules/translator'),\n\tmoment = require('./lib/moment.min.js'),\n\tpubsub = module.parent.require('./pubsub'),\n\tprivileges = module.parent.require('./privileges'),\n\n\tSettings = require('./lib/userSettings.js')(Telegram),\n //   SocketAdmins = module.parent.require('./socket.io/admin');\n\n    TelegramBot = require('node-telegram-bot-api');\n\nvar bot = null;\nvar token = null;\nvar message = null;\nvar messageQueue = {};\nvar plugin = {\n\t\tconfig: {\n\t\t\ttelegramid: '',\n               chatid:'',\n               roomId:'',\n\t\t\tmaxLength: '',\n\t\t\tpostCategories: '',\n\t\t\ttopicsOnly: '',\n\t\t\tmessageContent: ''\n\t\t}\n    };\n\n            \nTelegram.init = function(params, callback) {\n\tvar middleware = params.middleware,\n\tcontrollers = params.controllers;\n\n\t// Prepare templates\n\tcontrollers.getTelegramBotAdmin = function (req, res, next) {\n\t\t// Renders template (*Renderiza la plantilla)\n\t\tres.render('admin/plugins/telegrambot', {});\n\t};\n    // prepare parameter and start the bot\n\tcontrollers.getTelegramBotSettings = function (req, res, next) {\n\t\t// Renders template (*Renderiza la plantilla)\n\t\tpubsub.on('telegram:me', function(me){\n\t\t\tres.render('user/settings', {botname:me.username});\n\t\t});\n\t\tpubsub.publish('telegram:getMe');\n\t};\n\n\t// Create urls\n\tparams.router.get('/admin/telegrambot', middleware.buildHeader, controllers.getTelegramBotAdmin);\n\tparams.router.get('/api/admin/telegrambot', controllers.getTelegramBotAdmin);\n\tparams.router.get('/telegram/settings', Telegram.isLoggedIn, middleware.buildHeader, controllers.getTelegramBotSettings);\n\tparams.router.get('/api/telegram/settings', Telegram.isLoggedIn, controllers.getTelegramBotSettings);\n\n\t// User language cache\n\tdb.getObjectField('global', 'userCount', function(err, numUsers) {\n\t\tvar\tcacheOpts = {\n\t\t\t\tmax: 50,\n\t\t\t\tmaxAge: 1000 * 60 * 60 * 24\n\t\t\t};\n\n\t\tif (!err && numUsers > 0) {\n\t\t\tcacheOpts.max = Math.floor(numUsers / 20);\n\t\t}\n\t\tlang_cache = cache(cacheOpts);\n\t});\n\n    // get settings\n       meta.settings.get('telegram-notification', function(err, settings) {\n\t\t\tfor (var prop in plugin.config) {\n\t\t\t\tif (settings.hasOwnProperty(prop)) {\n\t\t\t\t\tplugin.config[prop] = settings[prop];\n                }\n            }\n\t\t\ttoken = plugin.config['telegramid'];\n\n\t// Start the bot only on the primary instance and if a bot token is configured\n\tif(nconf.get('isPrimary') === 'true' && !nconf.get('jobsDisabled') && !global.telegram && token)\n\t{\n\t\tstartBot();\n\t}\n\telse\n\t{\t // at least get token in all instances to prepare&show menus\n//\t\tdb.getObject('telegrambot-token', function(err, t)\n//\t\t{\n//\t\t\tif(err || !t)\n//\t\t\t{\n//\t\t\t\treturn;\n//\t\t\t}\n\n\t\t\tmessage = plugin.config['messagecontent'];\n//\t\t});\n\t}\n    });\n\n\tcallback();\n};\n\nfunction startBot()\n{\n\t// Prepare bot\n\t\t\n\t\tmessageQueue = {};\n        //console.log(\"Token; \"+token);\n\n\t\t// Setup polling way\n\t\t bot = global.telegram = new TelegramBot(token,{polling: true});\n\n\t\tbot.on('text', function (msg) {\n\t\t\tvar chatId = msg.chat.id;\n\t\t\tvar userId = msg.from.id;\n\t\t\tvar username = msg.from.username;\n\t\t\tvar text = msg.text;\n            if (plugin.config['chatid'] == '')\n            {\n                plugin.config['chatid'] = chatId;\n            }\n            \n\t\t\tif(!message)\n\t\t\t{\n\t\t\t\tmessage = \"\\n Hello this is the ForumBot\\n\\n\"+\n                          \"I am your interface to your \"+\n                          \"NodeBB Forum\\n\\n\"+\n                          \"Your Telegram ID: {userid}\\n\"+\n                          \"ID of this chat:<b> \"+msg.chat.id+ \"</b>\\n\"+\n                          \"Open a chat with me and type /bothelp to see, what I can do for you\\n\"+\n                          \"You even may enter commands here: like '/<command> <parameters>@forumbot', \"+\n                          \"but I always ill answer in private chat only\";\n\t\t\t}\n\t\t\tif (text.toLowerCase().indexOf(\"@forumbot\") >=3)\n            { \n               var text2 = text.split(\"@forumbot\"); //remove the @forumbot, that should be at the end of the command\n               text = text2.join(\" \"); //recover the command\n            }\n            \n\t\t\tif(text.indexOf(\"/\") == 0)\n\t\t\t{\n\t\t\t\tparseCommands(userId, text);\n\t\t\t}\n\t\t\telse\n            {   \n           //     if (msg.text == \"@ForumBot\")\n                if (text.toLowerCase() == \"@forumbot\")\n                {\n                    var messageToSend = message.replace(\"{userid}\", msg.from.id);\n                    bot.sendMessage(msg.chat.id, messageToSend);\n                }\n\t\t\t}\n\t\t\t\n\t\t});\n\n\t\t// Notification observer.\n\t\tpubsub.on('telegram:notification', function(data){\n\t\t\tbot.sendMessage(data.telegramId, data.message).catch(function(){});\n\t\t});\n\n\t\t// Settings observer.\n\t\tpubsub.on('telegram:getMe', function(){\n\t\t\tbot.getMe().then(function(me){\n\t\t\t\tpubsub.publish('telegram:me', me);\n\t\t\t}).catch(function(){});\n\t\t});        \n}   // function startbot\n\n\nvar parseCommands = function(telegramId, mesg)\n{\n\tfunction respond(response) {\n\t\tpubsub.publish('telegram:notification', {telegramId: telegramId, message: response});\n\t}\n\n\tfunction respondWithTranslation(uid, response) {\n\t\tTelegram.getUserLanguage(uid, function(lang){\n\t\t\ttranslator.translate(response, lang, function(translated) {\n\t\t\t\trespond(translated);\n\t\t\t});\n\t\t});\n\t}\n\n\tif(mesg.indexOf(\"/\") == 0)\n\t{\n\n\t\tdb.sortedSetScore('telegramid:uid', telegramId, function(err, uid){\n\t\t\tif(err || !uid)\n\t\t\t{\n\t\t\t\treturn respond(\"UserID not found.. Put your TelegramID again in the telegram settings of the forum. :(\");\n\t\t\t}\n            mesg = mesg.replace(\",\",\" \");   //the client may insert a \",\" after the first word of the input\n\t\t\tvar command = mesg.split(\" \"); // Split command\n\t\t\tif(command[0].toLowerCase() == \"/r\" && command.length >= 3)\n\t\t\t{\t// It's a reply to a topic!\n\t\t\t\tvar data = {};\n\t\t\t\tdata.uid = uid;\n\t\t\t\tdata.tid = command[1];\n\t\t\t\tcommand.splice(0, 2); // Delete /r and topic id, only keep the message\n\t\t\t\tdata.content = command.join(\" \"); // recover the message\n\n\t\t\t\tif(messageQueue[data.uid]){\n\t\t\t\t\t// check queue to avoid race conditions and flood with many posts\n\t\t\t\t\t// Get user language to send the error\n\t\t\t\t\trespondWithTranslation(uid, \"[[error:too-many-messages]]\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// update queue\n\t\t\t\tmessageQueue[data.uid] = true;\n\n\t\t\t\tTopics.reply(data, function(err, postData){\n\t\t\t\t\tdelete messageQueue[data.uid];\n\t\t\t\t\tif(err){\n\t\t\t\t\t\t// Get user language to send the error\n\t\t\t\t\t\trespondWithTranslation(uid, err.message);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\trespondWithTranslation(uid, \"[[success:topic-post]]\");\n\t\t\t\t\treturn;\n\t\t\t\t});\n\t\t\t}\n/* chat command kills nodebb, so disable it until it's fixed\n*\n\t\t\telse if(command[0].toLowerCase() == \"/chat\" && command.length >= 3)\n\t\t\t{\t// It's a reply to a topic!\n\t\t\t\tvar data = {};\n\t\t\t\tuser.getUidByUserslug(command[1], function(err, touid){\n\t\t\t\t\tif(err || !touid)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn respond(\"Error: UserID \"+command[1]+\" not found);\n\t\t\t\t\t}\n\t\t\t\t\tdata.fromuid = uid;\n\t\t\t\t\tcommand.splice(0, 2); // Delete /chat and username, only keep the message\n\t\t\t\t\tdata.content = command.join(\" \"); // recover the message\n\t\t\t\t\tmessaging.addMessage(uid, touid, data.content, function(err, r){\n\t\t\t\t\t\tif(err)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trespond(\"Error..\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\trespondWithTranslation(uid, \"[[success:success]]\");\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n*/\n\n\t\t\telse if(command[0].toLowerCase() == \"/recent\")\n\t\t\t{\n\t\t\t\tvar data = {};\n\t\t\t\tvar numtopics = command[1] || 10;\n\t\t\t\tnumtopics = Math.min(30, numtopics);\n\t\t\t\tTopics.getTopicsFromSet('topics:recent', uid, 0, Math.max(1, numtopics), function(err, topics) {\n\t\t\t\t\tif (err)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn respond(\"Error..\");\n\t\t\t\t\t}\n\n\t\t\t\t\tvar response = \"\";\n\t\t\t\t\ttopics = topics.topics;\n\n\t\t\t\t\tfor(var i in topics)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar title = topics[i].title;\n\t\t\t\t\t\tvar tid = topics[i].tid;\n\t\t\t\t\t\tvar user = topics[i].user.username;\n\t\t\t\t\t\tvar time = moment.unix(topics[i].lastposttime / 1000).fromNow();\n\t\t\t\t\t\tvar url = nconf.get(\"url\") + \"/topic/\" + tid;\n\t\t\t\t\t\tresponse += title + \" \" + time + \" by \" + user + \"\\n\" + url + \"\\n\\n\";\n\t\t\t\t\t}\n\n\t\t\t\t\trespond(response);\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if(command[0].toLowerCase() == \"/read\" && command.length >= 2)\n\t\t\t{\n\t\t\t\tvar data = {};\n\t\t\t\tvar tid = command[1];\n\t\t\t\tprivileges.topics.get(tid, uid, function(err, data){\n\t\t\t\t\tvar canRead = data['topics:read'];\n\t\t\t\t\t\n\t\t\t\t\tif(!canRead)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn respondWithTranslation(uid, \"[[error:no-privileges]]\");;\n\t\t\t\t\t}\n\n\t\t\t\t\tTopics.getPids(tid, function(err, pids){\n\t\t\t\t\t\tposts.getPostsByPids(pids, uid, function(err, posts){\n\t\t\t\t\t\t\tif (err)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\treturn respond(\"Error: Coulld not get Posts from topic\");\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar postsuids = [];\n\n\t\t\t\t\t\t\tfor(var i in posts)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tpostsuids.push(posts[i].uid);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tUser.getUsersFields(postsuids, [\"username\"], function(err, usernames){\n\t\t\t\t\t\t\t\tvar response = \"\";\n\t\t\t\t\t\t\t\tvar numPosts = 10;\n\t\t\t\t\t\t\t\tvar start = posts.length-numPosts > 0 ? posts.length-numPosts : 0;\n\t\t\t\t\t\t\t\tfor(var i=start; i<posts.length;i++)\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tvar username = usernames[i].username;\n\t\t\t\t\t\t\t\t\tvar content = posts[i].content;\n\t\t\t\t\t\t\t\t\tcontent = content.replace(/\\<[^\\>]*\\>/gi, \"\");\n\t\t\t\t\t\t\t\t\tvar tid = posts[i].tid;\n\t\t\t\t\t\t\t\t\tvar time = moment.unix(posts[i].timestamp / 1000).fromNow();\n\t\t\t\t\t\t\t\t\tresponse = content + \" \\n \" + time + \" by \" + username + \"\\n\\n\";\n\n\t\t\t\t\t\t\t\t\trespond(response);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\telse if (command[0].toLowerCase() == \"/bothelp\")\n            {\n                \n                 var response = \"I understand the following commands:\\n\"+\n                            \"/recent [<number>]\\t- list recent <number> posts.  (Default = 10)\\n\"+\n                            \"/r \\t\\t\\t<TopicId>  \\t- respond to forum topic <TopicId>\\n\"+\n                            \"/read \\t\\t <TopicId> \\t- read latest posts form Topic <TopicId>\\n\";\n                 respond(response);\n                            \n            }\n\t\t\telse respond (\"Sorry, I don't understand \"+command+\" please try again\");\n\t\t});\n\t}\n};\n\n\t\nTelegram.postSave = function(post) {\n\t\tpost = post.post;\n        var roomId= -plugin.config['roomId'];\n\t\tvar topicsOnly = plugin.config['topicsOnly'] || 'off';\n\t\tif (topicsOnly === 'off' || (topicsOnly === 'on' && post.isMain)) {\n\t\t\tvar content = post.content;\n           \n\n\t\t\tasync.parallel({\n\t\t\t\tuser: function(callback) {\n\t\t\t\t\tUser.getUserFields(post.uid, ['username', 'picture'], callback);\n\t\t\t\t},\n\t\t\t\ttopic: function(callback) {\n\t\t\t\t\tTopics.getTopicFields(post.tid, ['title', 'slug'], callback);\n\t\t\t\t},\n\t\t\t\tcategory: function(callback) {\n\t\t\t\t\tCategories.getCategoryFields(post.cid, ['name', 'bgColor'], callback);\n\t\t\t\t}\n\t\t\t}, function(err, data) {\n\t\t\t\tvar categories = JSON.parse(plugin.config['postCategories']);\n\t\t\t\tif (!categories || categories.indexOf(String(post.cid)) >= 0) {\n\t\t\t\t\t// Trim long posts:\n\t\t\t\t\tvar maxQuoteLength = plugin.config['maxLength'] || 1024;\n\t\t\t\t\tif (content.length > maxQuoteLength) { content = content.substring(0, maxQuoteLength) + '...'; }\n\n\t\t\t\t\t// Ensure absolute thumbnail URL:\n\t\t\t\t\tvar thumbnail = data.user.picture.match(/^\\//) ? forumURL + data.user.picture : data.user.picture;\n\n\t\t\t\t\t// Add custom message:\n\t\t\t\t\tvar messageContent = plugin.config['messageContent']+\"\\n\"+content;\n                    \n                         \n/*\n\t\t\t\t\t// Make the rich embed:\n\t\t\t\t\tvar embed = new Discord.RichEmbed()\n\t\t\t\t\t\t.setColor(data.category.bgColor)\n\t\t\t\t\t\t.setURL(forumURL + '/topic/' + data.topic.slug)\n\t\t\t\t\t\t.setTitle(data.category.name + ': ' + data.topic.title)\n\t\t\t\t\t\t.setDescription(content)\n\t\t\t\t\t\t.setFooter(data.user.username, thumbnail)\n\t\t\t\t\t\t.setTimestamp();\n*/\n\t\t\t\t\t// Send notification:\n\t\t\t\t\tif (bot) {\n                       bot.sendMessage(roomId,messageContent).catch(console.error);\n\t\t\t\t\t}\n\t\t\t\t\telse console.log (\"Telegram: No bot found:\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\nTelegram.getUserLanguage = function(uid, callback) {\n\tif (lang_cache && lang_cache.has(uid)) {\n\t\tcallback(null, lang_cache.get(uid));\n\t} else {\n\t\tUser.getSettings(uid, function(err, settings) {\n\t\t\tvar language = settings.language || meta.config.defaultLang || 'en_GB';\n\t\t\tcallback(null, language);\n\t\t\tlang_cache.set(uid, language);\n\t\t});\n\t}\n};\n\n/*  changed notification mechanism\nTelegram.pushNotification = function(data) {\n\n\tvar notifObj = data.notification;\n\tvar uids = data.uids;\n\n\tif (!Array.isArray(uids) || !uids.length || !notifObj)\n\t{\n\t\treturn;\n\t}\n\n\tif(notifObj.nid && notifObj.nid.indexOf(\"post_flag\") > -1)\n\t{\t// Disable notifications from flags.\n\t\treturn;\n\t}\n\n\t// Send notification for each user.\n\tuser.getUsersFields(uids, [\"telegramid\"], function(err, usersData){\n\n\t\tasync.eachSeries(usersData, function iterator(user, cb){\n\t\t\tvar telegramId = user.telegramid;\n\t\t\tvar uid = user.uid;\n\n\t\t\tasync.waterfall([\n\t\t\t\tfunction(next){\n\t\t\t\t\t// Get user language\n\t\t\t\t\tTelegram.getUserLanguage(uid, next);\n\t\t\t\t},\n\t\t\t\tfunction(lang, next) {\n\t\t\t\t\t// Prepare notification with the user language\n\t\t\t\t\tnotifObj.bodyLong = notifObj.bodyLong || '';\n\t\t\t\t\tnotifObj.bodyLong = S(notifObj.bodyLong).unescapeHTML().stripTags().unescapeHTML().s;\n\t\t\t\t\tasync.parallel({\n\t\t\t\t\t\ttitle: function(next) {\n\t\t\t\t\t\t\ttranslator.translate(notifObj.bodyShort, lang, function(translated) {\n\t\t\t\t\t\t\t\tnext(undefined, S(translated).stripTags().s);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tpostIndex: async.apply(posts.getPidIndex, notifObj.pid, notifObj.tid, ''),\n\t\t\t\t\t\ttopicSlug: async.apply(Topics.getTopicFieldByPid, 'slug', notifObj.pid)\n\t\t\t\t\t}, next);\n\t\t\t\t},\n\t\t\t\tfunction(data, next) {\n\t\t\t\t\t// Send notification\n\t\t\t\t\tvar title = data.title;\n\t\t\t\t\tvar url = nconf.get('url') + notifObj.path;\n\t\t\t\t\tvar body = title + \"\\n\\n\" + notifObj.bodyLong + \"\\n\\n\" + url;\n\n\t\t\t\t\twinston.verbose('[plugins/telegram] Sending notification to uid ' + uid);\n\t\t\t\t\tpubsub.publish('telegram:notification', {telegramId: telegramId, message: body});\n\n\t\t\t\t\tcb(); // Go next user in array (async.eachSeries)\n\t\t\t\t}\n\t\t\t]);\n\t\t});\n\t});\n};\n*/\n\n\n\nTelegram.addNavigation = function(custom_header, callback) {\n// Adding to admin menu access to see logs (*Añadimos al menu de admin el acceso a ver los registros)\n\tcustom_header.plugins.push({\n\t\troute: '/telegrambot',\n\t\ticon: '',\n\t\tname: 'Telegram Notifications'\n\t});\n\n\tcallback(null, custom_header);\n}\n\n\nTelegram.isLoggedIn = function(req, res, next) {\n\t// Check if user is logged in (for middleware)\n\tif (req.user && parseInt(req.user.uid, 10) > 0)\n\t{\n\t\tnext();\n\t}\n\telse\n\t{\n\t\tres.redirect('403');\n\t}\n}\n\nmodule.exports = Telegram;\n\n}(module));\n"]}