---
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)


2. 配置機器人,並填入機器人名稱,勾選message intent



3. 點選重製令牌,並記錄到只有你自己知道的地方妥善保管

4. 準備設定機器人權限

5. 勾選對應權限

applications.commands 讓您的應用程式在其安裝的頻道中使用命令
bot是啟用您的機器人。點擊bot後,還可以為bot添加不同的用戶權限。
6. 現在,只需選中發送消息

添加權限後,應該會看到一個 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. 打完收工回家睡覺

# Python async & await 理解
## 1. 何謂多線程&多程序? 好處是什麼?
[菜鳥教程-多執行緒](http://www.runoob.com/python/python-multithreading.html)
簡單的說法就是
讓電腦在單個時間內可以同時執行多個任務。
如果讓電腦執行完某個任務才執行下個任務,系統就會卡到爆。
以下圖為例,須等任務1執行5秒後,才能執行任務2。然後任務2執行完才能執行任務3。
你應該不想在看電影的時候,影像都播完了,才開始撥放聲音吧:))

因此我們需要將可分割的工作切碎(例如先看到一幀畫面或是一個音符),讓每一件事情都可以輪流分到處理時間

如此一來,我們就可以一邊聽聲音,一邊看影像,好好的欣賞一部電影了。
一個程序可以管理多個線程
而多個程序可以調用更多的CPU來執行工作
多線程&多程序好處如下:
a. 讓閒置的cpu可以獲得更大的使用率
b. 讓不可分割的任務不至於卡住系統,造成畫面凍結的現象
## 2. Python 多線程(thread)行為
Python 中的解釋器CPython引入了GIL鎖的概念,導致Python在同一個時間中只能執行一個執行緒,其他執行緒處於凍結狀態。以確保不會同時有兩個執行緒同時存取到同一個記憶體位置,造成資料混亂。所有的執行緒都可以對當前的記憶體區塊進行存取。
但Python主程式可以自己視為一個進程(process),在這個進程底下,調用多個線程來工作。通常在設計上,僅會將一個CPU指派一個進程。因此即使你想在一秒內同時使用8個線程,也會因為分配的關係,導致每個線程平均只會拿到0.125秒。也換句話說同時間再多線程的設計中,只能有一個cpu達到滿載,其餘cpu皆無法使用。
理想上多線程的工作狀態,CPU會同時操作二至多個緒同時工作,透過這樣並行來減少作業時間。

但在Python中,就沒有這回事了。

同一個時間只能有一個執行緒執行,然後在換下一個
那有沒有可以更進一步將cpu使用率最大化的方法呢?
有的,就是多進程
## 2. Python 多進程行為
下集待續....