机器人 Archives - 峰哥分享 https://www.dengnz.com/tag/机器人/ 昨天,今天,明天,每天的每天,都多懂一点点... Mon, 12 Sep 2022 03:58:28 +0000 zh-CN hourly 1 https://wordpress.org/?v=6.5.4 https://www.dengnz.com/wp-content/uploads/2020/02/cropped-logo-32x32.png 机器人 Archives - 峰哥分享 https://www.dengnz.com/tag/机器人/ 32 32 Telegram Bot 使用Cloudflare CF worker 制作回声机器人 [第二集番外] https://www.dengnz.com/2019/10/07/telegram-bot-%e4%bd%bf%e7%94%a8cloudflare-cf-worker-%e5%88%b6%e4%bd%9c%e5%9b%9e%e5%a3%b0%e6%9c%ba%e5%99%a8%e4%ba%ba-%e7%ac%ac%e4%ba%8c%e9%9b%86%e7%95%aa%e5%a4%96/ https://www.dengnz.com/2019/10/07/telegram-bot-%e4%bd%bf%e7%94%a8cloudflare-cf-worker-%e5%88%b6%e4%bd%9c%e5%9b%9e%e5%a3%b0%e6%9c%ba%e5%99%a8%e4%ba%ba-%e7%ac%ac%e4%ba%8c%e9%9b%86%e7%95%aa%e5%a4%96/?noamp=mobile#respond Sun, 06 Oct 2019 21:22:45 +0000 https://www.dengnz.com/?p=2053 第二集的视频在这里 整个系列的视频请点视频右上角的感叹号. 哈喽, 大家好, 欢迎来到峰哥分享, 我是峰哥. … 阅读更多 »Telegram Bot 使用Cloudflare CF worker 制作回声机器人 [第二集番外]

The post Telegram Bot 使用Cloudflare CF worker 制作回声机器人 [第二集番外] appeared first on 峰哥分享.

]]>

第二集的视频在这里

整个系列的视频请点视频右上角的感叹号.

哈喽, 大家好, 欢迎来到峰哥分享, 我是峰哥.

最近咳嗽的老毛病又犯了, 基本没办法讲话.

所以今天这个视频就打字好了.

今天我来介绍一下怎么样在Cloudflare 上用worker 来创建一个Telegram bot 的聊天机器人.

当然是最简单的机器人, 只能简单的回复文字, 而且还是同样的汤姆猫机器人, 就是你说什么, 它就说什么.

之前出的教程是在谷歌的 app script 上面的, 其实代码都是JS, 所以把我的GAS (google app script)
的教程拿在 cf worker 上面, 也是差不了多少.

所以, 今天就来教大家做一个最基础的机器人, 剩下的, 小伙伴们再看我的telegram bot的教程, 应该就能看明白了.

好吧, 开始教程!

首先, 我们需要创建一个机器人, 这个就直接看我的TG教程系列的第一集就可以了.

机器人申请好了, 我们来加一下 cf worker 的代码

还没有cloudflare 帐号的小伙伴自己注册一下, 这个很简单,我就不多介绍了.

自己到以下网址注册

https://dash.cloudflare.com/sign-up

然后登录

新建一个 worker 脚本

新建完脚本以后, 是一个简单的hello world 网页, 直接就是工作的.

通过 save and deploy 发布这个网站

到以下这个网址去抄网方的示例POST代码
https://developers.cloudflare.com/workers/templates/snippets/post_data/

抄来的代码最后那段HTML不要, 然后 save and deploy 就可以开作了

只是简单的显示了 The request was a GET

现在我来加入机器人的代码, 只有简单的几行, 非常容易!

粘贴完这段代码

let bodyString = await readRequestBody(request)

try {

let body = JSON.parse(bodyString);

const init = {
headers: { ‘content-type’: ‘application/json’ },
}

if (body.message) {
let payload = {
“method”: “sendMessage”,
“chat_id”: body.message.chat.id,
“text”: “Only echo back text”,
“parse_mode”: “markdown”,
“disable_web_page_preview”: true,
};
if (body.message.text) {
payload.text = body.message.text;

const myInit = {
method: ‘POST’,
headers: {
‘Content-Type’: ‘application/json’
},
body: JSON.stringify(payload)
};

let myRequest = new
Request(“https://api.telegram.org/bot682267360:AAHmjSil8oylavD2pENLLpcMU1svaD7mVeA/”,
myInit)

//let myRequest = new Request(“https://eaa874bb.ngrok.io”, myInit)
fetch(myRequest).then(x=> {
console.log(x);

});

return new Response(“OK”)
} else {
return new Response(“OK”)
}

} else {
return new Response(JSON.stringify(body), init)
}

}catch(e){
return new Response(e)
}

注册刚才高亮的那段代码, 其中的网址是以下这段, 这里面从bot 开始, 就是机器人的token
https://api.telegram.org/bot682267360:AAHmjSil8oylavD2pENLLpcMU1svaD7mVeA/

