## 第二次大作業 - Discord Bot 北區:黃千睿 竹區:李慕庭 --- ## Introduction & Score ---- * 自己實作一個Discord的機器人 * 還要自己設計一些小小的內容~ * 最後要寫一份報告介紹你的設計 > < ---- ### 這個機器人要有的功能 * 使用者自建todo list * 玩Wordle * 自訂功能一 * 自訂功能二 ---- ### Todo list * 新增一個待辨事項 (5%) * 刪除一個待辨事項 (5%) * 排序並輸出所有待辨事項 (5%) * 清空所有待辨事項 (5%) ---- ### Wordle * 爬單字資料庫 (5%) * Random (2%) * 回應 (8%) * 結束(成功/公布答案) (5%) ---- ### 自訂功能一 * 指令一 (4%) * 指令二 (3%) * 指令三 (3%) ---- ### 自訂功能二 * 指令一 (4%) * 指令二 (3%) * 指令三 (3%) ---- ### 給個例子 - 玩1A2B * 開始玩 * 猜一個數字 * 結束時輸出猜測次數排名 ---- 例子出來了,不能寫1A2B 當然如果你想要有超過三個指令也行 只是多的沒有分數,但能讓你的bot更完整 ---- ### Coding Style(10%) * 優質易懂的變數名稱 * 詳細的註解 * 用函數or其他方法包裝功能 * PEP8 * Error Handling **達成一項就是2分** ---- ### Report * 解釋你的專案架構(5%) (有哪些檔案、各代表什麼) * 解釋你如何實作的 (10%) (尤其是自訂功能的部分) ---- ### 上臺分享 * 勇敢走上臺講話(5%) * 講師們評分(5%) * 來自同學的評分(5%) ---- ### Bonus (10%) ---- ### 滿分:110 聽起來很可怕嗎? ---- ### 可以找朋朋~ [分組表單](https://docs.google.com/spreadsheets/d/1vxJv7UKPAJ4szB7z6xVC1xrkN94XVZA4mI5sKdKsu0o/edit?usp=sharing) 請在5/21前填寫完畢 **1~3人一組** ---- ### DeadLine : 6/18 要上臺報告喔 --- ## Set up discord ---- [Download discord desktop](https://discord.com/download) ---- ### Create a sever ![](https://hackmd.io/_uploads/SyiOpGF4n.png) (左下角的加號) ---- ### Create a sever ![](https://hackmd.io/_uploads/Skp6aMFVh.png) (建立伺服器) ---- ### Create a sever ![](https://hackmd.io/_uploads/H1mV0MY43.png) (我和我的好友) ---- ### Create a sever ![](https://hackmd.io/_uploads/BktUCftN2.png) (取名字 & 建立) ---- ### Create an application [Enter developers application](https://discord.com/developers/applications) ![](https://hackmd.io/_uploads/SJcsbXKN2.png) (右上角 **new applicaion**) ---- ### Create an application ![](https://hackmd.io/_uploads/r1CCWXY43.png) (取個名字 & Create) ---- ### Create an application ![](https://hackmd.io/_uploads/ByH6zmKN3.png) (Pivileged Gateway Intents全開 & 按save change) ---- ### Create an application ![](https://hackmd.io/_uploads/SJ25XQtE3.png) OAuth2 → URL Generator → scope → 打勾bot ---- ### Create an application ![](https://hackmd.io/_uploads/H1XONmYNn.png) OAuth2 → URL Generator → Bot permissions → 按照上面的打勾(?! ---- ### Create an application ![](https://hackmd.io/_uploads/S1dkrXtV3.png) OAuth2 → URL Generator → Generated URL → Copy ---- ### Create an application 把URL貼到google上 ![](https://hackmd.io/_uploads/Hk8uHmKE2.png) (選擇剛剛建立的伺服器 & 繼續 & 繼續 & 繼續) ---- 然後你應該就要成功看到 bot跳進你剛建立的伺服器 --- ## Set up environment ---- ### Download template [Github link](https://github.com/Fireball0424/Sprout2023py---2nd-Project/tree/main) ---- ### Install packages ``` $ pip install discord $ pip install python-dotenv ``` ---- ### Enviromental Variables 回到剛剛的application → bot → copy TOKEN ![](https://hackmd.io/_uploads/ByVoZrYVn.png) ---- ### Enviromental Variables 複製template中的 .env.defaults 命名為 .env,並把TOKEN貼上 ![](https://hackmd.io/_uploads/SklrZrKNh.png) ---- ### Test In VS code command, run bot.py ``` $ python bot.py ``` ---- ### Test 進入一般頻道 → 打 ```$Hello``` ![](https://hackmd.io/_uploads/S1qWfSKE3.png) 機器人如果回覆你 Hello, world,代表設置成功咯~ --- ### 模板架構 ---- * bot.py * core.py * cmds/ * main.py * todolist.py * wordle.py * custom1.py * custom2.py * music(bonus).py * event.py * .env * data.json ---- ### <提醒> 你可以自由import任何library 也可以新增任何你想要的檔案 但記得在report中說明 ---- ### bot.py run bot.py → 執行bot 在VSCode terminal 中可以用 Ctrl + C 來中止 ---- ### core.py 用cog管理指令 可以在discord中載入指令,不用重新執行bot ``` $load extend $unload extend $reload extend ``` ---- ![](https://hackmd.io/_uploads/rktCetYNn.png) ---- 可以看現在所有的指令 ``` $help ``` ---- ![](https://hackmd.io/_uploads/SJj1GjtV3.png) --- ## Todo List ---- 將 item(待辨事項) 加入todo list ``` $AddTodoList item ``` ---- 將 item(待辨事項) 移除todo list ``` $RemoveTodoList item ``` 如果todo list中沒有這個待辨事項 bot要輸出 "此待辨事項不存在" ---- ![](https://hackmd.io/_uploads/HJ8xq_YVn.png) ---- 將todolist按照 **字典序** 排序並輸出 ``` $SortTodoList ``` ---- 清空todolist ``` $ClearTodoList ``` ---- ![](https://hackmd.io/_uploads/BJ-lodFVn.png) --- ## Wordle ---- ### 遊戲介紹 * 答案是一個5個英文字母且存在的單字 * 每次玩家猜出一個單字,要回答每個位置的字母 * 位置及字母都對 * 字母對但位置不對 * 都不對 * 最多只能猜6次 ---- ### 玩玩看就知道了 [Wordle Link](https://www.nytimes.com/games/wordle/index.html) ---- ### 初始化 loading [單字庫](https://gist.github.com/cfreshman/d97dbe7004522f7bc52ed2a6e22e2c04),可以按**raw**來載入txt file 不限定讀取的方法 但不能是直接讀取本機檔案 ---- ### Wordle 指令名稱 ``` $Play ``` Random選一個單字設為答案 ---- ### Wordle 指令名稱 ``` $Ask ans ``` 要注意一些情況 * 沒有輸入```$Play``` 就直接輸```$Ask``` * 問超過6次要停 * 問不是5個單字的字母 * 問不是單字的字母組合 ---- 為了方便實作,Ask response可以輸出 * 大寫 = 位置對字母也對 * 小寫 = 字母對但位置不對 * \# = 都不對 ---- 正確答案 : right Ask : input 輸出 : i###T ---- ![](https://hackmd.io/_uploads/rJJZC9F43.png) ---- ![](https://hackmd.io/_uploads/HyAWJit4n.png) ---- 設計其他更美觀的輸出方法 (2% bonus) --- ## Bonus - Music Bot ---- 幫一個有基本架構的music bot加上功能 1. 讓使用者能夠透過樂曲名稱搜尋音樂(4%) 2. Queue(2%) 3. Vote(2%) ---- ### Set up music bot ---- ### Music Bot 運作流程 1. 用 yt-dlp 搭配 FFmpeg 去 youtube下載音檔 (mp3) 2. 把你的 Bot 連到 Voice Channel 3. 呼叫 discord.FFmpegPCMAudio 播歌 ---- ### 已經幫你寫好的 Music Bot 指令 1. 下載音檔 2. 將 Bot 連到 Voice Channel 播歌 (沒有播放清單) 3. 暫停 / 繼續 4. 卡歌 / 讓 Bot 離開 Voice Channel ---- * 可以自己實作出 queue, vote 等酷酷的功能 * 使用完 Music Bot 記得呼叫 $leave 離開 Voice Channel,不然會因為閒置太久出錯 (重新啟動Bot) * [yt-dlp](https://www.mankier.com/1/yt-dlp) 不是 python 套件,所以我們會用神秘的方法讓 Music Bot 動起來 ---- ### 一些前置作業 ---- ``` pip install pyNaCl ``` * 如果你的作業系統是 Windows : * 把 [FFmpeg 和 yt-dlp 執行檔們](https://drive.google.com/drive/folders/1saBzH-jajJuDgn2_d_Ts_Yf-RtNj6aZa?usp=sharing)下載下來放進 Sprout2023py---2nd-Project/ ---- * 如果你的作業系統不是 Windows * 到 [FFmpeg 的下載網站](https://ffmpeg.org/download.html) 選擇自己的作業系統然後從下載的 packge 中找到 `ffmpeg` 和 `ffprobe` 兩個執行檔 * 到 [yt-dlp 的 GitHub](https://github.com/yt-dlp/yt-dlp) 滑到 Release Files 下載對應的執行檔 ---- 你的 Directory 應該會長這樣 ![](https://i.imgur.com/ElRT0dO.png =200x) ---- ### 關於 yt-dlp * yt-dlp 不是 python 套件,所以不能像之前用過的東西一樣直接 import * yt-dlp 是我們放在資料夾中的執行檔 * 可以嘗試在小黑窗 (terminal) 輸入 ```bash= ./yt-dlp_x86.exe <youtube url> ``` ---- * 為了讓我們可以在 python 裡面使用 terminal 的指令,我們呼叫 os.system() ```python= os.system(f"yt-dlp_x86.exe --extract-audio --audio-format mp3 --audio-quality 0 {url}") ``` ---- ## [Q&A document](https://docs.google.com/document/d/1w0tAYyEUcaJQWVlcjD7OVqDPxFNP6brsQSWI2lsizyc/edit?usp=sharing)
{"metaMigratedAt":"2023-06-18T02:44:36.623Z","metaMigratedFrom":"YAML","title":"第二次大作業","breaks":true,"contributors":"[{\"id\":\"12fd27f5-82a5-4f30-8a85-e747ae0676cf\",\"add\":1380,\"del\":83},{\"id\":\"cc9d2950-af2b-4feb-8745-4367e4091769\",\"add\":6101,\"del\":975}]"}
    958 views
   owned this note