Discord बॉट इन्वाइट लिंक बस एक OAuth2 authorization URL है: उसका scope पैरामीटर तय करता है कि किस तरह की पहुंच मांगी जा रही है (एक बॉट अकाउंट, slash commands, या दोनों), और उसका permissions नंबर तय करता है कि बॉट अकाउंट सर्वर में आने के बाद क्या कर सकता है। सर्वर का एडमिन पूरी चीज़ को मंज़ूरी देता है, उसके बाद ही उसमें से कुछ भी लागू होता है। इन दो पैरामीटरों को समझना ही सुरक्षित इन्वाइट लिंक बनाने और ऐसा लिंक कॉपी करने के बीच का फ़र्क है जिसे आप पूरी तरह नहीं समझते।

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

इन्वाइट लिंक की बनावट

एक सामान्य बॉट इन्वाइट ऐसा दिखता है:

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

  • client_id - application का सार्वजनिक ID, इसे साझा करना सुरक्षित है, यह उस बॉट के हर इन्वाइट लिंक में होता है।
  • scope - किस तरह की पहुंच मांगी जा रही है, स्पेस से अलग किया हुआ (URL-encoded रूप %20 है)।
  • permissions - एक ही नंबर जो मांगी जा रही हर सर्वर अनुमति को दर्शाता है, सब जोड़कर।
  • guild_id और disable_guild_select (वैकल्पिक) - किसी खास सर्वर को पहले से चुनें और picker को उसी पर लॉक करें, प्रति-सर्वर "मुझे यहां जोड़ो" बटन के लिए उपयोगी।

"bot" scope

यही असल में बॉट को सर्वर के सदस्य के रूप में जोड़ता है, वह प्रविष्टि जो मेंबर सूची में उसके बगल में bot tag के साथ दिखती है। इस scope के बिना कुछ भी नहीं जुड़ता; कोई बॉट अकाउंट ही नहीं है जिसे अधिकृत किया जाए।

"applications.commands" scope

यह application के slash, user और message commands को रजिस्टर करता है ताकि उस सर्वर में उनका इस्तेमाल हो सके। तकनीकी रूप से बॉट केवल bot scope के साथ भी जुड़ सकता है, लेकिन जब कोई / टाइप करता है तो उसका कोई भी /commands नहीं दिखता, क्योंकि सर्वर ने कभी command रजिस्ट्रेशन को अधिकृत नहीं किया।

आपको लगभग हमेशा दोनों क्यों चाहिए

केवल bot के साथ इन्वाइट किया गया बॉट अब भी संदेश पोस्ट कर सकता है, उन संदेशों पर बटनों पर प्रतिक्रिया दे सकता है जो उसने पहले भेजे हैं, और उन चीज़ों का जवाब दे सकता है जिन्हें slash command की ज़रूरत नहीं। लेकिन आधुनिक Discord उपयोगकर्ता कमांड की उम्मीद करते हैं, और जो बॉट उन्हें रजिस्टर नहीं कर सकता, वह ठीक से काम करते हुए भी खराब लगता है। इसी वजह से Noxyr द्वारा बनाया गया हर इन्वाइट लिंक, और लगभग हर वैध बॉट का लिंक, दोनों scopes एक साथ रखता है।

permissions नंबर, डिकोड करके

हर Discord अनुमति, संदेश भेजना, रोल मैनेज करना, सदस्यों को किक करना, एक bitfield में एक ही bit है: दो की घात वाला एक flag। इन्वाइट लिंक में नंबर उन सभी flags का जोड़ है जो एक साथ मांगे जा रहे हैं। जो लिंक permissions के रूप में 8 मांगता है, वह ठीक एक चीज़ मांग रहा है: Administrator, सर्वर पर पूरी बिना प्रतिबंध की पहुंच। एक अच्छी तरह बना इन्वाइट लिंक केवल वही specific flags जोड़ता है जो बॉट का कोड असल में इस्तेमाल करता है: टिकट चैनल बनाने के लिए channel मैनेजमेंट, verify रोल के लिए role मैनेजमेंट, anti-raid प्रतिक्रिया के लिए मॉडरेशन कार्रवाइयां, न कि Discord में उपलब्ध हर चीज़।

Administrator खतरे का संकेत है, ज़रूरत नहीं

