Ubuntu TechHive
building-a-discord-bot-using-open-ai-and-python.md
Open AI और Python का उपयोग करके Discord बॉट बनाना
article.विवरण

Open AI और Python का उपयोग करके Discord बॉट बनाना

reading.प्रगति 16 मिनट पढ़ें

ओपन एआई (Open AI) और पायथन (Python) का उपयोग करके डिस्कॉर्ड बॉट बनाना

ओपन एआई (Open AI) और पायथन का उपयोग करके डिस्कॉर्ड बॉट बनाना

डिस्कॉर्ड (Discord)

डिस्कॉर्ड एक बहुमुखी संचार प्लेटफ़ॉर्म है जिसे मूल रूप से गेमर्स के लिए डिज़ाइन किया गया था, लेकिन तब से इसने ऑनलाइन समुदायों और समूहों की एक विस्तृत श्रृंखला के लिए अपनी अपील का विस्तार किया है। यह टेक्स्ट, वॉयस और वीडियो संचार के माध्यम से बातचीत को बढ़ावा देने और समुदाय बनाने के उद्देश्य से सुविधाओं का एक समृद्ध सेट प्रदान करता है।

डिस्कॉर्ड की मुख्य विशेषताएं:

  1. सर्वर और चैनल:

    • सर्वर: डिस्कॉर्ड सर्वर व्यक्तिगत सामुदायिक केंद्रों की तरह होते हैं जहाँ लोग संवाद करने और सामग्री साझा करने के लिए इकट्ठा हो सकते हैं। प्रत्येक सर्वर को कई चैनलों में विभाजित किया जा सकता है।
    • चैनल: ये एक सर्वर के भीतर विशिष्ट क्षेत्र हैं जिन्हें विशेष विषयों या बातचीत के प्रकारों के लिए नामित किया गया है। चैनल टेक्स्ट-आधारित या वॉयस-आधारित हो सकते हैं, और सर्वर प्रशासक चर्चाओं को प्रभावी ढंग से व्यवस्थित करने के लिए कई चैनल बना सकते हैं।
  2. वॉयस और वीडियो संचार:

    • उपयोगकर्ता वॉयस चैनलों में शामिल हो सकते हैं जहाँ वे अपने माइक्रोफ़ोन का उपयोग करके दूसरों के साथ बात कर सकते हैं, अपनी स्क्रीन साझा कर सकते हैं, या वीडियो चैट भी कर सकते हैं। यह सुविधा गेमर्स के बीच इन-गेम गतिविधियों के समन्वय के लिए विशेष रूप से लोकप्रिय है, लेकिन इसका उपयोग वर्चुअल मीटिंग्स, लाइव कक्षाओं और सामान्य वॉयस चैट के लिए भी किया जाता है।
  3. टेक्स्ट मैसेजिंग:

    • टेक्स्ट चैनल उपयोगकर्ताओं को टाइप किए गए संदेशों के माध्यम से संवाद करने की अनुमति देते हैं। ये चैनल रिच टेक्स्ट फ़ॉर्मेटिंग, डायरेक्ट मैसेज, मेंशन और एम्बेडेड मीडिया (छवियां, वीडियो और लिंक) का समर्थन करते हैं।
  4. इंटीग्रेशन और बॉट्स:

    • डिस्कॉर्ड स्पॉटिफ़ाई (Spotify), ट्विच (Twitch) और कई गेमिंग सेवाओं जैसी अन्य सेवाओं के साथ एकीकरण का समर्थन करता है, जो स्ट्रीमिंग संगीत, गेम आँकड़े साझा करने या लाइव गेमप्ले प्रसारित करने जैसी गतिविधियों की अनुमति देकर उपयोगकर्ता अनुभव को बढ़ाता है।
    • बॉट्स डिस्कॉर्ड की एक और शक्तिशाली विशेषता है, जो कार्यों को स्वचालित कर सकते हैं, सर्वर गतिविधियों का प्रबंधन कर सकते हैं, या उपयोगकर्ताओं के लिए मज़ेदार इंटरैक्टिव तत्व भी जोड़ सकते हैं।
  5. रोल और अनुमतियाँ:

    • डिस्कॉर्ड एक सर्वर के भीतर उपयोगकर्ता भूमिकाओं (रोल्स) और अनुमतियों के व्यापक अनुकूलन की अनुमति देता है। प्रशासक विशिष्ट अनुमतियों के साथ भूमिकाएं असाइन कर सकते हैं जो नियंत्रित करती हैं कि कौन कुछ चैनलों तक पहुंच सकता है, सर्वर सेटिंग्स को संशोधित कर सकता है, या अन्य उपयोगकर्ताओं का प्रबंधन कर सकता है।
  6. सुरक्षा और गोपनीयता:

    • डिस्कॉर्ड मजबूत गोपनीयता नियंत्रण और सुरक्षा सुविधाएँ प्रदान करता है, जिसमें टू-फैक्टर ऑथेंटिकेशन, मॉडरेशन टूल और यह नियंत्रित करने की क्षमता शामिल है कि कौन आपको डायरेक्ट मैसेज भेज सकता है या आपको मित्र के रूप में जोड़ सकता है।
  7. क्रॉस-प्लेटफ़ॉर्म उपयोग:

    • डिस्कॉर्ड विंडोज, मैकओएस और लिनक्स के लिए डेस्कटॉप ऐप्स, एंड्रॉइड और आईओएस के लिए मोबाइल ऐप्स के माध्यम से सुलभ है, और इसे सीधे वेब ब्राउज़र में भी चलाया जा सकता है, जिससे यह व्यापक रूप से सुलभ हो जाता है।

