Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ guild Π² Π΄ΠΈΡΠΊΠΎΡΠ΄Π΅
Discord ΡΠ΅ΡΠ²Π΅Ρ ΠΈ Π³ΠΈΠ»ΡΠ΄ΠΈΡ-ΡΠ°Ρ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π°
ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ. ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ, ΡΡΠΎ Ρ Π½Π°ΡΠ΅Π³ΠΎ ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° Π΅ΡΡΡ ΡΠ²ΠΎΠΉ Discord ΡΠ΅ΡΠ²Π΅Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π΄Π°ΡΡ Π²ΠΎΠΏΡΠΎΡΡ Π΄ΡΡΠ³ΠΈΠΌ ΠΈΠ³ΡΠΎΠΊΠ°ΠΌ, Π½Π°ΠΉΡΠΈ Π½ΠΎΠ²ΡΡ Π·Π½Π°ΠΊΠΎΠΌΡΡ , Π³ΠΈΠ»ΡΠ΄ΠΈΠΈ, ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΠΎΠ² ΠΈΠ³ΡΡ. Π’Π°ΠΊΠΆΠ΅ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π±ΡΠ»Π° ΡΠΎΠ·Π΄Π°Π½Π° Β«Π³ΠΈΠ»ΡΠ΄ΠΈΡ-ΡΠ°ΡΒ», ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π°ΠΌ Π²ΡΠ΅ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΡΠΌΠΎ Π² ΠΈΠ³ΡΠ΅.
ΠΠ΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π³ΠΈΠ»ΡΠ΄ΠΈΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΠ»Π°ΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ ΡΠ΅Π±Ρ ΠΏΠΎΠΊΠ°Π·Π°Π»Π°, ΡΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠ΅ΡΠ΅Π½ΠΎ Π΄Π°Π»Π΅Π΅ Π΅Ρ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ.
ΠΠΈΠ»ΡΠ΄ΠΈΡ ΡΠΎΠ·Π΄Π°Π½Π° Π½Π΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠ°ΡΡ ΠΊΡΡΠΏΠ½ΠΎΠΉ ΠΠ, Π΄ΠΎΠ±ΠΈΠ²Π°ΡΡΠ΅ΠΉΡΡ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ. ΠΠΎ ΡΡΡΠΈ, ΡΡΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ Π²Π½ΡΡΡΠΈΠΈΠ³ΡΠΎΠ²ΠΎΠΉ ΡΠ°Ρ, Π³Π΄Π΅ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΡΡ
ΠΈΠ³ΡΠΎΠΊΠΎΠ², Π½Π°Ρ
ΠΎΠ΄ΡΡΠΈΡ
ΡΡ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π² ΠΈΠ³ΡΠ΅, ΠΈ ΠΏΠΎΠΉΡΠΈ Ρ Π½ΠΈΠΌΠΈ ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ ΠΈΠ³ΡΠΎΠ²ΡΠΌ Π΄Π΅Π»Π°ΠΌ.
Π Π΅ΠΏΡΠ΅Π·Π΅Π½ΡΠ° Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΡΠ±ΠΎΡΠΎΠ², ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΡΡΠ² ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ (ΠΊΡΠΎΠΌΠ΅ ΠΊΠ°ΠΊ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΈ Π½Π΅ Π½Π°ΡΡΡΠ°ΡΡ Π±Π°Π½Π°Π»ΡΠ½ΡΡ
ΠΏΡΠ°Π²ΠΈΠ» Ρ
ΠΎΡΠΎΡΠ΅Π³ΠΎ ΡΠΎΠ½Π°) Π½Π΅Ρ.
ΠΡΡΠ³ΠΈΠ΅ Π³ΠΈΠ»ΡΠ΄ΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ½Π³ΠΎΠΌ Π² ΡΠ°ΡΠ΅ Π³ΠΈΠ»ΡΠ΄ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° (ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ Π½Π°Π΄ΠΎ ΡΠΏΠ°ΠΌΠΈΡΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°), ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΠ΅ΡΡΡ β Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π·Π΄Π΅ΡΡ Π½ΠΎΠ²ΡΡ Π»ΡΠ΄Π΅ΠΉ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ Π³ΠΈΠ»ΡΠ΄ΠΈΠΈ.
ΠΠΎΠ»ΡΡΠΈΠ»ΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π½ΠΎΠ²ΡΡ
Π΄ΡΡΠ·Π΅ΠΉ, ΡΠΎΠ²Π°ΡΠΈΡΠ΅ΠΉ ΠΈ ΡΠΎΠ³ΠΈΠ»ΡΠ΄ΠΈΠΉΡΠ΅Π².
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π³ΠΈΠ»ΡΠ΄ΠΈΡ, Π½Π°ΠΏΠΈΡΠΈΡΠ΅ Π½ΠΈΠΊ Π² Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π» Π² Π΄ΠΈΡΠΊΠΎΡΠ΄Π΅ (#community_guild) ΠΈ ΠΆΠ΄ΠΈΡΠ΅ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΡ Π² ΠΈΠ³ΡΠ΅.
Π Π΅ΡΠ΅ ΡΠ°Π· ΡΡΡΠ»ΠΊΠ° Π΄Π»Ρ Π²Ρ ΠΎΠ΄Π° Π½Π° Discord ΡΠ΅ΡΠ²Π΅Ρ β https://discord.gg/cAPSahg
ΠΡ ΠΈ Π½Π΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ ΠΏΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ Π² VK, Π³Π΄Π΅ Π²Π°ΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ²Π΅ΡΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎ ΠΈΠ³ΡΠ΅ ΠΈ Π³Π΄Π΅ Π΅ΡΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅ΠΌΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π΄ΡΡΠ·Π΅ΠΉ ΠΈ Π³ΠΈΠ»ΡΠ΄ΠΈΠΉ.
ΠΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅
ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ! ΠΠ΅Π΄Π°Π²Π½ΠΎ Ρ Π½Π°ΠΏΠΈΡΠ°Π» Discord Π±ΠΎΡΠ° Π΄Π»Ρ World of Warcraft Π³ΠΈΠ»ΡΠ΄ΠΈΠΈ. ΠΠ½ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ Π·Π°Π±ΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ± ΠΈΠ³ΡΠΎΠΊΠ°Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΈΠ³ΡΡ ΠΈ ΠΏΠΈΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Discord ΠΎ ΡΠΎΠΌ ΡΡΠΎ ΠΊ Π³ΠΈΠ»ΡΠ΄ΠΈΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΈΠ³ΡΠΎΠΊ ΠΈΠ»ΠΈ ΠΎ ΡΠΎΠΌ ΡΡΠΎ Π³ΠΈΠ»ΡΠ΄ΠΈΡ ΠΏΠΎΠΊΠΈΠ½ΡΠ» ΡΡΠ°ΡΡΠΉ ΠΈΠ³ΡΠΎΠΊ. ΠΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΌΡ ΠΏΡΠΎΠ·Π²Π°Π»ΠΈ ΡΡΠΎΠ³ΠΎ Π±ΠΎΡΠ° ΠΠ°ΡΡΠ°ΠΊ.
ΠΡ Π²Π°Ρ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π·Π½Π°Π½ΠΈΠΉ ΠΎΠ± ΠΈΠ³ΡΠ΅. Π― Π½Π°ΠΏΠΈΡΠ°Π» ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΡΠ°ΠΊ ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΡ ΠΈΠ³ΡΡ ΠΈ ΡΠ΄Π΅Π»Π°Π» Π·Π°Π³Π»ΡΡΠΊΡ Π΄Π»Ρ Π΄Π°Π½Π½ΡΡ ΠΎΠ± ΠΈΠ³ΡΠΎΠΊΠ°Ρ . ΠΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΡΡΠ΅ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ Π² Battle.net, ΡΠΎ Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°, ΠΎΡ Π²Π°Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Ρ ΠΎΡΡ Π±Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΎΠΏΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²Π΅Π± ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° ASP.NET ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠΏΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Docker.
ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Π½Π°ΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π».
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ web api ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠΌ /check. ΠΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΡΠΎΠΌΡ Π°Π΄ΡΠ΅ΡΡ Π±ΡΠ΄Π΅ΠΌ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΡΡΠΎΠΊΡ βHello!β Π² Discord ΡΠ°Ρ.
ΠΠ°ΡΡΠΈΠΌΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΡΠΎΡΡΠ°Π²Π΅ Π³ΠΈΠ»ΡΠ΄ΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³ΠΎΡΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈΠ»ΠΈ Π·Π°Π³Π»ΡΡΠΊΠΈ.
ΠΠ°ΡΡΠΈΠΌΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡ Π² ΠΊΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ³ΡΠΎΠΊΠΎΠ² ΡΡΠΎΠ±Ρ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠΈΡ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΡΠΏΠΈΡΠΊΠ°. ΠΠ±ΠΎ Π²ΡΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΈΡΠ°ΡΡ Π² Discord.
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ Dockerfile Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠΌ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° Ρ ΠΎΡΡΠΈΠ½Π³Π΅ Heroku.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.
Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠ±ΠΎΡΠΊΡ, Π·Π°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ² ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π² master
Π¨Π°Π³ 1. ΠΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² Discord
ΠΠ°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ASP.NET Core Web API ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ
ΠΠΎΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π² ΠΏΡΠ½ΠΊΡΠ΅ integrations Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π²Π°ΡΠ΅Π³ΠΎ Discord ΡΠ΅ΡΠ²Π΅ΡΠ°.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ webhook
ΠΠΎΠ±Π°Π²ΠΈΠΌ webhook Π² appsettings.json Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎΠ·ΠΆΠ΅ ΠΌΡ ΡΠ½Π΅ΡΠ΅ΠΌ Π΅Π³ΠΎ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Heroku. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠ΅ΠΉ Π² ASP Core ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ·ΡΡΠΈΡΠ΅ ΡΡΡ ΡΠ΅ΠΌΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ DiscordBroker, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Discord. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ Services ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ ΡΡΠ΄Π° Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ, ΡΡΠ° ΠΏΠ°ΠΏΠΊΠ° Π½Π°ΠΌ Π΅ΡΠ΅ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ.
ΠΠΎ ΡΡΡΠΈ ΡΡΠΎΡ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ Π΄Π΅Π»Π°Π΅Ρ post Π·Π°ΠΏΡΠΎΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ ΠΈΠ· webhook ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅Π»Π΅ Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. IConfiguration ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π½Π°ΠΌ Π΄ΠΎΡΡΠ°ΡΡ webhook ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΠΎΠ², Π° IHttpClientFactory ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ HttpClient.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ ΠΈΠ·Π²Π»Π΅ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΡΡΠΎΠ±Ρ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π·Π°Π³Π»ΡΡΠΊΡ ΠΏΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ. ΠΠ΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄Π°Π»Π΅Π΅.
ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΡΡΠΎ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² Startup.
Π ΡΠ°ΠΊΠΆΠ΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ HttpClient, Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ IHttpClientFactory.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½ΠΎΠ²ΡΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅.
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ, Π·Π°ΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ /check Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ ΠΈ ΡΠ±Π΅Π΄ΠΈΡΠ΅ΡΡ ΡΡΠΎ Π² Discord ΠΏΡΠΈΡΠ»ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅.
Π¨Π°Π³ 2. ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Battle.net
Π£ Π½Π°Ρ Π΅ΡΡΡ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ°: ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π½Π°ΡΡΠΎΡΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² battle.net ΠΈΠ»ΠΈ ΠΈΠ· ΠΌΠΎΠ΅ΠΉ Π·Π°Π³Π»ΡΡΠΊΠΈ. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π½Π΅Ρ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ° Π² battle.net, ΡΠΎ ΠΏΡΠΎΠΏΡΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΡΡΠΎΠΊ ΡΡΠ°ΡΡΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π³Π΄Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π·Π°Π³Π»ΡΡΠΊΠΈ.
ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅
ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π·Π°ΠΉΡΠΈ Π½Π° https://develop.battle.net/ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°ΠΌ Π΄Π²Π΅ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΡΠΎΠΊΠΈ BattleNetId ΠΈ BattleNetSecret. ΠΠ½ΠΈ Π±ΡΠ΄ΡΡ Π½ΡΠΆΠ½Ρ Π½Π°ΠΌ ΡΡΠΎΠ±Ρ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ Π² api ΠΏΠ΅ΡΠ΅Π΄ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΈΡ Π² appsettings.
ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ArgentPonyWarcraftClient.
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ BattleNetApiClient Π² ΠΏΠ°ΠΏΠΊΠ΅ Services.
Π ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° WarcraftClient.
ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ°Π½Π΅Π΅. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ± ΠΈΠ³ΡΠΎΠΊΠ°Ρ
.
ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π² appsettings ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π²Π΅ Π½ΠΎΠ²ΡΡ Π·Π°ΠΏΠΈΡΠΈ RealmName ΠΈ GuildName. RealmName ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈΠ³ΡΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠΈΡΠ°, Π° GuildName ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π³ΠΈΠ»ΡΠ΄ΠΈΠΈ. ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΡΠΈ Π·Π°ΠΏΡΠΎΡΠ΅.
Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ GetGuildMembers ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΎΡΡΠ°Π² Π³ΠΈΠ»ΡΠ΄ΠΈΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ WowCharacterToken ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΠ³ΡΠΎΠΊΠ΅.
ΠΠ»Π°ΡΡ WowCharacterToken ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΏΠ°ΠΏΠΊΡ Models.
ΠΠ΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ BattleNetApiClient Π² Startup.
ΠΠ΅ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π·Π°Π³Π»ΡΡΠΊΠΈ
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»Ρ WowCharacterToken ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΠΌ Π΅Π΅ Π² ΠΏΠ°ΠΏΠΊΡ Models. ΠΠ½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΠ³ΡΠΎΠΊΠ΅.
ΠΠ°Π»ΡΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π²ΠΎΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡ
ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π°ΡΠΈΡΡΠΉ Π² Π½Π΅Π³ΠΎ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ³ΡΠΎΠΊΠΎΠ². ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΌΡ Π²Π΅ΡΠ½Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΈΡΠΎΠΊ, ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ. ΠΡΠΎ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΌ ΡΡΠΎ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ api. ΠΡΠΎΠΉ Π·Π°Π³Π»ΡΡΠΊΠΈ Ρ Π²Π°ΡΠΈΡ ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ.
Π‘Π΄Π΅Π»Π°ΠΉΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ Π²ΡΠ΅ ΡΡΠΎ ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ Π² Startup.
ΠΡΠ²Π΅Π΄Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² Discord
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ BattleNetApiClient, ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ ΡΡΠΎΠ±Ρ Π²ΡΠ²Π΅ΡΡΠΈ ΠΊΠΎΠ»-Π²ΠΎ ΠΈΠ³ΡΠΎΠΊΠΎΠ² Π² Discord.
Π¨Π°Π³ 3. ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ Π½ΠΎΠ²ΡΡ ΠΈ ΡΡΠ΅Π΄ΡΠΈΡ ΠΈΠ³ΡΠΎΠΊΠΎΠ²
ΠΡΠΆΠ½ΠΎ Π½Π°ΡΡΠΈΡΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ³ΡΠΎΠΊΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠΏΠ°Π»ΠΈ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°Ρ ΠΊ api. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π² InMemory ΠΊΡΡΠ΅ (Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ) ΠΈΠ»ΠΈ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
ΠΡΠ»ΠΈ Π·Π°ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π² InMemory ΠΊΡΡΠ΅, ΡΠΎ ΠΌΡ ΠΏΠΎΡΠ΅ΡΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Redis ΠΊΠ°ΠΊ Π°Π΄Π΄ΠΎΠ½ Π² Heroku ΠΈ Π±ΡΠ΄Π΅ΠΌ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ΄Π°.
Π ΠΏΠΎΠΊΠ° ΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠΌ InMemory ΠΊΡΡ Π² Startup.
GuildRepository Π½ΡΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ Singletone Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, ΡΡΠΎΠ±Ρ ΠΊΡΡ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠΎΠ·Π΄Π°Π²Π°Π»ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ Π·Π°ΠΏΡΠΎΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ³ΡΠΎΠΊΠΎΠ² Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΠΌ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ Report. ΠΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΏΠ°ΠΏΠΊΡ Models.
ΠΡΠΈΠΌΠ΅Π½ΠΈΠΌ GuildService Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅.
Π’Π΅ΠΏΠ΅ΡΡ ΠΎΡΠΏΡΠ°Π²ΠΈΠΌ Π² Discord ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ³ΡΠΎΠΊΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΠΈΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠΈΠ½ΡΠ»ΠΈ Π³ΠΈΠ»ΡΠ΄ΠΈΡ.
ΠΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² GuildService Π² ΠΊΠΎΠ½Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Check. ΠΠΈΡΠ°ΡΡ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΡ Π² ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ΅ Π½Π΅ ΡΡΠΎΠΈΡ, Ρ Π½Π΅Π³ΠΎ Π΄ΡΡΠ³ΠΎΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ ΡΠ°ΠΌ ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Discord ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»ΠΎ GuildService.
ΠΠΎΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± ΠΈΠ³ΡΠΎΠΊΠ΅. ΠΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΅ΡΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ ArgentPonyWarcraftClient
Π― ΡΠ΅ΡΠΈΠ» Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π² ΡΡΠ°ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΊΠΎΠ΄Π° Π² BattleNetApiClient, ΡΡΠΎΠ±Ρ ΡΡΠ°ΡΡΡ Π½Π΅ ΡΠ°Π·ΡΠΎΡΠ»Π°ΡΡ Π΄ΠΎ Π±Π΅Π·ΡΠΌΠ½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ².
Unit ΡΠ΅ΡΡΡ
Π£ Π½Π°Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΊΠ»Π°ΡΡ GuildService Ρ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΈ ΡΠ°ΡΡΠΈΡΡΡΡΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ. Π‘ΡΠΎΠΈΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π° Π½Π΅Π³ΠΎ ΡΠ΅ΡΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π·Π°Π³Π»ΡΡΠΊΠΈ Π΄Π»Ρ BattleNetApiClient, GuildRepository ΠΈ DiscordBroker. Π― ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΈΠ» ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π΄Π»Ρ ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡ ΡΠ΅ΠΉΠΊΠΈ.
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π΄Π»Ρ Unit ΡΠ΅ΡΡΠΎΠ². ΠΠ°Π²Π΅Π΄ΠΈΡΠ΅ Π² Π½Π΅ΠΌ ΠΏΠ°ΠΏΠΊΡ Fakes ΠΈ ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΈ ΡΠ΅ΠΉΠΊΠ°.
ΠΡΠΈ ΡΠ΅ΠΉΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°ΡΠ°Π½Π΅Π΅ Π·Π°Π΄Π°ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ»Ρ ΡΡΠΈΡ ΠΆΠ΅ ΡΠ΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Moq. ΠΠΎ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΌΠΎΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ΅ΠΉΠΊΠΎΠ².
ΠΠ΅ΡΠ²ΡΠΉ ΡΠ΅ΡΡ Π½Π° GuildService Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΡ, ΡΠ΅ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΎ ΠΌΡ ΡΠΎΡ ΡΠ°Π½ΠΈΠΌ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ³ΡΠΎΠΊΠΎΠ², Π΅ΡΠ»ΠΈ ΠΊΡΡ ΠΏΡΡΡ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ΅ΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Should, Be. ΠΡΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ FluentAssertions, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ Π½Π°ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Assertion Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΡΠΌ.
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ Π±Π°Π·Π° Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ². Π― ΠΏΠΎΠΊΠ°Π·Π°Π» Π²Π°ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΈΠ΄Π΅Ρ, Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΎΠ² ΠΎΡΡΠ°Π²Π»ΡΡ Π²Π°ΠΌ.
ΠΠ»Π°Π²Π½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΏΡΠΎΠ΅ΠΊΡΠ° Π³ΠΎΡΠΎΠ². Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ ΠΎ Π΅Π³ΠΎ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ.
Π¨Π°Π³ 4. ΠΡΠΈΠ²Π΅Ρ Docker ΠΈ Heroku!
Π§ΡΠΎΠ±Ρ ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Π² Docker Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π² ΠΊΠΎΡΠ½Π΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Dockerfile ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ
peon.dll ΡΡΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΅Π³ΠΎ Solution. Peon ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠ°ΠΊ Π±Π°ΡΡΠ°ΠΊ.
Π ΡΠΎΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Docker ΠΈ Heroku ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π·Π΄Π΅ΡΡ. ΠΠΎ Ρ Π²ΡΠ΅ ΠΆΠ΅ ΠΎΠΏΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π°ΠΊΠΊΠ°ΡΠ½Ρ Π² Heroku, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Heroku CLI.
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ Π² heroku ΠΈ ΡΠ²ΡΠΆΠΈΡΠ΅ Π΅Π³ΠΎ Ρ Π²Π°ΡΠΈΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅ΠΌ.
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» heroku.yml Π² ΠΏΠ°ΠΏΠΊΠ΅ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ. Π£ Π½Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅:
ΠΠ°Π»ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΡΠ΅ΡΠ΅Π΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄:
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Heroku, Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Redis Π΄Π»Ρ ΠΊΡΡΠ°. ΠΠ°ΠΊ Π²Ρ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ InMemory ΠΊΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΡΠ΅Π·Π°ΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ Heroku ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ Π°Π΄Π΄ΠΎΠ½ RedisCloud.
Π‘ΡΡΠΎΠΊΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Redis ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ REDISCLOUD_URL. ΠΠ½Π° Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½ΠΎ Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ Heroku.
ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Redis ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π»Ρ IDistributedCache Π² Startup.
Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ REDISCLOUD_URL ΠΈΠ· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ Π°Π΄ΡΠ΅Ρ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ° RedisUtils. ΠΠ³ΠΎ Π½Π°ΠΏΠΈΡΠ°Π» Ρ ΡΠ°ΠΌ:
ΠΠ° ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΎΡΡΠΎΠΉ Unit ΡΠ΅ΡΡ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΡΡΠΎ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ, GuildRepository Π±ΡΠ΄Π΅Ρ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΊΡΡ Π½Π΅ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ, Π° Π² Redis. ΠΠ°ΠΌ Π΄Π°ΠΆΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ ΠΌΠ΅Π½ΡΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΏΡΠ±Π»ΠΈΠΊΡΠΉΡΠ΅ Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π¨Π°Π³ 5. Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΡΡΠ°Π²Π° Π³ΠΈΠ»ΡΠ΄ΠΈΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ»Π° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 15 ΠΌΠΈΠ½ΡΡ.
ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ:
Π¨Π°Π³ 6. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ±ΠΎΡΠΊΠ°, ΠΏΡΠΎΠ³ΠΎΠ½ ΡΠ΅ΡΡΠΎΠ² ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π·Π°ΠΉΠ΄ΠΈΡΠ΅ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Heroku.
Π’Π°ΠΌ Π΅ΡΡΡ ΠΏΡΠ½ΠΊΡ Deploy. ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΠ΅ ΡΠ°ΠΌ ΡΠ²ΠΎΠΉ Github Π°ΠΊΠΊΠ°ΡΠ½Ρ ΠΈ Π²ΠΊΠ»ΡΡΠΈΡΠ΅ Automatic deploys ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π² master.
ΠΠΎΡΡΠ°Π²ΡΡΠ΅ Π³Π°Π»ΠΎΡΠΊΡ Ρ ΠΏΡΠ½ΠΊΡΠ° Wait for CI to pass before deploy. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎΠ±Ρ Heroku Π΄ΠΎΠΆΠΈΠ΄Π°Π»ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΠΏΡΠΎΠ³ΠΎΠ½ΠΊΠΈ ΡΠ΅ΡΡΠΎΠ². ΠΡΠ»ΠΈ ΡΠ΅ΡΡΡ ΠΏΠΎΠΊΡΠ°ΡΠ½Π΅ΡΡ, ΡΠΎ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π½Π΅ ΡΠ»ΡΡΠΈΡΡΡ.
Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ±ΠΎΡΠΊΡ ΠΈ ΠΏΡΠΎΠ³ΠΎΠ½ΠΊΡ ΡΠ΅ΡΡΠΎΠ² Π² Github Actions.
ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² ΠΏΡΠ½ΠΊΡ Actions. Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ workflow Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠ°Π±Π»ΠΎΠ½Π° .NET
Π ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΏΠΎΡΠ²ΠΈΡΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» dotnet.yml. ΠΠ½ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ.
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΏΠΎ Π΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ, Π·Π°Π΄Π°Π½ΠΈΠ΅ build Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΡΡΠ° Π² Π²Π΅ΡΠΊΡ master.
Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ Π½Π°Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ. ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠΈΡΠ°Π΅ΡΠ΅ΡΡ Π² ΡΠΎ ΡΡΠΎ ΡΠ°ΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠΎ ΡΠ°ΠΌ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π·Π°ΠΏΡΡΠΊ ΠΊΠΎΠΌΠ°Π½Π΄ dotnet build ΠΈ dotnet test.
ΠΠ΅Π½ΡΡΡ Π² ΡΡΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ, Π²ΡΠ΅ ΡΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈ.
ΠΠ°ΠΏΡΡΡΡΠ΅ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π² master ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΡΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ. ΠΡΡΠ°ΡΠΈ, ΠΎΠ½ΠΎ ΡΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ workflow.
ΠΠ°Π΄Π΅ΡΡΡ Π΄Π°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΠΏΠΎΠ΄ΠΊΠΈΠ½ΡΠ»Π° Π²Π°ΠΌ ΠΏΠ°ΡΡ Π½ΠΎΠ²ΡΡ ΠΈΠ΄Π΅ΠΉ ΠΈ ΡΠ΅ΠΌ Π΄Π»Ρ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅. Π£Π΄Π°ΡΠΈ Π²Π°ΠΌ Π² Π²Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ !
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°ΡΠ΄ Π² Π΄ΠΈΡΠΊΠΎΡΠ΄ Π±ΠΎΡΠ΅?
Π¨Π°ΡΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅) β ΡΡΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΡΠ°Π±Π»ΠΈΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΡΠ°Π½ΡΡΡΡ ΡΠ°Π·Π΄Π΅Π»ΡΠ½ΠΎ, Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π² ΡΠ΅ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ , ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΠΈ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ·Π΅Π» ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π±Π°Π· Π΄Π°Π½Π½ΡΡ .
As bots grow and are added to an increasing number of guilds, some developers may find it necessary to break or split portions of their bots operations into separate logical processes. As such, Discord gateways implement a method of user-controlled guild sharding which allows for splitting events across a number of gateway connections. Guild sharding is entirely user controlled, and requires no state-sharing between separate connections to operate
Π ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π±ΠΎΡΡ ΡΠ°ΡΡΡΡ, ΠΈ ΡΠ°ΡΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ Π½ΡΠΆΠ½ΡΠΌ ΡΠ°Π·Π±Π°Π²Π»ΡΡΡ ΠΈΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π±ΠΎΡΠΎΠ² Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠΎΡΡΠΎΠΌΡ, Discord gateway (ΡΠΎ, ΠΊ ΡΠ΅ΠΌΡ Π±ΠΎΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅ΡΠ΅Π· websockets Π΄Π»Ρ ΠΏΡΠΎΡΠ»ΡΡΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΡΠ°ΡΡΡΠ°) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΊ gateway. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»ΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΌΠ΅ΠΆ ΡΠ°Π·Π½ΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
Class DiscordGuild
Represents a Discord guild.
Inheritance
Inherited Members
Namespace: DSharpPlus.Entities
Assembly: cs.temp.dll.dll
Syntax
Properties
AfkChannel
Gets the guild’s AFK voice channel.
Declaration
Property Value
AfkTimeout
Gets the guild’s AFK timeout.
Declaration
Property Value
ApplicationId
Gets the application id of this guild if it is bot created.
Declaration
Property Value
ApproximateMemberCount
Gets the approximate number of members in this guild, when using GetGuildAsync(UInt64, Nullable ) and having withCounts set to true.
Declaration
Property Value
ApproximatePresenceCount
Gets the approximate number of presences in this guild, when using GetGuildAsync(UInt64, Nullable ) and having withCounts set to true.
Declaration
Property Value
Banner
Gets this guild’s banner hash, when applicable.
Declaration
Property Value
BannerUrl
Gets this guild’s banner in url form.
Declaration
Property Value
Channels
Gets a dictionary of all the channels associated with this guild. The dictionary’s key is the channel ID.
Declaration
Property Value
CurrentMember
Gets the guild member for current user.
Declaration
Property Value
DefaultMessageNotifications
Gets the guild’s default notification settings.
Declaration
Property Value
Description
Gets the guild description, when applicable.
Declaration
Property Value
DiscoverySplashHash
Gets the guild discovery splash’s hash.
Declaration
Property Value
DiscoverySplashUrl
Gets the guild discovery splash’s url.
Declaration
Property Value
Emojis
Gets a collection of this guild’s emojis.
Declaration
Property Value
EveryoneRole
Gets the @everyone role for this guild.
Declaration
Property Value
ExplicitContentFilter
Gets the guild’s explicit content filter settings.
Declaration
Property Value
Features
Gets a collection of this guild’s features.
Declaration
Property Value
IconHash
Gets the guild icon’s hash.
Declaration
Property Value
IconUrl
Gets the guild icon’s url.
Declaration
Property Value
IsLarge
Gets whether this guild is considered to be a large guild.
Declaration
Property Value
IsNSFW
Gets whether this guild is designated as NSFW.
Declaration
Property Value
IsOwner
Gets whether the current user is the guild’s owner.
Declaration
Property Value
IsUnavailable
Gets whether this guild is unavailable.
Declaration
Property Value
JoinedAt
Gets this guild’s join date.
Declaration
Property Value
MaxMembers
Gets the maximum amount of members allowed for this guild.
Declaration
Property Value
MaxPresences
Gets the maximum amount of presences allowed for this guild.
Declaration
Property Value
MaxVideoChannelUsers
Gets the maximum amount of users allowed per video channel.
Declaration
Property Value
MemberCount
Gets the total number of members in this guild.
Declaration
Property Value
Members
Gets a dictionary of all the members that belong to this guild. The dictionary’s key is the member ID.
Declaration
Property Value
MfaLevel
Gets the required multi-factor authentication level for this guild.
Declaration
Property Value
Gets the guild’s name.
Declaration
Property Value
NsfwLevel
Gets the guild’s nsfw level.
Declaration
Property Value
Owner
Gets the guild’s owner.
Declaration
Property Value
OwnerId
Gets the ID of the guild’s owner.
Declaration
Property Value
Permissions
Gets permissions for the user in the guild (does not include channel overrides)
Declaration
Property Value
PreferredLocale
Gets the preferred locale of this guild.
This is used for server discovery and notices from Discord. Defaults to en-US.
Declaration
Property Value
PremiumSubscriptionCount
Gets the amount of members that boosted this guild.
Declaration
Property Value
PremiumTier
Gets this guild’s premium tier (Nitro boosting).
Declaration
Property Value
PublicUpdatesChannel
Gets the public updates channel (where admins and moderators receive messages from Discord) for this guild.
This is only available if the guild is considered «discoverable».
Declaration
Property Value
Roles
Gets a collection of this guild’s roles.
Declaration
Property Value
RulesChannel
Gets the rules channel for this guild.
This is only available if the guild is considered «discoverable».
Declaration
Property Value
SplashHash
Gets the guild splash’s hash.
Declaration
Property Value
SplashUrl
Gets the guild splash’s url.
Declaration
Property Value
Stickers
Gets a collection of this guild’s stickers.
Declaration
Property Value
SystemChannel
Gets the channel where system messages (such as boost and welcome messages) are sent.
Declaration
Property Value
SystemChannelFlags
Gets the settings for this guild’s system channel.
Declaration
Property Value
VanityUrlCode
Gets the vanity URL code for this guild, when applicable.
Declaration
Property Value
VerificationLevel
Gets the guild’s verification level.
Declaration
Property Value
VoiceRegion
Gets the guild’s voice region.
Declaration
Property Value
VoiceStates
Gets a dictionary of all the voice states for this guilds. The key for this dictionary is the ID of the user the voice state corresponds to.
Declaration
Property Value
WidgetChannel
Gets the widget channel for this guild.
Declaration
Property Value
WidgetEnabled
Gets whether this guild’s widget is enabled.
Declaration
Property Value
Methods
Adds a new member to this guild
Declaration
Parameters
User’s access token (OAuth2)
whether this user has to be muted
whether this user has to be deafened
Returns
Exceptions
Thrown when the client does not have the CreateInstantInvite permission.
Thrown when the user or access_token is not found.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
AttachUserIntegrationAsync(DiscordIntegration)
Attaches an integration from current user to this guild.
Declaration
Parameters
Integration to attach.
Returns
The integration after being attached to the guild.
Exceptions
Thrown when the client does not have the ManageGuild permission.
Thrown when the guild does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
BanMemberAsync(DiscordMember, Int32, String)
Bans a specified member from this guild.
Declaration
Parameters
How many days to remove messages from.
Reason for audit logs.
Returns
Exceptions
Thrown when the client does not have the BanMembers permission.
Thrown when the member does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
BanMemberAsync(UInt64, Int32, String)
Bans a specified user by ID. This doesn’t require the user to be in this guild.
Declaration
Parameters
ID of the user to ban.
How many days to remove messages from.
Reason for audit logs.
Returns
Exceptions
Thrown when the client does not have the BanMembers permission.
Thrown when the member does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
BatchEditApplicationCommandPermissionsAsync(IEnumerable )
Batch edits permissions for a slash command in this guild.
Declaration
Parameters
The list of permissions to use.
Returns
A list of edited permissions.
BulkOverwriteApplicationCommandsAsync(IEnumerable )
Overwrites the existing slash commands in this guild. New commands are automatically created and missing commands are automatically delete
Declaration
Parameters
The list of commands to overwrite with.
Returns
The list of guild commands
CreateApplicationCommandAsync(DiscordApplicationCommand)
Creates or overwrites a slash command in this guild.
Declaration
Parameters
The command to create.
Returns
The created command.
Creates a new channel in this guild.
Declaration
Parameters
Name of the new channel.
Type of the new channel.
Category to put this channel in.
Topic of the channel.
Bitrate of the channel. Applies to voice only.
Maximum number of users in the channel. Applies to voice only.
Permission overwrites for this channel.
Whether the channel is to be flagged as not safe for work. Applies to text only.
Slow mode timeout for users.
Video quality mode of the channel. Applies to voice only.
Reason for audit logs.
Returns
The newly-created channel.
Exceptions
Thrown when the client does not have the ManageChannels permission.
Thrown when the guild does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
Creates a new channel category in this guild.
Declaration
Parameters
Name of the new category.
Permission overwrites for this category.
Reason for audit logs.
Returns
The newly-created channel category.
Exceptions
Thrown when the client does not have the ManageChannels permission.
Thrown when the guild does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
Creates a new custom emoji for this guild.
Declaration
Parameters
Name of the new emoji.
Image to use as the emoji.
Roles for which the emoji will be available. This works only if your application is whitelisted as integration.
Reason for audit log.
Returns
The newly-created emoji.
Exceptions
Thrown when the client does not have the ManageEmojis permission.
Thrown when Discord is unable to process the request.
CreateRoleAsync(String, Nullable
Creates a new role in this guild.
Declaration
Parameters
Permissions for the role.
Color for the role.
Whether the role is to be hoisted.
Whether the role is to be mentionable.
Reason for audit logs.
Returns
The newly-created role.
Exceptions
Thrown when the client does not have the ManageRoles permission.
Thrown when Discord is unable to process the request.
CreateStickerAsync(String, String, String, Stream, StickerFormat)
Creates a sticker in this guild.
Declaration
Parameters
The name of the sticker.
The description of the sticker.
The tags of the sticker.
The image content of the sticker.
The image format of the sticker.
Returns
CreateTemplateAsync(String, String)
Creates a guild template.
Declaration
Parameters
Name of the template.
Description of the template.
Returns
The template created.
Exceptions
Throws when a template already exists for the guild or a null parameter is provided for the name.
Throws when the client does not have the ManageGuild permission.
Thrown when Discord is unable to process the request.
Creates a new text channel in this guild.
Declaration
Parameters
Name of the new channel.
Category to put this channel in.
Topic of the channel.
Permission overwrites for this channel.
Whether the channel is to be flagged as not safe for work.
Slow mode timeout for users.
Reason for audit logs.
Returns
The newly-created channel.
Exceptions
Thrown when the client does not have the ManageChannels permission.
Thrown when the guild does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
Creates a new voice channel in this guild.
Declaration
Parameters
Name of the new channel.
Category to put this channel in.
Bitrate of the channel.
Maximum number of users in the channel.
Permission overwrites for this channel.
Video quality mode of the channel.
Reason for audit logs.
Returns
The newly-created channel.
Exceptions
Thrown when the client does not have the ManageChannels permission.
Thrown when the guild does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
DeleteAllChannelsAsync()
Deletes all channels in this guild.
Note that this is irreversible. Use carefully!
Declaration
Returns
DeleteAsync()
Deletes this guild. Requires the caller to be the owner of the guild.
Declaration
Returns
Exceptions
Thrown when the client is not the owner of the guild.
Thrown when Discord is unable to process the request.
DeleteEmojiAsync(DiscordGuildEmoji, String)
Deletes this guild’s custom emoji.
Declaration
Parameters
Reason for audit log.
Returns
Exceptions
Thrown when the client does not have the ManageEmojis permission.
Thrown when Discord is unable to process the request.
DeleteIntegrationAsync(DiscordIntegration)
Removes an integration from this guild.
Declaration
Parameters
Integration to remove.
Returns
Exceptions
Thrown when the client does not have the ManageGuild permission.
Thrown when the guild does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
DeleteStickerAsync(UInt64)
Declaration
Parameters
Returns
DeleteTemplateAsync(String)
Deletes the template.
Declaration
Parameters
The code of the template to delete.
Returns
The deleted template.
Exceptions
Throws when the template for the code cannot be found
Throws when the client does not have the ManageGuild permission.
Thrown when Discord is unable to process the request.
EditApplicationCommandAsync(UInt64, Action)
Edits a slash command in this guild.
Declaration
Parameters
The id of the command to edit.
Returns
EditApplicationCommandPermissionsAsync(DiscordApplicationCommand, IEnumerable )
Edits permissions for a slash command in this guild.
Declaration
Parameters
The command to edit permissions for.
The list of permissions to use.
Returns
The edited permissions.
Equals(DiscordGuild)
Checks whether this DiscordGuild is equal to another DiscordGuild.
Declaration
Parameters
Returns
Whether the DiscordGuild is equal to this DiscordGuild.
Equals(Object)
Checks whether this DiscordGuild is equal to another object.
Declaration
Parameters
Object to compare to.
Returns
Whether the object is equal to this DiscordGuild.
Overrides
GetAllMembersAsync()
Retrieves a full list of members from Discord. This method will bypass cache.
Declaration
Returns
A collection of all members in this guild.
Exceptions
Thrown when Discord is unable to process the request.
GetApplicationCommandPermissionsAsync(DiscordApplicationCommand)
Gets permissions for a slash command in this guild.
Declaration
Parameters
The command to get them for.
Returns
GetApplicationCommandsAsync()
Gets all the slash commands in this guild.
Declaration
Returns
A list of slash commands in this guild.
GetApplicationCommandsPermissionsAsync()
Gets all slash command permissions in this guild.
Declaration
Returns
A list of permissions.
Gets audit log entries for this guild.
Declaration
Parameters
Maximum number of entries to fetch.
Filter by member responsible.
Filter by action type.
Returns
A collection of requested audit log entries.
Exceptions
Thrown when the client does not have the ViewAuditLog permission.
Thrown when Discord is unable to process the request.
GetBanAsync(DiscordUser)
Gets a ban for a specific user.
Declaration
Parameters
The user to get the ban for.
Returns
The requested ban object.
GetBanAsync(UInt64)
Gets a ban for a specific user.
Declaration
Parameters
The Id of the user to get the ban for.
Returns
The requested ban object.
GetBansAsync()
Gets the bans for this guild.
Declaration
Returns
Collection of bans in this guild.
Exceptions
Thrown when the client does not have the BanMembers permission.
Thrown when Discord is unable to process the request.
GetChannel(UInt64)
Gets a channel from this guild by its ID.
Declaration
Parameters
ID of the channel to get.
Returns
Exceptions
Thrown when Discord is unable to process the request.
GetChannelsAsync()
Gets all the channels this guild has.
Declaration
Returns
A collection of this guild’s channels.
Exceptions
Thrown when Discord is unable to process the request.
GetDefaultChannel()
Gets the default channel for this guild.
Default channel is the first channel current member can see.
Declaration
Returns
This member’s default guild.
Exceptions
Thrown when Discord is unable to process the request.
GetEmojiAsync(UInt64)
Gets this guild’s specified custom emoji.
Declaration
Parameters
ID of the emoji to get.
Returns
The requested custom emoji.
Exceptions
Thrown when Discord is unable to process the request.
GetEmojisAsync()
Gets all of this guild’s custom emojis.
Declaration
Returns
All of this guild’s custom emojis.
Exceptions
Thrown when Discord is unable to process the request.
GetHashCode()
Gets the hash code for this DiscordGuild.
Declaration
Returns
The hash code for this DiscordGuild.
Overrides
GetIntegrationsAsync()
Gets integrations attached to this guild.
Declaration
Returns
Collection of integrations attached to this guild.
Exceptions
Thrown when the client does not have the ManageGuild permission.
Thrown when the guild does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
GetInvite(String)
Gets an invite from this guild from an invite code.
Declaration
Parameters
Returns
An invite, or null if not in cache.
GetInvitesAsync()
Gets all the invites created for all the channels in this guild.
Declaration
Returns
A collection of invites.
Exceptions
Thrown when Discord is unable to process the request.
GetMemberAsync(UInt64)
Gets a member of this guild by their user ID.
Declaration
Parameters
ID of the member to get.
Returns
The requested member.
Exceptions
Thrown when Discord is unable to process the request.
GetMembershipScreeningFormAsync()
Gets this guild’s membership screening form.
Declaration
Returns
This guild’s membership screening form.
Exceptions
Thrown when Discord is unable to process the request.
GetPruneCountAsync(Int32, IEnumerable )
Estimates the number of users to be pruned.
Declaration
Parameters
Minimum number of inactivity days required for users to be pruned. Defaults to 7.
The roles to be included in the prune.
Returns
Number of users that will be pruned.
Exceptions
Thrown when the client does not have the KickMembers permission.
Thrown when the guild does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
GetRole(UInt64)
Gets a role from this guild by its ID.
Declaration
Parameters
ID of the role to get.
Returns
Exceptions
Thrown when Discord is unable to process the request.
GetStickerAsync(UInt64)
Gets a sticker from this guild.
Declaration
Parameters
The id of the sticker.
Returns
GetStickersAsync()
Gets a list of stickers from this guild.
Declaration
Returns
GetTemplatesAsync()
Gets all of this guild’s templates.
Declaration
Returns
All of the guild’s templates.
Exceptions
Throws when the client does not have the ManageGuild permission.
Thrown when Discord is unable to process the request.
GetVanityInviteAsync()
Gets the vanity invite for this guild.
Declaration
Returns
A partial vanity invite.
Exceptions
Thrown when the client does not have the ManageGuild permission.
Thrown when Discord is unable to process the request.
GetWebhooksAsync()
Gets all the webhooks created for all the channels in this guild.
Declaration
Returns
A collection of webhooks this guild has.
Exceptions
Thrown when the client does not have the ManageWebhooks permission.
Thrown when Discord is unable to process the request.
GetWelcomeScreenAsync()
Gets this guild’s welcome screen.
Declaration
Returns
This guild’s welcome screen object.
Exceptions
Thrown when Discord is unable to process the request.
GetWidgetAsync()
Gets the guild’s widget
Declaration
Returns
GetWidgetImage(WidgetType)
Gets this guild’s widget image.
Declaration
Parameters
The format of the widget.
Returns
The URL of the widget image.
GetWidgetSettingsAsync()
Gets the guild’s widget settings
Declaration
Returns
The guild’s widget settings
LeaveAsync()
Declaration
Returns
Exceptions
Thrown when Discord is unable to process the request.
ListVoiceRegionsAsync()
Gets the voice regions for this guild.
Declaration
Returns
Voice regions available for this guild.
Exceptions
Thrown when Discord is unable to process the request.
ModifyAsync(Action )
Modifies this guild.
Declaration
Parameters
Action to perform on this guild..
Returns
The modified guild object.
Exceptions
Thrown when the client does not have the ManageGuild permission.
Thrown when the guild does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
Modifies a this guild’s custom emoji.
Declaration
Parameters
New name for the emoji.
Roles for which the emoji will be available. This works only if your application is whitelisted as integration.
Reason for audit log.
Returns
The modified emoji.
Exceptions
Thrown when the client does not have the ManageEmojis permission.
Thrown when Discord is unable to process the request.
ModifyIntegrationAsync(DiscordIntegration, Int32, Int32, Boolean)
Modifies an integration in this guild.
Declaration
Parameters
Integration to modify.
Number of days after which the integration expires.
Length of grace period which allows for renewing the integration.
Whether emotes should be synced from this integration.
Returns
The modified integration.
Exceptions
Thrown when the client does not have the ManageGuild permission.
Thrown when the guild does not exist.
Thrown when an invalid parameter was provided.
Thrown when Discord is unable to process the request.
ModifyMembershipScreeningFormAsync(Action )
Modifies this guild’s membership screening form.
Declaration
Parameters
Returns
The modified screening form.
Exceptions
Thrown when the client doesn’t have the ManageGuild permission, or community is not enabled on this guild.
Thrown when Discord is unable to process the request.
ModifyStickerAsync(UInt64, Action )
Declaration
Parameters
Type | Name | Description |
---|---|---|
System.UInt64 | stickerId | |
Action StickerEditModel > | action |
Returns
ModifyTemplateAsync(String, String, String)
Modifies the template’s metadata.
Declaration
Parameters
The template’s code.
Name of the template.
Description of the template.
Returns
The template modified.
Exceptions
Throws when the template for the code cannot be found
Throws when the client does not have the ManageGuild permission.
Thrown when Discord is unable to process the request.
ModifyWelcomeScreenAsync(Action )
Modifies this guild’s welcome screen.
Declaration
Parameters
Returns
The modified welcome screen.
Exceptions
Thrown when the client doesn’t have the ManageGuild permission, or community is not enabled on this guild.
Thrown when Discord is unable to process the request.
Modifies the guild’s widget settings
Declaration
Parameters
If the widget is enabled or not
Reason the widget settings were modified
Returns
The newly modified widget settings
Prunes inactive users from this guild.
Declaration
Parameters
Minimum number of inactivity days required for users to be pruned. Defaults to 7.
Whether to return the prune count after this method completes. This is discouraged for larger guilds.
The roles to be included in the prune.
Reason for audit logs.
Returns
Type | Description |
---|---|
System.Threading.Tasks.Task System.Nullable System.Int32 >> |