注意后面那个 / 非常重要, 不能省略

好了, 现在发布改过的代码

发布完成后, 我们需要绑定机器人, 机器人的网址在这里

https://raspy-sun-ed74.fennng.workers.dev/

为了预防成一, 我们把这个网址做一下 urlencode

网上随便找一个在线的 url encoder , encoder 完是以下的样子

https%3A%2F%2Fraspy-sun-ed74.fennng.workers.dev%2F

现在找到绑定机器人的链接,以下这段是设置机器人的链接, 前面 https://api.telegram.org/bot 这段是固定的,

中间这段 682267360:AAHmjSil8oylavD2pENLLpcMU1svaD7mVeA 是机器人的 token

后面这段是设置机器人链接的方法 /setWebhook?url=

所以我们要把机器人后台链接放在这个链接的最后面

https://api.telegram.org/bot682267360:AAHmjSil8oylavD2pENLLpcMU1svaD7mVeA/setWebhook?url=https%3A%2F%2Fraspy-sun-ed74.fennng.workers.dev%2F

粘贴完后是上面这个样子

现在把这个链接放在浏览器的地址栏打开, 看到以下这个就是绑定成功

{“ok”:true,”result”:true,”description”:”Webhook was set”}

现在我们去试下机器人

工作, 发布成功.

现在来随便改点东西, 简单的加了个签名, 现在再去看看

成功的改了….

很简单吧, 机器人的创建看第一集. 然后, 其它机器人的功能看我关于 谷歌app script 的教程就行了, 差不了多少.

注意的是, cf worker 的 fetch 是 promise, 这点和gas 有很大不同…做简单的机器人可以先不理会. 跟着我的代码写就行了.

好了, 今天的教程就到这里, 喜欢这个视频的话, 不要忘了点赞,订阅还有转发!

谢谢大家. 我们下载再见!

-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用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
-~-~~-~~~-~~-~-

The post Telegram Bot 使用Cloudflare CF worker 制作回声机器人 [第二集番外] appeared first on 峰哥分享.

]]>
https://www.dengnz.com/2019/10/07/telegram-bot-%e4%bd%bf%e7%94%a8cloudflare-cf-worker-%e5%88%b6%e4%bd%9c%e5%9b%9e%e5%a3%b0%e6%9c%ba%e5%99%a8%e4%ba%ba-%e7%ac%ac%e4%ba%8c%e9%9b%86%e7%95%aa%e5%a4%96/feed/ 0
Telegram Bot 回声机器人代码详解[第二集半] https://www.dengnz.com/2019/09/08/telegram-bot-%e5%9b%9e%e5%a3%b0%e6%9c%ba%e5%99%a8%e4%ba%ba%e4%bb%a3%e7%a0%81%e8%af%a6%e8%a7%a3%e7%ac%ac%e4%ba%8c%e9%9b%86%e5%8d%8a/ https://www.dengnz.com/2019/09/08/telegram-bot-%e5%9b%9e%e5%a3%b0%e6%9c%ba%e5%99%a8%e4%ba%ba%e4%bb%a3%e7%a0%81%e8%af%a6%e8%a7%a3%e7%ac%ac%e4%ba%8c%e9%9b%86%e5%8d%8a/?noamp=mobile#respond Sat, 07 Sep 2019 14:04:19 +0000 https://www.dengnz.com/?p=2034 本视频由观众投稿, 是对Telegram 机器人编程系列第二集汤姆猫内容的补充. 本视频详细介绍了第二集里面的… 阅读更多 »Telegram Bot 回声机器人代码详解[第二集半]

The post Telegram Bot 回声机器人代码详解[第二集半] appeared first on 峰哥分享.

]]>

本视频由观众投稿, 是对Telegram 机器人编程系列第二集汤姆猫内容的补充. 本视频详细介绍了第二集里面的代码意思. 感觉投稿的小伙伴. 我一直以为是个小伙子, 看到视频才知道是个美少女! 汗!!

第二集的视频在这里

整个系列的视频请点视频右上角的感叹号.

-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用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
-~-~~-~~~-~~-~-

