#19 Telegram Bot 起手式

今天开始做我们的 Telegram Bot!

Telegram

Telegram 是一个通讯软件,就像是 Messenger 或 Line 一样,只不过它更加的「开放」,你甚至可以自己写一个喜欢的介面。

他的 API 文件非常完整,我们在写 Bot 的时候应该会常常需要用到,先在这里提供个连结

Cloudflare Workers

Cloudflare Workers 是 Cloudflare 提供的一个 Serverless 运算服务,免费方案的上限是一天 100,000 个请求,对我们自用的 Bot 非常够用。

限制

在使用前,我们需要先了解一下免费方案的一些相关限制。

  • 单一 Script 的大小限制是 1 MB
  • 一次执行的时间上限是 10 ms
  • 一次执行的发送请求数最多为 50 个

第一个限制代表你不能将整个 JSDOM 这种大 Package 包起来丢上去。
第二个限制代表你程序不能写太复杂的运算,像是大量文字比对或是图片处理之类的。
第三个请求应该跟我们要做的关系比较不大,但还是提醒一下,如果你要做合并很多资料来源的事,要小心不要超过 50 个。

我在这里推测你都先注册好 Cloudflare 帐号了,那就让我们开始吧!

用途

我认为 Cloudflare Workers 的用途很广,这里列出几个例子:

  • Reverse Proxy
  • API on Edge
  • Website Uptime Checker
  • Chat Bot Client
  • 刷流量

你可以将 Reverse Prooxy 的逻辑写在 Cloudflare Workers 上,把它当 Load Balancer 之类的东西。
也可以把它当成 API 或定时向网站传请求确认状态,当然也可以用来做 Chat Bot。
除此之外,因为 1 - 50 请求的比例,所以也可以当放大器,且请求是由 Cloudflare 在各地的节点送出,分散位置。不过因为 Cloudflare 为了安全因素有限制每分钟请求数,所以基本上不太可能成为攻击的工具,不过用来说流量不用那麽大量请求,就像是昨天的文章观看数,我用四五行程序 + Cron 5 mins 持续 8 小时就变这样了。

起手式

首先,我们一样需要再建立一个新的专案资料夹,这次就叫它 bot 好了。

接着, 安装 Wrangler 至全域环境:

npm i -g @cloudflare/wrangler

然後在 bot 资料夹中执行:

wrangler init

Wrangler 就会帮你生成好初始的 wrangler.toml 了:

name = "bot"
type = "webpack"
route = ''
zone_id = ''
usage_model = ''
compatibility_flags = []
workers_dev = true
compatibility_date = "2021-10-03"

这个档案就是 Cloudflare Workers 的专案设定档,之後 publish 到 Edge 时就会用到它的设定。

接着,因为我们之後会用到 webpack 来打包,所以还需要建立一个设定档 webpack.config.js:

module.exports = {
    context: __dirname,
    entry: "./index.js",
    mode: "production",
    target: "webworker",
    optimization: {
        minimize: true,
    },
};

再来,因为我们也还是要用 NPM 做开发,所以还是要:

npm init -y

来初始或我们专案 npm 管理的部分。

接着,安装我们会需要用到的开发套件:

npm i -D @cloudflare/wrangler webpack webpack-cli

中间的 -D 代表的是这些套件是开发时要用的,并不是「产品」的一部分。

以及:

npm i itty-router

这个是「产品」的一部分,所以不用加 -D

然後建立一个 src 子资料夹,并在其中新增一个 main.js:

import { Router } from "itty-router";

const router = Router();

router.all("*", async (request) => {
    const { query, headers } = request;
    return response({ data: JSON.stringify({ ...request }, null, query.min ? 0 : 2) });
});

async function main() {
    addEventListener("fetch", (event) => {
        event.respondWith(router.handle(event.request));
    });
}

export { main };

并在专案资料夹中建立 index.js:

import { main } from "./src/main.js";

main();

来引用并执行 main 来监听讯息传入。

与之前使用的 require 不同,我们在这里就用到 ESM 的 import 以及 export 了。

这样专案大致就建置完成了,明天就该来想点重要的部分罗。


每日铁人赛热门 Top 10 (1002)

以 10/02 20:00 ~ 10/03 20:00 文章观看数增加值排名

  1. +1337 #18 用免费 Serverless 及 JavaScript 写 Telegram 聊天机器人!
    • 作者: JacobLinCool
    • 系列:JavaScript Easy Go!
  2. +242 JS 07 - 原型方法:欲达则必速
    • 作者: Felix
    • 系列:JavaScript 从 50% 开始,打造函式库不是问题!
  3. +141 D19 - 「呐,你想要成为什麽颜色?」:打造一个调色盘吧!
    • 作者: 鳕鱼
    • 系列:你渴望连结吗?将 Web 与硬体连上线吧!
  4. +126 # 18 数据上的各种距离(3)
    • 作者: 新增资料夹9
    • 系列:终极大数据地狱
  5. +124 Proxmox VE 挂接网路储存 (二)
    • 作者: Jason Cheng (节省哥)
    • 系列:突破困境:企业开源虚拟化管理平台
  6. +112 Day 1 无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
    • 作者: 用图片高效学程序
    • 系列:无限手套 AWS 版:掌控一切的 5 + 1 云端必学主题
  7. +107 [区块链&DAPP介绍 Day25] Dapp 实战 投票系统 - 1
    • 作者: syhlion
    • 系列:区块链&DAPP介绍
  8. +102 DAY 18 制作 Nav Bar - dropdown
    • 作者: Tilda
    • 系列:SASS 基础初学三十天
  9. +102 Day20 - 用 Ruby on Rails 抓台湾证券交易所资料-每日收盘行情
    • 作者: 小菜
    • 系列:Ruby on Rails 与它们相关的东西 II
  10. +99 Day18 Let's ODOO: Paper Format
    • 作者: 盖瑞
    • 系列:Let's ODOO 开发与应用30天挑战

看吧,Cloudflare Workers 可以用来刷流量


<<:  WEB API

>>:  RISC-V: Branch 指令

Base64

即使HTTP基本身份验证确实使用Base64来编码用户ID和密码,HTTP仍以明文形式传输编码,并依...

[Day 40] 心情随笔後台及前台(二) - 新增心情随笔资料

新增心情随笔资料 今天我们开始新增心情随笔资料, 根据之前的路由, 我们在 App\Http\Con...

从链接/URL 下载在线影片的 5 种最佳方式

如今,YouTube、TikTok、Dailymotion 等在线网站越来越受欢迎,并吸引了全球大量...

{DAY 22} Pandas 学习笔记part.8

前言 这篇文章主要会提到资料分组 会继续利用kaggle上的开源资料进行更多的pandas练习 Ka...

Python 练习

今天也要让大家来练习,只不过今天的东西会稍微难想一点,所以今天一个题目而已。那我们就开始吧 题目 今...