ज़्यादातर वैध बॉटों को इसकी ज़रूरत नहीं होती। इसे मांगना या तो किसी ऐसी चीज़ के लिए वास्तविक, दुर्लभ ज़रूरत है जो लगभग हर अनुमति को एक साथ छूती है, या, कहीं ज़्यादा बार, एक ऐसा बॉट जो जल्दी में बनाया गया और जिसमें permissions के रूप में 8 चिपका दिया गया क्योंकि वही सबसे आसान नंबर लगा। यह सेटअप के दौरान Discord सर्वर ओनर को दिखाई देने वाली सबसे डरावनी स्क्रीन भी है, इसलिए यह अक्सर इन्वाइट को सीधे ठुकरा दिए जाने या बाद में किसी के अनुमतियां साफ़ करने पर बॉट हटा दिए जाने का कारण बनती है। Authorize पर क्लिक करने से पहले आप किसी भी इन्वाइट लिंक का permissions नंबर Discord permissions calculator से डिकोड कर सकते हैं, ताकि ठीक पता चले कि क्या मांगा जा रहा है।

Noxyr का इन्वाइट लिंक कैसे बना है, एक उदाहरण के रूप में

Administrator मांगने के बजाय, Noxyr का इन्वाइट उन specific अनुमतियों से बना है जिन्हें उसके फ़ीचर असल में इस्तेमाल करते हैं: टिकट और verification के लिए channel और role मैनेजमेंट, anti-nuke प्रतिक्रियाओं के लिए संदेश और मॉडरेशन अनुमतियां, और उस सूची से आगे कुछ नहीं। इसमें हमेशा bot और applications.commands दोनों scopes शामिल होते हैं, ताकि सर्वर में जुड़ते ही उसके commands काम करें।

अन्य OAuth2 scopes जो आपको मिल सकते हैं

Discord bot और applications.commands के अलावा दर्जनों OAuth2 scopes परिभाषित करता है। उनमें से ज़्यादातर, जैसे identify या guilds.join, "Login with Discord" जैसी वेब authentication के लिए हैं, बॉट इन्वाइट के लिए नहीं, और मानक इन्वाइट लिंक में बिल्कुल नहीं दिखते। अगर आप जो लिंक देख रहे हैं वह bot के साथ कुछ अनजाना मांगता है, तो अधिकृत करने से पहले जांचें कि वह scope असल में क्या देता है, क्योंकि खाता-लिंकिंग भी देने वाली सेवा के बाहर बॉट इन्वाइट को अतिरिक्त वेब-auth scopes की वैध ज़रूरत होना असामान्य है।

अपने कस्टम बॉट का इन्वाइट लिंक बनाना

Discord Developer Portal में application बनाने के बाद, OAuth2 टैब का URL Generator यह लिंक आपके लिए चेकबॉक्स से बनाता है: scopes के नीचे bot और applications.commands पर टिक करें, अपने बॉट को जिन अनुमतियों की ज़रूरत है उन पर टिक करें, और परिणाम कॉपी करें। URL और permissions नंबर हाथ से जोड़ने की ज़रूरत नहीं।

आम सवाल

disable_guild_select क्या करता है? यह सर्वर picker को एक पहले से चुने गए सर्वर पर लॉक करता है, ताकि किसी एक खास समुदाय के लिए बना इन्वाइट लिंक गलती से बॉट को कहीं और जोड़ने में इस्तेमाल न हो सके।

अगर मेरा बॉट केवल बटन इस्तेमाल करता है, तो क्या मुझे applications.commands चाहिए? उन संदेशों पर बटनों के लिए सख़्ती से नहीं जो उसने पहले भेजे हैं, लेकिन जिस पल कोई slash command शामिल होता है, उसी पल यह ज़रूरी है।

क्या बाद में permissions नंबर बदलने से पिछली तारीख से पहुंच जुड़ जाएगी? नहीं। जिस सर्वर ने पहले ही इन्वाइट मंज़ूर किया है, वह तब दी गई अनुमतियां रखता है; लिंक बदलने का असर केवल आगे के इन्वाइट पर होता है, मौजूदा इंस्टॉल को अधिक पाने के लिए दोबारा इन्वाइट और दोबारा मंज़ूरी चाहिए।

क्या अकेला scope=bot काफ़ी है? बॉट के जुड़ने के लिए काफ़ी है, लेकिन उसके slash commands तब तक नहीं दिखेंगे जब तक उसके साथ applications.commands न हो।

Administrator के लिए Discord इतनी बड़ी चेतावनी क्यों दिखाता है? क्योंकि यह पूरे सर्वर पर बिना प्रतिबंध की पहुंच मांगता है, जो बॉट इन्वाइट में मांगी जा सकने वाली सबसे खतरनाक अनुमति है।

अपने बॉट का इन्वाइट सेट करना है? पहले Discord application बनाने पर हमारी गाइड देखें, फिर अगर आप उसके पीछे का कोड लिखना ही छोड़ना चाहें तो Custom Bot docs पढ़ें।