áááºá¹ááá¬áá« Khabrovitesá
ááá±á·ááœáẠ.NET Core ááœáẠC# ááá¯á¡áá¯á¶ážááŒá¯á bot áá áºáá¯ááá¯áááºáá®ážáááºážááŸáá·áº á¡áá±ážááááºážáá¬áá¬ááœáẠáááºážááá¯áááºáá²á·ááá¯á·áá¯ááºáá±á¬ááºááááºááá¯ááŒáááá·áº áá±á¬ááºážáá«ážáá áºáá¯ááºááᯠáááºááœá±á·ááá«áááºá
áá±á¬ááºážáá«ážááœáẠáá±á¬ááºáá¶áá áºáá¯á ááŒáá¯áááºááŒááºáááºááá·áºá¡ááá·áºá áá¯áá¹áááá±ááá±ážáá¬ážááŒááºážááŸáá·áº áá±á¬á·ááºááᯠá¡áá±ážááááºážáá¬áá¬ááá¯á· ááœáŸá²ááŒá±á¬ááºážááŒááºážááá¯á· áá«áááºáááºááŒá áºáááºá
áá®áá±á¬ááºážáá«ážá á¡á
ááŒá¯áá°áá±á¬áºáá±á¬áºáá»á¬ážáá»á¬ážááᯠá¡áá±á¬ááºá¡áá°ááŒá
áºá
á±áááºááá¯á· áá»áŸá±á¬áºááá·áºáá«áááºá
á á±á¬ááá¯áá»ážáá¬á
á¡á¬ážáá¯á¶ážáᬠDiscord áá¬áá¬ááŸá¬ á¡áááºááá»á±á¬áºáá²á· áá±á¬ááºážáŠážááá áºáááŸá¬ á áááºáá²á·áá¬áá«á áá»áœááºáá±á¬áº áá°áá²á· áááŒá¬áá±ážáááºáá០á ááŒá®áž áá°á·ááᯠá¡áá±á«áºá¡á±á¬áẠááá¯ááºáá±á·áá¬áá²á·áááºá á á¬áá¬ážáá»ááºááẠ"Vacancies" ááᯠááŸá¬ááœá±á·ááŒá®ážáá±á¬áẠáá»áœááºá¯ááºá áááºáááºá á¬ážáá¬ááŒá®áž áááºážááá¯ááœáá·áºáᬠáá»áœááºá¯ááºááᯠá áááºááááºá á¬ážáá±á¬ áááºážááŸááºážááŸá¯áá»á¬ážááŒá¬ážááœáẠááœá±á·ááŸááá²á·áááºá áááºážááá¯á·ááŸá¬-
"áááá¯ááááºáᬠ(bot developer)á
ááá¯á¡ááºáá»ááºáá»á¬ážááá¯:
- áááá¯ááááºážáááºážáá¬áá¬á áá¬ážáá»á¬ážááᯠá¡ááááá¬á
- ááá¯ááºááá¯ááºáá±á·áá¬áááºáá°ááá¯ááºááŸá¯á
á¡ááŒá¶ááŒá¯áá»ááºáá»á¬áž:
- á¡ááŒá¬ážáá°áá»á¬ážááá¯ááºááᯠáá¬ážáááºááá¯ááºá áœááºážá
- DISCORD áá¯ááºáá±á¬ááºááá¯ááºá áœááºáž á¡ááááá¬á
áááºááœááºáá»ááºáá»á¬áž:
- bot ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯;
- bot ááá¶á·ááá¯ážááŸá¯ááŸáá·áºááááºážááááºážááŸá¯á
ááá·áºá¡áá»áá¯ážáá»á±ážáá°áž-
- áááºááŸá áºáááºáá±á¬ ááá±á¬áá»ááºááᯠáá¶á·ááá¯ážáááºááŸáá·áº ááŒáá¬ááœáŸááºážááá¯ážááẠá¡ááœáá·áºá¡áááºážá
- á¡ááœá²á·áá áºááœá²á·ááœááºá¡áá¯ááºáá¯ááºá¡ááœá±á·á¡ááŒá¯á¶áá»á¬ážáááŸá;
- áááºááŸá á¡áááºá¡áá»ááºážáá»á¬ážááᯠááŒáŸáá·áºáááºáááºááŸáá·áº ááá¯ááºááŒááẠá¡ááœáá·áºá¡áááºážá
áá«ááᯠáá»ááºáá»ááºáž á
áááºáááºá
á¬ážáááºá áá¯ááºáááºá áá°ááá¯á·á áá®á¡áá¯ááºá¡ááœáẠááá¯ááºáá¶ááá±ážáá°ážá áá«áá±ááá·áº áááºážáá®á áá¬ááá¹ááá¬ážááœá±á០ááá±á¬ááºážáá°ážá ááŒá®ážáá±á¬á· á¡á
á¯á
á¯á¡ááœáẠáááá¯á¡ááºáá«áá°ážá ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááẠáá¬áá¬á
á®áá¶ááá·áºááœá²áá°áᶠá
á¬áá±ážáá²á·ááŒá®áž World of Tanks ááœáẠáá
á¬ážááá¬ážáá
á¬áááºážá¡ááºážáá»á¬ážááá¯ááŒáááá·áº bot áá
áºáá¯ááá¯áá±ážááẠáá±á¬ááºážááá¯áá²á·áááºá
á¡ááá¯áá«ááŒáá¯áááºá¡ááá·áº
ááá±á¬áá¬ážááœá²ááœá²
áá»áœááºá¯ááºááá¯á·á bot ááᯠááá±ážáá®á Discord á¡ááœáẠáááºážááᯠáááºáá®ážááẠááá¯á¡ááºáá«áááºá áááºááá¯á¡ááºáááº-
- Discord á¡áá±á¬áá·áºááá¯á· áááºáá±á¬ááºáá«á
áááºá·áẠ- "áá»áŸá±á¬ááºááœáŸá¬áá»á¬áž" áááºááºááœááºá "áá»áŸá±á¬ááºááœáŸá¬á¡áá áº" ááá¯ááºááá¯ááŸáááºááŒá®áž bot ááá¯á¡áááºáá±ážáá«á
- ááá·áº bot ááá¯á·áááºáá±á¬ááºááŒá®áž âáááºáááºáá»á¬ážâ á á¬áááºážááŸá âáá±á¬á·ááºâ áááºááºááᯠááŸá¬ááœá±ááŒááºážááŒáá·áº áá±á¬á·ááºááá¯áááºááá°áá«
- ááá¯áááºááᯠáá áºáá±áá¬áá¬ááŸá¬ ááááºážáááºážáá«á
ááááºážáá á¬ážááŒááºáž
ááá¯á·á¡ááŒáẠWargaming API ááá¯á·áááºáá±á¬ááºááœáá·áºáááŸáááẠWargaming ááœáẠá¡ááºááá®áá±ážááŸááºážáá áºáá¯áááºáá®ážáááºááá¯á¡ááºáááºá á€ááœááºáááºážá á¡áá¬á¡á¬ážáá¯á¶ážááẠááá¯ážááŸááºážáá«áááºá
- áááºá Wargaming á¡áá±á¬áá·áºááá¯á· áááºáá±á¬ááºáá«á
áá®ááá·áºááºááá± - áá»áœááºá¯ááºááá¯á·ááẠ"My Applications" ááá¯á·ááœá¬ážá "áá»áŸá±á¬ááºááœáŸá¬á¡áá áºáá áºáá¯ááá·áºáá«" ááá¯ááºááá¯ááŸáááºáá«á áá»áŸá±á¬ááºááœáŸá¬áá¡áááºááá¯áá±ážá áááºážáá¡áá»áá¯ážá¡á á¬ážááá¯ááœá±ážáá»ááºáá«á
- áá»áŸá±á¬ááºááœáŸá¬ ID ááᯠááááºážáááºážááŒááºážá
Software áá»á¬áž
ááœááºáááºá áœá¬ ááœá±ážáá»ááºááá¯ááºááœáá·áº ááŸáááŒá®ážáá¬ážáá«á áá áºá á¯á¶áá áºáá±á¬ááºááẠVisual Studioá Rider áá áºá á¯á¶áá áºáŠážá áá áºá á¯á¶áá áºáŠážááẠáá±áá¯áá»á¡á¬ážááŒáá·áº á áœááºážá¡á¬ážááŒá®ážáá¬ážááŒá®áž Vim ááœáẠáá¯ááºáá±ážááẠ(ááááºáá±á¬á· áááá¯ááááºáá¬áá»á¬ážááẠáá®ážáá¯ááºááá¯áᬠá¡áá¯á¶ážááŒá¯áááºááá¯ááºáá¬áž)á ááá¯á·áá±á¬áºá Discord API ááᯠá¡áá±á¬ááºá¡áááºááá±á¬áºáááºá¡ááœááºá áááºááẠááá¬ážáááºááá¯ááºáá±á¬ C# á á¬ááŒáá·áºááá¯áẠâDSharpPlusâ ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá NuGet ááŸááŒá áºá á± áááºááá·áºááœááºážááá¯ááºááẠááá¯á·ááá¯áẠá¡áááºážá¡ááŒá áºáá»á¬ážááᯠááá¯ááŸá±á¬ááºááŸá¯á០áááºááá¯ááºááá¯ááºáááºáá±á¬ááºááŒááºážááŒáá·áºááŒá áºá á± ááá·áºááœááºážááá¯ááºáááºá
NuGet á០application ááᯠinstall áá¯ááºáááºážááááá±ážáá°áá»á¬ážáVisual Studio á¡ááœáẠáááºážááœáŸááºáá»ááºáá»á¬áž
- tab ááá¯ááœá¬ážáá« Project - Manage NuGet Packages;
- ááŒááºáááºáá¯á¶ážáááºáá»ááºááᯠááŸáááºááŒá®áž ááŸá¬ááœá±ááŸá¯á¡ááœááºááœáẠâDSharpPlusâ ááᯠááá¯ááºááá·áºáá«á
- áá°áá±á¬ááºááᯠááœá±ážáá»ááºááŒá®áž ááá·áºááœááºážáá«á
- á¡ááŒááºá¡á áœááºáž!
ááŒáá¯áááºááŒááºáááºááŸá¯á¡ááá·áºááŒá®ážááœá¬ážáá«ááŒá®á áááºááẠbot ááá¯áááºáááºáá±ážáá¬ážááá¯ááºáá«áááºá
áá¯áá¹áááá±á áá±ážááŒááºážá
á¡ááá®áá±ážááŸááºážááá¯áá¹áááá
áºáá¯áá¯á¶ážááá¯áá»áœááºá¯ááºááá¯á·ááá·áºááœááºážá
ááºážá
á¬ážáááºááá¯ááºáá«á áá»áœááºá¯ááºááẠbot ááŸáááºáá±á·ááºá»áá»á¬ážááá¯ááŒá¬ážááŒááºááŒááºážááŸáá·áºáááºááá¯á·áá¯ááºáá±á¬ááºááááºá Wargaming API ááŸáá·áºáááºááá¯á·á¡áá¯ááºáá¯ááºáá¯á¶ááá¯áá¬ááŒááá«áááºá
Discord bot ááŸáá·áºá¡áá¯ááºáá¯ááºááŒááºážááẠstatic async Task MainTask(string[] args);
á€áá¯ááºáá±á¬ááºáá»ááºááá¯áá±á«áºááá¯áááºá¡ááœáẠMain ááœááºáááºá
á¬áááºážááœááºážáááºááá¯á¡ááºáááºá
MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();
ááá¯á·áá±á¬áẠáááºá bot ááᯠá áááºááẠááá¯á¡ááºáááº-
discord = new DiscordClient(new DiscordConfiguration
{
Token = token,
TokenType = TokenType.Bot,
UseInternalLogHandler = true,
LogLevel = LogLevel.Debug
});
ááá¯áááºááẠááá·áº bot á ááá¯áááºáááºááŸá¬áá²á
ááá¯á·áá±á¬áẠlambda ááŸáááá·áº bot ááẠáá¯ááºáá±á¬ááºááá·áºááá·áº ááá¯á¡ááºáá±á¬ command áá»á¬ážááᯠáá±ážááá¯ááºáá«áááºá
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(âHello, â + e.Author.Username);
}
};
e.Author.Username ááẠá¡áá¯á¶ážááŒá¯áá°á á¡áááºááŒá±á¬ááºááᯠáááŸáááá·áºáá±áá¬á
á€áááºážá¡á¬ážááŒáá·áº áááºááẠ& ááŸáá·áºá ááá·áº áááºááá·áºáááºáá±á·áá»áºááá¯áááᯠáá±ážááá¯á·áá±á¬á¡áá«á bot ááẠááá·áºááᯠááŸá¯ááºáááºáááá·áºáááºá
á€áá¯ááºáá±á¬ááºáá»ááºáá¡áá¯á¶ážááœááºá áááºááẠá á±á¬áá·áºááá¯ááºážáá±áá±á¬ 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 ááẠááá¹áá¬áá áºááŸááºážááŸá ááœááºáááºá¡ááœááºážááá¯á· áááºáá±á¬ááºááá·áºá¡áá« áááºážááá¯áááºáá»á¬ážááᯠááááºáááºáááºááŒá áºááŒá®áž á¡ááŒáá·áºáá¯á¶ážá¡áá»áááºááœáẠááá¯ááºááá¯ááºáá°áá»á¬ážá០bot ááᯠá áááºá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
VPS - áá¬áá¬ááá¯á· ááŒáá·áºáá»ááºáá«á
ááẠbot ááŸáá·áº ááŒá®ážáááºááŸáá·áºá áááºážááᯠ24/7 á¡áááºáááŒááºáááºáááºáá±áá±á¬ áá¬áá¬áá±á«áºááœáẠáááºáá¶áá¬ážááẠááá¯á¡ááºáá«áááºá áááºážááŸá¬ áááºá á¡ááºááºáá®áá±ážááŸááºážááᯠáááºáááºáá±áá»áááºááœáẠbot áááºáááºáž á¡áá¯ááºáá¯ááºáá±áá±á¬ááŒá±á¬áá·áº ááŒá
áºáááºá á¡ááá®áá±ážááŸááºážááᯠááááºááá¯ááºáááºááŸáá·áº ááá·áº bot ááẠá¡áááºáá»á±á¬áºááœá¬ážáá«áááºá
VPS áá¬áá¬áá»á¬ážá áœá¬ááẠá€ááá¹áá¬áá±á«áºááœáẠWindows ááŸáá·áº Linux ááœááºááŸááá±á¬áºáááºážá ááá á¹á á¡áá»á¬ážá á¯ááœáẠLinux ááœáẠhost ááŒá¯áá¯ááºááẠáá»á¬ážá áœá¬á á»á±ážáááºáá¬áá«áááºá
Discord áá¬áá¬ááœáẠáá»áœááºá¯ááºááᯠvscale.io á០á¡ááŒá¶ááŒá¯áá¬ážááŒá®áž Ubuntu ááœáẠvirtual server áá áºáá¯ááᯠáá»ááºáá»ááºážáááºáá®ážááŒá®áž bot ááᯠá¡ááºáá¯ááºáá¯ááºáá«áááºá á€ááá¯áẠáááºááá¯á·á¡áá¯ááºáá¯ááºáááºááᯠáá»áœááºá¯ááºáá±á¬áºááŒáááºááá¯ááºáá±á¬áºáááºáž áá±á¬á·ááºáááºáááºáá»á¬ážááá¯á· ááá¯ááºááá¯ááºááœá¬ážáá«áááºá
ááááŠážá
áœá¬á áááºááẠ.NET Core ááœááºáá±ážáá¬ážáá¬ážáá±á¬ áá»áœááºá¯ááºááá¯á·á bot ááá¯áááºáááºá
á±ááá·áºááá¯á¡ááºáá±á¬áá±á¬á·ááºáá²ááá¯ááá·áºááœááºážáááºááá¯á¡ááºáááºá
ááá¯á·áá±á¬ááºá áááºááẠGitHub áá²á·ááá¯á·áá±á¬ Git áááºáá±á¬ááºááŸá¯áá áºáá¯ááá¯á· á¡ááºáá¯ááºáá¯ááºááẠááá¯á¡ááºááŒá®áž áááºážááᯠVPS áá¬áá¬ááá¯á· áá¯á¶áá°áá°ážááẠááá¯á·ááá¯áẠáááºá bot ááᯠá¡ááŒá¬ážáááºážáááºážááŒáá·áº áá±á«ááºážáá¯ááºáá¯ááºááẠááá¯á¡ááºáááºá ááá·áºááœáẠááœááºááá¯ážááºáá áºáá¯áá¬ááŸááááºááŒá áºááŒá®áž GUI áááŸááá«á áá¯á¶ážá
ááá·áº bot ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®ážáá«á áááºážááᯠrun ááẠááá¯á¡ááºáá«áááºá á€á¡ááœááºá áááºááá¯á¡ááºáááº-
- ááŸá®ááá¯ááŸá¯á¡á¬ážáá¯á¶ážááᯠááŒááºáááºááá°áá«- dotnet ááŒááºáááºááá°áá«á
- á¡ááá®áá±ážááŸááºážáááºáá±á¬ááºááŒááºáž- dotnet build name_project.sln -c ááᯠááŒáá·áºáá»ááááºá
- áááºáá±á¬ááºáá¬ážáá±á¬ DLL ááá¯á·ááœá¬ážáá«á
- dotnet name_of_file.dll
áá¯ááºáá°áá«áááºá ááá·áº bot ááẠá¡áá¯ááºáá¯ááºáá±áá«áááºá ááá¯á·áá±á¬áºá bot ááẠáá¶ááá±á¬ááºážá áœá¬ááŒáá·áºá console ááá¯ááááºážááá¯ááºáá¬ážááŒá®áž VPS áá¬áá¬ááŸááœááºáááºáááœááºáá°áá«á ááá¯á·á¡ááŒááºá áá¬áá¬áá áºáá¯ááŒááºáááºá áááºáá±á¬á¡áá«ááœááºá áááºááẠbot ááá¯áááºážáááºážá¡áá áºááŒáá·áºá áááºááááºááŒá áºáá«áááºá á¡ááŒá±á¡áá±ááá± áá¯ááºážááœááºááá¯á· áááºážáááºáž ááŸá áºááœááºááŸááá«áááºá áááºážááá¯á·á¡á¬ážáá¯á¶ážááẠserver startup ááœáẠlaunch ááŸáá·áºáááºá ááºáááº-
- run script ááᯠ/etc/init.d ááá¯á· ááá·áºáá«á
- á áááºáá»áááºááœáẠáá¯ááºáá±á¬ááºááá·áº áááºáá±á¬ááºááŸá¯ááᯠáááºáá®ážáá«á
áááºážááá¯á·á¡áá±á«áºááœáẠááááºážá¡á±á¬ááºážáá±ááá·áºá¡áá»ááºááᯠáá»áœááºá¯ááºáááŒááºáá«á á¡áá¬á¡á¬ážáá¯á¶ážááᯠá¡ááºáá¬áááºáá±á«áºááœáẠáá¯á¶áá±á¬ááºáá±á¬á¡áá±ážá áááºááŒáá·áº áá±á¬áºááŒáá¬ážáá«áááºá
ááœá±á·ááŸááá»ááºáá»á¬áž
áá®áá¬áááºááᯠáááºážáá±á¬ááºááᬠáááºážáá¬áá«áááºá á€áááºááŸá¬ áá»áœááºá¯ááºá ááááá¯á¶áž bot development á¡ááœá±á·á¡ááŒá¯á¶ááŒá áºááŒá®ážá C# ááœáẠá¡ááááá¬á¡áá áºáá»á¬ážááá²á·ááŒá®áž Linux ááŸáá·áº áá¯ááºáá±á¬ááºáááá·áºá¡ááœáẠáááºážáá¬áá«áááºá
Discord áá¬áá¬ááá¯á· ááá·áºááºáá»áááºáá«á
СпаÑОбПзавМОЌаМОе!
source: www.habr.com