Ħolqien ta' bot Discord fuq .NET Core bi skjerament għal server VPS
Hello Khabrovites!
Illum se tara artiklu li jurik kif toħloq bot billi tuża C# fuq .NET Core u kif tħaddem fuq server remot.
L-artiklu se jikkonsisti fi sfond, stadju preparatorju, kitba ta 'loġika u trasferiment tal-bot għal server remot.
Nittama li dan l-artikolu se jgħin ħafna jibdew.
preistorja
Kollox beda f'lejl wieħed tal-ħarifa bla rqad li qattajt fuq is-server Discord. Peress li dan l-aħħar ingħaqadt miegħu, bdejt nistudjah 'il fuq u' l isfel. Wara li sibt il-kanal tat-test "Postijiet vakanti", sirt interessat, ftaħtu, u sibt fost l-offerti li ma kinux jinteressawni, dawn huma:
"Programmatur (iżviluppatur bot) Rekwiżiti:
għarfien ta' lingwi ta' programmar;
kapaċità għal awto-tagħlim.
Пожелания:
abbiltà li tifhem il-kodiċi ta 'nies oħrajn;
għarfien tal-funzjonalità DISCORD.
Kompiti:
żvilupp tal-bot;
appoġġ u manutenzjoni tal-bot.
Il-benefiċċju tiegħek:
Opportunità li tappoġġja u tinfluwenza l-proġett li tixtieq;
Il-kisba ta' esperjenza ta' xogħol f'tim;
Opportunità biex turi u ttejjeb il-ħiliet eżistenti.
Dan immedjatament interessatni. Iva, ma ħallsux għal dan ix-xogħol, iżda ma talbu l-ebda obbligu mingħandek, u mhux se jkun superfluwu fil-portafoll. Għalhekk, ktibt lill-admin tas-server, u talabni nikteb bot li juri l-istatistika tal-plejer f'World of Tanks.
Il-fażi preparatorja
Discrod
Qabel ma nibdew niktbu l-bot tagħna, irridu noħolquha għal Discord. Għandek bżonn:
Immorru fuq "L-Applikazzjonijiet Tiegħi" u nikklikkjaw fuq il-buttuna "Żid applikazzjoni ġdida", billi nagħtu l-isem tal-applikazzjoni u nagħżlu t-tip tagħha
Iffrankar tal-ID tal-Applikazzjoni
softwer
Diġà hemm il-libertà tal-għażla. Xi ħadd juża Visual Studio, xi ħadd Rider, xi ħadd huwa ġeneralment qawwi, u jikteb kodiċi f'Vim (wara kollox, programmaturi reali jużaw biss it-tastiera, hux?). Madankollu, sabiex ma timplimentax l-API Discord, tista 'tuża l-librerija C# mhux uffiċjali "DSharpPlus". Tista 'tinstallah jew minn NuGet, jew billi tibni s-sorsi lilek innifsek mir-repożitorju.
Għal dawk li ma jafux jew insew kif jinstallaw applikazzjonijiet minn NuGet.Struzzjonijiet għal Visual Studio
Mur fit-tab Proġett - Immaniġġja Pakketti NuGet;
Ikklikkja fuq ir-reviżjoni u fil-qasam tat-tfittxija daħħal "DSharpPlus";
Agħżel u installa qafas;
QLIGĦ!
L-istadju preparatorju spiċċa, tista 'tipproċedi biex tikteb il-bot.
Il-loġika tal-kitba
Mhux se nikkunsidraw il-loġika kollha tal-applikazzjoni, ser nuri biss kif taħdem bl-interċettazzjoni ta 'messaġġi mill-bot, u kif taħdem mal-API Wargaming.
Il-ħidma mal-bot Discord iseħħ permezz tal-Task MainTask async statiku (string[] args);
Biex issejjaħ din il-funzjoni, fil-Main trid tirreġistra
Fejn it-token huwa t-token tal-bot tiegħek.
Imbagħad, permezz tal-lambda, niktbu l-kmandi meħtieġa li l-bot għandu jesegwixxi:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
}
};
Fejn e.Author.Username qed jikseb il-laqam tal-utent.
B'dan il-mod, meta tibgħat xi messaġġ li jibda b'&, il-bot sellejk.
Fl-aħħar ta 'din il-funzjoni, trid tikteb await discord.ConnectAsync(); u stenna Task.Delay(-1);
Dan jippermettilek tesegwixxi kmandi fl-isfond mingħajr ma tieħu l-ħajt prinċipali.
Issa rridu nittrattaw l-API Wargaming. Hawnhekk kollox huwa sempliċi - ikteb it-talbiet CURL, ikseb tweġiba fil-forma ta 'sekwenza JSON, iġbed id-dejta meħtieġa minn hemm u wettaq manipulazzjonijiet fuqhom.
Eżempju ta' kif taħdem ma' 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;
}
Attenzjoni! Huwa strettament mhux rakkomandat li taħżen it-tokens u l-IDs tal-applikazzjoni kollha f'test ċar! Bħala minimu, Discord jipprojbixxi tali tokens meta jidħlu fin-netwerk dinji, u massimu, il-bot jibda jintuża minn attakkanti.
Użu għal VPS - server
Ladarba tkun lest il-bot, jeħtieġ li jkun ospitat fuq server li jkun għaddej kontinwament 24/7. Dan huwa dovut għall-fatt li meta l-applikazzjoni tiegħek tkun qed taħdem, il-bot qed jaħdem ukoll. Hekk kif itfi l-applikazzjoni, il-bot tiegħek torqod ukoll.
Ħafna servers VPS jeżistu f'din id-dinja, kemm fuq il-Windows kif ukoll fuq il-Linux, madankollu, f'ħafna każijiet, huwa ħafna orħos li jospita fuq Linux.
Fuq is-server Discord, ġejt avżat vscale.io, u immedjatament ħloqt server virtwali fuq Ubuntu fuqu u tellagħt il-bot. Mhux se niddeskrivi kif jaħdem dan is-sit, iżda se mmur direttament għas-settings tal-bot.
Sussegwentement, għandek bżonn ittella' l-bot f'servizz Git, bħal GitHub u simili, u tikklonah fuq server VPS, jew tniżżel il-bot tiegħek b'modi oħra. Jekk jogħġbok innota li ser ikollok biss console, l-ebda GUI. Fuq kollox.
Wara li tkun niżżilt il-bot tiegħek, għandek bżonn tħaddem. Għal dan, għandek bżonn:
Irrestawra d-dipendenzi kollha: dotnet restawr
Ibni applikazzjoni: dotnet build name_project.sln -c Rilaxx
Mur DLL mibnija;
dotnet name_of_file.dll
Prosit! Il-bot tiegħek qed jaħdem. Madankollu, il-bot, sfortunatament, jokkupa l-console, u mhux faċli li toħroġ mis-server VPS. Ukoll, f'każ ta 'startjar mill-ġdid tas-server, ser ikollok tibda l-bot b'mod ġdid. Hemm ftit modi kif toħroġ mis-sitwazzjoni. Kollha kemm huma relatati mat-tnedija fl-istartjar tas-server:
Żid run script għal /etc/init.d
Oħloq servizz li jibda jaħdem mal-istartjar.
Ma narax il-punt li nitkellem fuqhom fid-dettall, kollox huwa deskritt f'dettall suffiċjenti fuq l-Internet.
Sejbiet
Jien kuntent li ħadt dan l-inkarigu. Din kienet l-ewwel esperjenza tiegħi fl-iżvilupp tal-bot, u ninsab kuntent li sibt għarfien ġdid f'C #, u naħdem mal-Linux.