The post Telegram Bot 回声机器人代码详解[第二集半] appeared first on 峰哥分享.

]]>
https://www.dengnz.com/2019/09/08/telegram-bot-%e5%9b%9e%e5%a3%b0%e6%9c%ba%e5%99%a8%e4%ba%ba%e4%bb%a3%e7%a0%81%e8%af%a6%e8%a7%a3%e7%ac%ac%e4%ba%8c%e9%9b%86%e5%8d%8a/feed/ 0
Telegram聊天软件 如何用机器人自动回复,回答常见问题, 删除脏话,踢人,禁言,警告用户等 (支持图片和动图) https://www.dengnz.com/2019/06/09/telegram%e8%81%8a%e5%a4%a9%e8%bd%af%e4%bb%b6-%e5%a6%82%e4%bd%95%e7%94%a8%e6%9c%ba%e5%99%a8%e4%ba%ba%e8%87%aa%e5%8a%a8%e5%9b%9e%e5%a4%8d%ef%bc%8c%e5%9b%9e%e7%ad%94%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98/ https://www.dengnz.com/2019/06/09/telegram%e8%81%8a%e5%a4%a9%e8%bd%af%e4%bb%b6-%e5%a6%82%e4%bd%95%e7%94%a8%e6%9c%ba%e5%99%a8%e4%ba%ba%e8%87%aa%e5%8a%a8%e5%9b%9e%e5%a4%8d%ef%bc%8c%e5%9b%9e%e7%ad%94%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98/?noamp=mobile#comments Sat, 08 Jun 2019 23:30:29 +0000 http://www.dengnz.com/?p=1860 群主秘书:@FengFaqBot 统计秘书:@FengStatsBot TG交流群:https://t.me/… 阅读更多 »Telegram聊天软件 如何用机器人自动回复,回答常见问题, 删除脏话,踢人,禁言,警告用户等 (支持图片和动图)

The post Telegram聊天软件 如何用机器人自动回复,回答常见问题, 删除脏话,踢人,禁言,警告用户等 (支持图片和动图) appeared first on 峰哥分享.

]]>

群主秘书:@FengFaqBot

统计秘书:@FengStatsBot

TG交流群:https://t.me/fengsharegroup

 

这个机器人其实写了很久了, 一直没空给它写一个教程。 这个机器人比它表面上看去要强大得多, 所以出个视频教程是非常有必要的。

 

 

今天这个视频会演示以下几个功能:

 

The post Telegram聊天软件 如何用机器人自动回复,回答常见问题, 删除脏话,踢人,禁言,警告用户等 (支持图片和动图) appeared first on 峰哥分享.

]]>
https://www.dengnz.com/2019/06/09/telegram%e8%81%8a%e5%a4%a9%e8%bd%af%e4%bb%b6-%e5%a6%82%e4%bd%95%e7%94%a8%e6%9c%ba%e5%99%a8%e4%ba%ba%e8%87%aa%e5%8a%a8%e5%9b%9e%e5%a4%8d%ef%bc%8c%e5%9b%9e%e7%ad%94%e5%b8%b8%e8%a7%81%e9%97%ae%e9%a2%98/feed/ 1
Telegram Bot 电报聊天机器人连接 RestHeart MongoDB 数据库 https://www.dengnz.com/2019/03/23/telegram-bot-%e7%94%b5%e6%8a%a5%e8%81%8a%e5%a4%a9%e6%9c%ba%e5%99%a8%e4%ba%ba%e8%bf%9e%e6%8e%a5-restheart-mongodb-%e6%95%b0%e6%8d%ae%e5%ba%93/ https://www.dengnz.com/2019/03/23/telegram-bot-%e7%94%b5%e6%8a%a5%e8%81%8a%e5%a4%a9%e6%9c%ba%e5%99%a8%e4%ba%ba%e8%bf%9e%e6%8e%a5-restheart-mongodb-%e6%95%b0%e6%8d%ae%e5%ba%93/?noamp=mobile#comments Fri, 22 Mar 2019 11:42:54 +0000 https://www.dengnz.com/?p=1656 本视频是Telegram Bot 机器人编程系列的第十三集。 本集介绍如何使用机器人来连接 RestHeart… 阅读更多 »Telegram Bot 电报聊天机器人连接 RestHeart MongoDB 数据库

The post Telegram Bot 电报聊天机器人连接 RestHeart MongoDB 数据库 appeared first on 峰哥分享.

]]>

本视频是Telegram Bot 机器人编程系列的第十三集。 本集介绍如何使用机器人来连接 RestHeart Mongo DB.

相关的代码请到翻到下面

-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用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
-~-~~-~~~-~~-~-

本集只提供新的 Restheart.gs 文件, 其它文件请看之前的视频, 跳着看是不行地

var mongo;
var restheart = {};
var restheartUrl = "https://restheart.dengnz.com/user2/";

restheart.insert = function(collection, data) {
    var db = restheartUrl + collection;
    var option = getInsertOption(data);
    var response = UrlFetchApp.fetch(db, option);
};

function testRestHeart(){
    //  restheart.replace("to-telegram", null, {desc: "record all message send
    to telegram chat"});
    //  restheart.replace("telegram-response", null, {desc: "record all message
    return from telegram"});
    //  restheart.replace("logs", null, {desc: "record some other logs"});
    var data = {test: 'test2'};
    restheart.insert("logs", data);

    //  var data = {test: 'test replace'};
    //  restheart.replace("testColl/5c75be5e294610d3cbaa39f9", null, data);

    //  var data = {test: 'test get'};
    //  restheart.get("testColl/5c75be5e294610d3cbaa39f9", null, data);
    //
    //  var data = {test: 'test set'};
    //  restheart.set("testColl/5c75be5e294610d3cbaa39f9", null, data);


    //  var data = {"$addToSet":{"array" : "bar2"}};
    //  restheart.setOne("testColl/5c75be5e294610d3cbaa39f9", data);
}

