plex-bot.js aktualisiert

This commit is contained in:
M_Viper 2024-10-22 16:27:11 +00:00
parent a7b41933a9
commit b1cecc7baf
1 changed files with 316 additions and 369 deletions

View File

@ -1018,9 +1018,6 @@ bot.onText(/\/profil/, (msg) => {
const wishesCount = user.wishesCount || 0; // Anzahl der Wünsche aus Benutzerdaten
const userLevel = getUserLevel(commandCount, wishesCount); // Benutzerlevel ermitteln
// Lieblingsgenre aus user.yml ermitteln
const favoriteGenre = user.favoriteGenre || "Nicht festgelegt"; // Lieblingsgenre aus user.yml oder Standardwert
// Admin und Dev IDs aus .env auslesen
const adminIds = [process.env.USER1_ID, process.env.USER2_ID];
const devId = process.env.DEV_CHAT_ID;
@ -1086,6 +1083,21 @@ bot.onText(/\/profil/, (msg) => {
const updatedUserLevel = getUserLevel(commandCount, wishesCount);
// Schritt 5: Nachricht formatieren und senden
const favoriteGenres = user.favoriteGenres && user.favoriteGenres.length > 0
? user.favoriteGenres.join(', ') // Genres als kommagetrennte Liste
: 'Nicht festgelegt'; // Standardwert, wenn keine Genres ausgewählt sind
// Nachtmodus-Anzeige
let nightModeText;
if (user.nightModes && user.nightModes.length > 0) {
const nightMode = user.nightModes[0]; // Nimm den ersten Nachtmodus
const startTime = nightMode.startTime;
const endTime = nightMode.endTime;
nightModeText = `🌙 Nachtmodus: ${startTime} \\- ${endTime}`; // Escape des Minuszeichens
} else {
nightModeText = '🌙 Nachtmodus: Nicht aktiv';
}
const profileMessage = `
📝 *Profil Informationen:*\n\n
👤 *Name:* @${userName}\n
@ -1097,6 +1109,8 @@ bot.onText(/\/profil/, (msg) => {
📋 *Anzahl der Wünsche:* ${wishesCount}\n
📬 *Anzahl der Feedbacks:* ${feedbackCount}\n
🔔 *Benachrichtigung:* ${notificationStatus}\n
${nightModeText}\n
🎭 *Lieblingsgenre:* ${favoriteGenres}\n
`.trim(); // Whitespace entfernen
// Sende Profilinformationen und zeige Button an
@ -1111,17 +1125,27 @@ bot.onText(/\/profil/, (msg) => {
});
} else {
// Datei existiert nicht, einfach die Nachricht senden
const favoriteGenres = user.favoriteGenres && user.favoriteGenres.length > 0
? user.favoriteGenres.join(', ') // Genres als kommagetrennte Liste
: 'Nicht festgelegt'; // Standardwert, wenn keine Genres ausgewählt sind
const nightModeText = user.nightModes && user.nightModes.length > 0
? `🌙 Nachtmodus: ${user.nightModes[0].startTime} \\- ${user.nightModes[0].endTime}`
: '🌙 Nachtmodus: Nicht aktiv';
const profileMessage = `
📝 *Profil Informationen:*\n\n
👤 *Name:* @${userName}\n
🔑 *ID:* ${userId}\n
👤 *Nutzerrolle:* ${role}\n
🌟 *Benutzerlevel:* ${userLevel}\n
🌟 *Benutzerlevel:* ${updatedUserLevel}\n
📅 *Registrierung:* ${firstUsedDate}\n
📰 *Newsletter:* ${newsletterStatus}\n
📋 *Anzahl der Wünsche:* ${wishesCount}\n
📬 *Anzahl der Feedbacks:* 0\n
🔔 *Benachrichtigung:* ${notificationStatus}\n
${nightModeText}\n
🎭 *Lieblingsgenre:* ${favoriteGenres}\n
`.trim(); // Whitespace entfernen
bot.sendMessage(chatId, profileMessage, {
@ -1139,7 +1163,6 @@ bot.onText(/\/profil/, (msg) => {
});
});
// Callback query handler for profile editing
bot.on('callback_query', (callbackQuery) => {
const action = callbackQuery.data;
@ -1151,73 +1174,62 @@ bot.on('callback_query', (callbackQuery) => {
reply_markup: {
inline_keyboard: [
[
{ text: 'Lieblingsgenre setzen', callback_data: 'set_favorite_genre' },
{ text: 'Genre bearbeiten', callback_data: 'edit_genres' },
{ text: 'Punkte löschen', callback_data: 'delete_points' },
{ text: 'Profil zurücksetzen', callback_data: 'reset_profile' }
],
[
{ text: 'Punkte löschen', callback_data: 'delete_points' },
{ text: 'Profil löschen', callback_data: 'delete_profile' }
]
]
}
});
} else if (action === 'set_favorite_genre') {
bot.sendMessage(chatId, 'Bitte geben Sie Ihre Lieblingsgenres ein, getrennt durch Kommas. Verfügbare Genres sind: \n\nAction, Abenteuer, Anime, Dokumentation, Drama, Familie, Fantasy, Horror, Katastrophen, Kinderfilme, Komödie, Krimi, Mystery, Syfy, Thriller, Western.');
} else if (action === 'edit_genres') {
// Genre-Auswahl anzeigen
bot.sendMessage(chatId, '🎬 Wählen Sie Ihre Lieblingsgenres aus:', {
reply_markup: {
inline_keyboard: [
[
{ text: 'Action', callback_data: 'select_genre_Action' },
{ text: 'Drama', callback_data: 'select_genre_Drama' },
{ text: 'Komödie', callback_data: 'select_genre_Comedy' }
],
[
{ text: 'Syfy', callback_data: 'select_genre_Syfy' },
{ text: 'Romantik', callback_data: 'select_genre_Romance' },
{ text: 'Thriller', callback_data: 'select_genre_Thriller' }
],
[
{ text: 'Fantasy', callback_data: 'select_genre_Fantasy' },
{ text: 'Family', callback_data: 'select_genre_Family' },
{ text: 'Zeichentrick', callback_data: 'select_genre_Animation' }
],
[
{ text: 'Anime', callback_data: 'select_genre_Anime' },
{ text: 'Horror', callback_data: 'select_genre_Horror' },
{ text: 'Katastrophen', callback_data: 'select_genre_Katastrophen' }
],
[
{ text: 'Krimi', callback_data: 'select_genre_Krimi' },
{ text: 'Mystery', callback_data: 'select_genre_Mystery' },
{ text: 'Western', callback_data: 'select_genre_Western' }
],
[
{ text: 'Abenteuer', callback_data: 'select_genre_Abenteuer' },
{ text: 'Dokumentation', callback_data: 'select_genre_Dokumentation' }
]
]
}
});
} else if (action.startsWith('select_genre_')) {
// Logik zum Hinzufügen/Entfernen des Genres vom Benutzerprofil
const selectedGenre = action.split('_')[2];
// Hier fangen wir die Nachricht des Benutzers ab
bot.once('message', (msg) => {
const newFavoriteGenre = msg.text;
// Debugging: Logge das neue Lieblingsgenre
console.log(`Neues Lieblingsgenre: ${newFavoriteGenre} für Benutzer ${chatId}`);
// Update the favorite genre in user.yml
// Hier wird die Logik zum Speichern des Genres ins Profil hinzugefügt
fs.readFile(USER_YML_PATH, 'utf8', (err, userData) => {
if (err) {
console.error(`Fehler beim Lesen der Datei ${USER_YML_PATH}: ${err}`);
bot.sendMessage(chatId, 'Fehler beim Aktualisieren des Lieblingsgenres.')
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
return;
}
const users = load(userData);
// Überprüfen, ob der Benutzer bereits existiert
if (users[chatId]) {
// Setze das Lieblingsgenre
users[chatId].favoriteGenre = newFavoriteGenre; // Aktualisiere das Lieblingsgenre
} else {
// Benutzer initialisieren, falls nicht vorhanden
users[chatId] = {
userId: chatId,
username: msg.from.username,
firstUsed: new Date().toISOString(),
notifications: true, // Standardwert, falls nicht gesetzt
commandCount: 0, // Standardwert für Befehlsanzahl
userLevel: 'Neuling', // Standardbenutzerlevel
favoriteGenre: newFavoriteGenre // Setze das Lieblingsgenre
};
}
// Schreibe die aktualisierten Benutzerinformationen zurück in die Datei
fs.writeFile(USER_YML_PATH, dump(users), 'utf8', (err) => {
if (err) {
console.error(`Fehler beim Schreiben in die Datei ${USER_YML_PATH}: ${err}`);
bot.sendMessage(chatId, 'Fehler beim Aktualisieren des Lieblingsgenres.')
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
} else {
bot.sendMessage(chatId, `✅ Ihr Lieblingsgenre wurde auf "${newFavoriteGenre}" gesetzt.`)
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
}
});
});
});
} else if (action === 'delete_points') {
// Punkte auf 0 setzen
fs.readFile(USER_YML_PATH, 'utf8', (err, userData) => {
if (err) {
console.error(`Fehler beim Lesen der Datei ${USER_YML_PATH}: ${err}`);
bot.sendMessage(chatId, 'Fehler beim Zurücksetzen der Punkte.')
bot.sendMessage(chatId, 'Fehler beim Aktualisieren des Profils.')
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
return;
}
@ -1226,16 +1238,25 @@ bot.on('callback_query', (callbackQuery) => {
// Überprüfen, ob der Benutzer existiert
if (users[chatId]) {
users[chatId].commandCount = 0; // Setze die Punkte auf 0
// Genre zur Liste der Lieblingsgenres hinzufügen oder entfernen
if (!users[chatId].favoriteGenres) {
users[chatId].favoriteGenres = [];
}
const genreIndex = users[chatId].favoriteGenres.indexOf(selectedGenre);
if (genreIndex === -1) {
users[chatId].favoriteGenres.push(selectedGenre);
bot.sendMessage(chatId, `${selectedGenre} wurde zu Ihren Lieblingsgenres hinzugefügt.`);
} else {
users[chatId].favoriteGenres.splice(genreIndex, 1);
bot.sendMessage(chatId, `${selectedGenre} wurde aus Ihren Lieblingsgenres entfernt.`);
}
// Schreibe die aktualisierten Benutzerinformationen zurück in die Datei
fs.writeFile(USER_YML_PATH, dump(users), 'utf8', (err) => {
if (err) {
console.error(`Fehler beim Schreiben in die Datei ${USER_YML_PATH}: ${err}`);
bot.sendMessage(chatId, 'Fehler beim Zurücksetzen der Punkte.')
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
} else {
bot.sendMessage(chatId, '✅ Ihre Punkte wurden erfolgreich auf 0 gesetzt.')
bot.sendMessage(chatId, 'Fehler beim Aktualisieren des Profils.')
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
}
});
@ -1347,42 +1368,10 @@ bot.on('callback_query', (callbackQuery) => {
const wunschFolderPath = path.join(__dirname, 'wunsch');
const userFilePath = path.join(wunschFolderPath, `wishes_${chatId}.json`); // Stelle sicher, dass der Dateiname korrekt ist
fs.unlink(userFilePath, (err) => {
if (err && err.code !== 'ENOENT') { // ENOENT bedeutet, die Datei existiert nicht
if (err) {
console.error(`Fehler beim Löschen der Datei ${userFilePath}: ${err}`);
bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.')
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
return;
}
// Lösche den Benutzer aus subscribers.json
const subscribersFilePath = path.join(__dirname, 'subscribers.json');
fs.readFile(subscribersFilePath, 'utf8', (err, subscribersData) => {
if (err) {
console.error(`Fehler beim Lesen der Datei ${subscribersFilePath}: ${err}`);
bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.')
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
return;
}
let subscribers;
try {
subscribers = JSON.parse(subscribersData);
} catch (parseErr) {
console.error(`Fehler beim Parsen der subscribers.json: ${parseErr}`);
bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.')
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
return;
}
// Entferne den Benutzer aus der Liste
const updatedSubscribers = subscribers.filter(subscriber => subscriber.chatId !== chatId);
// Schreibe die aktualisierten Abonnenten zurück in die Datei
fs.writeFile(subscribersFilePath, JSON.stringify(updatedSubscribers, null, 2), 'utf8', (err) => {
if (err) {
console.error(`Fehler beim Schreiben in die Datei ${subscribersFilePath}: ${err}`);
bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.')
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
} else {
bot.sendMessage(chatId, '✅ Ihr Profil wurde erfolgreich gelöscht.')
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
@ -1391,8 +1380,6 @@ bot.on('callback_query', (callbackQuery) => {
});
});
});
});
});
} else {
bot.sendMessage(chatId, '❌ Benutzer nicht gefunden.')
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
@ -1401,6 +1388,7 @@ bot.on('callback_query', (callbackQuery) => {
}
});
const { load, dump } = require('js-yaml'); // Stelle sicher, dass js-yaml installiert ist
// Funktion zum Escapen von Markdown V2-Sonderzeichen
@ -1496,24 +1484,6 @@ bot.on('message', (msg) => {
});
});
// Befehl zum Sichern der Dateien
bot.onText(/\/backup/, (msg) => {
const chatId = msg.chat.id;
@ -1884,29 +1854,15 @@ bot.onText(/\/night/, (msg) => {
// Logik für den Befehl...
});
bot.onText(/\/n_off/, (msg) => {
logCommand('/n_off', msg.from.username);
// Logik für den Befehl...
});
bot.onText(/\/passwd/, (msg) => {
logCommand('/passwd', msg.from.username);
// Logik für den Befehl...
});
bot.onText(/\/key/, (msg) => {
logCommand('/key', msg.from.username);
// Logik für den Befehl...
});
const userId1 = Number(process.env.USER1_ID); // USER1_ID aus .env laden und in Zahl umwandeln
@ -4449,6 +4405,7 @@ function createHelpMessage() {
`🎬 /trailer - Fordere einen Trailer für einen bestimmten Film an. \n\n` +
`🔝 /empfehlung - Film Empfehlung des Tages.\n\n` +
`📰 /newsletter - zeigt die Newsletter Funktion an\n\n` +
`🌙 /night - Schaltet den Nachtmodus ein oder aus.\n\n` + // Hinzugefügter Befehl
`❓ /help - Zeigt diese Hilfennachricht an.\n\n`;
}
@ -4464,6 +4421,7 @@ function createMoreHelpMessage() {
`🤖 /bot - Bot-Informationen.\n\n`;
}
// Funktion zum Erstellen der Admin-Hilfennachricht
function createAdminHelpMessage() {
return `*👨‍💻 Admin Befehle* \n\n` +
@ -5078,6 +5036,14 @@ app.get('/api/feedback', (req, res) => {
});
});
// Endpunkt /api/users, um die user.yml-Datei zu lesen und die Daten im JSON-Format zurückzugeben
app.get('/api/users', (req, res) => {
try {
@ -5091,16 +5057,28 @@ app.get('/api/users', (req, res) => {
const data = yaml.parse(file); // 'parse' Funktion verwenden
// Benutzerobjekte in ein Array umwandeln
const usersArray = Object.values(data).map(user => ({
const usersArray = Object.values(data).map(user => {
// Überprüfen, ob nightModes vorhanden sind und Werte abrufen
const nightMode = user.nightModes && user.nightModes.length > 0 ? user.nightModes[0] : null;
// Wenn kein Nachtmodus vorhanden ist, dann "Deaktiviert" anzeigen
const nightModeDisplay = nightMode
? `${nightMode.startTime} - ${nightMode.endTime}`
: 'Deaktiviert'; // Hier den gewünschten Text verwenden
return {
userId: user.userId,
username: user.username,
notifications: user.notifications,
firstUsed: user.firstUsed,
favoriteGenre: user.favoriteGenre,
commandCount: user.commandCount || 0, // Default auf 0, wenn nicht vorhanden
userLevel: user.userLevel || 'Nicht festgelegt', // Default-Wert
nightMode: user.nightMode || {} // Optionales Feld
}));
favoriteGenres: user.favoriteGenres && user.favoriteGenres.length > 0
? user.favoriteGenres.join(', ') // Falls favoriteGenres existiert, kommagetrenntes Format
: (user.favoriteGenre || 'Nicht festgelegt'), // Fallback auf favoriteGenre oder Standardwert
commandCount: user.commandCount || 0, // Standard auf 0, wenn nicht vorhanden
userLevel: user.userLevel || 'Nicht festgelegt', // Standard-Wert
nightMode: nightModeDisplay // Verwendung der neuen Logik für die Nachtmodus-Anzeige
};
});
// JSON-Daten zurückgeben
res.json(usersArray);
@ -5110,37 +5088,6 @@ app.get('/api/users', (req, res) => {
}
});
// Endpunkt zum Löschen eines Benutzers
app.delete('/api/users/:userId', (req, res) => {
const userId = req.params.userId;
try {
// Pfad zur user.yml-Datei
const filePath = path.join(__dirname, 'user.yml');
// YAML-Datei laden
const file = fs.readFileSync(filePath, 'utf8');
const data = yaml.parse(file); // YAML in ein JSON-Objekt konvertieren
// Überprüfe, ob der Benutzer existiert
if (!data[userId]) {
return res.status(404).json({ message: 'Benutzer nicht gefunden' });
}
// Benutzer aus den Daten entfernen
delete data[userId];
// Aktualisiere die YAML-Datei mit den neuen Daten
fs.writeFileSync(filePath, yaml.stringify(data), 'utf8');
res.json({ message: 'Benutzer erfolgreich gelöscht' });
} catch (err) {
console.error('Fehler beim Löschen des Benutzers:', err);
res.status(500).json({ message: 'Fehler beim Löschen des Benutzers' });
}
});
let lastRestart = new Date(); // Speichere den aktuellen Zeitpunkt als letzten Neustart
// Funktion zum Formatieren des Datums