ओपन एआई (OpenAI)

ओपन एआई एक कृत्रिम बुद्धिमत्ता (AI) अनुसंधान संगठन है जिसका उद्देश्य मैत्रीपूर्ण एआई को इस तरह से बढ़ावा देना और विकसित करना है जिससे पूरी मानवता को लाभ हो। एलन मस्क, सैम ऑल्टमैन और अन्य द्वारा दिसंबर 2015 में स्थापित, ओपन एआई ने शुरू में एक गैर-लाभकारी संस्था के रूप में शुरुआत की थी, लेकिन बाद में बाहरी निवेश को आकर्षित करने के लिए एक सीमित-लाभ वाली शाखा का गठन किया।

ओपन एआई के मुख्य पहलुओं में शामिल हैं:

  • अनुसंधान और विकास: ओपन एआई एआई और मशीन लर्निंग में अत्याधुनिक अनुसंधान करता है, जिसका ध्यान उन्नत एआई प्रौद्योगिकियों और क्षमताओं को विकसित करने पर है।
  • सुरक्षा और नैतिकता: ओपन एआई के मिशन का एक मुख्य हिस्सा यह सुनिश्चित करना है कि एआई प्रौद्योगिकियां सुरक्षित और नैतिक रूप से विकसित हों, जिसमें संभावित जोखिमों का जिम्मेदारी से प्रबंधन किया जाए।
  • जीपीटी (GPT) मॉडल: ओपन एआई अपने जेनरेटिव प्री-ट्रेन्ड ट्रांसफॉर्मर (GPT) मॉडल के लिए प्रसिद्ध है, जो प्राकृतिक भाषा प्रसंस्करण कार्यों की एक विस्तृत श्रृंखला में सक्षम हैं।
  • सहयोग और लाइसेंसिंग: ओपन एआई विभिन्न संगठनों और कंपनियों के साथ सहयोग करता है और एपीआई सेवाओं के माध्यम से अपने एआई मॉडल, जैसे GPT-3, के व्यावसायिक संस्करण प्रदान करता है।

रिप्लिट (Replit)

रिप्लिट (पूर्व में Repl.it) एक ऑनलाइन एकीकृत विकास वातावरण (IDE) है जो उपयोगकर्ताओं को ऑनलाइन कोड लिखने, चलाने और साझा करने की अनुमति देता है। यह डेवलपर्स, शिक्षकों और छात्रों के लिए समान रूप से एक शक्तिशाली उपकरण है, जिसे कोडिंग को अधिक सुलभ और सहयोगी बनाने के लिए डिज़ाइन किया गया है। रिप्लिट पायथन, जावास्क्रिप्ट, रूबी, सी++ और कई अन्य सहित प्रोग्रामिंग भाषाओं की एक विस्तृत श्रृंखला का समर्थन करता है।

