Try   HackMD

Telegram Bot 開發

Sean 韋詠祥

Note:
日期:2023-07-22(六)Day 3
課程時間:14:30 - 17:30

14:30 - 15:30 (60 min) 建立環境、Echo Bot、晚餐吃什麼
15:40 - 16:30 (50 min) 保存狀態、隱私模式、修改資訊
16:40 - 17:30 (50 min) 報時機器人、猜拳 Bot、HTTP 喵咪

Day 1 下午 yc 帶 1 Hr 認識 TG Bot
Day 3 上午 Package、爬蟲
前一堂 廣度課程(AI、Arduino)
晚餐後為黑客松時段


Sean 韋詠祥

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

Note:
我的第三堂課
Day 1 晚上 廣度課程 網路治理(選)
Day 2 晚上 Py Module
Day 3 下午 TG Bot 開發(這堂)


課前準備

  • 用電腦打開 Telegram 並登入帳號
  • 確認電腦中有 Python 及 poetry 環境

Note:
給 3 分鐘確認已登入 TDesktop
14:35 繼續


建立 Telegram Bot 🤖

Note:
取得 Bot Token
14:35 開始
先照簡報講一次 2 min
實際操作一次 3 min
再留時間給大家實作 5 min
進階 + 緩衝 5 min
14:50 繼續


找到 Bot Father

點擊 @BotFather 並按下「START」

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →


建立新的 Bot

使用 /newbot 指令,輸入名字、@username

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →


完成!

這串 12345:AAJqs_w-4 格式的文字就是你的 Token

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →


測試 Telegram API

URL: https://api.telegram.org/bot<TOKEN>/getMe

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →


提醒事項

  • 請將 Bot Token 保存好,不要傳給其他人
  • 如果外洩了,可以用 /revoke 指令重置

實作時間

  • 請想好 Bot 的名字、username
  • 找到 @BotFather,依指示建立 Bot
  • 成功建立後,用瀏覽器測試 Bot Token

Note:
14:40 開始
講解 2 min
示範 3 min
實作 5 min
14:45 繼續
進階 5 min

停在這,先給學員實作
過五分鐘介紹 getUpdates(進階)


再次測試 Telegram API

URL: https://api.telegram.org/bot<TOKEN>/getUpdates

Note:
14:45 介紹
實作到 14:50 繼續


Python Telegram Bot 🐍

撰寫你的第一隻 Telegram 機器人

Note:
確認完 token 有效
改用 Python 處理

14:50 開始
建立環境、安裝套件
講解 3 min
學員操作 7 min
15:00 繼續


