«

Telegram Bot 高级应用 -集成其它服务 – 谷歌Youtube Data API 示例[第十集]

时间:2024-2-12 13:30     作者:7米网-域名管理专家     分类:





本视频是Telegram Bot 机器人编程系列的第十集。 本集介绍如何将Telegram 机器人和其它的服务集成, 本集用Youtube Data API 作为示例





代码.gs

function debugCode(){

 debug();

}

function doGet(e){

 return HtmlService.createHtmlOutput("Hello World!! No, this link should be hidden!!!");

 

//  return HtmlService.createHtmlOutputFromFile('Index');

}

function doPost(e){

 var body = JSON.parse(e.postData.contents);

 // 没有数据库的小伙伴可以删除以下这行

 mongo.insert(logColl, body);

 

 var payload = preparePayload(body);

 

 var payloads;

 if (Array.isArray(payload)){

   payloads = payload;

 } else {

   payloads = [payload]

 }

 for (var i = 0; i < payloads.length; i++){

   payload = payloads[i];

   if (payload){

     var res = postTelegram(payload);

   }

 }

}

function postTelegram(payload) {

 var data = {

   'contentType': 'application/json',

   "method": "post",

   "payload": JSON.stringify(payload)

 }

 // 没有数据库的小伙伴可以删除以下这行

 mongo.insert("to-telegram", payload);

 var response = UrlFetchApp.fetch("https://api.telegram.org/bot682267360:AAHmjSil8oylavD2pENLLpcMU1svaD7mVeA/", data);

 var res = JSON.parse(response);

 // 没有数据库的小伙伴可以删除以下这行

 mongo.insert("telegram-response", res);

 return res;

}

function getName(user) {

 var name = user.first_name;

 if (user.last_name) {

   name += " " + user.last_name;

 }

 return name;

}