रिप्लिट की मुख्य विशेषताएं:

  1. त्वरित आईडीई सेटअप:

    • शून्य इंस्टॉलेशन: रिप्लिट पूरी तरह से ब्राउज़र में चलता है, जिससे आपके स्थानीय मशीन पर सॉफ़्टवेयर इंस्टॉल करने या निर्भरताओं (dependencies) को प्रबंधित करने की आवश्यकता समाप्त हो जाती है।
    • कई भाषाओं के लिए समर्थन: रिप्लिट 50 से अधिक प्रोग्रामिंग भाषाओं का समर्थन करता है, जिससे आप बिना किसी अतिरिक्त सेटअप के परियोजनाओं और भाषाओं के बीच स्विच कर सकते हैं।
  2. सहयोगात्मक कोडिंग:

    • रीयल-टाइम सहयोग: गूगल डॉक्स के समान, रिप्लिट कई उपयोगकर्ताओं को एक ही वातावरण में एक साथ कोड करने की अनुमति देता है। यह सुविधा पेयर प्रोग्रामिंग, शिक्षण या सहयोगी समस्या-समाधान के लिए विशेष रूप से उपयोगी है।
    • मल्टीप्लेयर मोड: यह मोड अन्य उपयोगकर्ताओं के साथ रीयल-टाइम सहयोग को सक्षम बनाता है, जिसमें आईडीई के भीतर सीधे कोड पर चर्चा करने के लिए एक चैट सुविधा भी शामिल है।
  3. होस्टिंग और परिनियोजन:

    • त्वरित परिनियोजन: रिप्लिट होस्टिंग सेवाएं प्रदान करता है, जिसका अर्थ है कि आप सीधे प्लेटफ़ॉर्म से वेब एप्लिकेशन विकसित और तैनात कर सकते हैं। यह प्रत्येक प्रोजेक्ट के लिए एक लाइव, सार्वजनिक यूआरएल उत्पन्न करता है।
    • ऑलवेज-ऑन रिपल्स: भुगतान करने वाले उपयोगकर्ताओं के लिए, रिप्लिट ब्राउज़र बंद करने पर भी एप्लिकेशन को हमेशा चालू रखने की क्षमता प्रदान करता है, जो बॉट्स, वेब ऐप्स और अन्य निरंतर सेवाओं के लिए बहुत अच्छा है।
  4. वर्जन कंट्रोल:

    • इन-बिल्ट गिट (Git) सपोर्ट: रिप्लिट गिट को एकीकृत करता है, जिससे उपयोगकर्ता किसी भी बाहरी गिट रिपॉजिटरी से पुश और पुल कर सकते हैं। यह एकीकरण गिटहब (GitHub) जैसे प्लेटफ़ॉर्म के माध्यम से वर्जन कंट्रोल और कोड साझा करने की सुविधा प्रदान करता है।
  5. शैक्षिक उपकरण:

    • कक्षा प्रबंधन: शिक्षक कोडिंग असाइनमेंट का प्रबंधन कर सकते हैं, फीडबैक प्रदान कर सकते हैं और सीधे रिप्लिट के भीतर छात्र की प्रगति की निगरानी कर सकते हैं। उपयोग में आसानी और न्यूनतम सेटअप के कारण इसका शैक्षिक सेटिंग्स में व्यापक रूप से उपयोग किया जाता है।
    • टेम्पलेट्स और उदाहरण: रिप्लिट कई प्रकार के टेम्पलेट्स और उदाहरण प्रोजेक्ट प्रदान करता है जो उपयोगकर्ताओं को नई भाषाओं या फ्रेमवर्क के साथ जल्दी शुरुआत करने में मदद कर सकते हैं।
  6. निक्स (Nix) वातावरण:

    • अनुकूलन योग्य वातावरण: उन्नत उपयोगकर्ता निक्स (Nix), एक शक्तिशाली पैकेज प्रबंधन उपकरण का उपयोग करके अपने कोडिंग वातावरण को अनुकूलित कर सकते हैं। यह सुविधा डेवलपर्स को सटीक प्रोजेक्ट वातावरण को परिभाषित करने की अनुमति देती है जिसमें विशिष्ट सिस्टम निर्भरताएं शामिल होती हैं।
  7. एकीकृत डेटाबेस समर्थन:

    • इन-बिल्ट डेटाबेस: रिप्लिट में सरल की-वैल्यू स्टोरेज के लिए एक इन-बिल्ट डेटाबेस सुविधा शामिल है, जो उन एप्लिकेशन के लिए उपयोगी है जिन्हें बाहरी डेटाबेस सेट किए बिना डेटा को बनाए रखने की आवश्यकता होती है।

