VPS सर्वर पर परिनियोजन के साथ .NET कोर पर डिस्कॉर्ड बॉट बनाना

VPS सर्वर पर परिनियोजन के साथ .NET कोर पर डिस्कॉर्ड बॉट बनाना

हैलो खाबरोवाइट्स!

आज आप एक लेख देखेंगे जो आपको दिखाएगा कि .NET Core पर C# का उपयोग करके बॉट कैसे बनाया जाए और इसे रिमोट सर्वर पर कैसे चलाया जाए।

लेख में एक पृष्ठभूमि, एक प्रारंभिक चरण, तर्क लिखना और बॉट को एक दूरस्थ सर्वर पर स्थानांतरित करना शामिल होगा।

मुझे उम्मीद है कि यह लेख कई शुरुआती लोगों की मदद करेगा।

पृष्ठभूमि

यह सब एक नींद रहित शरद ऋतु की रात से शुरू हुआ जो मैंने डिस्कॉर्ड सर्वर पर बिताया था। चूँकि मैं हाल ही में उससे जुड़ा था, मैंने उसका ऊपर और नीचे अध्ययन करना शुरू किया। पाठ चैनल "रिक्तियों" को खोजने के बाद, मुझे दिलचस्पी हो गई, इसे खोला, और उन प्रस्तावों के बीच पाया, जिनमें मेरी रुचि नहीं थी, ये हैं:

"प्रोग्रामर (बॉट डेवलपर)
आवश्यकताएँ:

  • प्रोग्रामिंग भाषाओं का ज्ञान;
  • स्व-सीखने की क्षमता।

Пожелания:

  • अन्य लोगों के कोड को समझने की क्षमता;
  • DISCORD कार्यक्षमता का ज्ञान।

उद्देश्य:

  • बॉट विकास;
  • बॉट का समर्थन और रखरखाव।

आपका लाभ:

  • अपनी पसंद की परियोजना का समर्थन करने और उसे प्रभावित करने का अवसर;
  • एक टीम में काम करने का अनुभव प्राप्त करना;
  • मौजूदा कौशल को प्रदर्शित करने और सुधारने का अवसर।


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

प्रारंभिक चरण

VPS सर्वर पर परिनियोजन के साथ .NET कोर पर डिस्कॉर्ड बॉट बनाना
डिस्क्रोड
इससे पहले कि हम अपना बॉट लिखना शुरू करें, हमें इसे डिस्कॉर्ड के लिए बनाना होगा। आप की जरूरत है:

  1. डिस्कॉर्ड खाते में लॉग इन करें по ссылке
  2. "एप्लिकेशन" टैब में, "नया एप्लिकेशन" बटन पर क्लिक करें और बॉट को नाम दें
  3. अपने बॉट में लॉग इन करके और "सेटिंग" सूची में "बॉट" टैब ढूंढकर बॉट टोकन प्राप्त करें
  4. टोकन को कहीं सेव करें

युद्ध संबंधीगेम

साथ ही, Wargaming API तक पहुंच प्राप्त करने के लिए आपको Wargaming में एक एप्लिकेशन बनाना होगा। यहाँ भी, सब कुछ सरल है:

  1. अपने Wargaming खाते में लॉग इन करें इस लिंक द्वारा
  2. हम "मेरे एप्लिकेशन" पर जाते हैं और "एक नया एप्लिकेशन जोड़ें" बटन पर क्लिक करते हैं, एप्लिकेशन का नाम देते हैं और इसके प्रकार का चयन करते हैं
  3. एप्लिकेशन आईडी सहेज रहा है

सॉफ्टवेयर

पसंद की स्वतंत्रता पहले से ही है। कोई विजुअल स्टूडियो का उपयोग करता है, कोई राइडर, कोई आम तौर पर शक्तिशाली होता है, और विम में कोड लिखता है (आखिरकार, वास्तविक प्रोग्रामर केवल कीबोर्ड का उपयोग करते हैं, ठीक है?) हालाँकि, Discord API को लागू नहीं करने के लिए, आप अनौपचारिक C# लाइब्रेरी "DSharpPlus" का उपयोग कर सकते हैं। आप इसे या तो NuGet से स्थापित कर सकते हैं, या रिपॉजिटरी से स्वयं स्रोत बनाकर स्थापित कर सकते हैं।