function escapeMarkDown(toEscapeMsg) {

 var escapedMsg = toEscapeMsg

 .replace(/_/g, "\\_")

 .replace(/\*/g, "\\*")

 .replace(/\[/g, "\\[")

 .replace(/`/g, "\\`");

   return escapedMsg;

}

function getMentionName(user) {

 var username = user.username;

 var mentionName = "";

 var name = getName(user);

 if (!name) {

   name = "神秘人";

 }

 // if (!username) {

   mentionName = getMarkDownUserUrl(escapeMarkDown(name), user.id);

 // } else {

 //   mentionName = "[" + escapeMarkDown(name) + "](@" + escapeMarkDown(username) + ")";

 // }

 return mentionName;

}

function getMarkDownUserUrl(userName, userId) {

 return "[" + userName + "](tg://user?id=" + userId + ")";

}

function getLastWelcomeMessage(){

 var regex = "欢迎加入本群";

 var regexSearch = { "$regex": regex, "$options": 'i' };

 var searchString = {"result.text": regexSearch};

 

 var q = JSON.stringify(searchString);

 

 var sortObject = {

   "result.date": -1

 };

 

 var s = JSON.stringify(sortObject);

 

 var httpQuery = "q=" + q + "&s=" + s + "&l=1";

 

 var lastWelcomeMessage = mongo.get("telegram-response", httpQuery);

 return lastWelcomeMessage;

}

function preparePayload(body){

 var payload;

 

 if (body.message) {

   body.message.chat.id = body.message.chat.id + '';

 }

 

 if (body.callback_query) {

    payload = {

       "method": "sendMessage",

       "chat_id": body.callback_query.message.chat.id,

       "text": "这是一个 callback",

       "parse_mode": "Markdown",

       "disable_web_page_preview": true,

     };

     

     

     

     if(body.callback_query.data.indexOf("/help") === 0){

       payload.text += ": " + body.callback_query.data;

     }

     

     if(body.callback_query.data.indexOf("nihao") === 0){

       payload.text = "你好";

     }

     

     if(body.callback_query.data.indexOf("update") === 0){

     

       payload = {

         "method": "editMessageText",

         "chat_id": body.callback_query.message.chat.id,

         "message_id": body.callback_query.message.message_id,

         "text": "",

         "parse_mode": "markdown",

         "disable_web_page_preview": false,

       };

       payload.text = "原消息被更新了";

     }

     

     return payload;

 

 }

 

 if (body.message.new_chat_member) {

    payload = {

       "method": "sendMessage",

       "chat_id": body.message.chat.id,

       "text": "你好, 欢迎加入本群",

       "parse_mode": "Markdown",

       "disable_web_page_preview": true,

     }

     

     payload.text = "你好!" + getMentionName(body.message.new_chat_member) + ", 欢迎加入本群";

                 

     

     

     var payloads = [];

     payloads.push(payload);

     

     var lastWelcomeMessage = getLastWelcomeMessage();

     if (lastWelcomeMessage.length == 1){

       var messageId = lastWelcomeMessage[0].result.message_id;

       var payload2 = {

             "method": "deleteMessage",

             "message_id": messageId,

             "chat_id": body.message.chat.id

           };

           

       payloads.push(payload2);            

     }

     

     

     return payloads;

 }

 

 if (body.message.left_chat_member) {

    payload = {

       "method": "sendMessage",

       "chat_id": body.message.chat.id,

       "text": "你好, 欢迎加入本群",

       "parse_mode": "Markdown",

       "disable_web_page_preview": true,

     }

     

     payload.text = getMentionName(body.message.left_chat_member) + "君, 一路走好!";

     return payload;

 }

 

  if (body.message.pinned_message) {

   payload = {

       "method": "sendMessage",

       "chat_id": body.message.chat.id,

       "text": "你好, 欢迎加入本群",

       "parse_mode": "Markdown",

       "disable_web_page_preview": true,

     }

   var whoPinned = getName(body.message.from);

   var whoOwned = getName(body.message.pinned_message.from);

   payload.text = whoPinned + "置顶了消息:\n\n" + body.message.pinned_message.text

     + "\n\n"

     + "本BOT代表" + whoOwned + "感谢您"

     ;

   return payload;

 }

 

 

 if (body.message.text){

 

 //谢谢 kba977 指出这个错误

 

     var origParas = body.message.text.trim().split(" ");

     origParas = origParas.filter(function(origPara){

       if (origPara){

         return true;

       }

     });

     

     body.message.text = body.message.text.toLowerCase();

     body.message.text = body.message.text.replace(/@temptestbot2/g, '');

     

     var paras = body.message.text.trim().split(" ");

     // remove empty strings

     paras = paras.filter(function(para){

       if (para){

         return true;

       }

     });

       

 

     payload = {

       "method": "sendMessage",

       "chat_id": body.message.chat.id,

       "text": "你好, 欢迎使用本机器人, 本机器人现在只认识颜色。",

       "parse_mode": "Markdown",

       "disable_web_page_preview": true,

     }

     

     if(body.message.text.indexOf("/removekeyboard") === 0){

       var replyKeyboardRemove = {

         remove_keyboard: true,

         selective: false

       };

       payload.reply_markup = replyKeyboardRemove;

       return payload;

     }

     

     if(body.message.text.indexOf("/help") === 0){

        var mentionName = getMentionName(body.message.from);

        payload.text = "您好!" + mentionName + "! ";

        payload.text += "欢迎使用本机器人, 本机器人现在只认识颜色。";

                 

        var command9 = [

          "/colors",

          "/list",

        ];

         

         var replyKeyboardMarkup = {};

         replyKeyboardMarkup.keyboard = [];

         replyKeyboardMarkup.resize_keyboard = false;

         replyKeyboardMarkup.one_time_keyboard = true;

         replyKeyboardMarkup.selective = true;

         

         var count = 0;

         for (var i = 0; i < command9.length / 3; i++) {

           var keyboardRow = [];

           for (var j = 0; j < 3; j++) {

             var keyboardButton = {

               text: command9[i * 3 + j],

             };

             count++;

             keyboardRow.push(keyboardButton);

             if (count >= command9.length) {

               break;

             }

             

           }

           replyKeyboardMarkup.keyboard.push(keyboardRow);

         }

         payload.reply_markup = replyKeyboardMarkup;

             

         

        return payload;

     }

     

     if(body.message.text.indexOf("/colors") === 0){  

        payload.text = "红\n黄\n蓝";        

        return payload;

     }

     

      if(body.message.text.indexOf("/searchvideo") === 0){  

        if (paras[1]){

            var videoId = origParas[1];

            var videos = videosListById('snippet,contentDetails,statistics', {'id': videoId});

            var video = videos.items[0];

            payload.text = "标题: " + video.snippet.title + "\n";

            return payload;

        }

        payload.text = "请提供视频ID";        

        return payload;

     }

     

     if(body.message.text.indexOf("/list") === 0){

        if (paras[1]){

          switch (paras[1].toLowerCase()){

            case "people":  

              if (paras[2]){

                if ("JS神技能".toLowerCase().indexOf(paras[2]) >= 0){

                  payload.text = "JS神技能 - https://www.youtube.com/";

                }

                if ("悟空的日常".toLowerCase().indexOf(paras[2]) >= 0){

                  payload.text = "悟空的日常 - https://www.youtube.com/";

                }

                if ("YuFeng Deng".toLowerCase().indexOf(paras[2]) >= 0){

                  payload.text = "YuFeng Deng - https://www.youtube.com";

                }

              } else {                

                payload.text = "JS神技能\n"

                  + "悟空的日常\n"

                  + "YuFeng Deng\n";        

                  return payload;

               }

              break;

            default:  

              payload.text = "红\n黄\n蓝";            

            break;

          }

               

          return payload;

        } else {        

          payload.text = "*JS神技能*\n"

            + "[悟空的日常](https://www.youtube.com/)\n"

            + "[*YuFeng Deng*](https://www.youtube.com/)\n"

            + "_YuFeng Deng_\n"

            + "`01|" + "UCii04BCvYIdQvshrdNDAcww" + " | `\n"

            + "`02|" + "UCG6xoef2xU86hnrCsS5m5Cw" + " | `\n"

            + "```javascript\n"

            + 'payload = {\n'

            + '    "method": "sendMessage",\n'

            + '    "chat_id": body.message.chat.id,\n'

            + '    "text": body.message.text,\n'

            + '}'

            + "```"

            ;

                       

           var inlineKeyboardMarkup = {};

           inlineKeyboardMarkup.inline_keyboard = [];

           var keyboardRow = [];

           var keyboardButton1 = {

               text: "Help",

               callback_data: "/help"

           };

           

           var keyboardButton2 = {

               text: "按钮2",

               callback_data: "nihao"

           };

           

           var keyboardRow2 = [];

           var keyboardButton3 = {

               text: "升级原消息",

               callback_data: "update"

           };

           

           var keyboardButton4 = {

               text: "按钮4",

               url: "https://www.google.com"

           };

           keyboardRow.push(keyboardButton1);

           keyboardRow.push(keyboardButton2);

           

           keyboardRow2.push(keyboardButton3);

           keyboardRow2.push(keyboardButton4);

           inlineKeyboardMarkup.inline_keyboard.push(keyboardRow);

           inlineKeyboardMarkup.inline_keyboard.push(keyboardRow2);

           payload.reply_markup = inlineKeyboardMarkup;

       

          var payloads = [];

           

          var payload2 = {};

           

          var payloadStr = JSON.stringify(payload);

          payload2 = JSON.parse(payloadStr);

       

          payloads.push(payload);

      //    payloads.push(payload2);

       

          return payloads;

        }

     }

     

 

     payload = {

         "method": "sendMessage",

         "chat_id": body.message.chat.id,

         "text": body.message.text,

     }

   

 }

 else if (body.message.sticker){

   payload = {

     "method": "sendSticker",

     "chat_id": body.message.chat.id,

     "sticker": body.message.sticker.file_id

   }

  }

 else if (body.message.photo){

   array = body.message.photo;

   text = array[1];

   payload = {

     "method": "sendPhoto",

     "chat_id": body.message.chat.id,

     "photo": text.file_id

   }

  }

   else {

   payload = {

     "method": "sendMessage",

     "chat_id": body.message.chat.id,

     "text": "Try other stuff"

   }

  }

 return payload

}

代码Mlab.gs

var baseUrl = "https://api.mlab.com/api/1/";

var dbUrl = baseUrl + "databases/mongo/";

var collectionUrl = dbUrl + "collections/";

var logColl = "logs";

var mongo = {};

function debugMLab(){

 debug();

}

function testMLab(){

 var testObject = {"name": "峰哥"};

 mongo.insert(logColl, testObject);

}

function testMLab2() {

 var query = {"message.from.id": 539065210};

 var q = JSON.stringify(query);

 var a = mongo.get(logColl, "q=" + q);

 var b = a[0];

 Logger.log(a);

}

function testMLab3() {

 mongo.put(logColl, null, []);

}

mongo.insert = function(collection, data) {

 var db = apendAPI(collectionUrl + collection);

 var option = getInsertOption(data);

  Logger.log(data);

 var response = UrlFetchApp.fetch(db, option);

//  Logger.log(response);

  Logger.log(data);

}

mongo.update = function(collection, query, set) {

 var db = apendAPI(collectionUrl + collection);

 db += "&" + query + "&m=true&u=true";

 var option = getPutOption(set);

 UrlFetchApp.fetch(db, option);

}

// Warning, put will override the whole collectoin, put empty array data will clear the whole collection

mongo.put = function(collection, query, data) {

 var db = apendAPI(collectionUrl + collection);

 if (query){

   db += "&" + query;

 }

 var option = getPutOption(data);

 var url = encodeURI(db);

 UrlFetchApp.fetch(url, option);

}

mongo.get = function(collection, query) {

 var db = apendAPI(collectionUrl + collection);

 if (query){

   db += "&" + query;

 }

 var option = getGetOption();

 var response = UrlFetchApp.fetch(encodeURI(db), option);

 return JSON.parse(response);

}

function apendAPI(url){

 return url + "?apiKey=WULdZqaqxqikzrGePcLC5uWBeyvGZqBp";

}

function getInsertOption(data){

 var option = {

   "method": "post",

   'contentType': 'application/json',

//    "muteHttpExceptions": true,

   "payload": JSON.stringify(data)

 }

 return option;

}

function getPutOption(data){

 var option = {

   "method": "put",

   'contentType': 'application/json',

   "payload": JSON.stringify(data)

 }

 return option;

}

function getGetOption(){

 var option = {

   "method": "get",

 }

 return option;

}




代码Youtube.gs

/****** START BOILERPLATE CODE ******/

// <b>Note:</b> Apps Script automatically requests authorization

// based on the API's used in the code.

// Build an object from an object containing properties as key-value pairs

function createResource(properties) {

 var res = {};

 var normalizedProps = {};

 for (var p in properties) {

   var value = properties[p];

   if (p.substr(-2, 2) == '[]' && value) {

     var adjustedName = p.replace('[]', '');

     normalizedProps[adjustedName] = value.split(',');

   } else {

     normalizedProps[p] = value;

   }

 }

 for (var p in normalizedProps) {

   if (normalizedProps.hasOwnProperty(p) && normalizedProps[p]) {

     var propArray = p.split('.');

     var ref = res;

     for (var pa = 0; pa < propArray.length; pa++) {

       var key = propArray[pa];

       if (pa == propArray.length - 1) {

         ref[key] = normalizedProps[p];

       } else {

         ref = ref[key] = ref[key] || {};

       }

     }

   };

 }

 return res;

}

// Remove parameters that don't have values before sending API request

function removeEmptyParams(params) {

 for (var p in params) {

   if (!params[p] || params[p] == 'undefined') {

     delete params[p];

   }

 }

 return params;

}

// Sample Apps Script code for printing API response data

function printResults(response) {

 Logger.log(response);

}

/***** END BOILERPLATE CODE *****/

// Sample appsscript code for videos.list

function videosListById(part, params) {

 params = removeEmptyParams(params); // See full sample for function

 var response = YouTube.Videos.list(part,

     params);

 printResults(response);

 return response;

}

function TestYoutube() {

 videosListById('snippet,contentDetails,statistics', {'id': 'Ks-_Mh1QhMc'});

}

 




代码Test.gs

var testList = '{"update_id":427274836,"message":{"message_id":173,"from":{"id":539065210,"is_bot":false,"first_name":"Yufeng Deng","last_name":"峰哥","username":"fennng","language_code":"en-US"},"chat":{"id":539065210,"first_name":"Yufeng Deng","last_name":"峰哥","username":"fennng","type":"private"},"date":1538193751,"text":"/list","entities":[{"offset":0,"length":5,"type":"bot_command"}]}}';

var testList2 = '{"update_id":427275035,"message":{"message_id":211,"from":{"id":539065210,"is_bot":false,"first_name":"Yufeng Deng","last_name":"峰哥","username":"fennng","language_code":"en-US"},"chat":{"id":"539065210","first_name":"Yufeng Deng","last_name":"峰哥","username":"fennng","type":"private"},"date":1540807486,"text":"/help","entities":[{"offset":0,"length":5,"type":"bot_command"}]}}';

var testSearchVideo = '{"update_id":427275035,"message":{"message_id":211,"from":{"id":539065210,"is_bot":false,"first_name":"Yufeng Deng","last_name":"峰哥","username":"fennng","language_code":"en-US"},"chat":{"id":"539065210","first_name":"Yufeng Deng","last_name":"峰哥","username":"fennng","type":"private"},"date":1540807486,"text":"/searchVideo Ri938AvTOGc","entities":[{"offset":0,"length":5,"type":"bot_command"}]}}';

var isDebug = false;

function debug() {

 e = {};

 e.postData = {};

 e.postData.contents = testSearchVideo;

 doPost(e);

}







版权所有:7米网-域名管理专家
文章标题:Telegram Bot 高级应用 -集成其它服务 – 谷歌Youtube Data API 示例[第十集]
除非注明,文章均为 7米网-域名管理专家 原创,转载请注明作者和出处 7米网-域名管理专家
取消
微信二维码
微信二维码
支付宝二维码