रिप्लिट के सर्वोत्तम उपयोग:

  • रैपिड प्रोटोटाइपिंग: वातावरण सेटअप की चिंता किए बिना ऐप्स को जल्दी से प्रोटोटाइप करें।
  • सीखना और शिक्षा: अपनी पहुंच और उपयोग में आसानी के कारण कक्षाओं और स्व-शिक्षण के लिए आदर्श।
  • तकनीकी साक्षात्कार: साझा सत्रों के साथ आसानी से कोडिंग साक्षात्कार और मूल्यांकन आयोजित करें।
  • हैकाथॉन: सेटअप पर समय बर्बाद किए बिना हैकाथॉन के दौरान जल्दी से प्रोजेक्ट शुरू करें।

डेमो

साइड नोट:

एसिंक (Async) और अवेट (await)

पायथन में, `async` और `await` कीवर्ड हैं जिनका उपयोग एसिंक्रोनस कोड को परिभाषित करने और संभालने के लिए किया जाता है, जो ऐसा कोड है जो आपको अपने प्रोग्राम के निष्पादन को अवरुद्ध (block) किए बिना लंबे समय तक चलने वाले ऑपरेशन करने की अनुमति देता है। यह विशेष रूप से I/O-बाउंड और नेटवर्क-बाउंड कार्यों के लिए उपयोगी है, जैसे नेटवर्क अनुरोध करना, फ़ाइलों को पढ़ना या लिखना, आदि, जहाँ प्रोग्राम अपना अधिकांश समय बाहरी घटनाओं की प्रतीक्षा में व्यतीत करता है।

यहाँ दोनों कीवर्ड और पायथन में वे कैसे काम करते हैं, इसका विस्तृत विवरण दिया गया है:

  • `async` कीवर्ड
  1. एसिंक्रोनस फ़ंक्शंस को परिभाषित करना: `async` कीवर्ड का उपयोग किसी फ़ंक्शन को "एसिंक्रोनस फ़ंक्शन" के रूप में घोषित करने के लिए किया जाता है। इसका मतलब है कि फ़ंक्शन नॉन-ब्लॉकिंग है और एक `awaitable` ऑब्जेक्ट, विशेष रूप से एक `asyncio.Future` ऑब्जेक्ट लौटाता है। एक एसिंक फ़ंक्शन को `async def` सिंटैक्स का उपयोग करके परिभाषित किया जाता है:

    async def fetch_data():
        # फ़ंक्शन बॉडी

    `async def` के साथ एक फ़ंक्शन घोषित करके, आप पायथन को बता रहे हैं कि यह फ़ंक्शन एसिंक्रोनस ऑपरेशन कर सकता है और इसे रोका और फिर से शुरू किया जा सकता है।

  • `await` कीवर्ड
  1. निष्पादन को रोकना और फिर से शुरू करना: `await` कीवर्ड का उपयोग एक एसिंक्रोनस फ़ंक्शन के भीतर फ़ंक्शन के निष्पादन को तब तक रोकने के लिए किया जाता है जब तक कि `awaitable` ऑब्जेक्ट (जैसे अन्य एसिंक फ़ंक्शंस द्वारा लौटाए गए) हल नहीं हो जाते। यह फ़ंक्शन को परिणाम उपलब्ध होने की प्रतीक्षा करने देता है जबकि इस बीच अन्य कार्यों को चलने देता है।

    async def fetch_data():
        data = await some_async_function()
        return data

    इस उदाहरण में, `some_async_function()` एक और एसिंक्रोनस फ़ंक्शन है, और `await` `fetch_data()` को तब तक रोकता है जब तक कि `some_async_function()` अपना कार्य पूरा नहीं कर लेता और कुछ डेटा नहीं लौटाता।

  • `async` और `await` एक साथ कैसे काम करते हैं
  • कॉन्करेंसी (Concurrency): एक साथ, `async` और `await` पायथन में कॉन्करेंट कोड लिखने का एक तरीका प्रदान करते हैं। इन कीवर्ड का उपयोग करके, आप I/O ऑपरेशंस के पूरा होने की प्रतीक्षा करते समय पायथन को अन्य कार्यों को संभालने की अनुमति देकर अपने एप्लिकेशन को रिस्पॉन्सिव रख सकते हैं। यह समानांतर निष्पादन (parallel execution) नहीं है, बल्कि कॉन्करेंट निष्पादन (सहकारी मल्टीटास्किंग के माध्यम से) है।
  • इवेंट लूप: `async` और `await` के पीछे की मुख्य अवधारणा इवेंट लूप है, जो पायथन में `asyncio` लाइब्रेरी द्वारा प्रदान की जाती है। इवेंट लूप विभिन्न कार्यों के निष्पादन का प्रबंधन और वितरण करता है। यह सभी चल रहे कार्यों पर नज़र रखता है और जैसे ही उनके अवेटेड ऑपरेशन पूरे हो जाते हैं, `await` द्वारा रोके गए फ़ंक्शंस को फिर से शुरू करता है।

