telegramBot处理带参数的命令[第四集]-电报telegram技巧分享

本文记载了一次 Telegram Bot 的开发過逞,包含底子的开发流程和 Telegram Bot API 的介绍,更多内容可以查询 Telegram Bot API 官方文档 。

1. 前言

为了不让读者做无勤奋,在这里本文先介绍一下 Bot API 的限定,重要包括:

  • 为了防备骚扰,Bot 不能主动对一个用户发起会话。Bot 只有在某个用户以

    /start

    下令发起会话后才能向该用户发送消息。
  • Bot 的历史消息存储偶然间和空间限定,假如你需要保存他们,需要用程序保存在当地。
  • 出于隐私思量,Bot 被拉入群组后默认无法察看全部消息,这个限定可以被修改,相关信息可以查阅 官方文档 。

2. 申请 Bot

根据 官方文档 申请创建一个 Telegram Bot 只需要在 Telegram 上联系 BotFather (一个 Telegram 官方提供的,用于管理 Bot 的 Bot),然后根据提示即可创建 Bot 并设置 Bot 的头像、昵称以及一些高级功能,限于篇幅本文对此不做分外赘述。

进行 Telegram Bot 开发最焦点的是获取 Bot 的 API Token,对于不认识使用 API 开发的小伙伴,可以简单地将 API Token 明白为 Bot 的密码,开发的程序必须获取 API Token 才能拥有控制 Bot 的权限。常见的 API Token 形如

123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

, 包含以英文分号隔开的一串数字,和字母数字混合编码。

3. API 的使用方法

Telegram Bot API 的使用与其他网络服务的 API 类似,只需要通过对结构好的 url 进行特定的网络请求,并对请求的结果,即一组 json 格式的数据,进行处置即可。

假如你不善于 http 相关的编程,可以使用 社区提供的 SDK 来帮助开发。

3.1. 结构 url

根据 官方文档 ,一个 API 方法(Method)对应的 url 应该是如下格式:


https://api.telegram.org/bot<API_TOKEN>/<METHOD_NAME>



https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/getMe

此中

<API_TOKEN>

是上文中提到的,从 BotFather 申请得到的,而

<METHOD_NAME>

则是方法名,是 Telegram 官方事先划定好的,与 Bot 的功能逐一对应。本文只会介绍一些常见的方法,更多方法和对应的功能可以在 官方文档 中查询。

注:

<METHOD_NAME>



大小写不敏感

的,

getMe

方法和

gEtmE

方法是等价的。

3.2. 进行网络请求

结构好特定的 url 后,要做的就是对 url 进行特定的网络请求。

Telegram Bot API 支持两种方法,即 GET 与 POST,的网络请求,而网络请求的格式可以是:

  • URL query string (常用于 GET 方法,把参数结构进 url 中)
  • pplication/x-www-form-urlencoded (常用与 POST 方法,通过提交表单的方法提交参数)
  • application/json (上传一个包含参数和对应值的 json 文件)
  • multipart/form-data (重要用于上传文件)

一个最简单的 Bot API 的调用可以通过如下的 bash 下令完成


留意:由于中国大陆等国度的网络检察,下列下令大概无法直接在您的机器上正常工作。


curl -x GET https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/sendMessage?chat_id=123321&text=hello

3.3. 处置请求结果

进行网络请求之后,Telegram 的服务器会返回给一个

UTF-8 编码的 json 对象

作为请求的结果,只需要剖析这个 json 对象即可得到对应的信息。

4. 基本要素及相关 API

4.1. 吸收用户输入

作为一个 Bot,一个重要的功能就是获取用户的输入,尽管可以通过修改设置文件的方法来告知 Bot 接下来要做的工作,但是对于常常变革的使命要么突发性的使命来说,通过交互的方法通知 Bot 显然越发方便与友爱。

API 中提供了两种吸收用户输入的方法:

这两种方法都市得到一个包含用于信息相关参数及对应值的 json 对象,该对象被称为 Update ,可以通过点击超链接察看对象的格式。

4.1.1 getUpdates


getUpdates

方法是一种 长轮询 的信息获取方法,假如 Bot

前次标志完成后

没有收到信息,或消息已保存超越24小时,该方法会保持等候直到超时,在等候期间收到信息将会立即返回结果;反之,该方法会返回一组包含了24小时内全部未标志信息的 Updates。

注1:该方法的

offset

参数可以将一部分消息标志为已处置,参数的取值为吸收到的消息的

message_id

最大值加一,好比参数取值为 3000 时,服务器仅会返回从 3000 开始的消息,并将小于 3000 的消息标志为已处置;假如不提交

offset

参数,方法会返回24小时内全部未标志信息。

注2:超时值通过

timeout

参数指定,默认超时值为0,即没有消息时直接返回一个空结果,此时工作方法不属于长轮询。

4.1.2

setWebhook


setWebhook

方法严格来说并不是或获取信息,而是告知服务器一个 url 地点。服务器将会在收到新消息时,通过 POST 方法将 json 格式的 Update 对象发送到指定的 url 地点。

下面列出部分使用

setWebhook

时的留意事项,更多请参阅 官方文档