उन लोगों के लिए जो NuGet से एप्लिकेशन इंस्टॉल करना नहीं जानते या भूल गए हैं।विजुअल स्टूडियो के लिए निर्देश

  1. टैब पर जाएं परियोजना - NuGet संकुल प्रबंधित करें;
  2. समीक्षा पर क्लिक करें और खोज फ़ील्ड में "DSharpPlus" दर्ज करें;
  3. ढांचे का चयन करें और स्थापित करें;
  4. लाभ!

प्रारंभिक चरण समाप्त हो गया है, आप बॉट लिखने के लिए आगे बढ़ सकते हैं।

लेखन तर्क

VPS सर्वर पर परिनियोजन के साथ .NET कोर पर डिस्कॉर्ड बॉट बनाना

हम एप्लिकेशन के पूरे तर्क पर विचार नहीं करेंगे, मैं केवल यह दिखाऊंगा कि बॉट द्वारा संदेशों के अवरोधन के साथ कैसे काम किया जाए और वॉरगामिंग एपीआई के साथ कैसे काम किया जाए।

डिस्कॉर्ड बॉट के साथ काम करना स्थिर async टास्क मेनटास्क (स्ट्रिंग [] आर्ग्स) के माध्यम से होता है;
इस फ़ंक्शन को कॉल करने के लिए, मेन में आपको रजिस्टर करना होगा

MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();

इसके बाद, आपको अपने बॉट को इनिशियलाइज़ करना होगा:

discord = new DiscordClient(new DiscordConfiguration
{
    Token = token,
    TokenType = TokenType.Bot,
    UseInternalLogHandler = true,
    LogLevel = LogLevel.Debug
});

जहां टोकन आपके बॉट का टोकन है।
फिर, लैम्ब्डा के माध्यम से, हम आवश्यक आदेश लिखते हैं कि बॉट को निष्पादित करना चाहिए:

discord.MessageCreated += async e =>
{
    string message = e.Message.Content;
    if (message.StartsWith("&"))
    {
        await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
    }
};

जहाँ e.Author.Username को उपयोक्ता का निकनेम मिल रहा है।

इस तरह, जब आप & से शुरू होने वाला कोई संदेश भेजते हैं, तो बॉट आपका अभिवादन करेगा।

इस फ़ंक्शन के अंत में, आपको प्रतीक्षित कलह लिखना होगा। ConnectAsync(); और टास्क का इंतजार करें। देरी (-1);

यह आपको मुख्य थ्रेड को उठाए बिना पृष्ठभूमि में कमांड निष्पादित करने की अनुमति देगा।

अब हमें Wargaming API से निपटने की जरूरत है। यहां सब कुछ सरल है - CURL अनुरोध लिखें, JSON स्ट्रिंग के रूप में प्रतिक्रिया प्राप्त करें, वहां से आवश्यक डेटा निकालें और उन पर जोड़तोड़ करें।

WargamingAPI के साथ काम करने का एक उदाहरण

public Player FindPlayer(string searchNickname)
        {
            //https://api.worldoftanks.ru/wot/account/list/?application_id=y0ur_a@@_id_h3r3search=nickname
            urlRequest = resourceMan.GetString("url_find_player") + appID + "&search=" + searchNickname;
            Player player = null;
            string resultResponse = GetResponse(urlRequest);
            dynamic parsed = JsonConvert.DeserializeObject(resultResponse);

            string status = parsed.status;
            if (status == "ok")
            {
                int count = parsed.meta.count;
                if (count > 0)
                {
                    player = new Player
                    {
                        Nickname = parsed.data[0].nickname,
                        Id = parsed.data[0].account_id
                    };
                }
                else
                {
                    throw new PlayerNotFound("Игрок не найден");
                }
            }
            else
            {
                string error = parsed.error.message;
                if (error == "NOT_ENOUGH_SEARCH_LENGTH")
                {
                    throw new PlayerNotFound("Минимум три символа требуется");
                }
                else if (error == "INVALID_SEARCH")
                {
                    throw new PlayerNotFound("Неверный поиск");
                }
                else if (error == "SEARCH_NOT_SPECIFIED")
                {
                    throw new PlayerNotFound("Пустой никнейм");
                }
                else
                {
                    throw new Exception("Something went wrong.");
                }
            }

            return player;
        }