उदाहरण उपयोग

यहाँ एसिंक्रोनस रूप से एक कार्य करने के लिए `asyncio` का उपयोग करने का एक सरल उदाहरण है:

import asyncio

async def main():
  print("Hello")
  await asyncio.sleep(1)  # एसिंक्रोनस स्लीप, इवेंट लूप को ब्लॉक नहीं करता
  print("world")

# एसिंक्रोनस मेन फ़ंक्शन को चलाना
asyncio.run(main())

व्यावहारिक अनुप्रयोग

  • वेब डेवलपमेंट: वेब सर्वर और वेब एप्लिकेशन में, `async` और `await` एक साथ कई वेब अनुरोधों को संभालने की अनुमति देते हैं। यह उच्च लोड को संभालने और कई नेटवर्क अनुरोधों को कुशलतापूर्वक करने में मदद करता है।
  • डेटा एकत्र करना: वे उन परिदृश्यों में उपयोगी हैं जहाँ इंटरनेट पर कई स्रोतों, जैसे एपीआई या डेटाबेस से डेटा एकत्र करने की आवश्यकता होती है, बिना प्रत्येक कार्य के क्रमिक रूप से पूरा होने की प्रतीक्षा किए।

स्टेप0 हैलो बॉट!

  • स्टेप 1: discord.py इंस्टॉल करें

सबसे पहले, आपको discord.py लाइब्रेरी इंस्टॉल करनी होगी। आप पैकेज मैनेजर के रूप में Rye का उपयोग कर सकते हैं

  • स्टेप 2: अपना डिस्कॉर्ड बॉट सेट अप करें

डिस्कॉर्ड डेवलपर पोर्टल (https://discord.com/developers/applications) पर जाएं। एक नया एप्लिकेशन बनाएं और उसे एक नाम दें। बॉट टैब पर जाएं और "Add Bot" पर क्लिक करें। उत्पन्न टोकन को कॉपी करें। अपना बॉट चलाने के लिए आपको इस टोकन की आवश्यकता होगी।

  • स्टेप 3: पायथन स्क्रिप्ट लिखें

एक पायथन स्क्रिप्ट बनाएं जो लॉग इन करने और संदेशों का जवाब देने के लिए बॉट टोकन का उपयोग करती है। नीचे एक बॉट का मूल उदाहरण दिया गया है जो सरल कमांड का जवाब देता है:

पर्यावरण चर (Environment variables)

import discord
import os
from dotenv import load_dotenv

# .env फ़ाइल से पर्यावरण चर लोड करें
load_dotenv()

intents = discord.Intents.default()
intents.messages = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f'Logged in as {client.user}')

@client.event
async def on_message(message):
    # बॉट को खुद को जवाब न देने दें
    if message.author == client.user:
        return

    elif message.content.startswith('!hello'):
        await message.channel.send('Hello!')

    elif message.content.startswith('hi'):
        await message.channel.send('welcome!')

    elif message.content.startswith('what is the best meetup up there?'):
        await message.channel.send('The Ubuntu Tech Hive :)')

    elif message.content.startswith('!bye'):
        await message.channel.send('Goodbye!')

    else:
        await message.channel.send("I did not understand your request!!")


client.run(os.environ["DISCORD_TOKEN"])import math  # मैथ लाइब्रेरी को इम्पोर्ट करना

