制作一个电报萝卜头(机器人)【实战篇】
基于Google Apps Script、telegram-Bot api开发telegram bot脚本
来自:Pixiv 画师(Aencore)
- 功能bot的代码详解
- 接入第三方API的聊天bot
功能bot的代码详解
最简单的栗子
当用户发出”/start”,萝卜头就会回一个”开始吧(^▽^)”,基本都是固定格式不解释。
function doPost(e){
//来源消息&指令
var body = JSON.parse(e.postData.contents);
//执行回复响应主函数
var payload = preparePayload(body);
//TG数据封装与转换
var data = {
"method": "post",
"payload": payload,
}
UrlFetchApp.fetch("https://api.telegram.org/bot1204445809:AAGOBkA0Fr6V9scrmKFm8rWN0oa90LH1BaM/", data);
}
function preparePayload(body){
var payload;
if (body.message) {
body.message.chat.id = body.message.chat.id + '';
//开始
if(body.message.text=="/start"){
payload = {
"method": "sendMessage",
"chat_id": body.message.chat.id,
"text": "开始吧(*^▽^*)",
}
}
}
return payload;
}
当我们向bot发送一个指令或消息后,bot根据代码对收到的数据做出回应。而bot收到的数据格式分为一下两类:
这里可以清晰的看到每个数据从里面取,由于数据有很多层级特别是callback_query,所以bot回应的消息改成json格式。结构如下:
//回复数据结构
var data = {
"method": "post",
"payload": JSON.stringify(payload),
"contentType": 'application/json',
}
//主函数
function preparePayload(body){
if (body.message) {
......
}
if (body.callback_query) {
......
}
return payload;
}
内联键盘
前面提到了callback这种数据回应,它不能通过一般的文字、声音、图片等消息调用,主要是通过telegram的键盘类型去回调。这里主要讲一下内联键盘(InlineKeyboard),其他键盘“参考地址”。
怎么写一个键盘?下面是一个键盘的栗子
var inlineKB_menu= [
[{text: '网站服务',
callback_data: '/website'}],
[{text: '访问谷歌搜索',
url: 'https://google.com'}],
];
键盘由列表的格式编写,键盘中的每个元素对应一个按钮,按钮的表现效果分为url和callback_data。点击url的按钮则会跳转浏览器进入网站,点击callback_data则会调用另一个消息(可以是任意类型的,文字、语音、图片、键盘等),可以kan作是函数,一般地编写成”/xxx”的形式方便区别。
//bot向用户发一个键盘
if(body.message.text=="/list"){
payload={
"method": "sendMessage",
"chat_id": body.message.chat.id,
"text": "菜单",
"reply_markup": {
"inline_keyboard": inlineKB_menu,
}
}
}
逻辑很简单,当用户向bot发送/list指令,bot就会向用户发送这个键盘,method、chat_id、reply_markup.inline_keyboard都是必须参数。
//通过点击第一个键盘的callback类型按钮,回调另一个键盘
if(body.callback_query.data == "/website") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "网站服务",
"reply_markup": {
"inline_keyboard": inlineKB_website,
}
}
}
callback的所有数据都是通过body.callback_query.data来获取,不清楚可以看一下上面”callback数据的json格式”那张图。
只要有需求,可以一直回调下去,当然你会说如果有很多层键盘全部发送会很乱。这里也可以稍作调整,这里发送第二个键盘用了sendMessage这个方法,可以改为”editMessageText”,它的作用是更新键盘,即用第二个键盘覆盖第一个键盘。
功能萝卜头
下面附上我自己群组使用的一个日常萝卜头,关键的隐私信息已经屏蔽。仅供参考
function doPost(e){
//来源消息&指令
var body = JSON.parse(e.postData.contents);
//执行回复响应主函数
var payload = preparePayload(body);
//TG数据封装与转换
var data = {
"method": "post",
"payload": JSON.stringify(payload),
"contentType": 'application/json',
}
UrlFetchApp.fetch("https://api.telegram.org/bot1204445809:AAGOBkA0Fr6V9scrmKFm8rWugok90LH1BaM/", data);
}
//主函数
function preparePayload(body){
var payload;
var unknown_msg=['小萝卜头我有很多的问号???','我怎么听不懂地球人说','需要我复读吗','聊天请找我的妹妹 @w_002_bot','emmmmmm','你是不是想套路我','没有这个指令','你继续','说人话','你要是无聊可以给我发表情,我是专业的复读姬','拜拜了您咧'
];
//嵌入式键盘
//隐藏功能
var inlineKB_hide= [
[{text: '23',callback_data: '/23'},{text: '64',callback_data: '/64'},{text: '50',callback_data: '/50'}],
[{text: '32',callback_data: '/32'},{text: '71',callback_data: '/71'},{text: '86',callback_data: '/86'}],
[{text: '47',callback_data: '/47'},{text: '74',callback_data: '/74'},{text: '11',callback_data: '/11h'}],
];
var inlineKB_hide2= [
[{text: '23',callback_data: '/23'},{text: '64',callback_data: '/64'},{text: '50',callback_data: '/50hh'}],
[{text: '32',callback_data: '/32'},{text: '71',callback_data: '/71'},{text: '86',callback_data: '/86'}],
[{text: '47',callback_data: '/47'},{text: '74',callback_data: '/74'},{text: '11',callback_data: '/11'}],
];
//菜单
var inlineKB_Smenu= [
[{text: '群组助手',
callback_data: '/helper'}],
[{text: '搜索:打开方式',
callback_data: '/searcher'}],
[{text: 'TG群组与Bot推荐',
callback_data: '/Referrer'}],
[{text: '其他',
callback_data: '/other'}],
];
//菜单>群组助手
var inlineKB_helper= [
[{text: '网站服务',
callback_data: '/website'}],
[{text: '群组服务',
callback_data: '/group'}],
[{text: '扩展功能',
callback_data: '/expand'}],
];
//菜单>其他
var inlineKB_other= [
[{text: '以TG联系管理员',
url: 'https://t.me/JIEMO9527'}],
[{text: '以QQ联系管理员',
url: 'http://wpa.qq.com/msgrd?v=3&uin=2569995914&site=qq&menu=yes'}],
[{text: 'Powered by Gscript',
url: 'https://script.google.com'}],
[{text: 'Powered by telegram-Bot Api',
url: 'https://core.telegram.org/bots/api'}],
];
//菜单>群组助手>网站服务
var inlineKB_helper_Website= [
[{text: 'kod网盘(A组)',url: 'jiemo-sup2020.top'},
{text: 'kod网盘(B组)',url: 'jiemo-vi.top'}],
[{text: 'Aria下载(A组)',url: 'jiemo-sup2020.top:6080'},
{text: 'Aria下载(B组)',url: 'jiemo-vi.top:6080'}],
[{text: 'Navi网址导航',url: 'https://www.jie-navi.xyz'},
{text: '影视全搜索',url: 'v.eyunzhu.com'}],
[{text: '捐赠与付款①',url: 'https://www.jie-navi.xyz/donate/'},
{text: '捐赠与付款②',url: 'http://blog.jie02.top:66:999'}],
];
//菜单>群组助手>群组服务
var inlineKB_helper_Group= [
[{text: '公共订阅[正常]',callback_data: '/TST_public'}],
[{text: '私人订阅[暂停服务]',callback_data: '/TST_private'}],
[{text: '战时订阅[即将启用]',callback_data: '/TST_wartime'}],
[{text: 'MTProxy代理[正常]',callback_data: '/mtproxy'}],
[{text: 'TG公告索引',callback_data: '/AN_index'}],
];
//菜单>群组助手>群组服务>TG公告索引
var inlineKB_helper_ANindex= [
[{text: '更改TG语言包为中文',url: 'https://t.me/tele_zh_cn'}],
[{text: '【v2ray内核更新】4.23.1 ',url: 'https://t.me/c/1424846503/25'}],
[{text: '【v2ray外核更新】3.18 ',url: 'https://t.me/c/1424846503/32'}],
[{text: '客户端资源下载',url: 'https://pmjs-my.sharepoint.com/:f:/g/personal/jiemo_my365_tw/Eqx_PU0jCbFFveqFvdSZau0BzaCi6KQSwWEltIYppPHzzA?e=XU3lSD'}],
[{text: 'DIYP(安卓看电视频道的App)',url: 'https://t.me/c/1424846503/11'}],
[{text: '使用级别',url: 'https://t.me/c/1424846503/35'}],
[{text: '下一步计划',url: 'https://t.me/c/1424846503/38'}],
[{text: '查看所有公告',url: 'https://t.me/joinchat/AAAAAFTtbqdeRO7PMyUHqA'}],
];
//菜单>群组助手>扩展功能
var inlineKB_helper_Expand= [
[{text: '谷歌硬盘+1PB',url: 'http://td.fastio.me'},],
[{text: '视频代下(爬取)',callback_data: '/download_video'},],
[{text: '还有什么功能呢,我再想想',callback_data: '/qiao'},],
];
//菜单>搜索:打开方式
var inlineKB_openwith= [
[{text: '搜索Github',callback_data: '/ow_git'},],
[{text: '搜索Vsearch',callback_data: '/ow_vsearch'},],
[{text: '搜索Pixiv',callback_data: '/ow_pixiv'},],
];
//菜单>TG群组与Bot推荐
var inlineKB_recommended= [
[{text: '群组频道推荐',callback_data: '/rcm_chat'},],
[{text: '萝卜头推荐',callback_data: '/rcm_bot'},],
];
//菜单>TG群组与Bot推荐>群组频道推荐
var inlineKB_recommended_recchat= [
[{text: 'GIF群聚地',url: 'https://t.me/GIFgroupTW'},],
[{text: '表情包收集器 😆😏😈',url: 'https://t.me/stickercoll'},],
[{text: 'Project V(使用与反馈)',url: 'https://t.me/projectv2ray'},],
[{text: '频道🥇福利资源 | 薅羊毛·省钱中心🅥',url: 'https://t.me/Pojieapp'},],
[{text: '52破解信息',url: 'https://t.me/wuaipojie'},],
[{text: '临时短信接收',url: 'https://t.me/sms24_me'},],
[{text: '[更多]',callback_data: '/morechat'},],
];
//菜单>TG群组与Bot推荐>Bot推荐
var inlineKB_recommended_recbot= [
[{text: '宛雪-聊天萝卜头',url: 'https://t.me/wx_002_bot'},],
[{text: '临时邮箱',url: 'https://t.me/DropmailBot'},],
[{text: '点歌',url: 'https://t.me/ChinoNyanBot'},],
[{text: '天气',url: 'https://t.me/weatherbot'},],
[{text: '图片转ascii构成',url: 'https://t.me/asciiart_bot'},],
[{text: 'telegram proxy server',url: 'https://t.me/MTProxybot'},],
[{text: 'Youtube视频分享/搜索/订阅通知',url: 'https://t.me/youtube'},],
[{text: 'Youtube视频搜索',url: 'https://t.me/vid'},],
[{text: '生成网页留言本',url: 'https://t.me/CommentsBot'},],
[{text: '生成投票',url: 'https://t.me/vote'},],
[{text: '王境泽生成器',url: 'https://t.me/wangjingze_bot'},],
[{text: '所有萝卜头的爸爸',url: 'https://t.me/BotFather'},],
[{text: 'TG文件转存',url: 'https://t.me/GetPublicLinkBot'},],
[{text: '文本转语音(已死)',url: 'https://t.me/txt2speechbot'},],
[{text: '中文基维百科',url: 'https://t.me/WikipediaLinkBot'},],
[{text: '安卓应用下载',url: 'https://t.me/apkdl_bot'},],
[{text: '检测设备温度内存ip',url: 'https://t.me/UserBot'},],
[{text: '看图识动漫(准确率不高)',url: 'https://t.me/WhatAnimeBot'},],
[{text: '短网址服务',url: 'https://t.me/gohubioBot'},],
[{text: '文字转图形',url: 'https://t.me/big_text_bot'},],
[{text: '文件/网址病毒检查(Dr.Web公司)',url: 'https://t.me/drwebbot'},],
[{text: '中文頻道群組搜索',url: 'https://t.me/hao1234bot'},],
];
//message
if (body.message) {
body.message.chat.id = body.message.chat.id + '';
//开始
if(body.message.text=="/start"){
payload = {
"method": "sendMessage",
"chat_id": body.message.chat.id,
"text": "开始吧(*^▽^*)",
}
}
//菜单
else if(body.message.text=="/list"){
payload={
"method": "sendMessage",
"chat_id": body.message.chat.id,
"text": "————————功能菜单列表————————",
"reply_markup": {
"inline_keyboard": inlineKB_Smenu,
}
}
}
//隐藏功能
else if(body.message.text=="/no_9527"){
payload={
"method": "sendMessage",
"chat_id": body.message.chat.id,
"text": "——————隐藏功能什么的 是存在的,提示:2步——————",
"reply_markup": {
"inline_keyboard": inlineKB_hide,
}
}
}
//打开方式-g
else if(body.message.text.indexOf("g")===0){
payload={
"method": "sendMessage",
"chat_id": body.message.chat.id,
"text": "https://github.com/search?q="+body.message.text.split("g ")[1].replace(/\s/ig,''),
}
}
//打开方式-v
else if(body.message.text.indexOf("v")===0){
payload={
"method": "sendMessage",
"chat_id": body.message.chat.id,
"text": "http://v.eyunzhu.com/search?kw="+body.message.text.split("v ")[1].replace(/\s/ig,''),
}
}
//打开方式-p
else if(body.message.text.indexOf("p")===0){
payload={
"method": "sendMessage",
"chat_id": body.message.chat.id,
"text": "https://www.pixiv.net/tags/"+body.message.text.split("p ")[1].replace(/\s/ig,'')+"/artworks?s_mode=s_tag",
}
}
//查询私人订阅-密码为空
else if(body.message.text=="/tst_private"){
payload={
"method": "sendMessage",
"chat_id": body.message.chat.id,
"text": body.message.chat.username+"你还没输入密码,大傻子!",
}
}
//查询私人订阅——涉及服务安全相关代码删除……
//贴图
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": unknown_msg[Math.floor(Math.random() * unknown_msg.length)],
}
}
}
//callback
if (body.callback_query) {
//目录:菜单-群组助手
if(body.callback_query.data == "/helper") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "————————Menu>群组助手————————",
"reply_markup": {
"inline_keyboard": inlineKB_helper,
}
}
}
//目录:菜单-其他
if(body.callback_query.data == "/other") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "————————Menu>其他————————",
"reply_markup": {
"inline_keyboard": inlineKB_other,
}
}
}
//目录:菜单-群组助手-网站服务
if(body.callback_query.data == "/website") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "————————Menu>群组助手>网站服务————————",
"reply_markup": {
"inline_keyboard": inlineKB_helper_Website,
}
}
}
//目录:菜单-群组助手-群组服务
if(body.callback_query.data == "/group") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "————————Menu>群组助手>群组服务————————",
"reply_markup": {
"inline_keyboard": inlineKB_helper_Group,
}
}
}
//目录:菜单-群组助手-群组服务-公共订阅
if(body.callback_query.data == "/TST_public") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "公共订阅状态可用\n"+"涉及服务安全相关代码删除……",
}
}
//目录:菜单-群组助手-群组服务-私人订阅
if(body.callback_query.data == "/TST_private") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "请使用指令查询’/tst_private+[查询密码]‘",
}
}
//目录:菜单-群组助手-群组服务-战时订阅
if(body.callback_query.data == "/TST_wartime") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "战时订阅状态不可用\n"+"涉及服务安全相关代码删除……",
}
}
//目录:菜单-群组助手-群组服务-MTProxy
if(body.callback_query.data == "/mtproxy") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "MTProxy状态可用\n"+"涉及服务安全相关代码删除……",
}
}
//目录:菜单-群组助手-群组服务-TG公告索引
if(body.callback_query.data == "/AN_index") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "——————Menu>群组助手>群组服务>TG公告索引——————",
"reply_markup": {
"inline_keyboard": inlineKB_helper_ANindex,
}
}
}
//目录:菜单-群组助手-扩展功能
if(body.callback_query.data == "/expand") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "————————Menu>群组助手>扩展功能————————",
"reply_markup": {
"inline_keyboard": inlineKB_helper_Expand,
}
}
}
//目录:菜单-群组助手-扩展功能-视频代下(爬取)
if(body.callback_query.data == "/download_video") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "代下的视频保存于kod网盘共享目录gdrive下,点击下链接完成需求的填写\n"+"涉及服务安全相关代码删除……",
}
}
//目录:菜单-群组助手-扩展功能-我再想想
if(body.callback_query.data == "/qiao") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "让我再想想!",
}
}
//菜单-搜索:打开方式
if(body.callback_query.data == "/searcher") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "————————Menu>搜索:打开方式————————",
"reply_markup": {
"inline_keyboard": inlineKB_openwith,
}
}
}
//菜单-搜索:打开方式-g
if(body.callback_query.data == "/ow_git") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "以命令 'g 关键词'进行Github检索:",
}
}
//菜单-搜索:打开方式-v
if(body.callback_query.data == "/ow_vsearch") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "以命令 'v 关键词'进行Vsearch检索:",
}
}
//菜单-搜索:打开方式-p
if(body.callback_query.data == "/ow_pixiv") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "以命令 'p 关键词'进行Pixiv检索:",
}
}
//菜单-TG群组与Bot推荐
if(body.callback_query.data == "/Referrer") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "——————Menu>TG群组频道与Bot推荐——————",
"reply_markup": {
"inline_keyboard": inlineKB_recommended,
}
}
}
//菜单-TG群组与Bot推荐-群组频道推荐
if(body.callback_query.data == "/rcm_chat") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "————Menu>TG群组频道与Bot推荐>群组频道推荐————",
"reply_markup": {
"inline_keyboard": inlineKB_recommended_recchat,
}
}
}
if(body.callback_query.data == "/morechat") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "请使用 @hao1234bot 搜索更多你感兴趣的群组/频道",
}
}
//菜单-TG群组与Bot推荐-bot推荐
if(body.callback_query.data == "/rcm_bot") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "——————Menu>TG群组频道与Bot推荐>bot推荐——————",
"reply_markup": {
"inline_keyboard": inlineKB_recommended_recbot,
}
}
}
//目录:隐藏功能第一层的正确选择
if(body.callback_query.data == "/11h") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "——————隐藏功能什么的 是存在的,提示:2步——————",
"reply_markup": {
"inline_keyboard": inlineKB_hide2,
}
}
}
//目录:隐藏功能第一层的错误选择
if(body.callback_query.data =="/23"||body.callback_query.data =="/64"||body.callback_query.data === "/32"||body.callback_query.data === "/50"||body.callback_query.data === "/71"||body.callback_query.data === "/86"||body.callback_query.data === "/47"||body.callback_query.data === "/74"||body.callback_query.data === "/11"){
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "——————隐藏功能什么的 是存在的,提示:2步——————",
"reply_markup": {
"inline_keyboard": inlineKB_hide,
}
}
}
//目录:隐藏功能第二层
if(body.callback_query.data == "/50hh") {
payload={
"method": "sendMessage",
"chat_id": body.callback_query.message.chat.id,
"message_id": body.callback_query.message.message_id,
"text": "获得游戏许可 请转至游戏萝卜头 @w_666_bot",
}
}
}
return payload
}
接入第三方API的聊天bot
上一期提到telegram bot可以接入第三方的API,这里做一个简单的示例(将图灵机器人接入telegram bot),其实就是没写bot的消息处理,转给图灵机器人处理。
Gscript代码如下:
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("@wx_002_bot", "")
}
},
"userInfo": {
// 改成你自己的图灵机器人的apikey 和 userId
"apiKey": "2aa94208166e4d4eb36e97a03c3f877d",
"userId": "621138"
}
};
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/bot1172292378:AAGVEBOIYU3fXeDz9rI9iYXsjDp4YElDLho/", 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 == 1172292378) {
return true;
}
}
// 如果找不到机器人的ID, 可以用以下这段代码代替, 换成你自己机器人的名字
// if (body.message.reply_to_message) {
// if (body.message.reply_to_message.from.username == "wx_002_bot") {
// return true;
// }
// }
if (text) {
var paras = text.split(" ");
if (paras[0] && paras[0].indexOf("@") >= 0){
// tulinjiqirenbot 改成你自己机器人的名字, 全部小写
if (paras[0].toLowerCase().indexOf("wx_002_bot") >= 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;
}
代码中有几处需要修改,图灵机器人的apikey和userId需要去图灵机器人官网注册,创建一个机器人。
而telegram bot的id再提一下是token的前半截,用户名是@xxx