Ryujinni
Elixir

Ryujinni

प्रोविडेंस नेटवर्क (प्रोविडेन्सिया) द्वारा संचालित, डिस्कॉर्ड के क्लेयरमोंट बॉट का एलेक्सिर संस्करण।

GitHub|
image

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

◆ विशेषताएँ

  • गठबंधन-केंद्रित स्वचालन: प्रत्यक्ष संदेश और गिल्ड-स्तर के संबंध प्रबंधन के लिए इरादे पूर्व-विन्यस्त हैं।
  • वॉयस सक्षम: ऑडियो भेजने के लिए FFmpeg, Streamlink, और yt-dlp समर्थन के साथ बंडल किया गया।
  • रस्ट एक्सेलेरेटेड: इसमें कंप्यूट-हेवी कार्यों को संभालने के लिए रस्टलर NIFs के लिए एक native/ryujin क्रेट शामिल है।
  • स्क्रिप्टेड सेटअप: स्थानीय install.sh और run.sh स्क्रिप्टें बार-बार होने वाले सेटअप के लिए टूलचेन और वातावरण का प्रबंधन करती हैं।

◆ पूर्वापेक्षाएँ

  • एलीक्सिर ≥ 1.18 (एक मिलान करने वाली Erlang/OTP रिलीज़ के साथ)
  • पोस्टग्रेएसक्यूएल (लोकलहोस्ट पर डिफ़ॉल्ट रूप से postgres/postgres)
  • पाइथन 3 (एक वर्चुअलएनवी में Streamlink + yt-dlp के लिए)
  • curl और tar (FFmpeg डाउनलोड के लिए)
  • Rust टूलचेन (यदि नेटिव एक्सटेंशन को संशोधित कर रहे हैं)

शुरू करने से पहले सुनिश्चित करें कि हेल्पर स्क्रिप्ट्स निष्पादन योग्य हैं:

chmod +x install.sh run.sh

रिपॉजिटरी चार्ट रिपोर्ट

◆ कॉन्फ़िगरेशन

कॉन्फ़िगरेशन envs/ से लोड होता है। रनटाइम envs/.env (साझा डिफ़ॉल्ट) और एक वातावरण-विशिष्ट फ़ाइल जैसे envs/dev.env को मर्ज करता है।

न्यूनतम रूप से, आपको envs/.env में अपना Discord टोकन परिभाषित करना होगा:

DISCORD_TOKEN=YOUR_DISCORD_TOKEN

रनटाइम स्क्रिप्ट्स स्वचालित रूप से स्थानीय vendor/bin और पाइथन वर्चुअलएनवी को आपके PATH में जोड़ देती हैं।

◆ इंस्टॉलेशन

इंस्टॉलर Mix डिपेंडेंसीज़ को प्राप्त करता है और आवश्यक मीडिया बाइनरी को स्थानीय रूप से vendor/ डायरेक्टरी में स्थापित करता है:

./install.sh

यह स्क्रिप्ट करेगी:

  1. Mix डिपेंडेंसीज़ को प्राप्त और कंपाइल करेगी।
  2. एक स्टैटिक FFmpeg बिल्ड डाउनलोड करेगी।
  3. Streamlink और yt-dlp के लिए एक Python virtualenv बनाएँ।

◆ डेवलपमेंट में चलाना

run script का उपयोग करके डेवलपमेंट के लिए बॉट लॉन्च करें:

./run.sh

यह स्क्रिप्ट सत्यापित करती है कि सभी टूल (ffmpeg, yt-dlp, आदि) मौजूद हैं, डेटाबेस माइग्रेशन चलाती है, और iex -S mix के माध्यम से फीनिक्स एप्लिकेशन शुरू करती है।

◆ पोस्टग्रेएसक्यूएल एजीई इंटीग्रेशन

इस प्रोजेक्ट में ग्राफ़ क्वेरीज़ के लिए अपाचे AGE एक्सटेंशन को सक्षम करने हेतु एक माइग्रेशन शामिल है। अपने PostgreSQL सर्वर पर AGE इंस्टॉल करने के बाद, run.sh स्क्रिप्ट या mix ecto.setup इसे डेटाबेस में सक्षम कर देगा।

फिर आप Ecto.Repo.query/2 के माध्यम से साइफर क्वेरीज़ जारी कर सकते हैं:

Repo.query!("""
SELECT *
FROM cypher('ryujin_graph', $$
MATCH (n) RETURN n
$$) AS (node ag_catalog.agtype);
""")

◆ नेटिव रस्ट एक्सटेंशन

native/ryujin क्रेट रस्टलर के साथ एकीकृत है। एलेक्सिर और रस्ट कोड mix compile के साथ एक साथ संकलित होता है। src/lib.rs में नए NIFs जोड़ें और उन्हें lib/ryujin.ex मॉड्यूल के माध्यम से Elixir को एक्सपोज़ करें।

◆ समस्या निवारण

  • "command not found": सुनिश्चित करें कि आपने chmod +x install.sh run.sh चलाया है।
  • पुरानी बाइनरी: vendor/ डायरेक्टरी को हटाएँ और ./install.sh को फिर से चलाएँ।
  • डेटाबेस मौजूद नहीं है: सुनिश्चित करें कि PostgreSQL चल रहा है और ./run.sh को फिर से चलाएँ, जो mix ecto.create को निष्पादित करता है।
  • ऑब्ज़र्वर से कनेक्ट करें: बॉट एक नामित नोड के रूप में चलता है। एक नया टर्मिनल खोलें और चलाएँ:
iex --sname observer --cookie ryujin_cookie
:observer.start()