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

       (3 opinie)

    Nieaktywny

    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!




    Opinie użytkowników

    Rekomendowane komentarze

    Gość Jqmey

    Opublikowano

    @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.
    Michaux0

    Opublikowano

    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,.



    Dołącz do dyskusji

    Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

    Nieaktywny
    Dodaj komentarz...

    ×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

      Dozwolonych jest tylko 75 emoji.

    ×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

    ×   Przywrócono poprzednią zawartość.   Wyczyść edytor

    ×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.


×
×
  • Dodaj nową pozycję...