Discord բոտի ստեղծում .NET Core-ում VPS սերվերի վրա տեղակայմամբ
Ողջույն Խաբրովիտներ։
Այսօր դուք կտեսնեք մի հոդված, որը ցույց կտա ձեզ, թե ինչպես ստեղծել բոտ C#-ի միջոցով .NET Core-ում և ինչպես գործարկել այն հեռավոր սերվերի վրա:
Հոդվածը բաղկացած կլինի ֆոնից, նախապատրաստական փուլից, գրելու տրամաբանությունից և բոտը հեռավոր սերվեր տեղափոխելուց։
Հուսով եմ, որ այս հոդվածը կօգնի շատ սկսնակների:
նախապատմությանը
Ամեն ինչ սկսվեց աշնանային մեկ անքուն գիշերից, որը ես անցկացրել էի Discord սերվերում: Քանի որ ես վերջերս միացա նրան, սկսեցի ուսումնասիրել նրան վեր ու վար: Գտնելով «Թափուր աշխատատեղեր» տեքստային ալիքը, ես հետաքրքրվեցի, բացեցի այն և գտա ինձ չհետաքրքրող առաջարկների շարքում, սրանք են.
«Ծրագրավորող (bot ծրագրավորող) պահանջները:
ծրագրավորման լեզուների իմացություն;
ինքնուրույն սովորելու ունակություն.
Пожелания:
այլ մարդկանց ծածկագիրը հասկանալու ունակություն;
DISCORD ֆունկցիոնալության իմացություն:
Առաջադրանքներ.
բոտերի մշակում;
բոտի աջակցություն և սպասարկում:
Ձեր օգուտը.
Ձեզ դուր եկած նախագծին աջակցելու և ազդելու հնարավորություն;
Թիմում աշխատելու փորձի ձեռքբերում;
Առկա հմտությունները դրսևորելու և բարելավելու հնարավորություն:
Սա ինձ անմիջապես հետաքրքրեց։ Այո, նրանք չեն վճարել այս աշխատանքի համար, բայց նրանք ձեզանից որևէ պարտավորություն չեն պահանջել, և դա ավելորդ չի լինի պորտֆելում: Այդ պատճառով ես գրեցի սերվերի ադմինիստրատորին, և նա խնդրեց գրել բոտ, որը ցույց կտա խաղացողի վիճակագրությունը World of Tanks-ում:
Նախապատրաստական փուլը
Դիսկրոդ
Նախքան սկսենք գրել մեր բոտը, մենք պետք է ստեղծենք այն Discord-ի համար: Քեզ պետք է:
Մենք գնում ենք «Իմ հավելվածները» և սեղմում ենք «Ավելացնել նոր հավելված» կոճակը՝ տալով հավելվածի անվանումը և ընտրելով դրա տեսակը։
Դիմումի ID-ի պահպանում
ծրագրային ապահովման
Արդեն կա ընտրության ազատություն։ Ինչ-որ մեկը օգտագործում է Visual Studio-ն, ինչ-որ մեկը Rider-ը, ինչ-որ մեկը ընդհանուր առմամբ հզոր է և գրում է կոդ Vim-ում (ի վերջո իրական ծրագրավորողներն օգտագործում են միայն ստեղնաշարը, չէ՞): Այնուամենայնիվ, Discord API-ն չկիրառելու համար կարող եք օգտագործել C# ոչ պաշտոնական «DSharpPlus» գրադարանը: Դուք կարող եք տեղադրել այն կամ NuGet-ից, կամ ինքներդ կառուցելով աղբյուրները պահեստից:
Նրանց համար, ովքեր չգիտեն կամ մոռացել են, թե ինչպես տեղադրել հավելվածներ NuGet-ից:Հրահանգներ Visual Studio-ի համար
Կտտացրեք վերանայման վրա և որոնման դաշտում մուտքագրեք «DSharpPlus»;
Ընտրեք և տեղադրեք շրջանակը;
ՇԱՀՈՒՅԹ
Նախապատրաստական փուլն ավարտված է, կարող եք անցնել բոտը գրելուն։
Գրելու տրամաբանություն
Մենք չենք դիտարկի հավելվածի ողջ տրամաբանությունը, ես միայն ցույց կտամ, թե ինչպես աշխատել բոտի կողմից հաղորդագրությունների գաղտնալսման հետ և ինչպես աշխատել Wargaming API-ի հետ:
Discord բոտի հետ աշխատելը տեղի է ունենում ստատիկ async Task MainTask(string[] args) միջոցով։
Այս ֆունկցիան կանչելու համար Main-ում անհրաժեշտ է գրանցվել
Որտեղ նշան է ձեր բոտի նշանը:
Այնուհետև լամբդայի միջոցով գրում ենք անհրաժեշտ հրամանները, որոնք պետք է կատարի բոտը.
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 - սերվեր
Բոտի հետ աշխատելուց հետո այն պետք է տեղադրվի սերվերի վրա, որն անընդհատ աշխատում է 24/7: Դա պայմանավորված է նրանով, որ երբ ձեր հավելվածն աշխատում է, բոտը նույնպես աշխատում է: Հենց որ անջատեք հավելվածը, ձեր բոտն էլ է քնում։
Շատ VPS սերվերներ կան այս աշխարհում, ինչպես Windows-ում, այնպես էլ Linux-ում, սակայն շատ դեպքերում շատ ավելի էժան է հոսթինգը Linux-ում:
Discord սերվերի վրա ինձ խորհուրդ տվեցին vscale.io-ն, և ես անմիջապես ստեղծեցի վիրտուալ սերվեր Ubuntu-ում դրա վրա և վերբեռնեցի բոտը: Ես չեմ նկարագրի, թե ինչպես է այս կայքը աշխատում, այլ անմիջապես կանցնեմ բոտի կարգավորումներին:
Հաջորդը, դուք պետք է բեռնեք բոտը Git ծառայության մեջ, ինչպիսին է GitHub-ը և նմանատիպերը, և կլոնավորեք այն VPS սերվերում կամ ներբեռնեք ձեր բոտը այլ ձևերով: Խնդրում ենք նկատի ունենալ, որ դուք կունենաք միայն կոնսոլ, առանց GUI: Ընդհանրապես.
Ձեր բոտը ներբեռնելուց հետո դուք պետք է գործարկեք այն: Դրա համար ձեզ անհրաժեշտ է.
Վերականգնել բոլոր կախվածությունները. dotnet վերականգնում
Շնորհավորում եմ: Ձեր բոտը աշխատում է: Այնուամենայնիվ, բոտը, ցավոք, զբաղեցնում է վահանակը, և VPS սերվերից դուրս գալը հեշտ չէ: Բացի այդ, սերվերի վերագործարկման դեպքում դուք պետք է գործարկեք բոտը նոր ձևով։ Իրավիճակից մի երկու ելք կա. Դրանք բոլորը կապված են սերվերի գործարկման ժամանակ գործարկման հետ.
Ավելացնել run script /etc/init.d-ին
Ստեղծեք ծառայություն, որը կաշխատի գործարկման պահին:
Դրանց մասին մանրամասն անդրադառնալու իմաստ չեմ տեսնում, ինտերնետում ամեն ինչ բավական մանրամասն է նկարագրված:
Արդյունքները
Ուրախ եմ, որ ստանձնեցի այս գործը: Սա իմ առաջին բոտերի մշակման փորձն էր, և ես ուրախ եմ, որ նոր գիտելիքներ ստացա C #-ում և աշխատում եմ Linux-ով: