αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž Discord bot αž“αŸ…αž›αžΎ .NET Core αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž Discord bot αž“αŸ…αž›αžΎ .NET Core αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS

αž‡αŸ†αžšαžΆαž”αžŸαž½αžšαž’αŸ’αž“αž€αžŸαŸ’αžšαž»αž€ Khabrovsk!

αžαŸ’αž„αŸƒαž“αŸαŸ‡αž’αŸ’αž“αž€αž“αžΉαž„αž’αžΆαž“αž’αžαŸ’αžαž”αž‘αž˜αž½αž™αžŠαŸ‚αž›αž“αžΉαž„αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž–αžΈαžšαž”αŸ€αž”αž”αž„αŸ’αž€αžΎαž bot αžŠαŸ„αž™αž”αŸ’αžšαžΎ C# αž“αŸ…αž›αžΎ .NET Core αž“αž·αž„αžšαž”αŸ€αž”αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαžΆαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž–αžΈαž…αž˜αŸ’αž„αžΆαž™αŸ”

αž’αžαŸ’αžαž”αž‘αž“αžΉαž„αž˜αžΆαž“αž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™ αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžšαŸ€αž”αž…αŸ† αž€αžΆαžšαžŸαžšαžŸαŸαžšαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆ αž“αž·αž„αž€αžΆαžšαž•αŸ’αž‘αŸαžš bot αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž–αžΈαž…αž˜αŸ’αž„αžΆαž™αŸ”

αžαŸ’αž‰αž»αŸ†αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αž”αžΌαž„αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ”

αžŸαž˜αŸαž™αž”αž»αžšαŸαž”αŸ’αžšαžœαžαŸ’αžαž·αžŸαžΆαžŸαŸ’αžαŸ’αžš

αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αž½αž™αž™αž”αŸ‹αžšαžŠαžΌαžœαžŸαŸ’αž›αžΉαž€αžˆαžΎαž‡αŸ’αžšαž»αŸ‡αžŠαŸ‚αž›αž‚αŸαž„αž˜αž·αž“αž›αž€αŸ‹ αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž…αŸ†αžŽαžΆαž™αž–αŸαž›αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Discord αŸ” αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž…αžΌαž›αžšαž½αž˜αž‡αžΆαž˜αž½αž™αžœαžΆαžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαž·αž€αŸ’αžŸαžΆαžœαžΆαž‘αžΆαŸ†αž„αžαžΆαž„αž€αŸ’αž“αž»αž„ αž“αž·αž„αžαžΆαž„αž€αŸ’αžšαŸ…αŸ” αžŠαŸ„αž™αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž†αžΆαž“αŸ‚αž›αž’αžαŸ’αžαž”αž‘ "αž‘αŸ†αž“αŸαžš" αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ αž”αžΎαž€αžœαžΆ αž αžΎαž™αž”αžΆαž“αžšαž€αžƒαžΎαž‰αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž‡αžΌαž“αžŠαŸ‚αž›αž˜αž·αž“αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžαŸ’αž‰αž»αŸ† αž“αŸαŸ‡αŸ–

"αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ (αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸ bot)
αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαŸ–

  • αž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αž“αŸƒαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ;
  • αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ€αž“αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αŸ”

αž”αŸ†αžŽαž„αž”αŸ’αžšαžΆαžαŸ’αž“αžΆαŸ–

  • αžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž™αž›αŸ‹αž–αžΈαž€αžΌαžŠαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαž‘αŸƒ;
  • αž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αž’αŸ†αž–αžΈαž˜αž»αžαž„αžΆαžš DISCORD αŸ”

αž€αž·αž…αŸ’αž…αž€αžΆαžš:

  • αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αž bot;
  • αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαž“αž·αž„αžαŸ‚αž‘αžΆαŸ† bot αŸ”

αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ–

  • αž±αž€αžΆαžŸαžŠαžΎαž˜αŸ’αž”αžΈαž‚αžΆαŸ†αž‘αŸ’αžš αž“αž·αž„αž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ‚αž›αž’αŸ’αž“αž€αž…αžΌαž›αž…αž·αžαŸ’αž;
  • αž‘αž‘αž½αž›αž”αžΆαž“αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž€αžΆαžšαž„αžΆαžšαž‡αžΆαž€αŸ’αžšαž»αž˜;
  • αž±αž€αžΆαžŸαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž αžΆαž‰ αž“αž·αž„αž€αŸ‚αž›αž˜αŸ’αž’αž‡αŸ†αž“αžΆαž‰αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αŸ”