restheart.replace = function(collection, query, data) {
    var db = restheartUrl + collection;
    if (query){
        db += "?" + query;
    }
    var option = getPutOption(data);
    var url = encodeURI(db);
    UrlFetchApp.fetch(url, option);
};

restheart.setOne = function(urlWithId, data) {
    var db = restheartUrl + urlWithId;
    var option = getPatchOption(data);
    option.muteHttpExceptions = true;
    var url = encodeURI(db);
    var response = UrlFetchApp.fetch(encodeURI(db), option);
}

restheart.setMany = function(collection, query, data) {
    var db = restheartUrl + collection;
    if (query){
        db += "/*?" + query;
    }
    var option = getPatchOption(data);
    var url = encodeURI(db);
    UrlFetchApp.fetch(url, option);
}

restheart.set = restheart.setMany;
restheart.remove = function(collection, query) {
    var db = restheartUrl + collection;
    if (query){
        db += "/*?" + query;
    }
    var option = getDeleteOption();
    var url = encodeURI(db);
    UrlFetchApp.fetch(url, option);
}

restheart.get = function(collection, query) {
    var db = restheartUrl + collection;

    if (query){
        db += "?" + query;
    }

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

    var contentText = response.getContentText();
    var responseString = JSON.stringify(response);

    var  object = JSON.parse(response);
    return  object;
}

mongo = restheart;



function getInsertOption(data){
    var option = {
        "method": "post",
        'contentType': 'application/json',
        'headers': {"Authorization": "Basic " + Utilities.base64Encode('user2'
                + ":" + 'changeit')},
        "muteHttpExceptions": true,
        "payload": JSON.stringify(data)
    };
    return option;
}
function getDeleteOption(){
    var option = {
        "method": "delete",
        'contentType': 'application/json',
        'headers': {"Authorization": "Basic " + Utilities.base64Encode('user2'
                + ":" + 'changeit')},
    };
    return option;
}
function getPutOption(data){
    var option = {
        "method": "put",
        'contentType': 'application/json',
        'headers': {"Authorization": "Basic " + Utilities.base64Encode('user2'
                + ":" + 'changeit')},
        "payload": JSON.stringify(data)
    };
    return option;
}
function getPatchOption(data){
    var option = {
        "method": "patch",
        'contentType': 'application/json',
        'headers': {"Authorization": "Basic " + Utilities.base64Encode('user2'
                + ":" + 'changeit')},
        "payload": JSON.stringify(data)
    };
    return option;
}
function getGetOption(){
    var option = {
        "method": "get",
        'headers': {"Authorization": "Basic " + Utilities.base64Encode('user2'
                + ":" + 'changeit')},
    };
    return option;
}



The post Telegram Bot 电报聊天机器人连接 RestHeart MongoDB 数据库 appeared first on 峰哥分享.

]]>
https://www.dengnz.com/2019/03/23/telegram-bot-%e7%94%b5%e6%8a%a5%e8%81%8a%e5%a4%a9%e6%9c%ba%e5%99%a8%e4%ba%ba%e8%bf%9e%e6%8e%a5-restheart-mongodb-%e6%95%b0%e6%8d%ae%e5%ba%93/feed/ 4
Telegram Bot 使用机器人定时发送消息与图片 https://www.dengnz.com/2019/03/02/telegram-bot-%e4%bd%bf%e7%94%a8%e6%9c%ba%e5%99%a8%e4%ba%ba%e5%ae%9a%e6%97%b6%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e4%b8%8e%e5%9b%be%e7%89%87/ https://www.dengnz.com/2019/03/02/telegram-bot-%e4%bd%bf%e7%94%a8%e6%9c%ba%e5%99%a8%e4%ba%ba%e5%ae%9a%e6%97%b6%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e4%b8%8e%e5%9b%be%e7%89%87/?noamp=mobile#comments Fri, 01 Mar 2019 20:00:33 +0000 http://www.dengnz.com/?p=1564 之前有小伙伴问我如何让Telegram 机器人定时的发送消息和图片, 因为我教大家写的机器人是用谷歌app s… 阅读更多 »Telegram Bot 使用机器人定时发送消息与图片

The post Telegram Bot 使用机器人定时发送消息与图片 appeared first on 峰哥分享.

]]>

之前有小伙伴问我如何让Telegram 机器人定时的发送消息和图片, 因为我教大家写的机器人是用谷歌app script 写的, 所以这件事变得非常的容易 。 今天这个视频就来讲讲怎么样做到定时发送。

代码请往下翻

-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用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
-~-~~-~~~-~~-~-

没有动的代码请到上节课的贴子找

