iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0

1.Gateway

在介紹intents之前我要先來介紹Gateway,Gateway是Discord用於推送實時事件(Real-time events)的WebSocket接口,簡單來說就Gateway可以看作是Discord服務器和使用者之間傳遞消息的通道。而intents是Gateway事件的類型。

2.intents

在Discord的Gateway機制中,Intents指的是伺服器管理員可以開啟的事件類型。
當客戶端通過Gateway連接上Discord時,需要指定自己需要開啟哪些類型的事件。這些事件類型就稱為Intents,gateway只有在事件發生後才會觸發。

3.為何要有intents

在看完網路上的資料跟discord給的文檔後我歸類了幾個原因:

  1. 標準化與一致性
    • 預定義事件類型使客戶端和服務端對事件有統一認識,易於開發使用
    • 根據事件類型可以統一處理不同事件,無需自行判斷
  2. 優化效能
    • 客戶端只開啟需要的事件,減少不必要數據流量
    • 減少bot接收到不需要的事件,節省網路流量和計算資源
  3. 提升安全性
    • 惡意bot無法開啟所有事件,降低濫用風險
    • 服務端可根據事件類型進行安全和權限控制
  4. 擴充性
    • 預留事件類型方便未來新增事件,回溯相容
    • 開啟事件數量限制,避免單一bot佔用過多資源
  5. 連線品質
    • 限制重複開啟事件以避免斷線
    • 提供精細開啟控制,如僅開啟特定消息、頻道事件

底下是discord官網上列出的所有intents標題跟他的解釋
詳細的intents在這https://discord.com/developers/docs/topics/gateway

名字 解釋
GUILDS (1 << 0) 這個Intent涵蓋了伺服器的創建、更新和刪除,以及討論串(thread)和頻道的創建、更新和刪除。此外,它還包括頻道釘住的消息更新,以及舞台(stage)(註解一)實例的創建、更新和刪除。
GUILD_MEMBERS (1 << 1) 這個Intent涵蓋了伺服器成員的添加、更新和移除。
GUILD_MODERATION (1 << 2) 這個Intent涵蓋了伺服器審核日誌條目的創建,以及伺服器禁止和解禁的操作。
GUILD_EMOJIS_AND_STICKERS (1 << 3) 這個Intent涵蓋了伺服器表情符號和貼圖的更新。
GUILD_INTEGRATIONS (1 << 4) 這個Intent涵蓋了伺服器整合的更新,以及整合的創建、更新和刪除。
GUILD_WEBHOOKS (1 << 5) 這個Intent涵蓋了Webhooks(註解二)的更新。
GUILD_INVITES (1 << 6) 這個Intent涵蓋了邀請的創建和刪除。
GUILD_VOICE_STATES (1 << 7) 這個Intent涵蓋了語音狀態的更新。
GUILD_PRESENCES (1 << 8) 這個Intent涵蓋了在線狀態的更新。
GUILD_MESSAGES (1 << 9) 這個Intent涵蓋了消息的創建、更新和刪除,以及批量刪除消息。
GUILD_MESSAGE_REACTIONS (1 << 10) 這個Intent涵蓋了消息反應的添加、移除,以及移除所有反應和移除特定表情符號的反應。
GUILD_MESSAGE_TYPING (1 << 11) 這個Intent涵蓋了打字狀態的開始。
DIRECT_MESSAGES (1 << 12) 這個Intent涵蓋了直接消息的創建、更新和刪除,以及直接消息中釘住的消息更新。
DIRECT_MESSAGE_REACTIONS (1 << 13) 這個Intent涵蓋了直接消息中的消息反應的添加、移除,以及移除所有反應和移除特定表情符號的反應。
DIRECT_MESSAGE_TYPING (1 << 14) 這個Intent涵蓋了在直接消息中打字狀態的開始。
MESSAGE_CONTENT (1 << 15) 這個Intent涵蓋了消息內容的讀取和更新。
GUILD_SCHEDULED_EVENTS (1 << 16) 這個Intent涵蓋了伺服器預定事件的創建、更新和刪除,以及伺服器預定事件用戶的添加和移除。
AUTO_MODERATION_CONFIGURATION (1 << 20) 這個Intent涵蓋了自動審核規則的創建、更新和刪除。
AUTO_MODERATION_EXECUTION (1 << 21) 這個Intent涵蓋了自動審核行動的執行。

註解一:要啟用stage你的伺服器必須啟用社群
註解二:Webhooks是一種允許應用程式提供其他應用程式實時訊息的方法。Webhook在特定事件發生時,會將數據發送到其他應用程式的指定URL。它是一種實現應用程式之間的即時、自動通訊的方式,在discord很常使用到。
舉例來說,假設你有一個天氣預報應用程式,你希望每當天氣預報更新時,都能自動發送一條消息到你的Discord伺服器。你可以設置一個Webhook,當天氣預報更新時,天氣預報應用程式會將相關數據發送到Discord的Webhook URL,然後Discord會在你的伺服器上發布一條包含這些數據的消息。
總的來說,Webhooks提供了一種方式,讓應用程式能夠在不需要頻繁請求情況下獲取實時更新。


上一篇
[Day4]discord API 介紹(上)
下一篇
[Day6] 基本discord機器人程式架構
系列文
使用discord.py開發自己的機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言