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

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

Ողջույն Խաբրովիտներ։

Այսօր դուք կտեսնեք մի հոդված, որը ցույց կտա ձեզ, թե ինչպես ստեղծել բոտ C#-ի միջոցով .NET Core-ում և ինչպես գործարկել այն հեռավոր սերվերի վրա:

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

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

նախապատմությանը

Ամեն ինչ սկսվեց աշնանային մեկ անքուն գիշերից, որը ես անցկացրել էի Discord սերվերում: Քանի որ ես վերջերս միացա նրան, սկսեցի ուսումնասիրել նրան վեր ու վար: Գտնելով «Թափուր աշխատատեղեր» տեքստային ալիքը, ես հետաքրքրվեցի, բացեցի այն և գտա ինձ չհետաքրքրող առաջարկների շարքում, սրանք են.

«Ծրագրավորող (bot ծրագրավորող)
պահանջները:

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

Пожелания:

  • այլ մարդկանց ծածկագիրը հասկանալու ունակություն;
  • DISCORD ֆունկցիոնալության իմացություն:

Առաջադրանքներ.

  • բոտերի մշակում;
  • բոտի աջակցություն և սպասարկում:

Ձեր օգուտը.

  • Ձեզ դուր եկած նախագծին աջակցելու և ազդելու հնարավորություն;
  • Թիմում աշխատելու փորձի ձեռքբերում;
  • Առկա հմտությունները դրսևորելու և բարելավելու հնարավորություն:


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

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

Discord բոտի ստեղծում .NET Core-ում VPS սերվերի վրա տեղակայմամբ
Դիսկրոդ
Նախքան սկսենք գրել մեր բոտը, մենք պետք է ստեղծենք այն Discord-ի համար: Քեզ պետք է:

  1. Մուտք գործեք Discord հաշիվ по ссылке
  2. «Ծրագրեր» ներդիրում սեղմեք «Նոր հավելված» կոճակը և անվանեք բոտը
  3. Ստացեք բոտի նշան՝ մուտք գործելով ձեր բոտ և գտնել «Բոտ» ներդիրը «Կարգավորումներ» ցանկում
  4. Պահպանեք նշանը ինչ-որ տեղ

Wargaming- ը

Բացի այդ, դուք պետք է ստեղծեք հավելված Wargaming-ում՝ Wargaming API-ին հասանելիություն ստանալու համար: Այստեղ նույնպես ամեն ինչ պարզ է.

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

ծրագրային ապահովման

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

Նրանց համար, ովքեր չգիտեն կամ մոռացել են, թե ինչպես տեղադրել հավելվածներ NuGet-ից:Հրահանգներ Visual Studio-ի համար

  1. Գնացեք ներդիր Նախագիծ - Կառավարեք NuGet փաթեթները;
  2. Կտտացրեք վերանայման վրա և որոնման դաշտում մուտքագրեք «DSharpPlus»;
  3. Ընտրեք և տեղադրեք շրջանակը;
  4. ՇԱՀՈՒՅԹ

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

Գրելու տրամաբանություն

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

Մենք չենք դիտարկի հավելվածի ողջ տրամաբանությունը, ես միայն ցույց կտամ, թե ինչպես աշխատել բոտի կողմից հաղորդագրությունների գաղտնալսման հետ և ինչպես աշխատել Wargaming API-ի հետ:

Discord բոտի հետ աշխատելը տեղի է ունենում ստատիկ 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
});

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

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

Այնտեղ, որտեղ e.Author.Username-ը ստանում է օգտատիրոջ մականունը:

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

Այս ֆունկցիայի վերջում դուք պետք է գրեք await discord.ConnectAsync(); և սպասել 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_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;
        }

Ուշադրություն. Խստիվ խորհուրդ չի տրվում պահպանել բոլոր նշանները և հավելվածի ID-ները հստակ տեքստով: Առնվազն, Discord-ն արգելում է նման նշանները, երբ դրանք մտնում են համաշխարհային ցանց, իսկ առավելագույնը՝ բոտը սկսում է օգտագործել հարձակվողները:

Տեղադրեք VPS - սերվեր

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

Բոտի հետ աշխատելուց հետո այն պետք է տեղադրվի սերվերի վրա, որն անընդհատ աշխատում է 24/7: Դա պայմանավորված է նրանով, որ երբ ձեր հավելվածն աշխատում է, բոտը նույնպես աշխատում է: Հենց որ անջատեք հավելվածը, ձեր բոտն էլ է քնում։

Շատ VPS սերվերներ կան այս աշխարհում, ինչպես Windows-ում, այնպես էլ Linux-ում, սակայն շատ դեպքերում շատ ավելի էժան է հոսթինգը Linux-ում:

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

Նախ և առաջ անհրաժեշտ է տեղադրել անհրաժեշտ ծրագրակազմը, որը կաշխատի .NET Core-ով գրված մեր բոտը։ Ինչպես դա անել, նկարագրված է այստեղ.

Հաջորդը, դուք պետք է բեռնեք բոտը Git ծառայության մեջ, ինչպիսին է GitHub-ը և նմանատիպերը, և կլոնավորեք այն VPS սերվերում կամ ներբեռնեք ձեր բոտը այլ ձևերով: Խնդրում ենք նկատի ունենալ, որ դուք կունենաք միայն կոնսոլ, առանց GUI: Ընդհանրապես.

Ձեր բոտը ներբեռնելուց հետո դուք պետք է գործարկեք այն: Դրա համար ձեզ անհրաժեշտ է.

  • Վերականգնել բոլոր կախվածությունները. dotnet վերականգնում
  • Կառուցեք հավելվածը՝ dotnet build name_project.sln -c Թողարկում
  • Գնացեք կառուցված DLL;
  • dotnet name_of_file.dll

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

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

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

Արդյունքները

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

Հղում դեպի Discord սերվեր: Նրանց համար, ովքեր խաղում են Wargaming խաղեր:
Հղում դեպի պահեստ, որտեղ գտնվում է Discord բոտը:
Հղում դեպի DSharpPlus պահոց:
Շնորհակալություն ձեր ուշադրության համար:

Source: www.habr.com

Добавить комментарий