Skocz do zawartości
  • Pierwszy bot dla Discorda #2 - Tworzymy plik główny

      (3 opinie)
    • Jqmey
    • 573
    • 2

    W tym odcinku zajmiemy się stworzeniem pliku głównego. Przed przeczytaniem tego poradnika warto też zapoznać się z poprzednią częścią, którą można znaleźć tutaj. Repozytorium z kodem można znaleźć tutaj.

    Główny kod naszego bota umieścimy w pliku server.js, który oczywiście musimy najpierw utworzyć w folderze głównym. Po zrobieniu tego możemy rozpocząć jego edycję.

    W pierwszej kolejności na początku pliku standardowo umieszczamy dyrektywę uruchamiającą strict mode.

    'use strict';

    Importujemy moduł fs i path, które wykorzystamy do wczytania pliku config.json i package.json oraz modułów wewnętrznych.

    const fs = require('fs');
    const path = require('path');

    Następnie importujemy bibliotekę, którą wykorzystamy do stworzenia naszego bota - discord.js.

    const Discord = require('discord.js');

    Ostatnią rzeczą, którą zrobimy, będzie zaimportowanie konfiguracji oraz pliku package.json - korzystając z funkcji JSON.parse przetworzymy zawartość pliku dostępnego pod ścieżką wygenerowaną przez path.join, odczytaną za pomocą funkcji fs.readFileSync (używamy funkcji synchronicznej ze względu na to, że plik ten wczytujemy jednorazowo).

    const config = JSON.parse(fs.readFileSync(path.join(__dirname, 'config.json')));
    const packageInfo = JSON.parse(fs.readFileSync(path.join(__dirname, 'package.json')));

    Zaimportowaliśmy już wszystkie gotowe moduły. Teraz utworzymy nową instancję klienta Discord.

    const client = new Discord.Client();

    Następnie ustawimy funkcję wywoływaną po połączeniu się z API Discorda przez bota.

    client.on('ready', () => {
    
    });

    Wewnątrz ustawiamy status naszego bota na !pomoc | v{wersja} za pomocą funkcji client.user.setActivity - wersję pobieramy z pliku package.json, który wcześniej zaimportowaliśmy.

    client.user.setActivity(`!pomoc | v${packageInfo.version}`);

    Następnie przygotowujemy informację o gotowości, który będzie się pojawiać w konsoli po udanym połączeniu się z API Discorda.

    console.log('Client is ready!');

    Kod powinien teraz wyglądać w ten sposób:

    client.on('ready', () => {
        client.user.setActivity(`!pomoc | v${packageInfo.version}`);
        console.log('Client is ready!');
    });

    Teraz zajmiemy się ustawieniem funkcji wywoływaniu przez bota po tym, jak na jednym z dostępnych dla niego kanałów tekstowych zostanie wysłana nowa wiadomość.

    client.on('message', message => {
    
    });

    Wewnątrz funkcji umieszczamy w pierwszej kolejności argumenty komendy. Aby je uzyskać usuniemy z zawartości wiadomości (message.content) niepotrzebne spacje (i część innych znaków specjalnych) za pomocą funkcji trim, a następnie rozdzielimy ją za pomocą wyrażenia regularnego \s+, odpowiadającego dowolnej ilości spacji.

    const args = message.content.trim().split(/\s+/);

    Pod tym umieścimy instrukcję switch, wykonującą podaną przez nas polecenia zależnie od wartości args[0].toLowerCase() - na razie pozostawimy ją pustą.

    switch(args[0].toLowerCase()) {
    
    }

    Nasz kod powinien teraz wyglądać tak:

    client.on('message', message => {
        const args = message.content.trim().split(/\s+/);
    
        switch(args[0].toLowerCase()) {
    
        }
    });

    Na końcu pliku używając funkcji client.login spowodujemy połączenie się naszego bota z API Discorda.

    client.login(config.token);

    Plik główny naszego bota jest teraz gotowy!



      Zgłoś wpis


    Opinie użytkowników

    Rekomendowane komentarze

    @Michaux0

    1. A po co kombinować z fs i path?
      Importowanie plików JSON za pomocą require jest możliwe, ale jest ono jak dla mnie złą praktyką.
      W przypadku gdybyś np. chciał shardować bota i plik za to odpowiedzialny miał w innym folderze od razu pojawiają się problemy, a używając path masz gwarancję, że zaimportuje się dokładnie to, co chcesz.
    2. No i jeszcze ja klienta nazwałbym z dużej litery bo jest to instancja klasy
      Z dużej litery zapisuje się nazwy klas, a nie nazwy ich instancji.

    Podziel się komentarzem


    Odnośnik do komentarza
    Udostępnij na innych stronach

    No mówię, zależy od osoby. Ja instancje klasy też z dużej piszę. Problemów z użyciem mojej metody nigdy nie miałem, wystarczy sobie dobrze foldery policzyć. Jeśli źle policzymy, to i tak nam od razu IDE/sam skrypt po włączeniu wywali błąd. Moim zdaniem użycie zwykłego require jest lepsze - po co komu aż 3 nieczytelne linijki zamiast jednej? Znowu tego nie trzeba zbytnio liczyć, powiedzmy że wszystkie komendy mamy w 'src/commands', zrobimy sobie prosty szablon modułu i przekopiujemy wszędzie, zawsze ścieżka do pliku json jest taka sama,.

    Podziel się komentarzem


    Odnośnik do komentarza
    Udostępnij na innych stronach


    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

×