--- tags: Discord Bot, 伴學松, 伴伴學共創專案 description: 這是「從 0 開始學 Discord Bot!」活動的討論共筆 image: https://i.imgur.com/b7Eh6yX.png --- # 從 0 開始學 Discord Bot! ## outline 1. https://discord.com/developers/docs/intro (找一個中文的 guidline) 3. 申請一個 Discord 應用程式 4. 語言選擇:大家傾向用 Python 5. 應用方向: - 嘗試 Discord 特殊功能(例如身份組) - 算命、遊戲、心理測驗這種 ㄎ一ㄤ 的應用 - 暴富工具 7. Reference: - https://github.com/Cog-Creators/Red-DiscordBot ## Weekly schedule 1. Week1: 依照這個 [guide](https://ithelp.ithome.com.tw/articles/10262736) 建立起一個 application 並請管理員邀請進 server 2. Week2: - python 指令/功能 - 每個人分享 1 ~ 3 個指令,可以實作在 bot 裏面 - 了解什麼是物件導向?(可以跳過) 3. Week3: - 決定 Discord 機器人 框架 - (Red Discord Bot / Pycord / Discord.Py) - 每個人實作一個指令到Bot上面,在下個禮拜前要將機器人放到伴伴學DC給各位玩 ## 建立 Application 的 Guide 1. 建立應用程式([link](https://discord.com/developers/applications)),勾選同意協議(哪次不同意XD) ![](https://i.imgur.com/NWLlpxD.png) ![](https://i.imgur.com/mUP63Ey.png) 2. 配置機器人,並填入機器人名稱,勾選message intent ![](https://i.imgur.com/xGkvD3v.png) ![](https://i.imgur.com/cxXoOBF.png) ![](https://i.imgur.com/fXm62Lh.png) 3. 點選重製令牌,並記錄到只有你自己知道的地方妥善保管 ![](https://i.imgur.com/70475oc.png) 4. 準備設定機器人權限 ![](https://i.imgur.com/1akK5sj.png) 5. 勾選對應權限 ![](https://i.imgur.com/PGK0PEx.png) applications.commands 讓您的應用程式在其安裝的頻道中使用命令 bot是啟用您的機器人。點擊bot後,還可以為bot添加不同的用戶權限。 6. 現在,只需選中發送消息 ![](https://i.imgur.com/oepEnSA.png) 添加權限後,應該會看到一個 URL,可以複製該 URL 貼到瀏覽器可以安裝至具有管理權限的頻道(可以自己創一個頻道加進去玩) 7. 安裝python [python 官網](https://www.python.org/) 8. 安裝pycord,開啟cmd輸入以下指令 ``` py -3 -m pip install -U py-cord --pre ``` 9. 執行應用程式 :::success python 可使用的編輯器: 1. 官方自帶的 IDLE3 2. VSCODE 3. 任何喜歡的文字編輯器。記事本也行只是沒有高亮語法XD 最推薦VSCODE ::: 10. 範例 ```python= import discord class MyClient(discord.Client): async def on_ready(self): print('Logged on as', self.user) async def on_message(self, message): # don't respond to ourselves if message.author == self.user: return if message.content == 'ping': await message.channel.send('pong') intents = discord.Intents.default() intents.message_content = True client = MyClient(intents=intents) token = "Your Token" client.run(token) ``` 11. 打完收工回家睡覺 ![](https://i.imgur.com/sBygO7F.png) # Python async & await 理解 ## 1. 何謂多線程&多程序? 好處是什麼? [菜鳥教程-多執行緒](http://www.runoob.com/python/python-multithreading.html) 簡單的說法就是 讓電腦在單個時間內可以同時執行多個任務。 如果讓電腦執行完某個任務才執行下個任務,系統就會卡到爆。 以下圖為例,須等任務1執行5秒後,才能執行任務2。然後任務2執行完才能執行任務3。 你應該不想在看電影的時候,影像都播完了,才開始撥放聲音吧:)) ![](https://i.imgur.com/9JukUVZ.png) 因此我們需要將可分割的工作切碎(例如先看到一幀畫面或是一個音符),讓每一件事情都可以輪流分到處理時間 ![](https://i.imgur.com/BO9Q4g5.png) 如此一來,我們就可以一邊聽聲音,一邊看影像,好好的欣賞一部電影了。 一個程序可以管理多個線程 而多個程序可以調用更多的CPU來執行工作 多線程&多程序好處如下: a. 讓閒置的cpu可以獲得更大的使用率 b. 讓不可分割的任務不至於卡住系統,造成畫面凍結的現象 ## 2. Python 多線程(thread)行為 Python 中的解釋器CPython引入了GIL鎖的概念,導致Python在同一個時間中只能執行一個執行緒,其他執行緒處於凍結狀態。以確保不會同時有兩個執行緒同時存取到同一個記憶體位置,造成資料混亂。所有的執行緒都可以對當前的記憶體區塊進行存取。 但Python主程式可以自己視為一個進程(process),在這個進程底下,調用多個線程來工作。通常在設計上,僅會將一個CPU指派一個進程。因此即使你想在一秒內同時使用8個線程,也會因為分配的關係,導致每個線程平均只會拿到0.125秒。也換句話說同時間再多線程的設計中,只能有一個cpu達到滿載,其餘cpu皆無法使用。 理想上多線程的工作狀態,CPU會同時操作二至多個緒同時工作,透過這樣並行來減少作業時間。 ![](https://i.imgur.com/XkR7zf9.png) 但在Python中,就沒有這回事了。 ![](https://i.imgur.com/OVfzVml.png) 同一個時間只能有一個執行緒執行,然後在換下一個 那有沒有可以更進一步將cpu使用率最大化的方法呢? 有的,就是多進程 ## 2. Python 多進程行為 下集待續....