注1:假如 Telegram 服务器连接 url 失败,将会进行公道次数的多次请求。

注2:告知服务器的 url 地点必须是一个 https url,该 url 的证书可以是正规证书机构签发的,也可以是用户自签的(需要在使用该方法时,通过文件上传的方法上传证书)。

注3:Webhook 服务只能运行在 IPv4 地点的

443, 80, 88, 8443

端口中(纵然运行在 80 端口也必须是 https 加密的服务)

注4:建议将 url 计划的较为庞杂以制止打击者伪装成 Telegram 服务器向你的 url 发送请求,譬如包含一段打击者难以推测的字符串,要么通过防火墙禁止 Telegram 服务器 IP 以外的请求。

4.2 向用户发送信息

这段内容较为简单,只需要查阅 官方文档中以 send 开头的方法 即可理解大多数发送消息的 API 的使用方法,故本文只简单介绍一些 API 使用时需要留意的问题。

开发者开发的 Telegram Bot 的程序可以通过调用一组以 send 开头的方法,来对特定的用户、群组、频道发送信息。

这些方法根据发送的信息差别,每每有着差别参数,每一个方法都需要的参数只有

chat_id

该参数可以是两种种类——整数要么字符串,对于差别的目的,参数的种类和取值均有所变革:

  • 用户(user):正整数,如

    123456432
  • 群组(group):负整数,如

    -123456432
  • 频道(channel):可以是负整数,也可以是@开头的字符串,比方

    -100106123456

    要么

    @an_example_channel
  • 超级群组(supergroup):与频道完全相同

5. 实战开发

Telegram Bot 开发手记:实战篇 。

参考资料

telegram参数是什么

VIDEO

本视频是Telegram Bot 机器人编程系列的第四集。 本集介绍怎样在一个主下令后加强!参数来加强主下令的功能, 我们可以把一个主下令下再加二级下令,甚至三级下令。 这样,我们可以把一些相关的功能都放在同一个主下令底下处置。

编辑神器网址 https://columns.dengnz.com

相关的代码请翻到下面

下期预报:

Telegram Bot 发送美丽的消息,粗体,斜体,Markdown另有HTML[第五集]

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

本频道旨在分享生活中种种小本领, 如用小米盒子看国内视频, 怎样使用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

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

本视频中使用的代码:

 function doPost(e){ var dataFromTelegram = { "method": "post", "payload": e.postData.contents } var body = JSON.parse(e.postData.contents); body.message.chat.id = body.message.chat.id + ''; var payload = preparePayload(body); var data = { "method": "post", "payload": payload } var dataToTelegram = { "method": "post", "payload": payload } UrlFetchApp.fetch("https://api.telegram.org/bot682267360:AAHmjSil8oylavD2pENLLpcMU1svaD7mVeA/", data); } function preparePayload(body){ var 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": "你好, 欢迎使用本机器人, 本机器人如今只熟悉颜色。", } 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" + "悟空的日常\n" + "YuFeng Deng\n"; 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 } 

相比于使用其他代理软件,然后Telegram设置链接当地代理软件而言,该方法更方便一些,

无需每次启动Telegram都需要先启动代理软件,特殊是对于手机使用者来说。

至于该软件的特性,大概就是占用资源少、使用方便、Telegram官方支持!(是不是官方开发的我也不知道,预计不是)。

安装過逞略,直接说使用。

偏重说一动手机客户端,由于电脑客户端本身就有梯子,这个需求不如手机客户端大。

安卓手机客户端设置教程:看图一步步设置即可。(点击图片可放大。)

最后一步中输入以下信息点击右上角对号完成即可轻松上TG,再也不需要手机单独设置梯子了。

赶紧体验一下吧!!!

MtprotoProxy设置:————————————————服务器IP:18524426118服务器端口:8443MTProxySecret%3a4412c0e02047b06dc023ff64562de143

TG一键链接%3a点我直接设置(需要安装TG客户端)

本文网址:

http://www.1cm8858.com/d/202112144019_8028_1043918948/home

Ten articles before and after

配置telegram走ss/ssr/v2ray/trojan代理关于将作为电报中转服务的参考·Issue#199fw876helloworldGitHub-电报telegram技巧分享

在“说想你”这件事上[原创]密码破译从数字到拼音再汉字-电报telegram技巧分享

【15.胡适的白话电报作品15号-电报telegram技巧分享

近期国际电信业合并动态一瞥国际电联及世界无线电通信大会(WRC)简介-电报telegram技巧分享

昆虫记全文免费在线阅读《红星照耀中国+长征飞向太空港星星寂静的春天(部编版八上推荐-电报telegram技巧分享

电报群组广播Telegram福利资源群老司机开车群-电报telegram技巧分享

最早的无线电报的传输距离是多少?机-电报telegram技巧分享

小埋处刑曲鬼子电报员bg宴がはじまる!三澤康広mp3歌曲下载-电报telegram技巧分享

共青团中央?龍凤:菲律宾马尼拉最大军火商/手枪支买枪械武器军事射击黑产猪肉(@FLL84)-电报telegram技巧分享

telegram主题、多帐号登入-电报telegram技巧分享