今天要來介紹decorator(裝飾器),在discord.py中decorator主要用於定義機器人的事件處理器(event handlers)和指令(commands),簡單來說就是定義機器人。
1.事件處理器:
Discord.py 中的事件處理器是用來回應 Discord API 發出的不同事件,比如機器人成功登入(on_ready
)、收到訊息(on_message
)、有新成員加入伺服器(on_member_join
)等等。你可以使用裝飾器來定義這些事件處理器,當相應事件發生時,機器人就會執行對應的處理函式。
2.指令:
機器人的指令是用來讓使用者與機器人互動的。比如,當使用者在 Discord 伺服器中輸入特定的文字指令,機器人會根據這些指令執行相應的功能或回覆。你也可以使用裝飾器來定義這些指令,讓機器人能夠識別和執行使用者的指令。
這些裝飾器能夠幫助你更有效地組織機器人的程式碼,使得處理事件和指令變得更加簡單且容易擴展。
下面我會分別使用@bot.command()跟@bot.event()來寫一個機器人
@bot.command():
from discord.ext import commands
import discord
intents = discord.Intents.all()
bot = commands.Bot(command_prefix='',intents=intents)
@bot.command()
async def hello(ctx):
await ctx.send('Hello, World!')
bot.run('your-bot-token-here')
@bot.event():
from discord.ext import commands
import discord
intents = discord.Intents.all()
bot = commands.Bot(command_prefix='',intents=intents)
@bot.event
async def on_message(message):
if message.author == bot.user:
return
if message.content.startswith('hello'):
await message.channel.send('Hello, World!')
bot.run('your-token-here')
這兩段程式都是用來創建一個Discord bot,並讓它在收到以'hello'開頭的消息時回覆'Hello, World!'。然而,它們使用的方法不同。
在第一段程式中,使用了@bot.command()
來創建一個命令。當用戶在消息中輸入hello
(因為設置了空的命令前綴,可以到第三天觀看詳細介紹)時,這個命令會被觸發,並且bot會回覆'Hello, World!'。這種方法讓你可以輕鬆地創建和管理命令,並且discord.py的命令系統還提供了許多有用的功能,如參數解析、錯誤處理、命令分組等。
在第二段程式中,使用了@bot.event
和on_message
事件處理器來響應所有的消息事件。每次有消息被發送時,這個事件處理器都會被調用。如果消息的內容以'hello'開頭,bot會回覆'Hello, World!'。這種方法讓你的bot能夠更靈活地響應各種情況,不僅僅是命令。
總的來說,@bot.command()
和@bot.event
各有其用途,並且在許多情況下需要一起使用,以使你的bot能夠更全面地響應用戶的行為和Discord的事件。
接下來幾天會寫幾個簡單的機器人來練練手~