# 從零開始開發discord機器人 ###### tags: `python` `nextcord` > 此教程適合給已知python基礎及物件導向概念的人使用 > 若不熟也沒關係,筆者在需要時會特別提及 ## 什麼是discord bot 與 nextcord discord bot 是專門在discord伺服器上運行的機器人,而 nextcord 是別人寫好的函式庫,用來與 discord 伺服器對接的一個橋樑。 ### Step 1: 建立一隻機器人 - [ ] 建立discord帳號及bot的註冊 - [ ] 下載nextcord module - [ ] 讓機器人上線 #### 建立discord帳號及bot的註冊 首先到 https://discord.com/login 且先建立discord帳號。 再來到 https://discord.com/developers/applications 並在左上角找到 **new application** 的按鈕,點下去。 之後會進到取名的介面,這裡就是幫你的機器人取名的時間啦~~ 取名完後到左側找到bot的選項,再來點選add bot(應該會在右上角),按 yes,do it! 然後把下面所有有關intent的選項都打勾,這樣日後比較好操作 最後在這個介面的最上面,username的下方找到TOKEN的選項,按copy貼到記事本就可以進行下一個步驟了。 在左側找到OAuth2的選項,點開之後按URL Generator,找到bot的部分打勾(應該在中間的位置),之後會看到bot permission,這裡是用來告訴伺服器你的機器人需要甚麼權限,初學者我建議選Administrator就好,選完之後下方會出現一個連結,那就是用來邀請你的機器人的連結,注意,一定要有伺服器的"管理者"權限才可以邀機器人。 這麼一來,你就可以在伺服器中看到機器人的身影嘍。 #### 下載nextcord module 在下載之前,我想推薦一個方便管理code及架設機器人的地方,那就是repl.it https://replit.com/~ repl是一個線上環境,可以用來架設機器人(但不怎麼安全就是了),所以我推薦初學者可以在這裡寫你的機器人喔。(以下筆者將以repl為主要的coding環境)。 首先,註冊帳號之後,在介面上找到create repl的按鈕,之後選擇python然後為你的專案命名,進去之後在左側的終端機的上面選擇shell後打上 ``` py pip install nextcord ``` 等它一下,這樣就好嘍。 又或者是在repl的做邊找到package的按鍵,搜尋nextcord案下載就好了喔(這方法在等下執行機器人之後會少一個步驟所以也可以用這個方法,但因為不是每個人都會用repl作為自己主力編寫程式的環境,所以筆者主要還是教一般的方法w (btw 在本機要操作的話,打開cmd,再打上述的指令就行嘍) #### 讓機器人上線 在這之前,先提一下async/await的概念 async(異步執行),指讓程式模擬cpu中多執行緒的概念,在等待網站回應的同時先做別的指令,白話文講,就是可以同時做很多件事情,discord bot也是以這個概念完成的。 **API** 所謂API其實就是官方文件,讓我們可以查相關指令語法的地方,阿因為事全英文的,所以看不懂就沒辦法啦。 以下是nextcord的官方文件 https://nextcord.readthedocs.io/en/latest/api.html 進入正題吧,要讓機器人上線了,那下面是我寫的ㄐ處功能,日後都可以再新增,也請各位看完之後試著自己寫出來(不要直接抄la) 1. 首先,我們先import必要的模組首先,我們先import必要的模組。 2. 接著,當機器人準備好時,會觸發event的on_ready事件,因此我們在on_ready底下print一個>> Bot is online 來告訴我們機器人已經上線了。 3. 在下面是一個檢視API有沒有被call太多次的一個小function,讀者可以直接抄過去,因為要解釋裡面的原理會讓篇幅過長w。(如果API被call太多次,他會告訴你要等幾分鐘) 4. 接下來我們來測試一下機器人,event的on_message會偵測discord裡的**每一則訊息**,對你沒聽錯w,他會將偵測到訊息放到一個msg的變數裡面,其中msg是nextcord其中的一個class。msg.content可以傳出這則訊息的內容,我們要做的就是判斷這個訊息,如果msg.content == ping,那機器人就會在這個msg所在的channel傳送一個pong訊息。 5. 最後我們要讓機器人上線啦,在先前應該有存下一串TOKEN,那我們在repl的左側找到一個鎖的圖案,他可以儲存這個專案的一些不可被公開的資料(因為repl的code是公開的)。那我們把key命名為TOKEN,並將剛剛那串複製到value的部分,add new secret之後就好了喔。 6. 那我們在code裡面輸入 ``` py import os TOKEN = os.environ['TOKEN'] ``` 就可以把剛剛那串從repl上存到TOKEN這個變數了喔。 最後我們讓client在這個TOKEN上運行,也就是 ```py client.run(TOKEN) ``` 就可以讓屬於自己的機器人在repl上運行了喔,是不是很棒! 最後補充(欸原諒筆者屁話有點多) ```py if __name__ == "__main__": ``` 是在py中運行main函式的方法,即使py不需要 main function也能運作,但這依舊是寫程式的好習慣喔。 ``` py import nextcord from nextcord.ext import commands import os import requests intents = nextcord.Intents.all() client = commands.Bot(command_prefix='--', intents=intents) client.remove_command('help') TOKEN = os.environ['TOKEN'] @client.event async def on_ready(): print('>> Bot is online ') r = requests.head(url="https://discord.com/api/v1") try: print(f"Rate limit {int(r.headers['Retry-After']) / 60} minutes left") except: print("No rate limit") @client.event async def on_message(msg): if msg.content == "ping": await msg.channel.send("pong") if __name__ == "__main__": client.run(TOKEN) ``` 好了,現在你已經寫出一隻屬於自己的機器人了,之後我們再來詳細介紹機器人的其他功能。 筆者的dc: https://discord.gg/tfaFhg2u 有問題都可以在這裡找我喔。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up