建立開發環境

  • 建立新資料夾(mkdir ~/tg-bot
  • 用 VS Code 開啟(code .
  • 初始化專案(poetry init

安裝 telebot 套件

指令:poetry add pyTelegramBotAPI

poetry add pyTelegramBotAPI

Note:
14:50 開始
講解 3 min
學員操作 7 min
15:00 繼續


練習:Echo Bot

Note:
15:00 開始
下一頁詳細需求


Echo Bot 開發要求

請寫出你的第一隻 bot

  • 需求一:說什麼回什麼
  • 需求二:輸入 /ping 回覆 PONG
  • 需求三:執行程式後,用 print() 說已上線

可以從 echo_bot.py 範例開始修改

Note:
15:00 開始
講課 3 min
學員練習 7 min
到 15:10 回來
帶學員操作 5 min


練習:晚餐吃什麼 🍽️

不只我有選擇障礙吧?

Note:
15:15 開始
講解 5 min
學員實作 10 min
15:30 下課
休息到 15:40
示範 5 min
緩衝 5 min


前情提要

每次到了吃飯時間
為了晚餐要吃什麼都煩惱好久
學會 Telegram Bot 開發的你
決定做一隻 Bot 解決世紀難題

Note:
15:15 開始
講解 5 min
學員實作 10 min
15:30 下課
休息到 15:40
示範 5 min
緩衝 5 min


成品範例(一)


成品範例(二)


需求一:/add 新增品項

建立 foods 全域變數
在收到 /add xxx 指令時
xxx 放進 foods 列表
然後回覆 okay


需求二:/list 列出所有品項

告訴使用者目前有哪些美食

合併字串後,用一則訊息發送


需求三:/eat 隨機決定美食

幫使用者決定晚餐要吃什麼

從美食清單中,隨機挑一個給使用者

Hint:可以用昨天教到的 random 函式庫


實作時間

基本需求:

  • /add 新增品項
  • /list 列出所有品項
  • /eat 決定隨機美食
# 可以複製 Echo Bot 來改
cp echo_bot.py my_bot.py

Note:
提醒學員 function 名稱不要撞 keyword

先往後介紹進階功能、官方文件
再翻回來這頁放著

15:15 開始
講解 5 min
學員實作 10 min
15:30 下課
休息到 15:40
示範 5 min
緩衝 5 min
15:50 繼續


進階功能

  • /help 使用說明
  • /remove 我不喜歡吃這個
  • 看到關鍵字「吃什麼」就跳出來刷存在感
  • 支援多位使用者(獨立美食清單)
  • 顯示最近 5 次推薦的食物、時間、使用者

Note:
給提早做完的學員練習
不留講解/示範時間

再往後翻一頁,講完 msg 再開始練習


補充:收到的 message 裡有什麼

練習自己看文件 (⁎⁍̴̛ᴗ⁍̴̛⁎)

https://pytba.readthedocs.io/en/latest/types.html#telebot.types.Message

Hint: 常用的有 from_user、text、chat、date

Note:
給提早做完的學員參考
不留講解/示範時間

講完後,先翻回去


中場休息

15:30 - 15:40 起身活動筋骨

Note:
14:30 - 15:30 (60 min) 建立環境、Echo Bot、晚餐吃什麼
15:40 - 16:30 (50 min) 保存狀態、隱私模式、修改資訊
16:40 - 17:30 (50 min) 報時機器人、猜拳 Bot、HTTP 喵咪

15:40 回到前面,示範 Dinner Bot


保存程式狀態 💾

用 JSON 檔儲存當前狀態

Note:
15:50 開始
講解示範 3 min
學員實作 7 min
16:00 繼續


現況回顧

  • 晚餐吃什麼 美食清單
  • 重開了,然後呢

可以如何保存呢?

  • 資料庫
  • 文字文件.txt
  • JSON 檔

回顧:上午 Package 課程 教到

Note:
吃飯前 Vincent 帶過基礎


實作時間

請儲存在 foods.json


邀請 Bot 加入小隊 🫡

Note:
16:00 開始
講解 2 min
實作 3 min
16:05 繼續


邀請群組


選擇群組


實作時間

請加到你們的小隊群

Note:
16:00 開始
講解 2 min
實作 3 min
16:05 繼續


設定 Privacy Mode 🔒

Note:
16:05 開始
講解示範 3 min
實作 7 min
16:15 繼續


預設能收到

  • 所有私訊
  • 加入退出通知
  • 傳給你的指令
  • 回覆你的內容

Ref: Bot FAQ


如果想看到所有訊息呢?

set privacy

Note:
My Bot > @bot > Bot Settings > Group Privacy > Turn on


實作時間

設定 Privacy Mode

  • 找到 BotFather
  • 使用 /mybots 指令打開選單
  • Bot Settings > Group Privacy

Note:
16:05 開始
講解示範 3 min
實作 7 min
16:15 繼續


組內測試

現在,輸入 /add 美食 大家都收得到

開始大亂鬥吧!

Note:
不要洗板


Bot 資訊設定 ℹ️

Note:
16:15 開始
指令列表 5 min
16:20 繼續
相關資訊 10 min
16:30 下課休息
16:40 繼續課堂


設定指令列表 ⌨️

Note:
16:15 開始
指令列表 5 min
16:20 繼續
相關資訊 10 min


設定方式


實作時間

找 Bot Father > Edit Bot > Edit Commands

指令格式:

help - 使用說明
add - 新增美食
....

設定頭貼 📷

Edit Botpic

小技巧:https://picsum.photos/1280/1280


設定關於 💬

Edit About


設定描述 ✍️

Edit Description / Edit Desc Picture

小技巧:https://picsum.photos/640/360


中場休息

16:30 - 16:40 找隊友聊聊題目

Note:
14:30 - 15:30 (60 min) 建立環境、Echo Bot、晚餐吃什麼
15:40 - 16:30 (50 min) 保存狀態、隱私模式、修改資訊
16:40 - 17:30 (50 min) 報時機器人、猜拳 Bot、HTTP 喵咪


報時機器人 ⏰

Inline Keyboard

Note:
16:40 Intro + Demo
16:45 實作
16:50 教學
16:55 繼續


成品範例


回顧:昨天 Module 上課內容


鍵盤使用方式

  • 2D List 二維陣列
  • callback_data / Callback Query

程式碼參考

Code: https://tg.pe/XmN


實作時間

  • 讓 Bot 發送帶有按鈕的訊息
  • 點擊按鈕後,更新訊息內容
  • 完成後跳出提示文字

可參考簡報前一頁寫法

Note:
16:40 Intro + Demo
16:45 實作
16:50 教學
16:55 繼續


練習:猜拳 Bot ✌️

Inline Keyboard

Note:
16:55 Intro + Demo
17:00 實作 10 min
17:10 教學
17:15 繼續


成品範例


實作時間

基本需求:

  • 收到 /game 指令,隨機挑選自己出的拳
  • 訊息下方出現「剪刀 石頭 布」三個按鈕
  • 玩家出拳後,顯示出了什麼

Note:
16:55 Intro + Demo
17:00 實作
17:10 教學
17:15 繼續


進階功能

  • 記錄每個人的勝率
  • 同一則訊息重新開局
  • 雙人遊玩模式
  • 支援多場遊戲同時進行

HTTP 喵咪 🐈

Inline Bot

Note:
17:15 介紹示範
17:20 實作
17:25 教學
17:30 下課


使用範例


設定方式


程式範例

from telebot.types import InlineQueryResultPhoto

實作時間

  • 啟用 inline bot 功能
  • 任意查詢時,能出現 200 OK 圖片
  • 輸入 404、502 等狀態碼,能給出對應結果
  • 進階:過濾不屬於狀態碼的輸入
  • 進階:在圖片 caption 加上
      「404 Not Found」等對應名稱

Note:
17:15 介紹示範
17:20 實作
17:25 教學
17:30 下課


Thanks 🥳

自由練習 & QA


投影片連結:https://hackmd.io/@Sean64/tg-bot-sitcon2023


CC-BY

這份投影片以 創用 CC - 姓名標示 授權公眾使用,原始碼及講稿請見 此連結

Note:
時間規劃

Time Topic Duration
14:30 ~ 14:35 開場、課前準備 5 min
14:35 ~ 14:50 建立 Bot 15 min
14:50 ~ 15:00 安裝 telebot 10 min
15:00 ~ 15:15 Echo Bot 15 min
15:15 ~ 15:30 晚餐吃什麼 15 min
15:30 ~ 15:40 中場休息 10 min
15:40 ~ 15:50 晚餐吃什麼 示範 10 min
15:50 ~ 16:00 保存狀態 10 min
16:00 ~ 16:05 邀請加入群組 5 min
16:05 ~ 16:15 隱私模式 10 min
16:15 ~ 16:20 指令列表 5 min
16:20 ~ 16:30 修改 Bot 資訊 10 min
16:30 ~ 16:40 中場休息 10 min
16:40 ~ 16:55 報時機器人 15 min
16:55 ~ 17:15 猜拳 Bot 20 min
17:15 ~ 17:30 HTTP 喵咪 15 min

參考資料 / 延伸閱讀