Jak napisać bota dla aplikacji Discord

Discord botOstatnimi czasy razem z znajomymi przesiaduję na komunikatorze Discord. Jest to aplikacja zbliżona funkcjonalnością do Slacka, różnica pomiędzy tymi dwoma jest taka że Discord tworzony jest z myslą o środowiskach skupiających się wokół gier komputerowych a Slack wspomaga pracę grupową. Co jest fajne w obu tych aplikacjach to możliwość zaprogramowania i używania botów. Dla Discord API powstało wiele bibliotek w różnych językach programowania, więc jeżeli korzystasz z Discorda i chciałbyś napisać własnego bota w C# to zapraszam.

Ustawienia bota

  • Na początek potrzebujemy stworzyć aplikację bota na stronie Discorda. Zaloguj sie na tej stronie: https://discordapp.com/developers/applications/me , wybierz my applications, a następnie add application, powinienieś ujrzeć poniższy screen, w którym podasz nazwę bota, oraz wgrasz jego avatar.Create bot
  • Na następnym screenie, zobaczysz komunikat że stworzyłeś aplikacje. Jednakże najważniejszą punktem w dalszych etapach będzie skopiowanie tokena, który będzie potrzebny w naszym programie aby móc sterować i zaprogramować komendy bota. Bot token
  • Zanim rozpoczniemy programowanie funkcjonalności bota jest stworznie “bota użytkownika” na jednym z naszych kanałów/serwerów (pamiętaj zanim zaczniesz dodawać bota do któregoś z serwerów musisz byc jego właścicielem lub posiadać odpowiednie uprawnienia do danego serwera). Kliknij na tej samej stronie na przycisk “create bot user”. Nastepnie na tej samej stronie skopuj lub zapisz sobie Client Id twojego bota, powinien on być widoczny na samej górze (patrz poniższy screen).botclientid
  • Na tej samej stronie poszukaj linka OAuth2 i wybierz pod link bots, powinienieś ujrzec adress który musisz skopiowac do okna nowej zakładki, ale nie uruchamiaj jeszcze tego adresu, ponieważ wcześniej zapisny Client Id twojego bota musi zostać podstawiony w ten adres.W moim przypadku link wyglada jak poniżej, w miejsce pogrubionej czcionki wklejasz swój Client Id bota i przechodzisz pod ten adres. W kolejnym kroku wybierasz nazwę serwera do którego chcesz przypisać bota i powinieneś go zobaczyć w liście użytkowników. Póki co bot będzie miał status offline, ale zaraz ożywimy go kodem. (Poniżej link z pogrubionym tekstem gdzie musisz podmienić na swój Client ID)

    https://discordapp.com/oauth2/authorize?client_id=client_id_twojego_bota&scope=bot&permissions=0

    Piszemy kod bota

  • W Visual Studio stwórz nowy projekt aplikacji konsolowej.
  • Do solucji dodaj następujące paczki Nuget: Discord.Net i Discord.Net.Commands na chwilę pisania tego posta w wersji 0.9.6 (dodane paczki sa nieoficjalnym warperem API Discorda dla .Net dzięki którym możemy programować boty w C#) Stronę tego projektu znajdziesz na github: https://github.com/RogueException/Discord.Net
  • Czas na pierwszy kod, dodaj nową klasę i nazwij ją jak chcesz może byc np. MyBot, następnie stwórz obiekt tej klasy w metodzie Main programu.
  • Przejdzmy do klasy MyBot i dodajmy do niej poniższy kod, który opiszę akpit niżej.

    Token
    Tu znajdziesz twojego bota, skopiuj go i wklej.

    Powyższy kod ma za zadanie uruchomić naszego bota. Pierwsze linie w konstruktorze tworzą nam obiekt klienta bota, i odwołują się do metody Log (kod poniżej konstruktora klasy MyBot) która w oknie konsoli będzie wyśietlać nam informacje diagnostyczne. Kolejne linie w konstruktorze klasy MyBot uruchamiają nam proces bota na serwerze Discorda, zwróć uwage na konieczność podania stringu tokena Twojego bota. String ten skopujesz ze tej samej strony w której tworzyłeś na początku bota pod adresem: https://discordapp.com/developers/applications/me Po tych zabiegach możesz uruchomić program. W Discordzie twój bot powinien zmienić status na online.

Rozbudowa bota

Po co nam bot, który jest tylko online, czy bot nie powinien być przydatny do pewnych rzeczy? Oczywiście że tak… Do tego potrzebujemy oprogramować komendy. Komendy botów mogą wspomagać proces zarządzaniem kanałem/serwerem (bany/kicky/nadawanie odbieranie uprawnień). Mogą wypisywać tekst czy wysyłać pliki, można też odtwarzać muzykę na kanałach głosowych czy nawet sprawdzać pogodę lub zamawiać pizzce, to wszystko to kwiestia oprogramowania odpowiedniego API. Tak naprawdę możliwości są nieograniczone. W dalszych akapitach przedstawię co należy wykonać aby bot wykonywał proste komendy tak abyś mniej wiecej miał pojęcie jak się to robi. Komendy którę opisze to wypisanie tekstu na kanale tekstowym, oraz wysłanie pliku na kanał poprzez bota, może to być np. jakiś mem, obrazek cokolwiek…

  • Zainicjujmy komendy poniższym kodem, zwróć uwagę na tzw. znak prefixu (PrefixChar), w tym przykładzie używam ‘!’ będziesz go dodwał do każdej komendy np. !powiedz <argument>. Kolejna linia to przypisanie usługi komend do naszej zmiennej commands. Będziemy się do niej odwoływac za każdym razem gdy dodamy nową komendę do bota. Te linie powinny znajdować w konstruktorze klasy MyBot, ale przed linią discord.ExecuteAndWait.
  • Teraz omówimy same komendy. Dla lepszej organizacji kodu stworzmy metodę w której będziemy przechowywać nasze komendy tak aby, chociaż trochę uporządkować nasz kod, a nie wszystko wrzucać do konstruktora. W poniżej zaprezentowanej metodzie dodałem dwie komendy. Pierwsza komenda wypisująca tekst, a druga wstawiająca obrazek na kanał. Zwróć uwagę na komentarze w kodzie. Kod jest bardzo prosty, i tak czytając od góry mamy komendę i jej wywołanie (pamiętaj o prefixie gdy będziesz testować komendy na Discord), jej opis, dodatkowy alias, oraz paramety jeżeli są. Na koniec najważniejsze czyli akcje “Do” w której to w zależności od komendy wypiszemy text na kanale (z pierwszego argumentu), lub jak w drugiej komendzie wyślemy plik na kanał. Aby pliki były poprawnie wysyłane należy ustawić ich parametry na “build action” na content, a parameter “copy to output directory” na copy if never. Nie zapomnij wywołać komendy w konstruktorze klasy MyBot przed linią discord.ExecuteAndWait. Jak widać na poniższym snipecie cała magia co dana komenda ma wykonać znajduje się w “.Do”

    Podsumowując

    Jak widzisz napisanie własnego prostego bota na platformie Discord nie jest dużym wyzwaniem, a daje sporo zabawy, szczególnie jeżeli możesz zadziwić znajomych z którymi wieczorami wspólnie przesiadujesz na tej platformie.

    Pełen kod znajduje się na moim github: https://github.com/xorch/discord_bot_blog.git

    Kilka dodatkowych linków:

  • Dokumentacja API Discord.Net z której korzystałem w tym wpisie: http://rtd.discord.foxbot.me/en/legacy/
  • Serwer Discord API, który skupia developerów botów oraz bibliotek: https://discord.gg/mPdvQKc 
  • Serek Danio

    ej mam pytanie jak zrobić by jak ktoś napisze np. !cześć to bot pisał mp. no hejka! ?

    • Hej, do tego potrzebujesz stworzyć i zarejestrować komendy oraz ustawić prefix w inicjalizacji bota (x.PrefixChar = ‘!’;) …

  • heyn gra

    Jakiego użyć Visual Studio?

  • kark95

    w ostatnim punkcie przed programowaniem jak kopiuje ten kawałek linku wklejam go na nową karte i potem wklejam ip client i potem końcówke tego linku to mi wyskakuje error co zrobić?

    • Mateusz Prusiński

      pewnie usuwasz za dużo

  • bigbar

    nie mam takiej obcji

  • bigbar

    sorry mam tylko troche inna nazwa

  • bigbar

    gdzie jest link do OAuth2 bo ja nie widzę na stronie

  • WILKO11

    które visual studia zainstalować ?? visual studio community , visual studio professional czy visual studio enterprise/ które z nich wybrać ???

  • WILKO11

    chujowy poradnik !!!!!!!! mało szczegółowo napisane