plex-bot.js aktualisiert

This commit is contained in:
M_Viper 2024-10-17 22:46:38 +00:00
parent 30c940be00
commit b1f96183f3
1 changed files with 5196 additions and 5076 deletions

View File

@ -329,17 +329,60 @@ bot.onText(/\/trailer/, (msg) => {
}); });
}); });
// Globale Variable zum Zählen der Passwortanforderungen
let passwordRequestCount = 0;
let passwordChangeRequired = false; // Sperrt Login, wenn Passwortänderung nötig ist
let newPassword = ''; // Speichert das neue Passwort
bot.onText(/\/passwd/, (msg) => { bot.onText(/\/passwd/, (msg) => {
const chatId = msg.chat.id; const chatId = msg.chat.id;
const userId = msg.from.id.toString(); const userId = msg.from.id.toString();
// Überprüfen, ob das Passwort geändert werden muss
if (passwordChangeRequired) {
const reply = `⚠️ Der Befehl /passwd ist zurzeit nicht verfügbar! Der Zugang wurde gesperrt bitte wenden dich an den Admin.`;
bot.sendMessage(chatId, reply, { parse_mode: 'HTML' });
return; // Beende die Ausführung, wenn das Passwort geändert werden muss
}
if (authorizedUsers.includes(userId)) { if (authorizedUsers.includes(userId)) {
const password = process.env.ADMIN_PW; // Passwort aus der .env-Datei // Zähler für Passwortanforderungen erhöhen
passwordRequestCount++;
// Wenn die Anzahl der Anfragen 10 erreicht, muss das Passwort geändert werden
if (passwordRequestCount >= 10) {
newPassword = generateRandomPassword(); // Zufälliges sicheres Passwort generieren
updateEnvPassword(newPassword); // Neues Passwort in der .env speichern
const changePwMessage = `⚠️ Du hast das Passwort zu oft angefordert. Der Zugang wurde gesperrt.`;
bot.sendMessage(chatId, changePwMessage, {
parse_mode: 'HTML',
protect_content: true,
}).then((sentMessage) => {
setTimeout(() => {
bot.deleteMessage(chatId, sentMessage.message_id).catch((err) => {
console.error('Fehler beim Löschen der Nachricht:', err);
});
}, 30000); // 30 Sekunden
});
// Zähler zurücksetzen und Sperre aktivieren
passwordRequestCount = 0;
passwordChangeRequired = true; // Passwort muss geändert werden
return; // Beende die Ausführung, um das alte Passwort nicht mehr zu senden
}
// Passwort aus der .env-Datei holen
const password = process.env.ADMIN_PW;
const reply = `🔒 Das Passwort für den Adminbereich lautet:\n\n<span class="tg-spoiler">${password}</span>\n\n‼️<em>Hinweis:‼\n</em> Diese Nachricht wird automatisch in 30 Sekunden gelöscht.`; const reply = `🔒 Das Passwort für den Adminbereich lautet:\n\n<span class="tg-spoiler">${password}</span>\n\n‼️<em>Hinweis:‼\n</em> Diese Nachricht wird automatisch in 30 Sekunden gelöscht.`;
bot.sendMessage(chatId, reply, { bot.sendMessage(chatId, reply, {
parse_mode: 'HTML', parse_mode: 'HTML',
protect_content: true // Inhalt schützen protect_content: true, // Inhalt schützen
}).then((sentMessage) => { }).then((sentMessage) => {
setTimeout(() => { setTimeout(() => {
bot.deleteMessage(chatId, sentMessage.message_id).catch((err) => { bot.deleteMessage(chatId, sentMessage.message_id).catch((err) => {
@ -355,7 +398,7 @@ bot.onText(/\/passwd/, (msg) => {
}, 30000); // 30 Sekunden }, 30000); // 30 Sekunden
// Nachricht an den Dev senden // Nachricht an den Dev senden
const devMessage = `🔒 Das Passwort für den Adminbereich wurde angefordert von:\n\n\n👤 <strong>@${msg.from.username}</strong>\n\n🆔 ID: <strong>${userId}</strong>\n\n\n📅 Datum: <strong>${new Date().toLocaleDateString('de-DE')}</strong>\n\n🕒 Uhrzeit: <strong>${new Date().toLocaleTimeString('de-DE')}</strong>`; const devMessage = `🔒 Das Passwort für den Adminbereich wurde angefordert von:\n\n👤 <strong>@${msg.from.username}</strong>\n\n🆔 ID: <strong>${userId}</strong>\n\n📅 Datum: <strong>${new Date().toLocaleDateString('de-DE')}</strong>\n\n🕒 Uhrzeit: <strong>${new Date().toLocaleTimeString('de-DE')}</strong>`;
bot.sendMessage(process.env.DEV_CHAT_ID, devMessage, { parse_mode: 'HTML' }).catch((err) => { bot.sendMessage(process.env.DEV_CHAT_ID, devMessage, { parse_mode: 'HTML' }).catch((err) => {
console.error('Fehler beim Senden der Dev-Nachricht:', err); console.error('Fehler beim Senden der Dev-Nachricht:', err);
@ -365,7 +408,7 @@ bot.onText(/\/passwd/, (msg) => {
bot.sendMessage(chatId, reply, { bot.sendMessage(chatId, reply, {
parse_mode: 'HTML', parse_mode: 'HTML',
protect_content: true // Inhalt schützen protect_content: true,
}).then((sentMessage) => { }).then((sentMessage) => {
setTimeout(() => { setTimeout(() => {
bot.deleteMessage(chatId, sentMessage.message_id).catch((err) => { bot.deleteMessage(chatId, sentMessage.message_id).catch((err) => {
@ -382,11 +425,88 @@ bot.onText(/\/passwd/, (msg) => {
} }
}); });
// /key Befehl
bot.onText(/\/key/, (msg) => {
const chatId = msg.chat.id;
const userId = msg.from.id.toString();
if (authorizedUsers.includes(userId)) {
if (passwordChangeRequired) {
const reply = `🔑 Neues Passwort:\n<span class="tg-spoiler">${newPassword}</span>\n\nDiese Nachricht wird in 30 Sekunden gelöscht.`;
bot.sendMessage(chatId, reply, { parse_mode: 'HTML' }).then((sentMessage) => {
setTimeout(() => {
bot.deleteMessage(chatId, sentMessage.message_id);
}, 30000);
});
setTimeout(() => {
bot.deleteMessage(chatId, msg.message_id);
}, 30000);
passwordChangeRequired = false; // /passwd wieder aktivieren
} else {
bot.sendMessage(chatId, "⚠️ Das Passwort wurde nicht geändert. Du kannst den /passwd Befehl nutzen.", { parse_mode: 'HTML' });
}
} else {
bot.sendMessage(chatId, "🚫 Zugriff verweigert!", { parse_mode: 'HTML' });
}
});
// Funktion zum Generieren eines sicheren zufälligen Passworts mit mindestens 12 Zeichen
function generateRandomPassword() {
const uppercaseChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const lowercaseChars = 'abcdefghijklmnopqrstuvwxyz';
const digits = '0123456789';
const specialChars = '@#$!';
const allChars = uppercaseChars + lowercaseChars + digits + specialChars;
let password = '';
// Stelle sicher, dass das Passwort mindestens je einen Großbuchstaben, Kleinbuchstaben, Zahl und Sonderzeichen enthält
password += uppercaseChars.charAt(Math.floor(Math.random() * uppercaseChars.length));
password += lowercaseChars.charAt(Math.floor(Math.random() * lowercaseChars.length));
password += digits.charAt(Math.floor(Math.random() * digits.length));
password += specialChars.charAt(Math.floor(Math.random() * specialChars.length));
// Fülle das restliche Passwort mit zufälligen Zeichen auf, um 12 Zeichen zu erreichen
for (let i = 4; i < 12; i++) {
password += allChars.charAt(Math.floor(Math.random() * allChars.length));
}
// Das Passwort zufällig durchmischen
return shuffleString(password);
}
// Funktion zum Mischen eines Strings (optional, um die Zeichen zufällig anzuordnen)
function shuffleString(string) {
const array = string.split('');
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array.join('');
}
// Funktion zum Aktualisieren des Passworts in der .env-Datei
function updateEnvPassword(newPassword) {
const envFilePath = path.resolve(__dirname, '.env');
// Die aktuelle .env-Datei lesen
let envContent = fs.readFileSync(envFilePath, 'utf-8');
// Das Passwort in der Datei ändern
envContent = envContent.replace(/ADMIN_PW=.*/, `ADMIN_PW=${newPassword}`);
// Die geänderte Datei speichern
fs.writeFileSync(envFilePath, envContent);
// Umgebungsvariable aktualisieren, ohne den Bot neu zu starten
process.env.ADMIN_PW = newPassword;
// Passwortänderung abgeschlossen
passwordChangeRequired = false; // Sperre aufheben, Login wieder möglich
}
const usersNightMode = {}; // Temporärer Speicher für Nachtmodus const usersNightMode = {}; // Temporärer Speicher für Nachtmodus