αž“αŸαŸ‡αž’αŸ’αžœαžΎαž±αŸ’αž™αžαŸ’αž‰αž»αŸ†αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž—αŸ’αž›αžΆαž˜αŸ—αŸ” αž”αžΆαž‘ αž–αž½αž€αž‚αŸαž˜αž·αž“αž”αžΆαž“αž”αž„αŸ‹αž”αŸ’αžšαžΆαž€αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž„αžΆαžšαž“αŸαŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž–αž½αž€αž‚αŸαž˜αž·αž“αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“αž€αžΆαžαž–αŸ’αžœαž€αž·αž…αŸ’αž…αžŽαžΆαž˜αž½αž™αž–αžΈαž’αŸ’αž“αž€αž‘αŸ αž αžΎαž™αžœαžΆαž“αžΉαž„αž˜αž·αž“αž˜αžΆαž“αž•αž›αž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž•αž›αž”αŸαžαŸ’αžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸαŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαžšαžŸαŸαžšαž‘αŸ…αž€αžΆαž“αŸ‹ server admin αž αžΎαž™αž‚αžΆαžαŸ‹αž”αžΆαž“αžŸαž»αŸ†αž±αŸ’αž™αžαŸ’αž‰αž»αŸ†αžŸαžšαžŸαŸαžš bot αžŠαŸ‚αž›αž“αžΉαž„αž”αž„αŸ’αž αžΆαž‰αžŸαŸ’αžαž·αžαž·αž’αŸ’αž“αž€αž›αŸαž„αž“αŸ…αž€αŸ’αž“αž»αž„ World of Tanks αŸ”

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžαŸ’αžšαŸ€αž˜αžšαŸ€αž”αž…αŸ†

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž Discord bot αž“αŸ…αž›αžΎ .NET Core αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS
αžαŸ’αžœαŸ‚αž„αž‚αŸ†αž“αž·αžαž‚αŸ’αž“αžΆαŸ”
αž˜αž»αž“αž–αŸαž›αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαžšαžŸαŸαžš bot αžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Discord αŸ” αž’αŸ’αž“αž€β€‹αžαŸ’αžšαžΌαžœαž€αžΆαžš:

  1. αž…αžΌαž›αž‚αžŽαž“αžΈ Discord αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹
  2. αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αžΆαŸ†αž„ "αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ" αž…αž»αž…αž›αžΎαž”αŸŠαžΌαžαž»αž„ "αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αž˜αžΈ" αž αžΎαž™αžŠαžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž”αžΌαž
  3. αž‘αž‘αž½αž›αž”αžΆαž“ bot token αžŠαŸ„αž™αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„ bot αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αžŸαŸ’αžœαŸ‚αž„αžšαž€αž•αŸ’αž‘αžΆαŸ†αž„ "Bot" αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈ "Settings"
  4. αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™αŸ”

Wargaming

αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αž•αž„αžŠαŸ‚αžšαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„ Wargaming αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎ Wargaming API αŸ” αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαžŸαžΆαž˜αž‰αŸ’αž‰αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž•αž„αžŠαŸ‚αžš:

  1. αž…αžΌαž›αž‘αŸ…αž‚αžŽαž“αžΈ Wargaming αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžαžΆαž˜αžšαž™αŸˆαžαŸ†αžŽαž“αŸαŸ‡αŸ”
  2. αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹ "αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†" αž αžΎαž™αž…αž»αž…αž›αžΎαž”αŸŠαžΌαžαž»αž„ "αž”αž“αŸ’αžαŸ‚αž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžαŸ’αž˜αžΈ" αžŠαŸ„αž™αž•αŸ’αžαž›αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž“αž·αž„αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαž—αŸαž‘αžšαž”αžŸαŸ‹αžœαžΆ
  3. αž€αŸ†αž–αž»αž„αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Software

