事件處理
事件在做什麼各種條件觸發,比如機器人上線、有人傳訊息、有人編輯訊息、頻道名稱被管理員更新等,成為事件而這些事件是可以被機器人持續追蹤的,當這些事件發生時,如果機器人有對應的函式,就會呼叫函式並傳入參數,讓我們做處理 基本語法123@bot.event # 這裡不用()async def on_ready(): # 動作 @bot.event 事件的裝飾器長這樣,要特別注意不用括號 async def on_ready() 此處函式名稱比較特殊,是固定的,不像指令可以自己取名字;名字由事件決定,此處的事件是「機器人上線時」 而函式接受什麼參數也由套件預設決定 也就是說,我們可以自己定義的只有動作的部分 機器人上線123@bot.eventasync def on_ready(): print(f"Logged in as...
應用程式指令
跟基礎指令有什麼區別?應用程式指令是指斜線指令 輸入斜線/之後可以被列在指令選單中 如果有需要的參數,也會自動列出來 還可以做更多應用 Discord官方正努力推動這種格式的指令,因為這種方式可以讓使用者更容易取用,而不須先了解有什麼指令、指令需要什麼參數、參數是什麼格式 基本語法此處想做到的是 輸入/hello Jack機器人會回你「Hello, Jack」 123@bot.tree.command()async def hello(interaction:discord.Interaction,name:str): await interaction.response.send_message(f'Hello, {name}') 內容講解@bot.tree.command()此處與基本指令不同 應用程式指令是一個樹狀的概念,所有指令統整成一個樹此部分不須特別理解,只須記得裝飾器是這個即可 async def...
指令介紹與基礎指令
什麼是指令指令就是在聊天欄輸入一串文字,透過特定開頭與後面的參數來執行動作可想像在呼叫函式: 在聊天室輸入>hi jack相當於 1234def hi(name): # 一串動作 hi("jack") 指令前綴由前一小節的例子可看出,指令前綴為>此部分由上周創建機器人時所設定,可自行更改初始慣例用! ,此處是我的習慣 基本指令此處想做到的是 輸入>hi Jack機器人會回你「Hello, Jack」 123@bot.command()async def hi(ctx:commands.Context, name): await ctx.send(f"Hello, {name}") 內容講解@bot.command()此語法稱為**裝飾器,**是Python的特殊語法,用途是將裝飾的對象做特殊更改此概念較複雜,目前不需理解 只須知道此處的@bot.command() 會執行此函式,告知機器人這個函式註冊成為可以使用的指令 async def...
讓機器人上線
讓機器人上線以下內容寫在main.py內,或是你創建的任意名稱.py,可參照 安裝環境 以下內容由於說明需要會分段寫與講解,但是同一個檔案內的接續內容 引入套件discord.py是一個額外的套件,在python內預設無法取用,所以我們將需要的部分引入,其中包括異步操作的模組 123import discordfrom discord.ext import commandsimport asyncio 機器人物件接著使用之前介紹過的物件概念,定義一個機器人物件commands.Bot然後傳入以下參數 1bot = commands.Bot(command_prefix='>',intents=discord.Intents.all()) command_prefix 為指令的前綴。此處設為>,使用時就用>ping、>hello等方法使用,可自行決定 intents 為機器人開放的權限內容,此處設成全部,照著打就可以了 主函式與之前教過的異步函式方法一樣的概念 1234async def main(): await...
安裝環境
安裝軟體需要注意先安裝以下軟體,此處不提供教學,請自行上網查詢 Python 3.8以上版本,但不要3.13 Visual Code Studio或是自己習慣的編輯器,需要可以管理檔案 此處教學以中文版為例,學校電腦是英文版,想在自己的電腦裝中文版可以另外問 安裝Python語法套件打開Visual Code Studio(以下簡稱vscode)左方側邊欄有市集(方塊圖標),在搜尋框打Python後安裝第一個 安裝discord.py套件點開終端機,可自行使用cmd或是vscode的終端按鍵是 Ctrl+`那個一點是反引號,在Esc下方 或是左下方的此按鍵 點開後切換到Terminal(終端) 然後輸入以下內容後Enter 1python -m pip install discord.py 視自身安裝版本,有可能是py 開頭或是python3 開頭 新增資料夾和檔案在任何地方新增一個任意名稱資料夾,然後左方欄切換到第一個(檔案總管Explorer)點擊開啟資料夾(Open Folder)後選擇你剛剛的資料夾 接著點擊資料夾名稱右邊的第一個鍵:...
創建機器人
登入開發者面板首先請進入以下連結,然後登入自己的Discord帳號Discord Developers也請確認已經認證電話號碼過了,如果不會認證可以去群組問 創建機器人點右上角的New Application,然後幫機器人取一個名字,日後可以更改 進來以後此頁面可以修改機器人頭像、帳號描述跟名稱 Bot頁面請在左側欄切換到Bot頁面 Token向下找到此處,點擊Reset Token並輸入密碼 完成後他會跳回頁面最上方,往下滑回去取得一串很複雜超級長的Token請用你的生命保護他,不要弄丟了此Token的用意是告訴Discord 我現在要操控這個機器人 -> 每個token對應一個機器人 它是我所有的 -> 這個token只有你拿得到 開啟權限同一個頁面繼續往下滑,找到Privileged Gatway Intents,將三個開關都打開然後點擊下方跳出來的Save Changes 邀請機器人現在請回到Discord主頁面,創建一個只有你自己的群組或是任何你可以瘋狂測試機器人的地方,且你有管理權限 取得連結左側欄由Bot切換到OAuth2,向下找到OAuth2...
類別
什麼是類別類別是一種自訂資料型態,如同int, str等資料型態所有關於該資料型態的操作都能自行決定 類別 -> 物件物件是基於類別創建出來的實際成品 類別 物件 str “Hello world!” int 114514 list [1, 2, 3] 可想像類別是模板或一種資料型態,創建完不會發生任何事需要使用類別來創建一個物件才可以用 屬性與方法屬性與方法是類別專屬的功能可以想像成類別自己擁有的變數和函數 語法此處以車輛生產或使用為情境通常類別的名稱字首會大寫,如Car, Model等 基本類別123456789class Car: def __init__(self, 輸入品牌, 輸入型號): # self代表取用自己的意思 self.brand = 輸入品牌 # 讓自己的brand屬性成為傳進來的品牌變數 self.model = 輸入型號 # 讓自己的model屬性成為傳進來的型號變數 def display_info(self): print(f"This car is a...
協程
同步與異步同步在程式的執行中,每一個步驟是依著開始執行的順序執行不可跳過,必須等待動作執行完才可以去下一個步驟像是打電話時,需等待對方接起,期間不可做任何事此為同步執行的概念 flowchart Call["打電話(非擴音)"] -->|響鈴中|等待接起 等待接起 --阻塞 --> 對方接起 對方接起 --> 講電話 異步在程式的執行中,有時會遇到需要進行I/O操作的時候,這時如果還使用同步函式將會造成程式卡住I/O操作是指Input和Output,是指程式與外界交流資料的動作,如API、讀取資料庫、讀取檔案等通常這些動作需要時間,取決於外界怎麼回應,這時候如果使用同步就會卡住所以這時候我們使用異步函式來進行特殊的操作異步函式可以在函式卡住時先跳去其他函式執行,等原本的工作完成再跳回來 flowchart subgraph 打電話 Call["打電話(擴音)"] --響鈴中 -->等待接起 -.-> 講電話 end 等待接起 --非阻塞...
函數
什麼是函式函式是一組可以重複使用的程式,能幫助我們簡化程式結構可以像數學上的函數,有回傳值也可以單純執行一大串動作 語法有回傳值 123456# 計算圓柱體體積def cylinder(r,h): # 從這裡開始定義了一個函數 return r*r*3.14*h # 這個函數會回傳上述兩個值的計算結果print(cylinder(5,3)) #印出235.5 無回傳值 1234567891011# 問候def greeting(name): print(f'{name} 你好')greeting('Jack') # 印出'Jack 你好'# 因為函式不回傳東西,所以試著印出函數會得到Noneprint(greeting('Jack')) #印出'Jack 你好'和'None' # 'Jack 你好'是函數執行過程觸發的# 'None'...