今天開始做我們的 Telegram Bot!
Telegram 是一個通訊軟體,就像是 Messenger 或 Line 一樣,只不過它更加的「開放」,你甚至可以自己寫一個喜歡的介面。
他的 API 文件非常完整,我們在寫 Bot 的時候應該會常常需要用到,先在這裡提供個連結。
Cloudflare Workers 是 Cloudflare 提供的一個 Serverless 運算服務,免費方案的上限是一天 100,000 個請求,對我們自用的 Bot 非常夠用。
在使用前,我們需要先了解一下免費方案的一些相關限制。
第一個限制代表你不能將整個 JSDOM 這種大 Package 包起來丟上去。
第二個限制代表你程式不能寫太複雜的運算,像是大量文字比對或是圖片處理之類的。
第三個請求應該跟我們要做的關係比較不大,但還是提醒一下,如果你要做合併很多資料來源的事,要小心不要超過 50 個。
我在這裡推測你都先註冊好 Cloudflare 帳號了,那就讓我們開始吧!
我認為 Cloudflare Workers 的用途很廣,這裡列出幾個例子:
你可以將 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
了。
這樣專案大致就建置完成了,明天就該來想點重要的部分囉。
以 10/02 20:00 ~ 10/03 20:00 文章觀看數增加值排名
+1337
#18 用免費 Serverless 及 JavaScript 寫 Telegram 聊天機器人!
+242
JS 07 - 原型方法:欲達則必速
+141
D19 - 「吶,你想要成為什麼顏色?」:打造一個調色盤吧!
+126
# 18 數據上的各種距離(3)
+124
Proxmox VE 掛接網路儲存 (二)
+112
Day 1 無限手套 AWS 版:掌控一切的 5 + 1 雲端必學主題
+107
[區塊鏈&DAPP介紹 Day25] Dapp 實戰 投票系統 - 1
+102
DAY 18 製作 Nav Bar - dropdown
+102
Day20 - 用 Ruby on Rails 抓臺灣證券交易所資料-每日收盤行情
+99
Day18 Let's ODOO: Paper Format
看吧,Cloudflare Workers 可以用來刷流量