αž˜αžΆαž“β€‹αžŸαŸαžšαžΈαž—αžΆαž–β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸβ€‹αžšαž½αž…β€‹αž αžΎαž™αŸ” αž’αŸ’αž“αž€αžαŸ’αž›αŸ‡αž”αŸ’αžšαžΎ Visual Studio αžαŸ’αž›αŸ‡ Rider αžαŸ’αž›αŸ‡αž˜αžΆαž“αžαžΆαž˜αž–αž›αžαŸ’αž›αžΆαŸ†αž„ αž αžΎαž™αžŸαžšαžŸαŸαžšαž€αžΌαžŠαž€αŸ’αž“αž»αž„ Vim (αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž·αžαž”αŸ’αžšαžΎαžαŸ‚αž€αŸ’αžαžΆαžšαž…αž»αž…αž‘αŸ?) αž‘αŸ„αŸ‡αž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžŠαžΎαž˜αŸ’αž”αžΈαž‡αŸ€αžŸαžœαžΆαž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αž Discord API αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž”αžŽαŸ’αžŽαžΆαž›αŸαž™ C# αžŠαŸ‚αž›αž˜αž·αž“αž•αŸ’αž›αžΌαžœαž€αžΆαžš β€œDSharpPlusβ€αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αžŠαŸ†αž‘αžΎαž„αžœαžΆαž–αžΈ NuGet αž¬αžŠαŸ„αž™αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž”αŸ’αžšαž—αž–αžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžŠαŸ‚αž›αž˜αž·αž“αž‘αžΆαž“αŸ‹αžŠαžΉαž„ αž¬αž—αŸ’αž›αŸαž…αž–αžΈαžšαž”αŸ€αž”αžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αžΈ NuGetαŸ”αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Visual Studio

  1. αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž•αŸ’αž‘αžΆαŸ†αž„αž‚αž˜αŸ’αžšαŸ„αž„ - αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αž‰αŸ’αž…αž”αŸ‹ NuGet;
  2. αž…αž»αž…αž›αžΎαž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž‘αžΎαž„αžœαž·αž‰αž αžΎαž™αž”αž‰αŸ’αž…αžΌαž› "DSharpPlus" αž“αŸ…αž€αŸ’αž“αž»αž„αžœαžΆαž›αžŸαŸ’αžœαŸ‚αž„αžšαž€αŸ”
  3. αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž“αž·αž„αžŠαŸ†αž‘αžΎαž„αžŸαŸŠαž»αž˜;
  4. αž–αžαŸŒαž˜αžΆαž“αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“!

αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αžšαžΆαž›αŸ‹αž αžΎαž™ αž’αŸ’αž“αž€αž’αžΆαž…αž”αž“αŸ’αžαž‘αŸ…αž€αžΆαžšαžŸαžšαžŸαŸαžš bot αž”αžΆαž“αŸ”

αž€αžΆαžšαžŸαžšαžŸαŸαžšαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆ

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž Discord bot αž“αŸ…αž›αžΎ .NET Core αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS

αž™αžΎαž„αž“αžΉαž„αž˜αž·αž“αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ αžαŸ’αž‰αž»αŸ†αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž„αŸ’αž αžΆαž‰αž’αŸ’αž“αž€αž–αžΈαžšαž”αŸ€αž”αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™ 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 αž‚αž½αžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αŸ–

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

αž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž› e.Author.Username – αž‘αž‘αž½αž›αž”αžΆαž“αžŸαž˜αŸ’αž˜αžαž·αž“αžΆαž˜αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαŸ”

αžœαž·αž’αžΈαž“αŸαŸ‡ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαžŸαžΆαžšαžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ„αž™ & αž“αŸ„αŸ‡ bot αž“αžΉαž„αžŸαŸ’αžœαžΆαž‚αž˜αž“αŸαž’αŸ’αž“αž€αŸ”

αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž˜αž»αžαž„αžΆαžšαž“αŸαŸ‡ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžš 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;
        }

αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹! αžœαžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ†αž™αŸ‰αžΆαž„αžαžΉαž„αžšαŸ‰αžΉαž„αž±αŸ’αž™αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžαžΌαžαžΉαž“ αž“αž·αž„αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‡αžΆαž’αžαŸ’αžαž”αž‘αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αž‘αŸ! αž™αŸ‰αžΆαž„αž αŸ„αž…αžŽαžΆαžŸαŸ‹ Discord αž αžΆαž˜αž”αŸ’αžšαžΆαž˜αžαžΌαžαžΉαž“αž”αŸ‚αž”αž“αŸαŸ‡ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžœαžΎαž›αžœαŸ‰αžΆαž™αžœαŸ‰αŸαž” αž αžΎαž™αž’αžαž·αž”αžšαž˜αžΆ αž”αžΌαžαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ„αž™αž’αŸ’αž“αž€αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαŸ”

αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS

αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž Discord bot αž“αŸ…αž›αžΎ .NET Core αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‘αŸ…αž€αžΆαž“αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS

αž“αŸ…αž–αŸαž›αž’αŸ’αž“αž€αžšαž½αž…αžšαžΆαž›αŸ‹αž‡αžΆαž˜αž½αž™ bot αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž αŸ„αŸ‡αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž“αž·αž…αŸ’αž… 24/7 αŸ” αž“αŸαŸ‡αž‚αžΊαžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš bot αž€αŸαž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αž„αžŠαŸ‚αžšαŸ” αžŠαžšαžΆαž”αžŽαžΆαž’αŸ’αž“αž€αž”αž·αž‘αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ bot αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αžΉαž„αžŠαŸαž€αŸ”

αž˜αžΆαž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS αž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž—αž–αž›αŸ„αž€αž“αŸαŸ‡ αž‘αžΆαŸ†αž„αž“αŸ…αž›αžΎ Windows αž“αž·αž„ Linux αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž—αžΆαž‚αž…αŸ’αžšαžΎαž“ αžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ„αž€αž‡αžΆαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αŸ„αŸ‡αž“αŸ…αž›αžΎ Linux αŸ”

αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Discord αž–αž½αž€αž‚αŸαž”αžΆαž“αžŽαŸ‚αž“αžΆαŸ† vscale.io αžŠαž›αŸ‹αžαŸ’αž‰αž»αŸ† αž αžΎαž™αž—αŸ’αž›αžΆαž˜αŸ—αž“αŸ„αŸ‡αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž“αž·αž˜αŸ’αž˜αž·αžαž“αŸ…αž›αžΎαž’αŸŠαžΌαž”αŸŠαž»αž“αž‘αžΌαž“αŸ…αž›αžΎαžœαžΆ αž αžΎαž™αž”αž„αŸ’αž αŸ„αŸ‡αžšαžΌαž”αž™αž“αŸ’αžαŸ” αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž˜αž·αž“αžšαŸ€αž”αžšαžΆαž”αŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž‚αŸαž αž‘αŸ†αž–αŸαžšαž“αŸαŸ‡αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αžΉαž„αž”αž“αŸ’αžαž‘αŸ…αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ bot αž—αŸ’αž›αžΆαž˜αŸ—αŸ”

αžŠαŸ†αž”αžΌαž„αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŠαŸ‚αž›αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš bot αžšαž”αžŸαŸ‹αž™αžΎαž„αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαž€αŸ’αž“αž»αž„ .NET Core αŸ” αžšαž”αŸ€αž”αž’αŸ’αžœαžΎαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž‘αžΈαž“αŸαŸ‡.

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž αŸ„αŸ‡αžšαžΌαž”αž™αž“αŸ’αžαž‘αŸ…αž€αžΆαž“αŸ‹ Git αžŠαŸ‚αž›αž‡αžΆαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαžΌαž…αž‡αžΆ GitHub αž“αž·αž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž αžΎαž™αž€αŸ’αž›αžΌαž“αžœαžΆαž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS αž¬αžαžΆαž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž‘αžΆαž‰αž™αž€ bot αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆ αž’αŸ’αž“αž€αž“αžΉαž„αž˜αžΆαž“αžαŸ‚αž€αž»αž„αžŸαžΌαž›αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡ αž‚αŸ’αž˜αžΆαž“ GUI αž‘αŸαŸ” αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αŸ’αž“αž€αž”αžΆαž“αž‘αžΆαž‰αž™αž€ bot αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžšαž½αž…αž αžΎαž™ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžœαžΆαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαžŠαžΌαž…αž“αŸαŸ‡αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžš:

  • αžŸαŸ’αžαžΆαžšαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αžΎαž„αžœαž·αž‰αŸ– αžŸαŸ’αžαžΆαžš dotnet
  • αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ– dotnet build name_project.sln -c αž…αŸαž‰αž•αŸ’αžŸαžΆαž™
  • αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹ DLL αžŠαŸ‚αž›αž”αžΆαž“αžŸαžΆαž„αžŸαž„αŸ‹;
  • dotnet name_of_file.dll

αž’αž”αž’αžšαžŸαžΆαž‘αžš! αž”αžΌαžαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž‡αžΆαž’αž€αž»αžŸαž› bot αž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αž€αž»αž„αžŸαžΌαž› αž αžΎαž™αž€αžΆαžšαž…αžΆαž€αž…αŸαž‰αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ VPS αž‚αžΊαž˜αž·αž“αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸ„αŸ‡αž‘αŸαŸ” αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αž•αž„αžŠαŸ‚αžš αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž·αž‘αž‘αžΎαž„αžœαž·αž‰ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αžΌαžαž˜αŸ’αžαž„αž‘αŸ€αžαŸ” αž˜αžΆαž“αžœαž·αž’αžΈαž–αžΈαžšαž™αŸ‰αžΆαž„αž…αŸαž‰αž–αžΈαžŸαŸ’αžαžΆαž“αž—αžΆαž–αŸ” αž–αž½αž€αžœαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αžΊαž‘αžΆαž€αŸ‹αž‘αž„αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ–

  • αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž‘αŸ… /etc/init.d
  • αž”αž„αŸ’αž€αžΎαžαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž“αžΉαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ”

αžαŸ’αž‰αž»αŸ†β€‹αž˜αž·αž“β€‹αžƒαžΎαž‰β€‹αž…αŸ†αžŽαž»αž…β€‹αžŽαžΆβ€‹αž˜αž½αž™β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αžšαžŸαŸ‹β€‹αž“αŸ…β€‹αž›αžΎβ€‹αž–αž½αž€β€‹αž‚αŸβ€‹αž›αž˜αŸ’αž’αž·αžβ€‹αž‘αŸ αž’αŸ’αžœαžΈβ€‹αž‚αŸ’αžšαž”αŸ‹β€‹αž™αŸ‰αžΆαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž–αž·αž–αžŽαŸŒαž“αžΆβ€‹αž™αŸ‰αžΆαž„β€‹αž›αž˜αŸ’αž’αž·αžβ€‹αž“αŸ…β€‹αž›αžΎβ€‹αž’αŸŠαžΈαž“αž’αžΊαžŽαž·αžαŸ”

αž€αžΆαžšαžšαž€αžƒαžΎαž‰

αžαŸ’αž‰αž»αŸ†β€‹αžšαžΈαž€β€‹αžšαžΆαž™β€‹αžŽαžΆαžŸαŸ‹β€‹αžŠαŸ‚αž›β€‹αžαŸ’αž‰αž»αŸ†β€‹αž‘αž‘αž½αž›β€‹αž”αžΆαž“β€‹αž—αžΆαžšαž€αž·αž…αŸ’αž…β€‹αž“αŸαŸ‡αŸ” αž“αŸαŸ‡αž‡αžΆαž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžŠαŸ†αž”αžΌαž„αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ bot αž αžΎαž™αžαŸ’αž‰αž»αŸ†αžšαžΈαž€αžšαžΆαž™αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž‘αž‘αž½αž›αž”αžΆαž“αž…αŸ†αžŽαŸαŸ‡αžŠαžΉαž„αžαŸ’αž˜αžΈαž“αŸ…αž€αŸ’αž“αž»αž„ C# αž“αž·αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž›αžΈαž“αž»αž…αŸ”

αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Discord αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžŠαŸ‚αž›αž›αŸαž„αž αŸ’αž‚αŸαž˜ Wargaming αŸ”
αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžƒαŸ’αž›αžΆαŸ†αž„αžŠαŸ‚αž›αž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž› Discord bot αžŸαŸ’αžαž·αžαž“αŸ…αŸ”
αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αžƒαŸ’αž›αžΆαŸ†αž„ DSharpPlus αŸ”
αžŸαžΌαž˜αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›!

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