ध्यान! स्पष्ट टेक्स्ट में सभी टोकन और एप्लिकेशन आईडी को स्टोर करने की सख्त अनुशंसा नहीं की जाती है! कम से कम, जब वे विश्वव्यापी नेटवर्क में प्रवेश करते हैं, तो डिस्कॉर्ड ऐसे टोकन पर प्रतिबंध लगाता है, और अधिकतम हमलावरों द्वारा बॉट का उपयोग करना शुरू कर देता है।

वीपीएस - सर्वर पर तैनात करें

VPS सर्वर पर परिनियोजन के साथ .NET कोर पर डिस्कॉर्ड बॉट बनाना

एक बार जब आप बॉट के साथ काम कर लेते हैं, तो इसे एक सर्वर पर होस्ट करने की आवश्यकता होती है जो लगातार 24/7 चल रहा हो। यह इस तथ्य के कारण है कि जब आपका एप्लिकेशन चल रहा होता है, तो बॉट भी चल रहा होता है। जैसे ही आप एप्लिकेशन को बंद करते हैं, आपका बॉट भी सो जाता है।

इस दुनिया में कई वीपीएस सर्वर मौजूद हैं, विंडोज और लिनक्स दोनों पर, हालांकि, ज्यादातर मामलों में, लिनक्स पर होस्ट करना बहुत सस्ता है।

डिस्कॉर्ड सर्वर पर, मुझे vscale.io की सलाह दी गई थी, और मैंने तुरंत उस पर उबंटू पर एक वर्चुअल सर्वर बनाया और बॉट अपलोड किया। मैं यह नहीं बताऊंगा कि यह साइट कैसे काम करती है, लेकिन मैं सीधे बॉट सेटिंग्स पर जाऊंगा।

सबसे पहले, आपको आवश्यक सॉफ़्टवेयर स्थापित करने की आवश्यकता है जो .NET कोर में लिखे हमारे बॉट को चलाएगा। इसे कैसे करना है इसका वर्णन यहां किया गया है.

इसके बाद, आपको गिटहब और इसी तरह की गिट सेवा में बॉट को अपलोड करना होगा, और इसे वीपीएस सर्वर पर क्लोन करना होगा, या अपने बॉट को अन्य तरीकों से डाउनलोड करना होगा। कृपया ध्यान दें कि आपके पास केवल कंसोल होगा, जीयूआई नहीं। बिलकुल।

अपने बॉट को डाउनलोड करने के बाद, आपको इसे चलाने की आवश्यकता है। इसके लिए आपको चाहिए:

  • सभी निर्भरताओं को पुनर्स्थापित करें: डॉटनेट पुनर्स्थापित करें
  • बिल्ड एप्लिकेशन: डॉटनेट बिल्ड name_project.sln -c रिलीज
  • निर्मित डीएलएल पर जाएं;
  • डॉटनेट name_of_file.dll

बधाई हो! आपका बॉट चल रहा है। हालाँकि, बॉट, दुर्भाग्य से, कंसोल पर कब्जा कर लेता है, और VPS सर्वर से बाहर निकलना आसान नहीं है। साथ ही, सर्वर रीस्टार्ट होने की स्थिति में, आपको बॉट को नए तरीके से शुरू करना होगा। स्थिति से बाहर निकलने के कुछ तरीके हैं। ये सभी सर्वर स्टार्टअप पर लॉन्च से संबंधित हैं:

  • रन स्क्रिप्ट को /etc/init.d में जोड़ें
  • एक सेवा बनाएँ जो स्टार्टअप पर चलेगी।

मैं उन पर विस्तार से रहने की बात नहीं देखता, इंटरनेट पर सब कुछ पर्याप्त विवरण में वर्णित है।

निष्कर्ष

मुझे खुशी है कि मैंने यह काम संभाला। यह मेरा पहला बॉट विकास अनुभव था, और मुझे खुशी है कि मुझे सी # में नया ज्ञान मिला, और लिनक्स के साथ काम करना।

डिस्कॉर्ड सर्वर से लिंक करें। वॉरगेमिंग गेम खेलने वालों के लिए।
रिपॉजिटरी से लिंक करें जहां डिस्कॉर्ड बॉट स्थित है।
DSharpPlus रिपॉजिटरी से लिंक करें।
धन्यवाद!

स्रोत: www.habr.com

एक टिप्पणी जोड़ें