# Telegram bot研究筆記 ## 需要先做的準備 > * 需要安裝 node.js,建議在官網安裝 LTS 的 node.js 版本。 > * 需要對 node.js 有基本的認知,例如語法。(英文教學) > * 需要懂得基本的命令行介面(CMD、Terminal)的操作。(英文教學) > * 需要有一個 Telegram 帳號 ## 透過Telegram BotFather建立一個新的Telegram Bot 1. 打開 Telegram,在搜尋框輸入 @BotFather,點擊第一項的搜尋結果,然後按 Start ![](https://i.imgur.com/ARe0cvp.png) 2. 於對話框中輸入`/newbot` 3. 輸入任意你喜歡的Bot名稱,中英文都可以(但基本上建議英文較佳) 4. 輸入Bot的username > 需注意不可與其他現有bot的username相同以外,還必須以Bot或_bot結尾。 e.g xxx_bot or xxxBot 5. 成功建立new bot的話,可看到@BotFather回傳token ![](https://i.imgur.com/LwlkCuz.png) ## 開始針對telegram bot進行coding 1. 建立一個資料夾,命名為nodejsbot,透過命令行介面使用指令進入該資料夾 > `$ cd nodejsbot` 2. 在命令行介面執行npm初始化指令,過程當中不停按Enter即可。 > `$ npm init` > 該指令會在資料夾內自動建立package.json,方便針對該路徑專案使用的npm library進行管理。 3. 執行npm install指令,安裝telegram bot api library “[yagop/node-telegram-bot-api](https://github.com/yagop/node-telegram-bot-api)” > `$ npm install node-telegram-bot-api --save` 4. 在資料夾中建立app.js,貼上以下範例code,並將程式碼內相對應變數改成實際上內容: > * ${YOUR_TOKEN}:前面步驟中取得的Telegram Bot Token > ```javascript= var TelegramBot = require('node-telegram-bot-api'); var token = 'YOUR_TOKEN'; var bot = new TelegramBot(token, {polling: true}); //使用Long Polling的方式與Telegram伺服器建立連線 //若telegram bot收到 "/Start" 訊息時會觸發這段程式 //透過bot.sendMessage()回傳指定訊息 bot.onText(/\/start/, function (msg) { var chatId = msg.chat.id; //用戶的ID var resp = '你好'; //括號裡面的為回應內容,可以隨意更改 bot.sendMessage(chatId, resp); //發送訊息的function }); //若telegram bot收到 "/cal" 訊息時會觸發這段程式 //透過bot.sendMessage將利用eval計算出的結果進行回傳 bot.onText(/\/cal (.+)/, function (msg, match) { var fromId = msg.from.id; //用戶的ID var resp = match[1].replace(/[^-()\d/*+.]/g, ''); // match[1]的意思是 /cal 後面的所有內容 resp = '計算結果為: ' + eval(resp); // eval是用作執行計算的function bot.sendMessage(fromId, resp); //發送訊息的function }); ``` 5. 在命令行介面輸入以下命令,以執行我們剛剛寫好的 Bot > `$ node app.js` 6. 在 Telegram 的搜尋框輸入 @username,username 為前面步驟建立telegram bot時輸入的 username 7. 點擊 Start 按鈕,輸入 /cal 2*2 ![](https://i.imgur.com/DidFZw2.png) ## 個人筆記 * 上面的部分都是自己跟bot之間的互動部分,如果要把bot加入至group內,並讓bot在group內可以作出任何回應或根據特定條件做出相對應回應的話,需要在@BotFather,透過 "/setprivacy" -> 選擇bot -> "Disable" (畫面上若顯示 Success! The new status is: DISABLED. 即代表設定成功) * 根據實際操作結果,發現透過bot.on 搭配設定'message'可針對group內任意訊息進行接收,並把接收到的訊息進行所需處理 ```javascript= bot.on('message', function (msg) { var chatId = msg.chat.id; //用戶的ID console.log(msg.from) // bot監聽到的訊息,其發送者的資訊 console.log(msg.text) // bot監聽到的訊息內容 }); ``` ## 參考資料 * [Telegram APIs](https://core.telegram.org/api) * [[ChatOps] 簡單介紹如何開發一個 Telegram Bot](https://godleon.github.io/blog/ChatOps/howto-develop-telegram-chatbot/) * [Telegram Bot 開發起手式](https://jiepeng.me/2016/07/19/develop-telegram-bot) * [[教學] 如何用 node.js 建立一個簡單的 Telegram Bot?](https://blog.3bro.info/archives/nodejs-simple-telegram-bot-tutorial/)