Try   HackMD

資訊之芽二階大作業 Discord Bot 說明

作業檔案

檔案架構

  • src/ (程式碼)
    • main.py
    • todo_list.py 實作 TODO list 功能
    • guess.py 實作猜數字功能
    • picture.py 上傳圖片功能
    • currency.py 爬蟲功能 (爬貨幣、匯率相關資訊)
  • info/
    • token.txt 放 token
    • extensions.txt 記錄有什麼功能
  • storage/ (放程式執行時產生的要儲存的檔案)

使用方式

  1. pip install -U discord.py
  2. 準備好一個discord bot (參考簡報)
  3. token.txt 放入你的token
  4. 執行:
    • 打開指令列
    • 移動到 homework/src
    • 輸入 python main.py
  5. 新增 xxx 功能:
    1. homework/src 中新增一個 xxx.py
    2. xxx.py 中實作功能
    3. info/extensions.txt 中加上一行 xxx

作業要求

一、程式 (90 pts)

1. 基本 (35 pts)

  • TODO List (25 pts)
    • 新增 (已完成)
    • 刪除 (5 pts)
    • 顯示 (5 pts)
    • 顯示時照日期排序 (5 pts)
    • 清空 (5 pts)
    • 重開時記錄還會保存 (5 pts)
  • 猜數字 (10 pts)
    • 隨機產生不含0且沒有數字重複的四位數 (2 pts)
    • 猜了會回應幾A幾B、猜對會結束 (6 pts)
    • 使用者不想玩了可以跳出 (2 pts)

2. 自訂功能 (45 pts)

  • 一個功能15分,每個功能至少有三個指令或是超過60行程式
  • 至少有一個功能要用到爬蟲,一個功能要用到圖片(可以是同一個功能)
  • 可以參考原本提供的範例 (picture.py, currency.py, weather.py, covid.py) ,但沒有修改的話就不算

3. 其他 (10 pts)

  • coding style
  • 使用者友善程度(例如實作 help)
  • 防呆機制(若使用者輸入錯誤,程式不會直接爛掉)

二、文字說明 (10 pts)

請你使用 Word 等文件編輯器編寫,再儲存成「report.pdf」,一同放進上傳的壓縮檔中。

  • 程式檔案架構 (1 pt)
    • 請你簡單說明每個檔案分別在實作哪些功能
  • 列出程式中總共 import 了哪些 module (1 pt)
    • 除了 main.py 裡面的discordos之外都必須列出
  • 指令及功能介紹 (8 pts)
    • 對每個 extension 請詳述它的功能、使用方式
    • 需要說明使用者要輸入的內容或參數、預期程式回傳的內容
參考範例如下(請點此)

程式檔案架構

  • src/guess.py: 猜數字遊戲
  • src/todo_list.py: TODO list (待辦清單)
  • src/picture.py : 圖片上傳
  • src/currency.py : 外匯匯率
  • src/weather.py : 衛星雲圖
  • src/covid.py : COVID-19 人數統計

使用的模組

  • io, os, re, random, csv, datetime
  • pickle, requests, bs4, discord

指令及功能介紹

guess: 猜數字

  • 使用者可以進行猜數字遊戲
    • 遊戲規則:使用者可以猜一個由不重複 1-9 組成的四位數字,猜對會回應幾A幾B,代表:
      • A - 猜對數字及位置
      • B - 猜對數字但位置錯誤
  • 輸入指令 $guess 開始遊戲,之後直接輸入所猜的數字
  • 隨時輸入 quit 可結束遊戲

todo_list: 待辦清單

  • 一個方便好用的待辦清單
  • 四種功能的指令:
    • 新增 - $add <date> <label> <item>
      • 依照參數新增一個新的待辦事項到清單上
      • date 代表 月/日 的日期,如 06/24
      • label 代表該待辦事項的標籤,可以作為分類使用
      • item 代表該待辦事項的文字,不限長度
    • 消除 - $done <date> <label> <item>
      • 把一個待辦事項消除(標示為已完成)
      • 輸入參數同 $add
    • 顯示 - $show [label]
      • 列出所有目前的待辦事項,會貼心地依照日期排序
      • 可以輸入參數 label 代表只顯示指定 label 內的待辦事項
    • 清除 - $clear
      • 清除所有待辦清單上的事項
      • 可能適用於一次完成所有事情或要重新安排時間的情況

picture: 圖片上傳

  • 給使用者上傳圖片,儲存之後提供下載
  • 上傳圖片在並送出時輸入指令 $upload 可以上傳
  • 輸入指令 $show_pic 就會秀出圖片給使用者

currency: 外匯匯率

  • 抓取玉山銀行網頁的外國貨幣即時匯率資料
  • 依照貨幣別,每個貨幣會有「即期匯率」、「網路銀行/App優惠匯率」、「現金匯率」等匯率類別,每種匯率再分成「買入」跟「賣出」兩種價格。
  • 可用指令:
    • $all_rates - 一次列出所有貨幣的全部匯率
    • $curr_list - 列出所有可以查詢的貨幣名稱及代號
    • $rates <cur> - 顯示單一貨幣的匯率
      • cur 代表選定的匯率代號,可以用 $curr_list 查詢。

weather: 衛星雲圖

  • 從中央氣象局網頁抓取 24 小時內的衛星雲圖
  • 輸入指令 $weather 可以顯示最新一筆
  • 可以增加參數來調整時間:
    $weather [H] [M] 查詢指定時、分的衛星雲圖
    • H 代表 24 時制的幾點,M 代表幾分
  • 貼心提醒:分鐘數會無條件捨去到以 10 分鐘整為單位。
    如果該時間還沒有衛星雲圖發布,有可能會顯示前一天的。

covid: COVID-19 統計資訊

  • 從疾管署資料 API 抓取最新的 COVID-19 人數統計資訊
    • 包括總確診、解除隔離、死亡、送驗、排除人數
    • 以及昨日確診、昨日送驗、昨日排除
  • 輸入指令 $covid 抓取並顯示統計資料

作業繳交

  1. 繳交方式:
    • 文字說明請命名為report.pdf,放在 homework 資料夾中
    • 把整個 homework 資料夾壓縮成 zip 上傳到表單
    • 繳交檔案時記得把 token 刪掉喔~
    • Google表單:https://forms.gle/aFR3X5VUDkMooD3R8
  2. 完成期限:7/4,不接受遲交。
    • 如果多次繳交則以期限內最後一次上傳為主
  3. 請勿互相抄襲,可以跟同學討論,但討論完以後請自己寫。