Discord ի համար բոտ ստեղծում՝ .NET Core-ով և VPS սերվեր մատակարարելով

Discord ի համար բոտ ստեղծում՝ .NET Core-ով և VPS սերվեր մատակարարելով

Բարև, Հաբրո՞ւջներ։

Այսօր դուք ծանոթանալու եք հոդվածի հետ, որտեղ պատմվելու է, թե ինչպես ստեղծել բոտ C#-ով .NET Core-ով և ինչպես դարձնել այն հեռահար սերվերում։

Հոդվածն բաղկացած կլինի նախապատմությունից, նախապատրաստական փուլից, տրամաբանության գրառումից և բոտի տեղափոխումից հեռահար սերվեր։

Հուսով եմ, որ այս հոդվածը կօգնի շատ սկսնակների։

Առաջին պատմություն

Ամեն ինչ սկսվել է մի անքուն աշնան գիշերին, երբ ես գտնվեցի Discord սերվերում։ Քանի որ ես համեմատաբար վերջերս միացել էի, սկսեցի ուսումնասիրել այն։ Գտնելով “Երաշխիքներ” տեքստային ալիքը, հետաքրքրվեցի, բացեցի այն և գտա ինձ զզվեցրած առաջարկների շարքում, որըեր:

«Ծրագիր (բոտի մշակող)
Պահանջները՝

  • ծրագրավորման լեզուների իմացություն;
  • ինքնակրթության ունակություն։

Անցանկությունները՝

  • այլ մարդկանց կոդի մեջ հանգամանորեն հասկանալու հմտություն;
  • DISCORD-ի գործառույթի գիտելիք։

Նախագահները՝

  • բոտի մշակումը;
  • բոտի սպասարկման և աջակցման աշխատանքները։

Ձեր առավելությունը՝

  • Հնարավորություն աջակցել և ազդեցություն ունենալ հետաքրքրող նախագծի վրա;
  • Թիմում աշխատանքային փորձ ձեռք բերելու հնարավորություն;
  • Խորհրդակցելու և առկա հմտությունները բարելավելու հնարավորություն։»


Այս ամենը ակնհայտորեն հետաքրքրեց ինձ։ Այո, այս աշխատանքի համար գումար չէ վճարվում, բայց ոչինչ պարտավորությունների չկար, և նաև պորտֆոլիոյում ավելին չի լինի։ Այդ պատճառով ես գրեցի սերվերի ադմինին, և նա խնդրեց գրել բոտ, որը կցուցադրի խաղացողների վիճակագրությունը World of Tanks-ում։

Նախապատրաստական փուլ

Discord ի համար բոտ ստեղծում՝ .NET Core-ով և VPS սերվեր մատակարարելով
Discord
Մեր բոտը գրելու առաջ, først հարկավոր է ստեղծել այն Discord-ի համար։ Ձեզ անհրաժեշտ է:

  1. Մուտք գործել Discord հաշիվ հղումով
  2. «Applications» вкладку գնալու պատճառով և սեղմել „New Application” կոճակը` անվանում տալով բոտին
  3. Ստանալ բոտի թոկենը, մուտք գործելով ձեր բոտի հաշիվ և գտնելով „Settings” вкладку „Bot” բաժնում
  4. Հղվիր ինչ-որ տեղ թոկենը

Wargaming

Այժմ, անհրաժեշտ է ստեղծել հավելված Wargaming-ում, որպեսզի ստանաք մուտք API Wargaming-ին։ Ապրանքն այստեղ նույնպես պարզ է՝

  1. Մուտք գնացեք Wargaming հաշիվ այստեղ
  2. Մուտք եղեք «Իմ հավելվածներ» և սեղմեք «Ավելացնել նոր հավելված» կոճակը` անվանում տալով հավելվածին և ընտրելով նրա տեսակ
  3. Պահպանեք հավելվածի ID-ն

Ծրագրային ապահովում

Այստեղ արդեն կա ընտրության ազատություն։ Ոմանք օգտագործում են Visual Studio, ոմանք Rider, ոմանք իրականում ուժեղ են և կոդ են գրում Vim-ում (սովորական ծրագրավորողները օգտագործում են միայն ստեղնապանակը, ճիշտ է?)։ Սակայն, Discord API-ի իրականացումը դարձնելով չանհրաժեշտ, կարող եք օգտագործել ոչ պաշտոնական «DSharpPlus» C# գրադարանը։ Այն կարելի է տեղադրել կամ NuGet-ից, կամ ինքներդ հավաքելով աղբյուրները ռեպոզիտորից։

Այն մարդկանց համար, ովքեր չեն գիտակցում, թե ինչպես հաստատվեն հավելվածներ NuGet-ից։Հ οδηγյալ Visual Studio համար

  1. Մուտք գնացեք „Project” вкладка - „NuGet փաթեթների կառավարում”;
  2. Սեղմեք „Overview” և որոնման դաշտում գրեք “DSharpPlus”;
  3. Ընտրեք և տեղադրեք framework;
  4. ԿԱՐԵՎՈՐ!

Նախապատրաստական փուլը ավարտված է, կարող եք անցնել բոտի գրառմանը։

Լոգիկայի գրել

Discord ի համար բոտ ստեղծում՝ .NET Core-ով և VPS սերվեր մատակարարելով

Չենք զբաղվելու application's ողջ տրամաբանությամբ, պարզապես ցույց կտամ, թե ինչպես աշխատել բոտի հաղորդագրությունների բռնկման հետ և ինչպես անցնել Wargaming API-ին:

Discord բոտի աշխատանքը կատարվում է static async Task MainTask(string[] args) ֆունկցիայի միջոցով:
Այս ֆունկցիան կանչելու համար, Main-ում պետք է գրել

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