Telegram Bot 使用机器人管理群,限制用户,踢出用户

手动触发代码

 if (e.parameter.runAutoTask){
    AutoTask();
    return HtmlService.createHtmlOutput(e.parameter.runAutoTask);
  }

定时任务

function AutoSendMessage() {
  var payload = {
    "method": "sendMessage",
    "chat_id": 539065210,
    "text": "这是一条定时发送的文字消息",
    "parse_mode": "Markdown",
    "disable_web_page_preview": true,
  };
  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 AutoSendPhoto() {
  var payload = {
    "method": "sendPhoto",
    "chat_id": 539065210,
    "photo": "AgADAQAD_qcxGziKyEdxR2ejIuaEQshmDDAABAdOS7wVW7MAAR7LAwABAg"
  };

  postTelegram(payload);
}


function AutoTask() {
  AutoSendMessage();
  AutoSendPhoto();
}

The post Telegram Bot 使用机器人定时发送消息与图片 appeared first on 峰哥分享.

]]>
https://www.dengnz.com/2019/03/02/telegram-bot-%e4%bd%bf%e7%94%a8%e6%9c%ba%e5%99%a8%e4%ba%ba%e5%ae%9a%e6%97%b6%e5%8f%91%e9%80%81%e6%b6%88%e6%81%af%e4%b8%8e%e5%9b%be%e7%89%87/feed/ 5
Telegram Bot 使用机器人管理群,限制用户,踢出用户 https://www.dengnz.com/2018/12/31/telegram-bot-%e4%bd%bf%e7%94%a8%e6%9c%ba%e5%99%a8%e4%ba%ba%e7%ae%a1%e7%90%86%e7%be%a4%ef%bc%8c%e9%99%90%e5%88%b6%e7%94%a8%e6%88%b7%ef%bc%8c%e8%b8%a2%e5%87%ba%e7%94%a8%e6%88%b7/ https://www.dengnz.com/2018/12/31/telegram-bot-%e4%bd%bf%e7%94%a8%e6%9c%ba%e5%99%a8%e4%ba%ba%e7%ae%a1%e7%90%86%e7%be%a4%ef%bc%8c%e9%99%90%e5%88%b6%e7%94%a8%e6%88%b7%ef%bc%8c%e8%b8%a2%e5%87%ba%e7%94%a8%e6%88%b7/?noamp=mobile#comments Sun, 30 Dec 2018 19:33:23 +0000 http://www.dengnz.com/?p=1459 本视频是Telegram Bot 机器人编程系列的第十一集。 本集介绍如何使用机器人来管理群, 本集演示了机器… 阅读更多 »Telegram Bot 使用机器人管理群,限制用户,踢出用户

The post Telegram Bot 使用机器人管理群,限制用户,踢出用户 appeared first on 峰哥分享.

]]>

本视频是Telegram Bot 机器人编程系列的第十一集。 本集介绍如何使用机器人来管理群, 本集演示了机器人限制用户和踢出用户的方法

相关的代码请到翻到下面

-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用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
-~-~~-~~~-~~-~-

这次只改动了 代码.gs 文件, 其它的文件请到上集的贴子里找

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

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) {
     var payload2 = {
      "method": "restrictChatMember",
      "chat_id": body.message.chat.id,
      "user_id": body.message.new_chat_member.id,
      "can_send_messages": false,
      "can_send_media_messages": false,
      "can_send_other_messages": false,
      "can_add_web_page_previews": false,
    };
    
    var payload4 = {
      "method": "kickChatMember",
      "chat_id": body.message.chat.id,
      "user_id": body.message.new_chat_member.id,
    };
      
      
    var payloads = [];
    
    if (getName(body.message.new_chat_member).indexOf("广告") >= 0) {
      payloads.push(payload4);    
    }
    
    
       
    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/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: "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
}



The post Telegram Bot 使用机器人管理群,限制用户,踢出用户 appeared first on 峰哥分享.

]]>
https://www.dengnz.com/2018/12/31/telegram-bot-%e4%bd%bf%e7%94%a8%e6%9c%ba%e5%99%a8%e4%ba%ba%e7%ae%a1%e7%90%86%e7%be%a4%ef%bc%8c%e9%99%90%e5%88%b6%e7%94%a8%e6%88%b7%ef%bc%8c%e8%b8%a2%e5%87%ba%e7%94%a8%e6%88%b7/feed/ 3
Telegram Bot 从代码给机器人发送多条指令,发送欢迎消息后,删除前一条欢迎消息示例 | 数据库查询 | 调试进阶[第九集] https://www.dengnz.com/2018/11/13/telegram-bot-%e4%bb%8e%e4%bb%a3%e7%a0%81%e7%bb%99%e6%9c%ba%e5%99%a8%e4%ba%ba%e5%8f%91%e9%80%81%e5%a4%9a%e6%9d%a1%e6%8c%87%e4%bb%a4%ef%bc%8c%e5%8f%91%e9%80%81%e6%ac%a2%e8%bf%8e%e6%b6%88%e6%81%af/ https://www.dengnz.com/2018/11/13/telegram-bot-%e4%bb%8e%e4%bb%a3%e7%a0%81%e7%bb%99%e6%9c%ba%e5%99%a8%e4%ba%ba%e5%8f%91%e9%80%81%e5%a4%9a%e6%9d%a1%e6%8c%87%e4%bb%a4%ef%bc%8c%e5%8f%91%e9%80%81%e6%ac%a2%e8%bf%8e%e6%b6%88%e6%81%af/?noamp=mobile#comments Tue, 13 Nov 2018 04:00:47 +0000 https://www.dengnz.com/?p=1339 本视频是Telegram Bot 机器人编程系列的第九集。 本集介绍如何使用在发送一条欢迎消息的同时,删除前一… 阅读更多 »Telegram Bot 从代码给机器人发送多条指令,发送欢迎消息后,删除前一条欢迎消息示例 | 数据库查询 | 调试进阶[第九集]

The post Telegram Bot 从代码给机器人发送多条指令,发送欢迎消息后,删除前一条欢迎消息示例 | 数据库查询 | 调试进阶[第九集] appeared first on 峰哥分享.

]]>

本视频是Telegram Bot 机器人编程系列的第九集。 本集介绍如何使用在发送一条欢迎消息的同时,删除前一条欢迎消息。 同时视频中有对数据库查询,调试等进阶操作。

相关的代码请到翻到下面

下期预告:

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

-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用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
-~-~~-~~~-~~-~-

代码.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);
  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 指出这个错误
      
      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("/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: "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;
}







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 isDebug = false;

function debug() {
  e = {};
  e.postData = {};
  e.postData.contents = testList2;
  doPost(e);
}

The post Telegram Bot 从代码给机器人发送多条指令,发送欢迎消息后,删除前一条欢迎消息示例 | 数据库查询 | 调试进阶[第九集] appeared first on 峰哥分享.

]]>
https://www.dengnz.com/2018/11/13/telegram-bot-%e4%bb%8e%e4%bb%a3%e7%a0%81%e7%bb%99%e6%9c%ba%e5%99%a8%e4%ba%ba%e5%8f%91%e9%80%81%e5%a4%9a%e6%9d%a1%e6%8c%87%e4%bb%a4%ef%bc%8c%e5%8f%91%e9%80%81%e6%ac%a2%e8%bf%8e%e6%b6%88%e6%81%af/feed/ 1
Telegram Bot 使用快捷按钮Inline Button, Reply Button和用户交互[第八集] https://www.dengnz.com/2018/11/13/telegram-bot-%e4%bd%bf%e7%94%a8%e5%bf%ab%e6%8d%b7%e6%8c%89%e9%92%aeinline-button-reply-button%e5%92%8c%e7%94%a8%e6%88%b7%e4%ba%a4%e4%ba%92%e7%ac%ac%e5%85%ab%e9%9b%86/ https://www.dengnz.com/2018/11/13/telegram-bot-%e4%bd%bf%e7%94%a8%e5%bf%ab%e6%8d%b7%e6%8c%89%e9%92%aeinline-button-reply-button%e5%92%8c%e7%94%a8%e6%88%b7%e4%ba%a4%e4%ba%92%e7%ac%ac%e5%85%ab%e9%9b%86/?noamp=mobile#comments Tue, 13 Nov 2018 00:30:43 +0000 http://www.dengnz.com/?p=1335 本视频是Telegram Bot 机器人编程系列的第八集。 本集介绍如何使用 Reply button 按钮和… 阅读更多 »Telegram Bot 使用快捷按钮Inline Button, Reply Button和用户交互[第八集]

The post Telegram Bot 使用快捷按钮Inline Button, Reply Button和用户交互[第八集] appeared first on 峰哥分享.

]]>

本视频是Telegram Bot 机器人编程系列的第八集。 本集介绍如何使用 Reply button 按钮和 Inline button 按钮来跟用户交互。

相关的代码请翻到下面

下期预告:
Telegram Bot 从代码给机器人发送多条指令,发送欢迎消息后,删除前一条欢迎消息示例[第九集]

-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用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
-~-~~-~~~-~~-~-

