---
# System prepended metadata

title: Discord Bot講義-7
tags: [Discord Bot講義]

---

# Discord Bot講義-7

## 學習內容

1. 學習使用pyotp雙重認證(2fa)函式庫
2. 使用雙重認證增加機器人的安全性

## 學習使用pyotp雙重認證(2fa)函式庫

雙重認證可以保護帳號的安全，像Meta、Google、Discord都有提供這項服務保護帳號。
首先需要在驗證器以QR code或是文字的方式輸入金鑰，接著驗證器會給予使用者一個隨時間變化而改變的一次性密碼用於進行登入網站時的附加驗證。

驗證器可以使用Google Authenticator 不論是[Android ](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=zh_TW&referrer=utm_source%3Dgoogle%26utm_medium%3Dorganic%26utm_term%3Dgoogle+authenticator&pcampaignid=APPU_1_KdOAZpeYHPbAvr0Po8DRiA8)還是[iOS](https://apps.apple.com/tw/app/google-authenticator/id388497605)系統都可以到應用程式商店下載。

接著自己隨機想出16個由英文和數字混合的字串
接著開啟下載好的應用程式並進行登入同步(不登入同步可能導致帳號無法登入)

**注意！以下為教學，平常請不要將此認證碼截圖給他人(大部分手機會鎖住不讓你截圖)**

首先按下右下角的"+號"
![1](https://hackmd.io/_uploads/Byf_BtA8R.jpg)


接著點選"輸入設定金鑰"
![2](https://hackmd.io/_uploads/Bkcvrt0I0.jpg)


再來按照畫面上的指示輸入(記得將密鑰替換成你剛剛想出來的字串)，輸入完畢後按下新增
![3](https://hackmd.io/_uploads/H1TittRIA.jpg)



最後你就可以看到會一直變驗證碼了
![4](https://hackmd.io/_uploads/H1sIStR80.jpg)



接著就是編寫程式的時間
首先，按照前面[IDE教學](https://hackmd.io/@AndrewCho365/S1yXoFC8C)安裝**pyotp**函式庫

這樣就可以成功安裝pyotp 函式庫

接著到IDE裡面打入以下程式⬇️(記得將密鑰替換成你想出來的字串)
```py=
import pyotp

totp = pyotp.TOTP("XXXXXXXXXXXXXXXX")
code = totp.now()

print(code)
```
接著執行程式碼，你就會看到輸出的驗證碼了

## 使用雙重認證增加機器人的安全性

機器人有些特殊指令會是要限制只有部分的人才能使用，那就需要使用密碼，也可以使用OTP驗證的方式加密特殊指令
而加密特殊指令不只要獲得驗證碼，還需要檢查使用者輸入的驗證碼是否正確，所以要在指令的輸入欄裡加入一個輸入框讓使用者輸入驗證碼

以下是使用OTP驗證加密說話指令的程式碼
```py=
import discord
import pyotp

bot = discord.Bot(intents=discord.Intents.all())
totp = pyotp.TOTP("XXXXXXXXXXXXXXXX")

@bot.event
async def on_ready():
    print(f"「{bot.user}」已登入")


@bot.command()
async def text(ctx,pin:str, message:str, 頻道id=None):
    if totp.verify(pin):
        if 頻道id is not None:
            channel = bot.get_channel(int(頻道id))
            await channel.send(message)
        else:
            await ctx.respond(message)
    else:
        await ctx.respond("驗證碼錯誤")
		
bot.run("bot_token")
```