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
- 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);
- 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.
- 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.
- 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 });
}
},
};
- 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.
- Importowanie modelu danych ostrzeżeń: Linia const warnModel = require(’../models/warnModel’); importuje model danych ostrzeżeń z pliku warnModel.js.
- Eksportowanie komendy: Moduł eksportuje obiekt zawierający definicję slash command oraz funkcję execute, która zostanie wywołana, gdy komenda /warn zostanie uruchomiona.
- 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).
- 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
- 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/