代码.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);
  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) {
    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) + ", 欢迎加入本群";
      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;
  }


  
  
  if (body.message.text){
  
  //谢谢 kba977 指出这个错误
      
      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("/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: "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;

       
           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":"/help","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;
}






The post Telegram Bot 使用快捷按钮Inline Button, Reply Button和用户交互[第八集] appeared first on 峰哥分享.

]]>
https://www.dengnz.com/2018/11/13/telegram-bot-%e4%bd%bf%e7%94%a8%e5%bf%ab%e6%8d%b7%e6%8c%89%e9%92%aeinline-button-reply-button%e5%92%8c%e7%94%a8%e6%88%b7%e4%ba%a4%e4%ba%92%e7%ac%ac%e5%85%ab%e9%9b%86/feed/ 2
Telegram AI 智能聊天机器人 | 上知天文, 下知地理 | 数学,天气,笑话,游戏,翻译通通都会 | 抄个100多行代码就能用 | 小白也能搞定 https://www.dengnz.com/2018/11/10/telegram-ai-%e6%99%ba%e8%83%bd%e8%81%8a%e5%a4%a9%e6%9c%ba%e5%99%a8%e4%ba%ba-%e4%b8%8a%e7%9f%a5%e5%a4%a9%e6%96%87%ef%bc%8c-%e4%b8%8b%e7%9f%a5%e5%9c%b0%e7%90%86-%e6%95%b0%e5%ad%a6%ef%bc%8c%e5%a4%a9/ https://www.dengnz.com/2018/11/10/telegram-ai-%e6%99%ba%e8%83%bd%e8%81%8a%e5%a4%a9%e6%9c%ba%e5%99%a8%e4%ba%ba-%e4%b8%8a%e7%9f%a5%e5%a4%a9%e6%96%87%ef%bc%8c-%e4%b8%8b%e7%9f%a5%e5%9c%b0%e7%90%86-%e6%95%b0%e5%ad%a6%ef%bc%8c%e5%a4%a9/?noamp=mobile#comments Sat, 10 Nov 2018 10:59:06 +0000 http://www.dengnz.com/?p=1304 通过100多行代码将Telegram 机器人接到国产的AI 大脑, 功能强大, 懂数学, 懂成语,懂天气, 会… 阅读更多 »Telegram AI 智能聊天机器人 | 上知天文, 下知地理 | 数学,天气,笑话,游戏,翻译通通都会 | 抄个100多行代码就能用 | 小白也能搞定

The post Telegram AI 智能聊天机器人 | 上知天文, 下知地理 | 数学,天气,笑话,游戏,翻译通通都会 | 抄个100多行代码就能用 | 小白也能搞定 appeared first on 峰哥分享.

]]>
通过100多行代码将Telegram 机器人接到国产的AI 大脑, 功能强大, 懂数学, 懂成语,懂天气, 会讲笑话,还能玩游戏。

机器人的代码请翻到后面
代码已经写好,只要小小的改动就可以使用。

-~-~~-~~~-~~-~-

本频道旨在分享生活中各种小技巧, 如用小米盒子看国内视频, 如何使用KODI看电影等等. 点击进入我的频道: 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
-~-~~-~~~-~~-~-

代码.gs

