Intent gateway đặc quyền của Discord là ba quyền cần chủ bot chủ động bật (Presence, Server Members và Message Content) trong Developer Portal trước khi Discord gửi dữ liệu đó qua gateway. Chúng tồn tại vì danh sách thành viên và nội dung tin nhắn vốn nhạy cảm. Nếu thiếu một trong số đó, bot không báo lỗi rõ ràng; nó chỉ âm thầm ngừng nhận các sự kiện mà nó cần, và đó là lý do "bot của tôi đang online nhưng không làm gì cả" thường bắt nguồn từ một công tắc intent.
Intent gateway thực sự là gì
Khi một bot kết nối với Discord, nó không tự động nhận mọi sự kiện diễn ra trong mọi máy chủ mà nó tham gia. Nó đăng ký nhận các nhóm sự kiện gọi là intent: sự kiện tin nhắn, sự kiện trạng thái thoại, sự kiện cập nhật máy chủ, v.v. Hầu hết intent có thể khai báo trong mã mà không tốn phí, và Discord cấp quyền mà không hỏi. Ba intent còn lại thì khác. Discord gọi chúng là intent đặc quyền vì dữ liệu đằng sau chúng, chính xác là ai đang ở trong máy chủ và thành viên đang gõ gì, đủ mạnh để Discord muốn chủ bot phải chủ động đồng ý thông qua Developer Portal, chứ không chỉ khai báo trong mã.
Nếu mã của bot yêu cầu một intent đặc quyền nhưng chủ bot chưa bật nó cho ứng dụng, Discord sẽ từ chối đăng nhập hoàn toàn. Bot không kết nối ở trạng thái suy giảm; nó không kết nối gì cả, và gateway đóng kết nối với lỗi "disallowed intents".
Ba intent đặc quyền
- Presence Intent. Trạng thái online/idle/offline và hoạt động tùy chỉnh của mọi thành viên. Dùng cho các bot hiển thị dữ liệu hiện diện trực tiếp; đa số bot ticket, kiểm duyệt và thương mại, kể cả Noxyr, không cần nó.
- Server Members Intent. Toàn bộ danh sách thành viên, cùng các sự kiện tham gia và rời đi, thay đổi vai trò và cập nhật biệt danh. Đây là intent đứng sau tin nhắn chào mừng, số lượng thành viên và phát hiện đột nhập hàng loạt.
- Message Content Intent. Nội dung thực sự của tin nhắn, không chỉ việc có tin nhắn được gửi. Nếu thiếu nó, bot có thể thấy ai đó đã đăng trong một kênh nhưng không biết họ đã gõ gì.
Mã của Noxyr yêu cầu hai trong ba intent: Server Members Intent và Message Content Intent. Presence Intent không thuộc tính năng nào của Noxyr, nên nó không bao giờ được yêu cầu và không cần bật.
Điều gì sẽ hỏng nếu thiếu Server Members Intent
Server Members Intent cho phép bot nhận các sự kiện GUILD_MEMBER_ADD và GUILD_MEMBER_REMOVE, tức là sự kiện tham gia và rời đi mà hầu hết tính năng liên quan đến thành viên đều phụ thuộc vào.
- Tin nhắn chào mừng. Tin nhắn chào mừng được kích hoạt khi thành viên tham gia. Nếu thiếu intent, bot không bao giờ nhận được sự kiện tham gia, nên không có gì được đăng và không có vai trò tự động nào được gán.
- Số lượng thành viên. Kênh hoặc widget đếm thành viên trực tiếp được cập nhật từ cùng các sự kiện tham gia/rời đi. Nếu thiếu intent, nó sẽ đứng yên ở con số cuối cùng đã thấy.
- Chống phá hoại và bảo vệ chống đột nhập. Phát hiện một đợt đột nhập hàng loạt, hay theo dõi các thay đổi vai trò và biệt danh đáng ngờ, đều phụ thuộc vào sự kiện thành viên. Tắt intent này sẽ làm toàn bộ đường phát hiện đó ngừng hoạt động.
- Luồng xác minh. Bất kỳ cổng nào kiểm tra ngày tham gia, vai trò hoặc tuổi tài khoản của thành viên đều cần đối tượng thành viên mà intent cung cấp.
Điều gì sẽ hỏng nếu thiếu Message Content Intent
Message Content Intent kiểm soát nội dung thực sự của tin nhắn. Không có intent này, bot vẫn có thể thấy một kênh nhận được tin nhắn và ai đã gửi; chỉ là nó không đọc được nội dung đã nói.
- Trả lời tự động. Khớp một từ kích hoạt như "refund" hoặc "how do I pay" đòi hỏi đọc nội dung tin nhắn. Không có nội dung thì không khớp, không có trả lời.
- Trả lời bằng AI chat. Trợ lý AI trả lời câu hỏi trong kênh hoặc khi được nhắc đến cần chính câu hỏi đó. Không có intent, nó biết có người nói chuyện nhưng không có gì để gửi cho mô hình.
- Bản ghi hội thoại ticket. Bản ghi ghi lại những gì nhân viên và thành viên thực sự nói trong ticket cần nội dung tin nhắn để ghi lại; nếu thiếu, bạn chỉ nhận được danh sách thời gian và tên người dùng mà không có nội dung.
- Kiểm duyệt dựa trên prefix. Bất kỳ thứ gì quét tin nhắn để tìm từ cấm, liên kết mời hoặc mẫu spam đều đọc nội dung theo cách giống như trả lời tự động.
Lệnh slash không bị ảnh hưởng trong cả hai trường hợp, vì Discord gửi dữ liệu lệnh tách biệt với tin nhắn thông thường. Cụ thể, chỉ các tính năng đọc những gì thành viên gõ trong tin nhắn thường mới phụ thuộc vào intent này.
Cách bật intent trong Developer Portal
- Mở Discord Developer Portal và chọn ứng dụng của bot.
- Nhấn Bot ở thanh bên trái.
- Cuộn xuống mục Privileged Gateway Intents.
- Bật Server Members Intent và Message Content Intent (chỉ thêm Presence Intent nếu một bot thực sự cần dữ liệu trạng thái trực tiếp).
- Lưu thay đổi, rồi khởi động lại hoặc kết nối lại bot để nó nhận các intent mới trong lần đăng nhập tiếp theo.
Công tắc có hiệu lực ở lần kết nối gateway tiếp theo, không có hiệu lực ngay lập tức với một bot đã đăng nhập. Một bot đang trong phiên làm việc khi intent bị tắt thường sẽ bị Discord ngắt kết nối và cần được kết nối lại sau khi intent được bật trở lại.
Quy tắc xác minh 100 máy chủ
Bật công tắc trong portal là đủ với một bot có ít hơn 100 máy chủ. Khi số lượt cài đặt của bot vượt quá 100 máy chủ, Discord yêu cầu ứng dụng phải trải qua quy trình xác minh bot, một quy trình đánh giá nơi chủ bot gửi bot để được phê duyệt, trước khi bot được phép dùng intent đặc quyền ở quy mô đó. Một bot chưa xác minh chạm ngưỡng này vẫn tiếp tục chạy ở các máy chủ đã có, nhưng bị giới hạn không được tham gia máy chủ mới cho đến khi được xác minh hoặc bỏ đi các intent đặc quyền mà nó không thực sự cần.
Đây là quy định của nền tảng Discord, không phải thứ mà bất kỳ máy chủ lưu trữ bot nào kiểm soát. Nó tồn tại để các intent nhạy cảm về dữ liệu như Server Members và Message Content không bị trao ra ở quy mô lớn mà không có sự đánh giá của chính Discord về việc bot sử dụng chúng để làm gì.
Vì sao Noxyr kiểm tra cả hai intent trước khi chấp nhận token
Tính năng Custom Bot của Noxyr chạy toàn bộ bộ tính năng dưới một token bot do bạn cung cấp. Vì tin nhắn chào mừng, số lượng thành viên, AI chat, bản ghi ticket và trả lời tự động đều phụ thuộc vào hai intent ở trên, nên dashboard kiểm tra Server Members Intent và Message Content Intent đã được bật hay chưa trước khi chấp nhận token của bạn. Một token được dán vào khi một trong hai intent đang tắt sẽ bị từ chối ngay từ đầu, thay vì được chấp nhận rồi để thất bại âm thầm về sau với một lỗi gateway khó hiểu.
Nếu một intent bị tắt sau khi bot đã chạy (chẳng hạn ai đó bỏ tích trong portal nhiều tháng sau), gateway của Discord sẽ đóng kết nối với mã 4013 hoặc 4014. Các node lưu trữ của Noxyr bắt đúng mã đóng cụ thể đó, tắt bot và đăng một thông báo trạng thái bằng ngôn ngữ dễ hiểu cho bạn biết chính xác cài đặt nào cần sửa, thay vì để nó mắc kẹt trong vòng lặp kết nối lại âm thầm. Phân tích đầy đủ về lỗi này và các nguyên nhân ngoại tuyến phổ biến khác nằm trong hướng dẫn xử lý lỗi gateway 4004/4014 của chúng tôi.
Câu hỏi thường gặp
Custom Bot của Noxyr có cần Presence Intent không? Không. Noxyr chỉ yêu cầu Server Members Intent và Message Content Intent. Presence Intent có thể để tắt.
Vì sao bot của tôi báo "disallowed intents" dù tôi đã bật các công tắc? Gateway chỉ đọc trạng thái hiện tại khi đăng nhập mới. Hãy khởi động lại bot sau khi lưu cài đặt portal để nó kết nối lại với các intent mới đã được áp dụng.
Bật Message Content Intent có nghĩa là Discord chia sẻ lịch sử tin nhắn với bot không? Không. Nó chỉ ảnh hưởng đến các tin nhắn được gửi khi bot đang kết nối và có quyền truy cập vào kênh đó. Nó không cấp quyền truy cập ngược lại cho các tin nhắn cũ mà bot không có mặt.
Bot của tôi có bị cấm vì yêu cầu intent đặc quyền không? Không. Yêu cầu và sử dụng chúng cho các tính năng cần đến, như tin nhắn chào mừng, trả lời tự động, trả lời bằng AI, chính là mục đích của chúng. Xác minh tồn tại cho các bot ở quy mô lớn, không phải là hình phạt.
Xem hướng dẫn thiết lập đầy đủ trong tài liệu Custom Bot, hoặc thêm Noxyr miễn phí và bỏ qua hoàn toàn các intent bằng cách chạy bot chính thay vì một custom bot dựa trên token.