iT邦幫忙

2023 iThome 鐵人賽

DAY 16
1

首先創建要先到以下網站創建一個App
https://discord.com/developers/applications

進入並登入後會看到右上角有創建新App的按鈕將其按下

創建完後可看到已經進入Bot設定的畫面了,接著需要將Bot邀請至自己的伺服器,可按下左邊的OAuth2選擇URL Generator。

進去後需要選擇機器人的應用領域這裡我們選Bot,下面機器人權限為了方便測試給管理員權限,接著就可複製下面網址進入到邀請畫面。

最後可在左邊選項Bot裡看到Build-A-Bot的分類,在分類下Token的地方點選Reset Token以便生成一個Token,有了Token即可讓程式與機器人交接。

這裡需要注意的是,在Bot選項裡還有Privileged Gateway Intents這個分類,在這個分類裡有著機器人的特權選項,包含了PRESENCE INTENT、SERVER MEMBERS INTENT和MESSAGE CONTENT INTENT分別具有以下功能:

  • PRESENCE INTENT:這個意圖允許您的機器人接收有關用戶在線狀態和活動的信息,例如他們正在玩什麼遊戲或在線時間。
  • SERVER MEMBERS INTENT:這個意圖允許您的機器人接收有關服務器成員的信息,例如成員加入或離開服務器。
  • MESSAGE CONTENT INTENT:這個意圖允許您的機器人接收消息內容、附件、嵌入和組件字段。如果您的機器人或應用程序未獲批准使用消息內容,則當您收到消息時,消息對象中的這些字段將為空。

這些意圖被定義為"特權意圖"。而因為數據的敏感性。如果您的機器人未經驗證且在少於100個服務器中,則可以在Discord Developer Portal中啟用特權閘道意圖。如果您的機器人已經驗證或即將需要驗證,則需要申請特權意圖。

由於我們目前是測試用隨時都可開啟關閉這些選項,當需要讀取相應訊息、資料時有時會需要到這裡啟動相應的特權。通常如果是相應的特權未被開啟,就嘗試去讀取需要該特權的資料時會報出以下錯誤。

discord.errors.PrivilegedIntentsRequired: Shard ID None is requesting privileged intents that have not been explicitly enabled in the developer portal. It is recommended to go to https://discord.com/developers/applications/ and explicitly enable the privileged intents within your application's page. If this is 
not possible, then consider disabling the privileged intents instead.

接著要開始撰寫Discord bot了,首先安裝完discord.py之後,將以下程式碼寫入名為bot.py(可自行取名)的檔案中,這時運行後就可以發現Bot已經上線了。

import discord 

# 導入discord.py模塊

from discord.ext import commands

# 從discord.py擴展模塊中導入commands模塊

intents = discord.Intents.all() 

# 創建一個Intents對象,開啟所有intents選項

bot = commands.Bot(command_prefix="^^", intents=intents)

# 創建一個Bot對象,設置命令前綴和intents

TOKEN = "xxx"  

# 你的機器人token


# 事件裝飾器,下面的函數為事件處理函數
@bot.event
async def on_ready():

# on_ready事件表示機器人已準備就緒

    print('We have logged in as {0.user}'.format(bot)) 

    # 簡單打印登錄成功信息


# 命令裝飾器,下面的函數為命令處理函數
@bot.command()
async def hello(ctx):

# 定義一個hello命令

    await ctx.send('Hello!') 

    # 發送消息"Hello!"

bot.run(TOKEN)

# 運行機器人,傳入token進行登錄

而其中discord.Intents就像上面講過的,就是機器人的特權。

discord.Intents 包含以下選項:

  • guilds - 服務器和大量緩存相關事件
  • members - 服務器成員相關事件
  • bans - 禁止相關事件
  • emojis - 自定義表情相關事件
  • integrations - 集成相關事件
  • webhooks - Webhooks相關事件
  • invites - 邀請相關事件
  • voice_states - 語音相關事件
  • presences - 用戶在線狀態相關事件
  • messages - 消息相關事件
  • guild_messages - 服務器內消息相關事件
  • dm_messages - 直接消息相關事件
  • reactions - 反應相關事件
  • typing - 用戶正在輸入相關事件

所以在創建一個Bot對象時,通過設置intents參數,可以選擇啟用哪些事件。

舉例來說:

intents = discord.Intents.default() # 只啟用基礎的必要事件

intents = discord.Intents.all() # 啟用所有事件

intents = discord.Intents(guilds=True, messages=True) # 只啟用服務器和消息相關事件

默認情況下,只有基礎的必要事件被啟用。如果你的機器人需要使用其他事件,需要顯式地在Intents中啟用它們。

適當設置intents可以幫助提高機器人的性能,避免不必要的事件處理開銷。詳細文檔見:https://discordpy.readthedocs.io/en/stable/api.html?highlight=intents#discord.Intents


而discord.ext.commands.Bot類在初始化時可以接受許多可選參數來自定義機器人的行為,常見的選項包括:

  • command_prefix:命令前綴是消息內容必須最初包含的內容,以便調用命令。這個前綴可以是一個字符串,表示前綴應該是什麼。
  • help_command:幫助命令對象。如果設置為 None,則禁用內置的幫助命令。
  • description:機器人的描述。這將顯示在默認幫助命令中。
  • intents:機器人需要的意圖。這些意圖決定了機器人能夠接收哪些事件。
  • 其他選項:您還可以傳遞其他選項,例如 case_insensitive、strip_after_prefix 和 allowed_mentions 等。

適當配置可以幫助優化和自定義一個機器人的行為。詳細文檔見:https://discordpy.readthedocs.io/en/latest/ext/commands/api.html#bot


上一篇
[DAY15]Discord bot簡介
下一篇
[DAY17]Discord bot連接和響應事件
系列文
selenium爬蟲應用至discord bot30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言