function doPost(e) {
  var body = JSON.parse(e.postData.contents);
  if (!checkIsMyMessage(body)){
    return;
  }

  if (body.message && body.message.chat){
    body.message.chat.id = body.message.chat.id + '';
  }

  var payload = tulinBotPayload(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 tulinBotPayload(body) {
  var payload;
  var chatId = body.message.chat.id;
  payload = {
    "method": "sendMessage",
    "chat_id": chatId,
    "text": "",
    "disable_web_page_preview": true,
    "reply_to_message_id": body.message.message_id,
  };

  var tulinReq = {
    "reqType": 0,
      "perception": {
          "inputText": {
              // tulinjiqirenbot 改成你自己机器人的名字
              "text": body.message.text.replace("@tulinjiqirenBot", "")
          }
         
      },
      "userInfo": {
        // 改成你自己的图灵机器人的apikey 和 userId
          "apiKey": "4e8395e7721046e38e9c610de725edd7",
          "userId": "339657"
      }
  };


  var data = {
    'contentType': 'application/json',
    "method": "post",
    "payload": JSON.stringify(tulinReq)
  };

  var response = UrlFetchApp.fetch("http://openapi.tuling123.com/openapi/api/v2", data);
  var res = JSON.parse(response);

  if (res.results && res.results[0].values && res.results[0].values.text) {
    payload.text = res.results[0].values.text;
  }
  return payload;
}
function isPrivate(body) {
  var share =  getShareObject(body);
  var chat = share.chat;
  if (chat.type === "private") {
    return true;
  }
  return false;
}
function PostTelegram(payload) {
  var data = {
    'contentType': 'application/json',
    "method": "post",
    "payload": JSON.stringify(payload)
  };

  // 改成你自己机器人的 API token
  var response = UrlFetchApp.fetch("https://api.telegram.org/bot750371992:AAGTJC08Gg3g9I-gVm6BkAb30wsMVyQMbUI/", data);
  var res = JSON.parse(response);
  return res;
}
function checkIsMyMessage(body){
  var text = body.message.text;

  if (isPrivate(body)){
    return true;
  }

  if (body.message.reply_to_message) {
//这里的ID要改成你自己机器人的ID, 之前视频里忘讲了
    if (body.message.reply_to_message.from.id == 750371992) {
      return true;
    }
  }

// 如果找不到机器人的ID, 可以用以下这段代码代替, 换成你自己机器人的名字
 // if (body.message.reply_to_message) {
  //  if (body.message.reply_to_message.from.username == "tulinjiqirenBot") {
  //    return true;
  //  }
 // }

  if (text) {
    var paras = text.split(" ");
    if (paras[0] && paras[0].indexOf("@") >= 0){
      // tulinjiqirenbot 改成你自己机器人的名字, 全部小写
      if  (paras[0].toLowerCase().indexOf("tulinjiqirenbot") >= 0){
        return true;
      }
      return false;
    }
  }
  return false;
}

function getShareObject(body) {
  var payload;
  var from;
  var chat;
  var messageId;
  var callback_query_id;

  // use editMessage method instead if it's a callback 
  if (body.callback_query) {
    chat = body.callback_query.message.chat;
    chat.id = chat.id + "";
    messageId = body.callback_query.message.message_id;
    from = body.callback_query.from;
    callback_query_id = body.callback_query.id;
    payload = {
      "method": "editMessageText",
      "chat_id": chat.id,
      "message_id": messageId,
      "text": "",
      "parse_mode": "markdown",
      "disable_web_page_preview": false,
    };
  } else {
    from = body.message.from;
    chat = body.message.chat;
    chat.id = chat.id + "";
    messageId = body.message.message_id;
    payload = {
      "method": "sendMessage",
      "chat_id": chat.id,
      "text": "",
      "parse_mode": "markdown",
      "disable_web_page_preview": true,
      "reply_to_message_id": messageId,
    };

  }

  var share = {};
  share.payload = payload;
  share.from = from;
  share.chat = chat;
  share.messageId = messageId;
  share.callback_query_id = callback_query_id;

  return share;
}

The post Telegram AI 智能聊天机器人 | 上知天文, 下知地理 | 数学,天气,笑话,游戏,翻译通通都会 | 抄个100多行代码就能用 | 小白也能搞定 appeared first on 峰哥分享.

]]>
https://www.dengnz.com/2018/11/10/telegram-ai-%e6%99%ba%e8%83%bd%e8%81%8a%e5%a4%a9%e6%9c%ba%e5%99%a8%e4%ba%ba-%e4%b8%8a%e7%9f%a5%e5%a4%a9%e6%96%87%ef%bc%8c-%e4%b8%8b%e7%9f%a5%e5%9c%b0%e7%90%86-%e6%95%b0%e5%ad%a6%ef%bc%8c%e5%a4%a9/feed/ 3
Telegram Bot 连接Mongo DB 数据库, 超酷超好用的JSON数据库, 不需要学SQL啦[第七集] https://www.dengnz.com/2018/10/31/telegram-bot-%e8%bf%9e%e6%8e%a5mongo-db-%e6%95%b0%e6%8d%ae%e5%ba%93%ef%bc%8c-%e8%b6%85%e9%85%b7%e8%b6%85%e5%a5%bd%e7%94%a8%e7%9a%84json%e6%95%b0%e6%8d%ae%e5%ba%93%ef%bc%8c-%e4%b8%8d%e9%9c%80%e8%a6%81/ https://www.dengnz.com/2018/10/31/telegram-bot-%e8%bf%9e%e6%8e%a5mongo-db-%e6%95%b0%e6%8d%ae%e5%ba%93%ef%bc%8c-%e8%b6%85%e9%85%b7%e8%b6%85%e5%a5%bd%e7%94%a8%e7%9a%84json%e6%95%b0%e6%8d%ae%e5%ba%93%ef%bc%8c-%e4%b8%8d%e9%9c%80%e8%a6%81/?noamp=mobile#comments Wed, 31 Oct 2018 11:36:36 +0000 https://www.dengnz.com/?p=1286 Tags: Telegram, 机器人, 聊天机器人,机器人编程,机器人代码, Telegram代码,Tele… 阅读更多 »Telegram Bot 连接Mongo DB 数据库, 超酷超好用的JSON数据库, 不需要学SQL啦[第七集]

The post Telegram Bot 连接Mongo DB 数据库, 超酷超好用的JSON数据库, 不需要学SQL啦[第七集] appeared first on 峰哥分享.

]]>
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;
}


The post Telegram Bot 连接Mongo DB 数据库, 超酷超好用的JSON数据库, 不需要学SQL啦[第七集] appeared first on 峰哥分享.

]]>
https://www.dengnz.com/2018/10/31/telegram-bot-%e8%bf%9e%e6%8e%a5mongo-db-%e6%95%b0%e6%8d%ae%e5%ba%93%ef%bc%8c-%e8%b6%85%e9%85%b7%e8%b6%85%e5%a5%bd%e7%94%a8%e7%9a%84json%e6%95%b0%e6%8d%ae%e5%ba%93%ef%bc%8c-%e4%b8%8d%e9%9c%80%e8%a6%81/feed/ 6