2025, Oct 31 16:32

Discord DM/GDM में बॉट चलाने का सही तरीका: slash commands और User Install

discord.py 2.4+ में Discord DM व Group DM हेतु बॉट सक्षम करें: slash commands, User Install और allowed_installs/allowed_contexts से निजी चैट में कमांड चलाएँ.

DM में चलने वाला Discord बॉट बनाना सरल लगता है, जब तक कि आप उसे किसी अन्य यूज़र के साथ निजी चैट में इस्तेमाल करने की कोशिश न करें। पुराने प्रीफिक्स-कमांड अलग संदर्भों में अलग तरह से बर्ताव करते हैं, और सही सेटअप के बिना आपका कमांड दो-व्यक्ति DM या Group DM में चुपचाप कुछ भी नहीं करेगा। नीचे बताया गया है कि Discord द्वारा समर्थित तरीकों से इसे सही तरह से कैसे चलाएँ।

DM वाले परिदृश्य में क्या टूटता है

एक साधारण कमांड लें जो केवल DM में चलना चाहिए। यह किसने उसे चलाया, उसे लॉग करता है, कोई मान चुनता है और जवाब देता है। सब ठीक दिखता है, लेकिन यह किसी दूसरे यूज़र के साथ DM थ्रेड में ट्रिगर नहीं होता।

@core.command()
@commands.dm_only()
async def purr(ev: discord.ApplicationContext):
    audit.info(f"{ev.author} meows")
    max_count=len(catlines)
    idx=random.randint(1,max_count)
    msg=catlines[idx][0]
    audit.info(msg)
    await ev.send(msg)

DM तक सीमित होने के बावजूद, किसी दोस्त के साथ निजी बातचीत में इसे चलाने पर कोई दृश्य प्रतिक्रिया नहीं मिलती।

ऐसा क्यों होता है

यह व्यवहार इस बात से आता है कि Discord डायरेक्ट और ग्रुप बातचीतों में इंटरैक्शन्स को कैसे उपलब्ध कराता है। साधारण कमांड्स पर्याप्त नहीं हैं कि बॉट को यूज़र-टू-यूज़र DM या GDM में उपयोगी बनाया जा सके। यह तभी सम्भव है जब आप स्लैश कमांड्स का उपयोग करें और उस सुविधा के साथ जोड़ें जो यूज़र को ऐप को अपने प्रोफ़ाइल पर इंस्टॉल करने देती है, ताकि वह उसे कहीं भी बुला सके। यानी संदर्भ और इंस्टॉलेशन मॉडल, कमांड जितने ही महत्वपूर्ण हैं।

सही तरीका

discord.py 2.4+ से, दो शर्तें पूरी हों तो स्लैश कमांड्स को DM और Group DM के लिए सक्षम किया जा सकता है। पहला, कमांड को यूज़र प्रोफ़ाइल पर इंस्टॉल होने दें। दूसरा, DM और GDM संदर्भों में निष्पादन को स्पष्ट रूप से अनुमति दें। GDM को private_channels कहा जाता है। न्यूनतम सेटअप नीचे है:

@discord.app_commands.allowed_installs(guilds=False, users=True)
@discord.app_commands.allowed_contexts(guilds=False, dms=True, private_channels=True)
@app.tree.command()
async def purr(inter):
    ...

प्रक्रिया पूरी करने के लिए, Developer Portal में अपनी एप्लिकेशन के “Installation” टैब में “User Install” सक्षम करें। इससे ऑथराइज़ेशन के दौरान “Add to My Apps” विकल्प दिखेगा, जो यूज़र-लेवल इंस्टॉल के लिए आवश्यक है। आधिकारिक संदर्भ यहां उपलब्ध हैं: @discord.app_commands.allowed_installs और @discord.app_commands.allowed_contexts

सब कुछ जोड़कर देखें

इंटरैक्शन शैली को स्लैश कमांड्स पर ले आएँ, यूज़र इंस्टॉल की अनुमति दें और कमांड के कॉन्टेक्स्ट खोलें। यह संशोधित संस्करण पहले वाली लॉजिक को बरकरार रखता है और, यूज़र द्वारा इंस्टॉल करने के बाद, DM और GDM—दोनों में चलाया जा सकता है:

@discord.app_commands.allowed_installs(guilds=False, users=True)
@discord.app_commands.allowed_contexts(guilds=False, dms=True, private_channels=True)
@app.tree.command()
async def purr(inter):
    audit.info(f"{inter.user} meows")
    max_count=len(catlines)
    idx=random.randint(1,max_count)
    msg=catlines[idx][0]
    audit.info(msg)
    await inter.response.send_message(msg)

“User Install” सक्षम करने और उसी स्कोप के साथ ऐप को दोबारा ऑथराइज़ करने के बाद, स्लैश कमांड सीधे किसी दूसरे व्यक्ति के साथ DM में या GDM के भीतर उपलब्ध हो जाता है—यह इस पर निर्भर करता है कि यूज़र उसे कहाँ से चलाता है।

आपकी बॉट आर्किटेक्चर के लिए यह क्यों मायने रखता है

DM और GDM में उपलब्धता कोई साधारण टॉगल नहीं है; यह Discord के स्लैश कमांड सिस्टम और यूज़र इंस्टॉलेशन फ्लो से जुड़ी क्षमता है। यदि आपके प्रोडक्ट को सर्वरों से बाहर निजी इंटरैक्शन चाहिए, तो अपने कमांड्स को ऐप कमांड्स के रूप में डिज़ाइन करें और तय करें कि उन्हें कहाँ इंस्टॉल और कहाँ चलाया जा सकता है। यह तरीका अलग-अलग संदर्भों में व्यवहार को पूर्वानुमेय रखता है और “चुपचाप असफल” होने से बचाता है।

मुख्य निष्कर्ष

यदि कोई कमांड बॉट के साथ वन-ऑन-वन DM में चलता है, पर किसी दूसरे व्यक्ति वाले DM में नहीं, तो स्लैश कमांड्स पर जाएँ और यूज़र इंस्टॉल सक्षम करें। @discord.app_commands.allowed_installs को यूज़र-लेवल इंस्टॉल के साथ कॉन्फ़िगर करें और @discord.app_commands.allowed_contexts में DMs और private_channels की अनुमति दें। Dev Portal में “User Install” ऑन करें। इन चीज़ों के साथ, आपके बॉट की सुविधाएँ उन निजी बातचीतों में लगातार उपलब्ध रहेंगी, जहाँ यूज़र उन्हें स्वाभाविक रूप से खोजते हैं।