क्या उपयोग किया गया:

  • dotenv एपीआई
  • डिस्कॉर्ड टोकन
  • डिस्कॉर्ड एपीआई बॉट
  • पायथन3

सीमाएं

  • बॉट बातचीत नहीं कर सकता।
  • केवल शर्त के आधार पर विशिष्ट प्रॉम्प्ट का जवाब देता है।
  • बहुत उपयोगी नहीं है।

स्टेप1 आइए बॉट को अधिक उपयोगी बनाएं

आवश्यक उपकरण: OpenAi एपीआई dotenv एपीआई डिस्कॉर्ड टोकन पायथन3

import discord
import my_openai
import os
from dotenv import load_dotenv

# .env फ़ाइल से पर्यावरण चर लोड करें
load_dotenv()

intents = discord.Intents.default()
intents.messages = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f'Logged in as {client.user}')

@client.event
async def on_message(message):
    # बॉट को खुद को जवाब न देने दें
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello, how can I help?')

# जांचें कि क्या संदेश किसी प्रश्न कीवर्ड से शुरू होता है
    if message.content.startswith('!ask'):
        # कमांड भाग को हटा दें और अग्रणी/अनुगामी व्हाइटस्पेस को स्ट्रिप करें
        user_question = message.content[len('!ask'):].strip()

        if user_question:

            try:
                response = my_openai.generate_answer(message.content)
                await message.channel.send("Hang Tight! Looking for the response...")
                await message.channel.send(response)

            except Exception as e:
                await message.channel.send(f"Error processing your request: {str(e)}")
        else:
            await message.channel.send("Please provide a question after !ask")


    if message.content.startswith('$question'):
        response = my_openai.generate_answer(message.content)
        await message.channel.send("looking for response")
        await message.channel.send(response)

# 'your_token_here' को अपने बॉट के वास्तविक टोकन से बदलें
client.run(os.environ["DISCORD_TOKEN"])
from openai import OpenAI
import os

# अपने OpenAI API क्रेडेंशियल्स सेट करें
client = OpenAI(
    # यह डिफ़ॉल्ट है और इसे छोड़ा जा सकता है
    api_key=os.environ["OPENAI_TOKEN"],
)


MODEL = "gpt-3.5-turbo"
# उत्तर उत्पन्न करने के लिए फ़ंक्शन को परिभाषित करें
def generate_answer(question):
    response = client.chat.completions.create(
        model=MODEL,
        messages=[
            {"role": "system", "content": "You are a helpful assistant in a discord server answering question and being helpful."},
            {"role": "user", "content": question},
        ],
        temperature=0,
    )

    return response.choices[0].message.content

सीमाएं

  • बॉट अभी भी स्थानीय है।
  • हमारे उबंटू या किसी और के लिए उपयोगी नहीं है।
  • सहेजने के लिए कोई स्थिति (state) नहीं है।

क्या उपयोग किया गया:

  • dotenv एपीआई
  • डिस्कॉर्ड टोकन
  • डिस्कॉर्ड एपीआई बॉट
  • पायथन3
  • openai एपीआई की

स्टेप2 आइए तैनात (deploy) करें, रिप्लिट (Replit) का परिचय

import discord
import my_openai
import os
from dotenv import load_dotenv

# .env फ़ाइल से पर्यावरण चर लोड करें
load_dotenv()

intents = discord.Intents.default()
intents.messages = True

client = discord.Client(intents=intents)

@client.event
async def on_ready():
    print(f'Logged in as {client.user}')

@client.event
async def on_message(message):
    # बॉट को खुद को जवाब न देने दें
    if message.author == client.user:
        return

    if message.content.startswith('$hello'):
        await message.channel.send('Hello, how can I help?')

# जांचें कि क्या संदेश किसी प्रश्न कीवर्ड से शुरू होता है
    if message.content.startswith('!ask'):
        # कमांड भाग को हटा दें और अग्रणी/अनुगामी व्हाइटस्पेस को स्ट्रिप करें
        user_question = message.content[len('!ask'):].strip()

        if user_question:

            try:
                response = my_openai.generate_answer(message.content)
                await message.channel.send("Hang Tight! Looking for the response...")
                await message.channel.send(response)

            except Exception as e:
                await message.channel.send(f"Error processing your request: {str(e)}")
        else:
            await message.channel.send("Please provide a question after !ask")


    if message.content.startswith('$question'):
        response = my_openai.generate_answer(message.content)
        await message.channel.send("looking for response")
        await message.channel.send(response)

# 'your_token_here' को अपने बॉट के वास्तविक टोकन से बदलें
client.run(os.environ["DISCORD_TOKEN"])
from replit import db

# यूआरएल और उनकी संबंधित कस्टम कुंजियाँ
urls = {
    "deep-dive-into-rag-with-langchain": "https://dev.ubuntuhive.tech/en-us/articles/deep-dive-into-rag-with-langchain/",
    "exploring-new-chatgpt-features": "https://dev.ubuntuhive.tech/en-us/articles/exploring-new-chatgpt-features-/",
    "build-small-apps-with-llms": "https://dev.ubuntuhive.tech/en-us/articles/build-small-apps-with-llms/",
    "docker-orchestra-swarm-k8s-kubernetes-for-beginners": "https://dev.ubuntuhive.tech/en-us/articles/docker-orchestra-swarm-k8s-kubernetes-for-beginners/",
    "devops-from-scratch-automated-basics": "https://dev.ubuntuhive.tech/en-us/articles/devops-from-scratch-automated-basics/",
    "from-networks-to-http-and-apis": "https://dev.ubuntuhive.tech/en-us/articles/from-networks-to-http-and-apis/",
    "data-and-cloud-infrastructure-as-code": "https://dev.ubuntuhive.tech/en-us/articles/data-and-cloud-infrastructure-as-code/"
}

# 'articles' कुंजी के तहत डेटाबेस में स्टोर करें
db["articles"] = urls
from openai import OpenAI
import os



# अपने OpenAI API क्रेडेंशियल्स सेट करें
# my_api_key = ''
client = OpenAI(
    # यह डिफ़ॉल्ट है और इसे छोड़ा जा सकता है
    api_key=os.environ["OPENAI_TOKEN"],
)


MODEL = "gpt-3.5-turbo"
# उत्तर उत्पन्न करने के लिए फ़ंक्शन को परिभाषित करें
def generate_answer(question):
# सिस्टम संदेश के साथ उदाहरण
    response = client.chat.completions.create(
        model=MODEL,
        messages=[
            {"role": "system", "content": "You are a helpful assistant in a discord server answering question and being helpful."},
            {"role": "user", "content": question},
        ],
        temperature=0,
    )

    return response.choices[0].message.content

क्या उपयोग किया गया:

  • dotenv एपीआई
  • डिस्कॉर्ड टोकन
  • डिस्कॉर्ड एपीआई बॉट
  • पायथन3
  • openai एपीआई की
  • रिप्लिट

स्टेप3 नए सदस्यों का स्वागत करें

import discord
import my_openai as opai
import os
from discord.ext import commands
from replit import db
from dotenv import load_dotenv

# .env फ़ाइल से पर्यावरण चर लोड करें
load_dotenv()

intents = discord.Intents.default()
intents.message_content = True
# डिस्कॉर्ड बॉट को इनिशियलाइज़ करें
bot = commands.Bot(command_prefix='!',intents=intents)

@bot.event
async def on_ready():
    print(f'Logged in as {bot.user}!')

@bot.command(help="उपयोगकर्ता से पूछें कि वे किस तरह का सारांश ढूंढ रहे हैं।")
async def choose_article(ctx):
    # रिप्लिट डेटाबेस से लेख प्राप्त करें
    articles = db["articles"]
    # विकल्पों के साथ एक संदेश बनाएं
    options = "\n".join([f"Send {idx+1} for {key.replace('-', ' ').title()}" for idx, key in enumerate(articles.keys())])
    prompt = "Please choose from the below list:\n" + options
    await ctx.send(prompt)

    # उपयोगकर्ता की पसंद को मान्य करने के लिए चेक फ़ंक्शन
    def check(m):
        return m.author == ctx.author and m.content.isdigit() and 1 <= int(m.content) <= len(articles)

    try:
        # उपयोगकर्ता की प्रतिक्रिया की प्रतीक्षा करें
        msg = await bot.wait_for('message', check=check, timeout=60.0)  # जवाब देने के लिए 60 सेकंड
        choice = int(msg.content) - 1
        selected_key = list(articles.keys())[choice]
        selected_article = articles[selected_key]
        # आप लेख का सारांश देने के लिए यहाँ अतिरिक्त कार्यक्षमता जोड़ सकते हैं
        await ctx.send(f"You selected: {selected_key.replace('-', ' ').title()}\nURL: {selected_article}")
        await ctx.send("Please wait while I get you the summary...")
        await ctx.send(opai.generate_summary(selected_article))

    except Exception as e:
        await ctx.send('No valid input received or timeout reached. Please try again.')

