iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0

1.@bot

今天要來介紹decorator(裝飾器),在discord.py中decorator主要用於定義機器人的事件處理器(event handlers)和指令(commands),簡單來說就是定義機器人。

1.事件處理器:
Discord.py 中的事件處理器是用來回應 Discord API 發出的不同事件,比如機器人成功登入(on_ready)、收到訊息(on_message)、有新成員加入伺服器(on_member_join)等等。你可以使用裝飾器來定義這些事件處理器,當相應事件發生時,機器人就會執行對應的處理函式。

2.指令:
機器人的指令是用來讓使用者與機器人互動的。比如,當使用者在 Discord 伺服器中輸入特定的文字指令,機器人會根據這些指令執行相應的功能或回覆。你也可以使用裝飾器來定義這些指令,讓機器人能夠識別和執行使用者的指令。

這些裝飾器能夠幫助你更有效地組織機器人的程式碼,使得處理事件和指令變得更加簡單且容易擴展。

2.範例

下面我會分別使用@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.eventon_message事件處理器來響應所有的消息事件。每次有消息被發送時,這個事件處理器都會被調用。如果消息的內容以'hello'開頭,bot會回覆'Hello, World!'。這種方法讓你的bot能夠更靈活地響應各種情況,不僅僅是命令。

總的來說,@bot.command()@bot.event各有其用途,並且在許多情況下需要一起使用,以使你的bot能夠更全面地響應用戶的行為和Discord的事件。

接下來幾天會寫幾個簡單的機器人來練練手~


上一篇
[Day5]discord API 介紹(下)
下一篇
[Day7] 查看username、id、加入時間及身份組(上)
系列文
使用discord.py開發自己的機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言