
Բարև, Հաբրո՞ւջներ։
Այսօր դուք ծանոթանալու եք հոդվածի հետ, որտեղ պատմվելու է, թե ինչպես ստեղծել բոտ C#-ով .NET Core-ով և ինչպես դարձնել այն հեռահար սերվերում։
Հոդվածն բաղկացած կլինի նախապատմությունից, նախապատրաստական փուլից, տրամաբանության գրառումից և բոտի տեղափոխումից հեռահար սերվեր։
Հուսով եմ, որ այս հոդվածը կօգնի շատ սկսնակների։
Առաջին պատմություն
Ամեն ինչ սկսվել է մի անքուն աշնան գիշերին, երբ ես գտնվեցի Discord սերվերում։ Քանի որ ես համեմատաբար վերջերս միացել էի, սկսեցի ուսումնասիրել այն։ Գտնելով “Երաշխիքներ” տեքստային ալիքը, հետաքրքրվեցի, բացեցի այն և գտա ինձ զզվեցրած առաջարկների շարքում, որըեր:
«Ծրագիր (բոտի մշակող)
Պահանջները՝
- ծրագրավորման լեզուների իմացություն;
- ինքնակրթության ունակություն։
Անցանկությունները՝
- այլ մարդկանց կոդի մեջ հանգամանորեն հասկանալու հմտություն;
- DISCORD-ի գործառույթի գիտելիք։
Նախագահները՝
- բոտի մշակումը;
- բոտի սպասարկման և աջակցման աշխատանքները։
Ձեր առավելությունը՝
- Հնարավորություն աջակցել և ազդեցություն ունենալ հետաքրքրող նախագծի վրա;
- Թիմում աշխատանքային փորձ ձեռք բերելու հնարավորություն;
- Խորհրդակցելու և առկա հմտությունները բարելավելու հնարավորություն։»
Այս ամենը ակնհայտորեն հետաքրքրեց ինձ։ Այո, այս աշխատանքի համար գումար չէ վճարվում, բայց ոչինչ պարտավորությունների չկար, և նաև պորտֆոլիոյում ավելին չի լինի։ Այդ պատճառով ես գրեցի սերվերի ադմինին, և նա խնդրեց գրել բոտ, որը կցուցադրի խաղացողների վիճակագրությունը World of Tanks-ում։
Նախապատրաստական փուլ

Discord
Մեր բոտը գրելու առաջ, først հարկավոր է ստեղծել այն Discord-ի համար։ Ձեզ անհրաժեշտ է:
- Մուտք գործել Discord հաշիվ
- «Applications» вкладку գնալու պատճառով և սեղմել „New Application” կոճակը` անվանում տալով բոտին
- Ստանալ բոտի թոկենը, մուտք գործելով ձեր բոտի հաշիվ և գտնելով „Settings” вкладку „Bot” բաժնում
- Հղվիր ինչ-որ տեղ թոկենը
Wargaming
Այժմ, անհրաժեշտ է ստեղծել հավելված Wargaming-ում, որպեսզի ստանաք մուտք API Wargaming-ին։ Ապրանքն այստեղ նույնպես պարզ է՝
- Մուտք գնացեք Wargaming հաշիվ
- Մուտք եղեք «Իմ հավելվածներ» և սեղմեք «Ավելացնել նոր հավելված» կոճակը` անվանում տալով հավելվածին և ընտրելով նրա տեսակ
- Պահպանեք հավելվածի ID-ն
Ծրագրային ապահովում
Այստեղ արդեն կա ընտրության ազատություն։ Ոմանք օգտագործում են Visual Studio, ոմանք Rider, ոմանք իրականում ուժեղ են և կոդ են գրում Vim-ում (սովորական ծրագրավորողները օգտագործում են միայն ստեղնապանակը, ճիշտ է?)։ Սակայն, Discord API-ի իրականացումը դարձնելով չանհրաժեշտ, կարող եք օգտագործել ոչ պաշտոնական «DSharpPlus» C# գրադարանը։ Այն կարելի է տեղադրել կամ NuGet-ից, կամ ինքներդ հավաքելով աղբյուրները ռեպոզիտորից։
Այն մարդկանց համար, ովքեր չեն գիտակցում, թե ինչպես հաստատվեն հավելվածներ NuGet-ից։Հ οδηγյալ Visual Studio համար
- Մուտք գնացեք „Project” вкладка - „NuGet փաթեթների կառավարում”;
- Սեղմեք „Overview” և որոնման դաշտում գրեք “DSharpPlus”;
- Ընտրեք և տեղադրեք framework;
- ԿԱՐԵՎՈՐ!
Նախապատրաստական փուլը ավարտված է, կարող եք անցնել բոտի գրառմանը։
Լոգիկայի գրել

Չենք զբաղվելու 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-ին տեղակայումը - սերվեր

Մի անգամ, երբ դուք ավարտել եք բոտի վրա, այն պետք է տեղադրվի այն սերվերի վրա, որը մշտապես աշխատում է 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 սերվերի հղումը:
Շնորհակալություն ուշադրություն դնելու համար!
Ընտանիք: habr.com
