plex-bot.js aktualisiert
This commit is contained in:
parent
a7b41933a9
commit
b1cecc7baf
685
plex-bot.js
685
plex-bot.js
|
@ -989,104 +989,116 @@ loadSubscribers();
|
|||
|
||||
// Profilbefehl
|
||||
bot.onText(/\/profil/, (msg) => {
|
||||
const chatId = msg.chat.id;
|
||||
const chatId = msg.chat.id;
|
||||
|
||||
const userFilePath = path.join(__dirname, 'user.yml');
|
||||
const subscribersFilePath = path.join(__dirname, 'subscribers.json');
|
||||
const wishesFilePath = path.join(__dirname, 'wunsch', `wishes_${chatId}.json`);
|
||||
const feedbackFilePath = path.join(__dirname, 'feedback.log');
|
||||
const userFilePath = path.join(__dirname, 'user.yml');
|
||||
const subscribersFilePath = path.join(__dirname, 'subscribers.json');
|
||||
const wishesFilePath = path.join(__dirname, 'wunsch', `wishes_${chatId}.json`);
|
||||
const feedbackFilePath = path.join(__dirname, 'feedback.log');
|
||||
|
||||
// Schritt 1: Benutzerinformationen aus user.yml lesen
|
||||
fs.readFile(userFilePath, 'utf8', (err, userData) => {
|
||||
if (err) {
|
||||
console.error(`Fehler beim Lesen der Datei ${userFilePath}: ${err}`);
|
||||
bot.sendMessage(chatId, 'Fehler beim Laden der Benutzerinformationen.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
|
||||
const users = load(userData);
|
||||
const user = users[chatId] || {}; // Benutzerdaten für den aktuellen Benutzer
|
||||
|
||||
// Initialisiere Benutzerinformationen
|
||||
const userName = escapeMarkdownV2(user.username || 'Unbekannt');
|
||||
const userId = chatId;
|
||||
const firstUsedDate = escapeMarkdownV2(formatDate(user.firstUsed || new Date().toISOString())); // Aktuelles Datum verwenden, falls nicht vorhanden
|
||||
|
||||
// Benutzerlevel initialisieren
|
||||
const commandCount = user.commandCount || 0; // Anzahl der Befehle aus den Benutzerdaten
|
||||
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;
|
||||
|
||||
// Bestimme die Rolle basierend auf der ID
|
||||
let roles = [];
|
||||
if (adminIds.includes(String(chatId))) {
|
||||
roles.push('Admin');
|
||||
}
|
||||
if (String(chatId) === devId) {
|
||||
roles.push('DEV');
|
||||
}
|
||||
const role = roles.length > 0 ? roles.join(', ') : 'Benutzer';
|
||||
|
||||
fs.readFile(subscribersFilePath, 'utf8', (err, subsData) => {
|
||||
// Schritt 1: Benutzerinformationen aus user.yml lesen
|
||||
fs.readFile(userFilePath, 'utf8', (err, userData) => {
|
||||
if (err) {
|
||||
console.error(`Fehler beim Lesen der Datei ${subscribersFilePath}: ${err}`);
|
||||
bot.sendMessage(chatId, 'Fehler beim Laden des Newsletter-Status.')
|
||||
console.error(`Fehler beim Lesen der Datei ${userFilePath}: ${err}`);
|
||||
bot.sendMessage(chatId, 'Fehler beim Laden der Benutzerinformationen.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
|
||||
let subscribers;
|
||||
try {
|
||||
subscribers = JSON.parse(subsData); // JSON sicher parsen
|
||||
} catch (parseErr) {
|
||||
console.error('Fehler beim Parsen der subscribers.json:', parseErr);
|
||||
bot.sendMessage(chatId, 'Fehler beim Verarbeiten der Abonnentendaten.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
|
||||
const users = load(userData);
|
||||
const user = users[chatId] || {}; // Benutzerdaten für den aktuellen Benutzer
|
||||
|
||||
// Initialisiere Benutzerinformationen
|
||||
const userName = escapeMarkdownV2(user.username || 'Unbekannt');
|
||||
const userId = chatId;
|
||||
const firstUsedDate = escapeMarkdownV2(formatDate(user.firstUsed || new Date().toISOString())); // Aktuelles Datum verwenden, falls nicht vorhanden
|
||||
|
||||
// Benutzerlevel initialisieren
|
||||
const commandCount = user.commandCount || 0; // Anzahl der Befehle aus den Benutzerdaten
|
||||
const wishesCount = user.wishesCount || 0; // Anzahl der Wünsche aus Benutzerdaten
|
||||
const userLevel = getUserLevel(commandCount, wishesCount); // Benutzerlevel ermitteln
|
||||
|
||||
// Admin und Dev IDs aus .env auslesen
|
||||
const adminIds = [process.env.USER1_ID, process.env.USER2_ID];
|
||||
const devId = process.env.DEV_CHAT_ID;
|
||||
|
||||
// Bestimme die Rolle basierend auf der ID
|
||||
let roles = [];
|
||||
if (adminIds.includes(String(chatId))) {
|
||||
roles.push('Admin');
|
||||
}
|
||||
|
||||
// Status prüfen, ob der Benutzer abonniert ist
|
||||
const isSubscribed = subscribers.some(subscriber => subscriber.chatId === chatId);
|
||||
const newsletterStatus = isSubscribed ? 'Ja' : 'Nein';
|
||||
if (String(chatId) === devId) {
|
||||
roles.push('DEV');
|
||||
}
|
||||
const role = roles.length > 0 ? roles.join(', ') : 'Benutzer';
|
||||
|
||||
// Schritt 3: Wünsche aus wishes_${chatId}.json lesen
|
||||
fs.readFile(wishesFilePath, 'utf8', (err, wishesData) => {
|
||||
let wishesCount = 0; // Initialisierung der Wünsche
|
||||
let notificationStatus = user.notifications ? 'Ja' : 'Nein';
|
||||
|
||||
if (!err) {
|
||||
try {
|
||||
const userWishes = JSON.parse(wishesData);
|
||||
wishesCount = userWishes.length;
|
||||
} catch (parseErr) {
|
||||
console.error('Fehler beim Parsen der wishes-Datei:', parseErr);
|
||||
}
|
||||
fs.readFile(subscribersFilePath, 'utf8', (err, subsData) => {
|
||||
if (err) {
|
||||
console.error(`Fehler beim Lesen der Datei ${subscribersFilePath}: ${err}`);
|
||||
bot.sendMessage(chatId, 'Fehler beim Laden des Newsletter-Status.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
|
||||
// Schritt 4: Anzahl der Feedbacks zählen
|
||||
fs.stat(feedbackFilePath, (err) => {
|
||||
let feedbackCount = 0; // Standardwert für Feedbacks
|
||||
let subscribers;
|
||||
try {
|
||||
subscribers = JSON.parse(subsData); // JSON sicher parsen
|
||||
} catch (parseErr) {
|
||||
console.error('Fehler beim Parsen der subscribers.json:', parseErr);
|
||||
bot.sendMessage(chatId, 'Fehler beim Verarbeiten der Abonnentendaten.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!err) { // Datei existiert
|
||||
fs.readFile(feedbackFilePath, 'utf8', (err, feedbackData) => {
|
||||
if (!err) {
|
||||
const feedbackLines = feedbackData.split('\n');
|
||||
feedbackCount = feedbackLines.filter(line => line.includes(`chatId ${chatId}`)).length; // Zähle nur die Feedbacks des aktuellen Benutzers
|
||||
}
|
||||
// Status prüfen, ob der Benutzer abonniert ist
|
||||
const isSubscribed = subscribers.some(subscriber => subscriber.chatId === chatId);
|
||||
const newsletterStatus = isSubscribed ? 'Ja' : 'Nein';
|
||||
|
||||
// Benutzerlevel aktualisieren basierend auf den aktuellen Wünschen
|
||||
const updatedUserLevel = getUserLevel(commandCount, wishesCount);
|
||||
// Schritt 3: Wünsche aus wishes_${chatId}.json lesen
|
||||
fs.readFile(wishesFilePath, 'utf8', (err, wishesData) => {
|
||||
let wishesCount = 0; // Initialisierung der Wünsche
|
||||
let notificationStatus = user.notifications ? 'Ja' : 'Nein';
|
||||
|
||||
// Schritt 5: Nachricht formatieren und senden
|
||||
const profileMessage = `
|
||||
if (!err) {
|
||||
try {
|
||||
const userWishes = JSON.parse(wishesData);
|
||||
wishesCount = userWishes.length;
|
||||
} catch (parseErr) {
|
||||
console.error('Fehler beim Parsen der wishes-Datei:', parseErr);
|
||||
}
|
||||
}
|
||||
|
||||
// Schritt 4: Anzahl der Feedbacks zählen
|
||||
fs.stat(feedbackFilePath, (err) => {
|
||||
let feedbackCount = 0; // Standardwert für Feedbacks
|
||||
|
||||
if (!err) { // Datei existiert
|
||||
fs.readFile(feedbackFilePath, 'utf8', (err, feedbackData) => {
|
||||
if (!err) {
|
||||
const feedbackLines = feedbackData.split('\n');
|
||||
feedbackCount = feedbackLines.filter(line => line.includes(`chatId ${chatId}`)).length; // Zähle nur die Feedbacks des aktuellen Benutzers
|
||||
}
|
||||
|
||||
// Benutzerlevel aktualisieren basierend auf den aktuellen Wünschen
|
||||
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
|
||||
🔑 *ID:* ${userId}\n
|
||||
|
@ -1097,9 +1109,45 @@ 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
|
||||
bot.sendMessage(chatId, profileMessage, {
|
||||
parse_mode: 'MarkdownV2',
|
||||
reply_markup: {
|
||||
inline_keyboard: [
|
||||
[{ text: 'Profil Bearbeiten', callback_data: 'edit_profile' }]
|
||||
]
|
||||
}
|
||||
}).catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
});
|
||||
} 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:* ${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
|
||||
|
||||
// Sende Profilinformationen und zeige Button an
|
||||
bot.sendMessage(chatId, profileMessage, {
|
||||
parse_mode: 'MarkdownV2',
|
||||
reply_markup: {
|
||||
|
@ -1108,116 +1156,80 @@ bot.onText(/\/profil/, (msg) => {
|
|||
]
|
||||
}
|
||||
}).catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
});
|
||||
} else {
|
||||
// Datei existiert nicht, einfach die Nachricht senden
|
||||
const profileMessage = `
|
||||
📝 *Profil Informationen:*\n\n
|
||||
👤 *Name:* @${userName}\n
|
||||
🔑 *ID:* ${userId}\n
|
||||
👤 *Nutzerrolle:* ${role}\n
|
||||
🌟 *Benutzerlevel:* ${userLevel}\n
|
||||
📅 *Registrierung:* ${firstUsedDate}\n
|
||||
📰 *Newsletter:* ${newsletterStatus}\n
|
||||
📋 *Anzahl der Wünsche:* ${wishesCount}\n
|
||||
📬 *Anzahl der Feedbacks:* 0\n
|
||||
🔔 *Benachrichtigung:* ${notificationStatus}\n
|
||||
`.trim(); // Whitespace entfernen
|
||||
|
||||
bot.sendMessage(chatId, profileMessage, {
|
||||
parse_mode: 'MarkdownV2',
|
||||
reply_markup: {
|
||||
inline_keyboard: [
|
||||
[{ text: 'Profil Bearbeiten', callback_data: 'edit_profile' }]
|
||||
]
|
||||
}
|
||||
}).catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// Callback query handler for profile editing
|
||||
bot.on('callback_query', (callbackQuery) => {
|
||||
const action = callbackQuery.data;
|
||||
const chatId = callbackQuery.message.chat.id;
|
||||
|
||||
if (action === 'edit_profile') {
|
||||
// Zeige Bearbeitungsoptionen an, wenn der Benutzer "Profil Bearbeiten" drückt
|
||||
bot.sendMessage(chatId, '🔍 Was möchten Sie tun? Wählen Sie eine der folgenden Optionen:', {
|
||||
reply_markup: {
|
||||
inline_keyboard: [
|
||||
[
|
||||
{ text: 'Lieblingsgenre setzen', callback_data: 'set_favorite_genre' },
|
||||
{ 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.');
|
||||
|
||||
// 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
|
||||
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}`));
|
||||
}
|
||||
});
|
||||
});
|
||||
// Zeige Bearbeitungsoptionen an, wenn der Benutzer "Profil Bearbeiten" drückt
|
||||
bot.sendMessage(chatId, '🔍 Was möchten Sie tun? Wählen Sie eine der folgenden Optionen:', {
|
||||
reply_markup: {
|
||||
inline_keyboard: [
|
||||
[
|
||||
{ text: 'Genre bearbeiten', callback_data: 'edit_genres' },
|
||||
{ text: 'Punkte löschen', callback_data: 'delete_points' },
|
||||
{ text: 'Profil zurücksetzen', callback_data: 'reset_profile' }
|
||||
],
|
||||
[
|
||||
{ text: 'Profil löschen', callback_data: 'delete_profile' }
|
||||
]
|
||||
]
|
||||
}
|
||||
});
|
||||
} else if (action === 'delete_points') {
|
||||
// Punkte auf 0 setzen
|
||||
} 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 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 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}`));
|
||||
}
|
||||
});
|
||||
|
@ -1286,121 +1307,88 @@ bot.on('callback_query', (callbackQuery) => {
|
|||
}
|
||||
});
|
||||
} else if (action === 'delete_profile') {
|
||||
// Profil löschen
|
||||
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 Löschen des Profils.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
// Profil löschen
|
||||
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 Löschen des Profils.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
|
||||
const users = load(userData);
|
||||
const users = load(userData);
|
||||
|
||||
// Überprüfen, ob der Benutzer existiert
|
||||
if (users[chatId]) {
|
||||
// Benutzer aus user.yml entfernen
|
||||
delete users[chatId];
|
||||
// Überprüfen, ob der Benutzer existiert
|
||||
if (users[chatId]) {
|
||||
// Benutzer aus user.yml entfernen
|
||||
delete users[chatId];
|
||||
|
||||
// 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 Löschen des Profils.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
// 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 Löschen des Profils.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
|
||||
// Lösche zugehörige Einträge in w_offen.json
|
||||
const wOffenFilePath = path.join(__dirname, 'w_offen.json'); // Pfad zur w_offen.json-Datei
|
||||
fs.readFile(wOffenFilePath, 'utf8', (err, wOffenData) => {
|
||||
if (err) {
|
||||
console.error(`Fehler beim Lesen der Datei ${wOffenFilePath}: ${err}`);
|
||||
bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
// Lösche zugehörige Einträge in w_offen.json
|
||||
const wOffenFilePath = path.join(__dirname, 'w_offen.json'); // Pfad zur w_offen.json-Datei
|
||||
fs.readFile(wOffenFilePath, 'utf8', (err, wOffenData) => {
|
||||
if (err) {
|
||||
console.error(`Fehler beim Lesen der Datei ${wOffenFilePath}: ${err}`);
|
||||
bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
|
||||
let wOffen;
|
||||
try {
|
||||
wOffen = JSON.parse(wOffenData); // Sicheres Parsen der JSON-Daten
|
||||
} catch (parseErr) {
|
||||
console.error(`Fehler beim Parsen der w_offen.json: ${parseErr}`);
|
||||
bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
let wOffen;
|
||||
try {
|
||||
wOffen = JSON.parse(wOffenData); // Sicheres Parsen der JSON-Daten
|
||||
} catch (parseErr) {
|
||||
console.error(`Fehler beim Parsen der w_offen.json: ${parseErr}`);
|
||||
bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
|
||||
// Entferne alle Wünsche des Benutzers
|
||||
wOffen = wOffen.filter(wish => wish.userId !== chatId);
|
||||
// Entferne alle Wünsche des Benutzers
|
||||
wOffen = wOffen.filter(wish => wish.userId !== chatId);
|
||||
|
||||
// Schreibe die aktualisierten Wünsche zurück in die w_offen.json
|
||||
fs.writeFile(wOffenFilePath, JSON.stringify(wOffen, null, 2), 'utf8', (err) => {
|
||||
if (err) {
|
||||
console.error(`Fehler beim Schreiben in die Datei ${wOffenFilePath}: ${err}`);
|
||||
bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
// Schreibe die aktualisierten Wünsche zurück in die w_offen.json
|
||||
fs.writeFile(wOffenFilePath, JSON.stringify(wOffen, null, 2), 'utf8', (err) => {
|
||||
if (err) {
|
||||
console.error(`Fehler beim Schreiben in die Datei ${wOffenFilePath}: ${err}`);
|
||||
bot.sendMessage(chatId, 'Fehler beim Löschen des Profils.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
return;
|
||||
}
|
||||
|
||||
// Lösche die Datei im Wunsch-Ordner
|
||||
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
|
||||
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}`));
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
} else {
|
||||
bot.sendMessage(chatId, '❌ Benutzer nicht gefunden.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
}
|
||||
});
|
||||
// Lösche die Datei im Wunsch-Ordner
|
||||
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) {
|
||||
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}`));
|
||||
} else {
|
||||
bot.sendMessage(chatId, '✅ Ihr Profil wurde erfolgreich gelöscht.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
} else {
|
||||
bot.sendMessage(chatId, '❌ Benutzer nicht gefunden.')
|
||||
.catch(error => console.error(`Fehler bei der Nachricht: ${error.message}`));
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
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,12 +5036,20 @@ 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 {
|
||||
// Pfad zur user.yml-Datei
|
||||
const filePath = path.join(__dirname, 'user.yml');
|
||||
|
||||
|
||||
// YAML-Datei laden
|
||||
const file = fs.readFileSync(filePath, 'utf8');
|
||||
|
||||
|
@ -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 => ({
|
||||
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
|
||||
}));
|
||||
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,
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue