Advertisement
Namokonov

jsonpatch_telegram_bot_api

Oct 23rd, 2023
904
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const varsDict = {
  2.   chatType: "$..message.from.chat.type",
  3.  
  4.   callback_query_id: "$..callback_query.id",
  5.   callback_query_from_id: "$..callback_query.from.id",
  6.   callback_query_firstname: "$..callback_query.from.first_name",
  7.   callback_query_lastname: "$..callback_query.from.last_name",
  8.   callback_query_username: "$..callback_query.from.username",
  9.   callback_query_data: "$..callback_query.data",
  10.  
  11.   msg_id: "$..message.message_id",
  12.   msg_text: "$..message.text",
  13.  
  14.   reply_text: "$..reply_to_message.text",
  15.   from_user_id: "$..message.from.id",
  16.   from_username: "$..message.from.username",
  17.   from_lastname: "$..message.from.last_name",
  18.   from_firstname: "$..message.from.first_name",
  19.  
  20.   reply_msg_id: "$..message.reply_to_message.message_id",
  21.   reply_user_id: "$..message.reply_to_message.from.id",
  22.   reply_is_bot: "$..message.reply_to_message.from.is_bot",
  23.   reply_username: "$..message.reply_to_message.from.username",
  24.   reply_lastname: "$..message.reply_to_message.from.last_name",
  25.   reply_firstname: "$..message.reply_to_message.from.first_name",
  26.   reply_new_chat_member_id: "$.message.reply_to_message.new_chat_member.id",
  27.   reply_entities: "$..reply_to_message.entities",
  28.   reply_photo: "$..reply_to_message.photo",
  29.  
  30.   chat_id: "$..message.chat.id",
  31.   chat_username: "$..message.chat.username",
  32.   chat_title: "$..message.chat.title",
  33.   chat_type: '$..message.chat.type',
  34.  
  35.  
  36.   new_chat_member: "$..message.new_chat_member",
  37.  
  38.   new_chat_member_is_bot: "$..message.new_chat_member.is_bot",
  39.   new_chat_member_id: "$..message.new_chat_member.id",
  40.   new_chat_member_username: "$..message.new_chat_member.username",
  41.   new_chat_member_lastname: "$..message.new_chat_member.last_name",
  42.   new_chat_member_firstname: "$..message.new_chat_member.first_name",
  43.  
  44.   sender_chat_username: "$..message.sender_chat.username",
  45.  
  46.   entities: "$..message.entities",
  47.   caption: "$..message.caption",
  48.   caption_entities: "$..message.caption_entities",
  49.  
  50.   photo: "$..message.photo",
  51.  
  52.   edited_text: "$..edited_message.text",
  53.   edited_entities: "$..edited_message.entities",
  54.   edited_chat_id: "$..edited_message.chat.id",
  55.   edited_msg_id: "$..edited_message.message_id",
  56.   edited_from_user_id: "$..edited_message.from.id",
  57.   edited_from_username: "$..edited_message.from.username",
  58.   edited_from_lastname: "$..edited_message.from.last_name",
  59.   edited_from_firstname: "$..edited_message.from.first_name",
  60.   edited_chat_title: "$..edited_message.chat.title",
  61.  
  62.   forward_date: "$..message.forward_from"
  63.  
  64. }
  65.  
  66. function getget(e) {
  67.   let t = {}
  68.   for (x in varsDict) {
  69.     let value = jsonPath(e, varsDict[x])[0];
  70.     value ? t[x] = value : delete t[x];
  71.   }
  72.   return t;
  73. }
  74.  
  75. /* JSONPath 0.8.0 - XPath for JSON
  76.  *
  77.  * Copyright (c) 2007 Stefan Goessner (goessner.net)
  78.  * Licensed under the MIT (MIT-LICENSE.txt) licence.
  79.  */
  80. function jsonPath(obj, expr, arg) {
  81.   var P = {
  82.     resultType: arg && arg.resultType || "VALUE",
  83.     result: [],
  84.     normalize: function (expr) {
  85.       var subx = [];
  86.       return expr.replace(/[\['](\??\(.*?\))[\]']/g, function ($0, $1) { return "[#" + (subx.push($1) - 1) + "]"; })
  87.         .replace(/'?\.'?|\['?/g, ";")
  88.         .replace(/;;;|;;/g, ";..;")
  89.         .replace(/;$|'?\]|'$/g, "")
  90.         .replace(/#([0-9]+)/g, function ($0, $1) { return subx[$1]; });
  91.     },
  92.     asPath: function (path) {
  93.       var x = path.split(";"), p = "$";
  94.       for (var i = 1, n = x.length; i < n; i++)
  95.         p += /^[0-9*]+$/.test(x[i]) ? ("[" + x[i] + "]") : ("['" + x[i] + "']");
  96.       return p;
  97.     },
  98.     store: function (p, v) {
  99.       if (p) P.result[P.result.length] = P.resultType == "PATH" ? P.asPath(p) : v;
  100.       return !!p;
  101.     },
  102.     trace: function (expr, val, path) {
  103.       if (expr) {
  104.         var x = expr.split(";"), loc = x.shift();
  105.         x = x.join(";");
  106.         if (val && val.hasOwnProperty(loc))
  107.           P.trace(x, val[loc], path + ";" + loc);
  108.         else if (loc === "*")
  109.           P.walk(loc, x, val, path, function (m, l, x, v, p) { P.trace(m + ";" + x, v, p); });
  110.         else if (loc === "..") {
  111.           P.trace(x, val, path);
  112.           P.walk(loc, x, val, path, function (m, l, x, v, p) { typeof v[m] === "object" && P.trace("..;" + x, v[m], p + ";" + m); });
  113.         }
  114.         else if (/,/.test(loc)) { // [name1,name2,...]
  115.           for (var s = loc.split(/'?,'?/), i = 0, n = s.length; i < n; i++)
  116.             P.trace(s[i] + ";" + x, val, path);
  117.         }
  118.         else if (/^\(.*?\)$/.test(loc)) // [(expr)]
  119.           P.trace(P.eval(loc, val, path.substr(path.lastIndexOf(";") + 1)) + ";" + x, val, path);
  120.         else if (/^\?\(.*?\)$/.test(loc)) // [?(expr)]
  121.           P.walk(loc, x, val, path, function (m, l, x, v, p) { if (P.eval(l.replace(/^\?\((.*?)\)$/, "$1"), v[m], m)) P.trace(m + ";" + x, v, p); });
  122.         else if (/^(-?[0-9]*):(-?[0-9]*):?([0-9]*)$/.test(loc)) // [start:end:step]  phyton slice syntax
  123.           P.slice(loc, x, val, path);
  124.       }
  125.       else
  126.         P.store(path, val);
  127.     },
  128.     walk: function (loc, expr, val, path, f) {
  129.       if (val instanceof Array) {
  130.         for (var i = 0, n = val.length; i < n; i++)
  131.           if (i in val)
  132.             f(i, loc, expr, val, path);
  133.       }
  134.       else if (typeof val === "object") {
  135.         for (var m in val)
  136.           if (val.hasOwnProperty(m))
  137.             f(m, loc, expr, val, path);
  138.       }
  139.     },
  140.     slice: function (loc, expr, val, path) {
  141.       if (val instanceof Array) {
  142.         var len = val.length, start = 0, end = len, step = 1;
  143.         loc.replace(/^(-?[0-9]*):(-?[0-9]*):?(-?[0-9]*)$/g, function ($0, $1, $2, $3) { start = parseInt($1 || start); end = parseInt($2 || end); step = parseInt($3 || step); });
  144.         start = (start < 0) ? Math.max(0, start + len) : Math.min(len, start);
  145.         end = (end < 0) ? Math.max(0, end + len) : Math.min(len, end);
  146.         for (var i = start; i < end; i += step)
  147.           P.trace(i + ";" + expr, val, path);
  148.       }
  149.     },
  150.     eval: function (x, _v, _vname) {
  151.       try { return $ && _v && eval(x.replace(/@/g, "_v")); }
  152.       catch (e) { throw new SyntaxError("jsonPath: " + e.message + ": " + x.replace(/@/g, "_v").replace(/\^/g, "_a")); }
  153.     }
  154.   };
  155.  
  156.   var $ = obj;
  157.   if (expr && obj && (P.resultType == "VALUE" || P.resultType == "PATH")) {
  158.     P.trace(P.normalize(expr).replace(/^\$;/, ""), obj, "$");
  159.     return P.result.length ? P.result : false;
  160.   }
  161. }
  162.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement