# Discord Bot 學習記錄 ## discord網站 提供了所有指令的寫法,也有分類,遇到不會的語法或報錯時可以來這個網站確認一下 https://discordpy.readthedocs.io/en/stable/api.html ## Day 1 ### **discord bot 指令跟回傳**![截圖 2023-11-09 下午11.52.24.png](https://hackmd.io/_uploads/BJCaSYqXT.png) 這是github找來的sample,研究了一下寫法,其中我查了ctx跟async的意思 * ctx大概就像要有上文,才會有下文的回應,而上文裡面也能放很多資料,讓這個函數更多樣化 * async def是異步函數,跟平常寫的def不太一樣,而需要同時處理多個函數就需要異步函數。根據我的理解,如果同步函數內有一個等待30秒的程式碼,在等待時其他同步函數也會跟著阻塞。而異步函數不會有這個問題,如此一來,函數跟函數間就不會互相影響了。 ### **問題與疑難排解**: 1. 修改程式後有時能成功回傳,有時失敗 上面圖片左方能看出我把指令從ping改成pink,並測試bot是否會回傳。經過測試後發現應先終止終端機再run code,修改的程式才會回傳 ### **參考資料:** https://github.com/smallshawn95/Python-Discord-Bot-Course https://github.com/Rapptz/discord.py --- ## Day 2 ### **數字相加** ![截圖 2023-11-11 上午10.19.29.png](https://hackmd.io/_uploads/Hke2AEPhX6.png) 網路上查到的是兩個數字相加,就是(ctx, x, y),後來找到*表示可變數量的位置,所以就能改成可以輸入多個數字了 - [x] 延伸-改寫成加減乘除都能執行 ### **啟動時bot發送訊息** ![截圖 2023-11-11 下午12.14.48.png](https://hackmd.io/_uploads/BJI9dK2Xa.png) 因為目前我對整個架構不太熟,有時候會寫出一些bug,導致bot不會啟動,所以我加了這個功能,確保他有在discord上面後我再開始測試,不然我就會一直對空氣講話XD ### **問題與疑難排解**: 1. bot重複執行指令 這個問題上次就有發現,但找不到原因,今天終於知道了,如圖下 ![截圖 2023-11-11 下午1.07.47](https://hackmd.io/_uploads/Bkl42Yn7a.png =60%x) 我發現是因為把vscode關掉,但bot還在執行那個檔案,再把vscode打開後執行,就會造成bot又多執行一次,所以我用終端機結束所有正在運行的python ``` killall python ``` --- ## Day 3 ### **翻譯** 上次看到外國實況主的dc會有翻譯機器人,覺得還蠻方便的,試著上網查資料並做做看 ![截圖 2023-11-12 上午11.33.15](https://hackmd.io/_uploads/HySxAXAQT.png) 我是用google翻譯的api進行翻譯,輸入是「>trans 目標語言 要翻的話」。語法看起來還蠻直觀的:翻譯器.翻譯(文本, 目標語言)。下圖是目標語言的縮寫。![2023-11-12_12.33.49](https://hackmd.io/_uploads/Syl1uVAXT.png) 網路上大部分人是做可以透過按想翻譯的訊息下的國家表情符號,但對我來說有點複雜,所以我目前做的是使用者不友善的版本XD。之後會改成剛剛講的那樣。 - [ ] 延伸-按表情符號選要翻譯成的語言 ### google API申請 聽說這個東西能讓機器人幫我查google,所以今天查了一下google的api申請方法。 ### custom search api 今天申請了custom search api,[申請網頁在這](https://console.cloud.google.com),新增一個專案後到api和服務中啟動新的api,搜尋custom sesrch api後就會跑出如圖下的結果![IMG_0252](https://hackmd.io/_uploads/SJ2KjBgNT.jpg) --- ## Day 4 ### Embed 嵌入訊息 這是個讓機器人傳出的訊息好看很多的功能,google搜尋discord embed就會有很多網站能快速使用,我用[這個網站](https://cog-creators.github.io/discord-embed-sandbox/)當作模板,他能讓使用者預覽想製作的embed的樣子 ![截圖 2023-11-16 下午4.32.02](https://hackmd.io/_uploads/BydqQ8XVp.png) 之後我嘗試將之前寫的code結合embed,例如丟硬幣遊戲,讓機器人的回覆更好閱讀。 ## Day 5 ### 讓機器人能發自訂表情符號 之前在使用其他機器人時,他們的訊息都會結合一些自訂的表情符號,整體看起來更活潑。 ![截圖 2023-11-18 下午5.59.47](https://hackmd.io/_uploads/B1PIo-84p.png =50%x) 如果是內建的表情符號只要傳名字就好,ex: `:smile:`所以一開始我讓他傳`":1013moneyz"`,結果一直沒辦法把表情符號傳出來,後來查到要在聊天室打「/emoji的名字」就會跑出像圖中<:1013moneyz:1175347212197310524>的訊息,再讓機器人輸出這串字就好了。 ### 做一些沒意義的指令 ![截圖 2023-11-18 下午5.59.05](https://hackmd.io/_uploads/HJSKaWUEa.png =50%x) 無聊寫一下當作練習 --- ## Day 6 ### google 查圖片 ![截圖 2023-11-30 下午6.18.18](https://hackmd.io/_uploads/SJIdb18ST.png) 之前學了申請google custom search api的方法,之後參考discord.py上的寫法,輸入要找的圖片後,程式就會用api查搜尋內容,存到result中,再結合embed輸出即可 ![截圖 2023-11-30 下午6.19.23](https://hackmd.io/_uploads/HyYnWJUST.png =50%x) --- # 自己做的bot ## 猜硬幣 * 這應該是規則最簡單的一個遊戲,正反面各50%,再放兩個丟硬幣的gif圖,就能試著做做看這個遊戲了 ### Day 1 ![截圖 2023-11-14 下午10.41.12](https://hackmd.io/_uploads/H1bPw-WEp.png) 今天寫出程式碼的大綱,主要是隨機從front跟back選一個,然後用一個if跟else就可以解決了。之後我想再加讓操作者先猜是哪邊,再公佈答案的功能,應該不難。 ### Day 2 今天改善與新增一些機制: * 改善公布結果時硬幣還在轉的問題 * 新增先問玩家想猜哪一面的功能 * 將結果用embed發送 查了一下怎麼寫接收使用者回覆的指令(96~100行)回覆會跑到choice中,再用if判斷是否猜對。 改完之後看到機器人傳的訊息感到神清氣爽 ![截圖 2023-11-18 下午6.24.15](https://hackmd.io/_uploads/Hky1bz8V6.png) ![截圖 2023-11-16 下午2.48.32](https://hackmd.io/_uploads/Bka90bLEa.png =43%x) ![截圖 2023-11-16 下午2.50.05](https://hackmd.io/_uploads/Sy0qRWLET.png =40%x) --- ## 斜線指令