Liên kết mời bot Discord chỉ là một URL ủy quyền OAuth2: tham số scope quyết định loại quyền truy cập đang được yêu cầu (một tài khoản bot, lệnh slash, hoặc cả hai), còn số quyền quyết định tài khoản bot đó có thể làm gì sau khi vào máy chủ, và quản trị viên máy chủ phải chấp thuận toàn bộ trước khi bất kỳ điều gì trong số đó có hiệu lực. Hiểu hai tham số này là khác biệt giữa việc tạo một liên kết mời an toàn và việc sao chép một liên kết mà bạn không thể giải thích đầy đủ.

An OAuth permission checklist gets reviewed, Administrator is unticked, and the bot joins online. Permissions Kick Members Manage Messages Administrator Authorize YourBot Online

Cấu tạo của một liên kết mời

Một lời mời bot thông thường trông như thế này:

https://discord.com/oauth2/authorize?client_id=123456789&permissions=268446800&scope=bot%20applications.commands

  • client_id - ID công khai của ứng dụng, an toàn để chia sẻ, nó có trong mọi liên kết mời của bot đó.
  • scope - loại quyền truy cập đang được yêu cầu, phân tách bằng khoảng trắng (được mã hóa URL thành %20).
  • permissions - một con số duy nhất đại diện cho mọi quyền máy chủ đang được yêu cầu, được cộng lại với nhau.
  • guild_id và disable_guild_select (tùy chọn) - chọn sẵn một máy chủ cụ thể và khóa bộ chọn vào đó, hữu ích cho nút "thêm tôi vào đây" trên từng máy chủ.

Scope "bot"

Đây là thứ thực sự thêm bot làm một thành viên của máy chủ, mục xuất hiện trong danh sách thành viên với thẻ bot bên cạnh. Không có scope này, không có gì tham gia được; không có tài khoản bot nào để ủy quyền.

Scope "applications.commands"

Scope này đăng ký các lệnh slash, lệnh người dùng và lệnh tin nhắn của ứng dụng để chúng có thể được dùng trong máy chủ đó. Về mặt kỹ thuật, một bot có thể vào chỉ với scope bot, nhưng không lệnh / nào của nó sẽ hiện ra khi ai đó gõ /, vì máy chủ chưa cho phép đăng ký lệnh.

Vì sao bạn gần như luôn cần cả hai

Một bot được mời chỉ với bot vẫn có thể đăng tin nhắn, phản hồi nút trên các tin nhắn nó đã gửi, và phản hồi những thứ không cần lệnh slash. Nhưng người dùng Discord hiện đại mong đợi có lệnh, và một bot không đăng ký được lệnh sẽ trông hỏng ngay cả khi nó hoạt động tốt. Mọi liên kết mời Noxyr tạo ra, và hầu hết mọi bot hợp lệ, đều bao gồm cả hai scope cùng lúc vì chính lý do đó.

Giải mã số quyền

Mỗi quyền Discord, như gửi tin nhắn, quản lý vai trò, đuổi thành viên, là một bit duy nhất trong một bitfield: một cờ lũy thừa của 2. Con số trong liên kết mời là tổng của mọi cờ đang được yêu cầu cùng lúc. Một liên kết yêu cầu permissions bằng 8 đang yêu cầu đúng một thứ: Administrator, toàn quyền không giới hạn trên máy chủ. Một liên kết mời được xây dựng tốt thay vào đó chỉ cộng các cờ cụ thể mà code của bot thực sự dùng: quản lý kênh để tạo kênh vé, quản lý vai trò cho vai trò xác minh, các hành động kiểm duyệt để phản ứng với raid, chứ không phải mọi thứ Discord cung cấp.

Vì sao Administrator là cờ đỏ, không phải yêu cầu

