poniedziałek , 9 września 2024

Tworzenie Bota na Discorda w JavaScript cz.5

1. Wstęp

Cześć!
W tej części omówimy, jak skonfigurować bazę danych MongoDB oraz jak zaimplementować w bocie system ostrzeżeń oparty na tej bazie danych.

2. Konfiguracja i dodanie bazy danych

  1. Strona MongoDB

MongoDB to popularna baza danych typu NoSQL, która umożliwia elastyczne przechowywanie danych w formie dokumentów w formacie JSON. Aby zacząć korzystać z MongoDB, należy założyć konto na ich stronie internetowej (https://www.mongodb.com/), a następnie utworzyć nową bazę danych.

a. Zaloguj się na swoje konto na stronie MongoDB.
b. Kliknij „New Project” (Nowy Projekt) i nadaj nazwę swojemu projektowi.
c. Po utworzeniu projektu, kliknij „Create” (Stwórz bazę danych).

d. Wybierz M0, dostawcę i region, a następnie kliknij „Create Deployment” (Utwórz Bazę).

e. Skopiuj hasło i przejdź dalej klikając ’Create DataBase User’ i ’Choose a connection method

d. Wybierz ’Drivers’ i przejdźmy do 3 pierwszych punktów w dodaniu bazy do kodu

2. Dodanie połączenia do kodu
a. w terminalu wpisz npm i mongodb

b. pobierz także mongoose

c. w pliku .env dodaj mongoURL

wklej komendę znajdującą się na stronie.

d. Następnie dodajmy połączenie z bazą danych MongoDB do kodu bota:
w pliku index.js dodajmy:

  • const mongoose = require('mongoose');
  • const mongoDB = process.env.mongoURL;
  • mongoose.connect(mongoDB, {
    useNewUrlParser: true,
    useUnifiedTopology: true
    }).then(() => {
    console.log('Pomyślnie połączono z MongoDB.');
    }).catch((err) => {
    console.error('Błąd połączenia z MongoDB:', err);
    });

3. Piszemy system ostrzeżeń (warnModel)

Stwórz folder ’models’ w folderze ’src’,
w tym folderze stwórz plik ’warnModel.js’.
w tym pliku:


const warnModel = new Schema({
    userId: { type: String, required: true },
    warnings: { type: Number, default: 0 },
});

module.exports = model("warn", warnModel);
  1. Importowanie modułów: Linia const { model, Schema } = require(’mongoose’); importuje dwie klasy z modułu mongoose: model i Schema. model jest używany do tworzenia modelu danych na podstawie schematu, a Schema definiuje strukturę danych w bazie danych.
  2. Definicja schematu: Następnie jest definiowany schemat danych za pomocą klasy Schema. W tym przypadku warnModel to nowy obiekt schematu, który zawiera dwa pola: userId i warnings. userId jest typu String i jest wymagany (required: true), natomiast warnings jest typu Number i ma wartość domyślną 0.
  3. Utworzenie modelu: Linia module.exports = model(„warn”, warnModel); tworzy model danych na podstawie schematu. Funkcja model() tworzy model danych o nazwie „warn” na podstawie schematu warnModel. Model ten zostaje wyeksportowany, aby mógł być używany w innych częściach aplikacji.

4. Piszemy system ostrzeżeń (/warn)

W folderze ’commands’ tworzymy plik warn.js
a w nim:

const warnModel = require('../models/warnModel');

module.exports = {
  data: new SlashCommandBuilder()
  .setName('warn')
  .setDescription('Dodaje ostrzeżenie użytkownikowi.')
  .addUserOption(option => option.setName('user').setDescription('Użytkownik').setRequired(true))
  .addStringOption(option => option.setName('reason').setDescription('Powód').setRequired(false)),
  async execute(interaction) {
    if (!interaction.member.permissions.has(PermissionFlagsBits.Administrator)) {
      return interaction.reply({ content: 'Nie masz uprawnień administratora.', ephemeral: true });
    }

    const user = interaction.options.getUser('user');
    const reason = interaction.options.getString('reason') || 'Brak powodu';

    try {
      const warnData = await warnModel.findOneAndUpdate(
        { userId: user.id },
        { $inc: { warnings: 1 } },
        { upsert: true, new: true }
      );


      const channel = interaction.client.channels.cache.get('id-kanału-ostrzezen');
      if (channel) {
        const embed = new EmbedBuilder()
        .setTitle('Ostrzeżenie')
        .setDescription(`Użytkownik ${user.tag} otrzymał ostrzeżenie.`)
        .addFields(
          { name: 'Powód', value: reason, inline: false },
          { name: 'Liczba ostrzeżeń', value: warnData.warnings.toString(), inline: true }
        )
        .setTimestamp()
        .setColor('#ff0000');
        channel.send({ embeds: [embed] });
      }

      return interaction.reply({ content: `Dodano ostrzeżenie dla użytkownika ${user.tag}.`, ephemeral: true });
    } catch (error) {
      console.error('Błąd podczas dodawania ostrzeżenia:', error);
      return interaction.reply({ content: 'Wystąpił błąd podczas dodawania ostrzeżenia.', ephemeral: true });
    }
  },
};
  1. Importowanie modułów: Linia const { SlashCommandBuilder, PermissionFlagsBits, EmbedBuilder } = require(’discord.js’); importuje niezbędne klasy z biblioteki Discord.js. SlashCommandBuilder jest używany do budowania slash command, PermissionFlagsBits do sprawdzania uprawnień, a EmbedBuilder do tworzenia embedów.
  2. Importowanie modelu danych ostrzeżeń: Linia const warnModel = require(’../models/warnModel’); importuje model danych ostrzeżeń z pliku warnModel.js.
  3. Eksportowanie komendy: Moduł eksportuje obiekt zawierający definicję slash command oraz funkcję execute, która zostanie wywołana, gdy komenda /warn zostanie uruchomiona.
  4. Definicja slash command: Linie kodu wewnątrz ’data’ definują właściwości slash command – /warn, takie jak nazwa, opis oraz opcje (tutaj: użytkownik i powód).
  5. Funkcja execute: Ta funkcja wykonuje logikę komendy /warn. Sprawdza, czy użytkownik, który wywołał komendę, ma uprawnienia administratora. Następnie pobiera użytkownika i powód z interakcji. Następnie używa modelu danych ostrzeżeń, aby zaktualizować liczbę ostrzeżeń dla danego użytkownika. Dodatkowo wysyła wiadomość do określonego kanału, informując o ostrzeżeniu. Na koniec wysyła odpowiedź do interakcji użytkownika potwierdzającą dodanie ostrzeżenia lub informację o błędzie, jeśli coś poszło nie po myśli.

5. Podsumowanie

  1. Możemy uruchomić kod!

2. Discord

3. MongoDB:

Zakończenie

Dzisiaj nauczyliśmy się korzystania z bazy danych mongoDB, oraz napisaliśmy system ostrzeżeń pod komendą /warn.

Od tego artykułu nie będę wrzucał wszystkich plików, będą pojawiały się tylko te nowe lub zmienione.
Pliki z tego artykułu znajduję się tutaj: https://lucjanmnm.klovy.pl/strony/discord/

About Klovy

Założyciel serwisu klovy.pl. Moje zainteresowania to: informatyka, słuchanie muzyki (najbardziej typu: Disco Polo, Dance, Pop itp.), czy również sporty (zarówno letnie jak i zimowe). Lubię także pomagać wielu osobom, szczególnie w branży IT, stąd zamysł o platformie Klovy.

Check Also

Ataki Brute Force (Cloudflare) – jak skutecznie uchronić stronę?

Ataki typu Brute Force (siłowe) to jedne z najstarszych i najbardziej powszechnych metod stosowanych przez …

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *