Tags: Telegram, 机器人, 聊天机器人,机器人编程,机器人代码, Telegram代码,Telegram Bot, Telegram编程
本视频是Telegram Bot 机器人编程系列的第七集。 本集介绍如何在谷歌 Google App Scripts 中使用Mongo Db 数据库。 Mongo DB做为文档数据库, 数据的格式为JSON, 也就是和我们机器人处理的消息是同样的格式, 非常的方便, 而且大家也不用学SQL啦。
相关的代码请翻到下面
免费数据库申请
https://mlab.com/
下期预告:
Telegram Bot 使用快捷按钮Inline Button, Reply Button和用户交互[第八集]
-~-~~-~~~-~~-~-
本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用KODI看电影等等. 同时我也会分享一些编程的教程, 如编写Telegram机器人, 建站等。 点击进入我的频道: goo.gl/5tyxcf
🔷 订阅我的频道: goo.gl/KuF3bY
🔷 telegram电报群: t.me/fengsharegroup
🔷 我的博客: www.dengnz.com/blog
🔷 Facebook: www.facebook.com/fengnz
🔷 Twitter: https://twitter.com/fennng
觉得我的视频对你帮助很大的话, 请我喝杯咖啡吧
微信赞赏码: goo.gl/uKoE8w
-~-~~-~~~-~~-~-
mongo express 建站代码(可选)
docker run -it --rm ^ --name mongo-express ^ -p 8082:8081 ^ -e ME_CONFIG_MONGODB_PORT="端口" ^ -e ME_CONFIG_MONGODB_SERVER="服务器链接" ^ -e ME_CONFIG_MONGODB_AUTH_DATABASE="mongo" ^ -e ME_CONFIG_MONGODB_AUTH_USERNAME="用户名" ^ -e ME_CONFIG_MONGODB_AUTH_PASSWORD="密码" ^ -e ME_CONFIG_MONGODB_ENABLE_ADMIN="false" ^ mongo-express
代码.gs
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); body.message.chat.id = body.message.chat.id + ''; mongo.insert(logColl, body); var payload = preparePayload(body); var data = { "method": "post", "contentType": 'application/json', "payload": JSON.stringify(payload), } mongo.insert("to-telegram", payload); UrlFetchApp.fetch("https://api.telegram.org/bot682267360:AAHmjSil8oylavD2pENLLpcMU1svaD7mVeA/", data); } 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 preparePayload(body){ var 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) + ", 欢迎加入本群"; return payload; } 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; } 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; } }); if (body.message.text){ payload = { "method": "sendMessage", "chat_id": body.message.chat.id, "text": "你好, 欢迎使用本机器人, 本机器人现在只认识颜色。", "parse_mode": "Markdown", "disable_web_page_preview": true, } if(body.message.text.indexOf("/help") === 0){ payload.text = "你好, 欢迎使用本机器人, 本机器人现在只认识颜色。"; return payload; } if(body.message.text.indexOf("/colors") === 0){ payload.text = "红\n黄\n蓝"; 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/channel/UC6tPP3jOTKgjqfDgqMsaG4g"; } if ("悟空的日常".toLowerCase().indexOf(paras[2]) >= 0){ payload.text = "悟空的日常 - https://www.youtube.com/channel/UCii04BCvYIdQvshrdNDAcww"; } if ("YuFeng Deng".toLowerCase().indexOf(paras[2]) >= 0){ payload.text = "YuFeng Deng - https://www.youtube.com/channel/UCG6xoef2xU86hnrCsS5m5Cw"; } } 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/channel/UCii04BCvYIdQvshrdNDAcww)\n" + "[*YuFeng Deng*](https://www.youtube.com/channel/UCG6xoef2xU86hnrCsS5m5Cw)\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: "按钮1", url: "https://www.google.com" }; var keyboardButton2 = { text: "按钮2", url: "https://www.google.com" }; var keyboardRow2 = []; var keyboardButton3 = { text: "按钮3", url: "https://www.google.com" }; 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; return payload; } } 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 }
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":"/list","entities":[{"offset":0,"length":5,"type":"bot_command"}]}}'; var isDebug = false; function debug() { e = {}; e.postData = {}; e.postData.contents = testList2; doPost(e); }
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; }
峰哥,这个数据库不能用了。怎么弄啊。
峰哥,请问一下mlab这个数据库介面及设定已经大改版了,是否可以拍一个更新版本的设定教学呢?
刚学到Telegram Bot连接数据库,想继续与峰哥学习下去。
同问
请看另一个方法
https://youtu.be/ft0YjW86bwU
直接用mangoDB可以吗?
用 google app script 的话,必须经过 restful 连接, 所以直接用 mongo db 是不行的, 可以用 restheart 或者直接用 mongo altas 的 API