@bot.command(help="उपयोगी संसाधनों के साथ एक स्वागत संदेश भेजता है।")
async def new_member(ctx):
    articles = db["articles"]
    most_recent_article_key = list(articles.keys())[-1]  # सबसे हालिया लेख कुंजी प्राप्त करना
    most_recent_article_url = articles[most_recent_article_key]  # यूआरएल प्राप्त करना

    # स्वागत संदेश और संसाधन
    welcome_message = (
        f"Welcome to the server, {ctx.author.mention}! 🎉 Here are some resources you might find helpful:\n"
        f"1. Check out our latest article: {most_recent_article_url}\n"
        f"2. Visit our Ubuntu Hive website for more insights: https://dev.ubuntuhive.tech/en-us/\n"
        f"3. Learn more about tech with this comprehensive tutorial: [Insert Your Tutorial Link Here]\n"
        f"4. Other misc resources and info: [Insert More Links or Info Here]\n"
    )

    await ctx.send(welcome_message)

# बॉट चलाएं
token = os.getenv("DISCORD_TOKEN")
if token:
  bot.run(token)
else:
  print("Error: Discord token not found in environment variables. Please ensure DISCORD_TOKEN is set.")
from replit import db

# यूआरएल और उनकी संबंधित कस्टम कुंजियाँ
urls = {
    "deep-dive-into-rag-with-langchain": "https://dev.ubuntuhive.tech/en-us/articles/deep-dive-into-rag-with-langchain/",
    "exploring-new-chatgpt-features": "https://dev.ubuntuhive.tech/en-us/articles/exploring-new-chatgpt-features-/",
    "build-small-apps-with-llms": "https://dev.ubuntuhive.tech/en-us/articles/build-small-apps-with-llms/",
    "docker-orchestra-swarm-k8s-kubernetes-for-beginners": "https://dev.ubuntuhive.tech/en-us/articles/docker-orchestra-swarm-k8s-kubernetes-for-beginners/",
    "devops-from-scratch-automated-basics": "https://dev.ubuntuhive.tech/en-us/articles/devops-from-scratch-automated-basics/",
    "from-networks-to-http-and-apis": "https://dev.ubuntuhive.tech/en-us/articles/from-networks-to-http-and-apis/",
    "data-and-cloud-infrastructure-as-code": "https://dev.ubuntuhive.tech/en-us/articles/data-and-cloud-infrastructure-as-code/"
}

# 'articles' कुंजी के तहत डेटाबेस में स्टोर करें
db["articles"] = urls
from openai import OpenAI
import os

# अपने OpenAI API क्रेडेंशियल्स सेट करें
# my_api_key = ''
client = OpenAI(
    # यह डिफ़ॉल्ट है और इसे छोड़ा जा सकता है
    api_key=os.environ["OPENAI_TOKEN"],
)


MODEL = "gpt-3.5-turbo"
# उत्तर उत्पन्न करने के लिए फ़ंक्शन को परिभाषित करें
def generate_answer(question):
# सिस्टम संदेश के साथ उदाहरण
    response = client.chat.completions.create(
        model=MODEL,
        messages=[
            {"role": "system", "content": "You are a helpful assistant in a discord server answering question and being helpful."},
            {"role": "user", "content": question},
        ],
        temperature=0,
    )

    return response.choices[0].message.content

def generate_summary(articles):
  response = client.chat.completions.create(
    model=MODEL,
    messages=[
        {"role": "system", "content": "You are a helpful assistant in a discord server. You are great as providing summaries of text when given an article link. when prompted, provide a max of 200 words summary of the provided link"},
        {"role": "user", "content": articles},
    ],
    temperature=0,
  )

  return response.choices[0].message.content

महत्वपूर्ण लिंक