Hầu hết các bot hợp lệ không cần nó. Yêu cầu nó hoặc là một nhu cầu thực sự, hiếm gặp, cho thứ chạm đến gần như mọi quyền cùng lúc, hoặc, phổ biến hơn nhiều, là một bot được làm vội với permissions bằng 8 được dán vào vì đó là con số dễ với tới nhất. Đây cũng là màn hình đáng sợ nhất mà Discord hiển thị cho chủ máy chủ trong lúc thiết lập, nên nó là lý do thường gặp khiến lời mời bị từ chối hoàn toàn, hoặc bot bị gỡ sau này bởi ai đó đang dọn dẹp quyền. Bạn có thể giải mã số quyền của bất kỳ liên kết mời nào bằng một công cụ tính quyền của Discord trước khi nhấn Authorize, để xem chính xác những gì đang được yêu cầu.

Liên kết mời của Noxyr được tạo như thế nào, làm ví dụ

Thay vì yêu cầu Administrator, lời mời của Noxyr được tạo từ các quyền cụ thể mà các tính năng của nó thực sự dùng: quản lý kênh và vai trò cho vé và xác minh, quyền tin nhắn và kiểm duyệt cho phản ứng anti-nuke, và không gì ngoài danh sách đó. Nó luôn bao gồm cả hai scope bot và applications.commands, nên các lệnh của nó hoạt động ngay khi bot vào.

Các scope OAuth2 khác bạn có thể gặp

Discord định nghĩa hàng chục scope OAuth2 ngoài bot và applications.commands. Hầu hết, như identify hay guilds.join, thuộc về kiểu xác thực web "Đăng nhập bằng Discord" chứ không phải lời mời bot, và hoàn toàn không xuất hiện trong liên kết mời tiêu chuẩn. Nếu một liên kết bạn đang xem yêu cầu thứ gì đó lạ bên cạnh bot, hãy kiểm tra xem scope đó thực sự cấp quyền gì trước khi ủy quyền, vì một lời mời bot cần thêm các scope xác thực web là điều bất thường, trừ khi là dịch vụ cũng cung cấp liên kết tài khoản.

Tạo liên kết mời cho bot tùy chỉnh của riêng bạn

Khi bạn đã tạo một ứng dụng trong Cổng nhà phát triển Discord, URL Generator ở tab OAuth2 sẽ tạo liên kết này cho bạn bằng các ô đánh dấu: chọn bot và applications.commands trong mục scope, chọn các quyền bot của bạn cần, rồi sao chép kết quả, thay vì tự ghép URL và số quyền bằng tay.

Câu hỏi thường gặp

disable_guild_select làm gì? Nó khóa bộ chọn máy chủ vào một máy chủ đã chọn sẵn, nên một liên kết mời dành cho một cộng đồng cụ thể không thể vô tình được dùng để thêm bot vào nơi khác.

Tôi có cần applications.commands nếu bot chỉ dùng nút không? Không bắt buộc đối với các nút trên tin nhắn bot đã gửi, nhưng bạn cần nó ngay khi có bất kỳ lệnh slash nào liên quan.

Đổi số quyền sau này có thể cấp thêm quyền hồi tố không? Không. Một máy chủ đã chấp thuận lời mời sẽ giữ bất cứ quyền nào được cấp vào thời điểm đó; đổi liên kết chỉ ảnh hưởng đến các lời mời trong tương lai, các bản cài đặt hiện có cần được mời lại và chấp thuận lại để có thêm quyền.

Chỉ scope=bot có đủ không? Đủ để bot tham gia, nhưng các lệnh slash của nó sẽ không xuất hiện nếu thiếu applications.commands đi kèm.

Vì sao Discord hiển thị cảnh báo lớn như vậy cho Administrator? Vì nó đang yêu cầu quyền truy cập không giới hạn vào toàn bộ máy chủ, quyền nguy hiểm nhất mà một lời mời bot có thể yêu cầu.

Đang thiết lập lời mời cho bot của riêng bạn? Xem trước hướng dẫn tạo ứng dụng Discord của chúng tôi, rồi đọc tài liệu Bot tùy chỉnh nếu bạn muốn bỏ qua hoàn toàn việc viết code đứng sau nó.