Նախ, դուք պետք է ձեր բոտը սկսեք.

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

Որտեղ token-ը ձեր բոտի տոկենն է:
Այնուհետև, լամբդայի միջոցով, գրում ենք անհրաժեշտ հրահանգները, որոնք պետք է կատարի բոտը:

discord.MessageCreated += async e =>
{
    string message = e.Message.Content;
    if (message.StartsWith("&"))
    {
        await e.Message.RespondAsync("Ողջույն, " + e.Author.Username);
    }
};

Որտեղ e.Author.Username-ը՝ օգտատ item's.nickname ստացումը:

Այսպիսով, երբ ուղարկեք որևէ հաղորդագրություն, որը սկսվում է &-ով, բոտը կոողջունի ձեզ:

Այս ֆունկցիայի վերջում, պետք է գրել await discord.ConnectAsync(); և await Task.Delay(-1);

Այսպիսով, կոմանդները կկատարեն ֆոնում, առանց հիմնական շերտի զբաղեցնելու:

Այժմ պետք է հասկանալ Wargaming API-ին: Այստեղ ամեն բան պարզ է՝ գրում եք CURL-հարցեր, ստանում եք ինը JSON ձևաչափով, հանեք անհրաժեշտ տվյալները և կատարեք դրանց հետ գործողություններ:

Օրինակ WargamingAPI-ի հետ աշխատելու

public Player FindPlayer(string searchNickname)
        {
            //https://api.worldoftanks.ru/wot/account/list/?application_id=y0ur_a@@_id_h3r3&search=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("Թեևս ցած հեռավորություն"

Ուշադրություն! բոլոր տոկենները և ծրագրերի ID-ները պահպանելը բաց տեսքով строго не рекомендуется! Հնարավոր է, Discord-ը արգելում է այսպիսի տոկենները, երբ դրանք վերբեռնվել են համաշխարհային ցանցում, իսկ առավելագույնը՝ բոտը կարող է օգտագործվել չարամիտների կողմից.

VPS-ին տեղակայումը - սերվեր

Discord ի համար բոտ ստեղծում՝ .NET Core-ով և VPS սերվեր մատակարարելով

Մի անգամ, երբ դուք ավարտել եք բոտի վրա, այն պետք է տեղադրվի այն սերվերի վրա, որը մշտապես աշխատում է 24/7: Սա կապված է այն բանի հետ, որ երբ ձեր ծրագիրը աշխատում է, աշխատում է նաև բոթը: Երբ Դուք выключаете программирование, անջատվում է նաև ձեր բոթը:

Այս աշխարհում կան բազմաթիվ VPS սերվերներ, ինչպես Windows-ի, այնպես էլ Linux-ի, սակայն մեծ մասամբ, Linux-ում ավելի էժան է տեղադրել:

Discord սերվերում ինձ խորհուրդ տվեցին vscale.io, և ես այդ իսկ պահին ստեղծեցի այն վիրտուալ սերվերը Ubuntu-ում և տեղադրեցի բոթը: Ես չեմ նկարագրի, թե ինչպես է աշխատում այս կայքը, այլ անմիջապես անցնենք բոթի կարգավորումներին:

Առաջին հերթին, դուք պետք է տեղադրեք անհրաժեշտ ծրագրային ապահովումը, որը կսկսի մեր բոտը, որն ստեղծված է .NET Core-ի վրա: Ինչպես դա անել, նկարագրված է այստեղ:.

Այնուհետև, դուք պետք է բոթը տեղադրեք Git – ծառայությունում, مثل GitHub, և գցեք VPS սերվեր, կամ, այլ եղանակներ օգտագործելով, ներբեռնեք ձեր բոթը: Նախ պետք է նկատել, որ դուք կունենաք միայն կոնսոլ, GUI չի լինի: Ոչ մի կերպ:

Մի անգամ, երբ դուք ներբեռնել եք ձեր բոթը, այն պետք է սկսեք: Для этого, вам необходимо:

  • Վերականգնել բոլոր կախվածությունները: dotnet restore
  • Կառուցել ծրագիրը: dotnet build name_project.sln -c Release
  • Դեպի կառուցված DLL:
  • dotnet name_of_file.dll

Շնորհավոր! Ձեր բոթը գործարկված է: Սակայն, դժբախտաբար, բոթը զբաղեցնում է կոնսոլը, և դուրս գալ VPS սերվերից այդպես հեշտ չէ: Ի հավելյալ, սերվերի վերագործարկման դեպքում, բոթը նորից պետք է գործարկեք: Այստեղ կան մի քանի ելքեր իրավիճակից: Բոլորը զբաղվում են սերվերի սկսման ժամանակի հետ:

  • Ավելացնել սկրիպտի գործարկումը /etc/init.d-ում
  • Ստեղծել ծառայություն, որը կգործարկվի սկսելու ժամանակ:

Հետաքրքիր չէ մանրամասնվել դրանց վրա, բավականորդ մանրամասնորեն նկարագրված է համացանցում:

Արդուկները

Ես ուրախ եմ, որ վերցրեցի այս առաջադրանքը: Դա իմ առաջին փորձն էր բոթի մշակման մեջ, և ուրախ եմ, որ ստացա նոր գիտելիքներ C#-ի և Linux-ի աշխատանքի մասին:

Discord սերվերի հղումը: Նույնիսկ նրանք, ովքեր խաղում են Wargaming խաղերում:
Discord բոթի պահպանման ռեպոզիտորի հղումը:
DSharpPlus-ի պահեստի հղումը:
Շնորհակալություն ուշադրություն դնելու համար!

Ընտանիք: habr.com

Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով 🔥 Գնել հուսալի հյուրընկալում DDoS պաշտպանությամբ, VPS VDS սերվերներով | ProHoster