bot.js aktualisiert

This commit is contained in:
M_Viper 2024-09-23 04:51:18 +00:00
parent f26d86703e
commit 9476a48234
1 changed files with 99 additions and 22 deletions

121
bot.js
View File

@ -12,7 +12,6 @@ const botStartTime = new Date(); // Startzeitpunkt des Bots
const token = process.env.BOT_TOKEN; const token = process.env.BOT_TOKEN;
const bot = new TelegramBot(token, { polling: true }); const bot = new TelegramBot(token, { polling: true });
// Admins aus der .env-Datei laden und als Objekt speichern (ID -> {Name, Username, Zuständigkeit}, in der Reihenfolge) // Admins aus der .env-Datei laden und als Objekt speichern (ID -> {Name, Username, Zuständigkeit}, in der Reihenfolge)
const admins = process.env.ADMINS.split(',').reduce((acc, admin) => { const admins = process.env.ADMINS.split(',').reduce((acc, admin) => {
const [id, name, username, responsibility] = admin.split(':').map(val => val.trim()); const [id, name, username, responsibility] = admin.split(':').map(val => val.trim());
@ -202,6 +201,65 @@ bot.onText(/\/report/, (msg) => {
}); });
}); });
bot.onText(/\/documentation/, (msg) => {
const chatId = msg.chat.id;
const documentationUrl = 'https://deine-dokumentation-url.com'; // Ersetze dies durch die tatsächliche URL
bot.sendMessage(chatId, 'Hier findest du die technische Dokumentation:', {
reply_markup: {
inline_keyboard: [[
{ text: 'Dokumentation ansehen', url: documentationUrl }
]]
}
});
});
// Befehl für Verbesserungsvorschläge
bot.onText(/\/verbesserung/, async (msg) => {
const chatId = msg.chat.id;
const userName = msg.from.username ? `@${msg.from.username}` : msg.from.first_name; // Benutzername oder Vorname
// Frage den Benutzer nach seinem Verbesserungsvorschlag
const confirmationMessage = await bot.sendMessage(chatId, '📝 Bitte gib deinen Verbesserungsvorschlag ein:');
// Warte auf die nächste Nachricht des Benutzers
bot.once('message', async (response) => {
if (response.chat.id === chatId) { // Sicherstellen, dass die Nachricht vom richtigen Chat kommt
const suggestion = response.text; // Der Verbesserungsvorschlag
// DEV-User aus der .env-Datei holen
const devId = process.env.DEV;
await bot.sendMessage(devId, `✨ Neuer Verbesserungsvorschlag\n\nVon: ${userName}\n\nText:\n\n"${suggestion}"`);
bot.sendMessage(chatId, '✅ Danke für deinen Verbesserungsvorschlag! Wir werden ihn uns anschauen.');
}
});
});
bot.onText(/\/id/, async (msg) => {
const chatId = msg.chat.id;
const userId = msg.from.id; // Benutzer-ID abrufen
const username = msg.from.username ? `@${msg.from.username.replace(/_/g, '\\_')}` : 'unbekannt'; // Benutzernamen abrufen und Unterstrich escapen
const responseMessage = `
📜 *Deine ID:*
- *Chat-ID:* ${chatId}
- *Benutzer-ID:* ${userId}
- *Benutzername:* ${username}
`;
// Prüfen, ob der Befehl in einer Gruppe verwendet wurde
if (msg.chat.type === 'group' || msg.chat.type === 'supergroup') {
// Sende die Nachricht privat an den Benutzer
await bot.sendMessage(userId, responseMessage, { parse_mode: 'Markdown' });
// Optional: Informiere den Benutzer in der Gruppe, dass die ID privat gesendet wurde
bot.sendMessage(chatId, 'Die Informationen wurden dir privat gesendet.');
} else {
// Wenn der Befehl im privaten Chat verwendet wird
bot.sendMessage(chatId, responseMessage, { parse_mode: 'Markdown' });
}
});
// Admins können ihren Status mit /online ändern // Admins können ihren Status mit /online ändern
bot.onText(/\/online/, async (msg) => { bot.onText(/\/online/, async (msg) => {
const adminId = msg.from.id.toString(); const adminId = msg.from.id.toString();
@ -260,6 +318,11 @@ cron.schedule('0 0 * * *', () => {
console.log("Alle Admins wurden um 00:00 Uhr auf offline gesetzt."); console.log("Alle Admins wurden um 00:00 Uhr auf offline gesetzt.");
}); });
// Fehlerbehandlung für das Polling
bot.on("polling_error", (error) => {
console.error(`Polling error: ${error.code}`, error.message);
});
// Initiale Überprüfung der Admin-Rechte in allen Gruppen // Initiale Überprüfung der Admin-Rechte in allen Gruppen
checkAllGroupsAdminRights(); checkAllGroupsAdminRights();
@ -1020,24 +1083,26 @@ bot.onText(/\/help/, (msg) => {
} }
// Normale Verarbeitung für nicht gesperrte Benutzer (User Befehle) // Normale Verarbeitung für nicht gesperrte Benutzer (User Befehle)
const helpMessage = `📋 Verfügbare Befehle:\n const helpMessage = `📋 Verfügbare Befehle:\n\n
- 🔍 /help - Zeigt diese Hilfe-Nachricht an\n
🔍 /help - Zeigt diese Hilfe-Nachricht an\n - /faq - Zeigt die FAQ an\n
🔗 /links - Zeigt eine Liste der gespeicherten Links an\n - 🔗 /links - Zeigt eine Liste der gespeicherten Links an\n
/faq - Zeigt die FAQ an\n - 📖 /documentation - Bietet Zugang zum Benutzerhandbuch\n
📝 /create_ticket - Reiche ein Support-Ticket ein\n - 📝 /create_ticket - Reiche ein Support-Ticket ein\n
👥 /admin - Zeigt eine Liste der Admins und deren Status\n - 👥 /admin - Zeigt eine Liste der Admins und deren Status\n
💬 /chat - Fordere einen Chat mit einem Admin an\n - 💬 /chat - Fordere einen Chat mit einem Admin an\n
/info - Zeigt Informationen über den Bot an\n - /info - Zeigt Informationen über den Bot an\n
/rate - Bewerte unseren Support\n - /rate - Bewerte unseren Support\n
🔗 /einladung - Erstelle einen persönlichen Einladungslink\n - 🔗 /einladung - Erstelle einen persönlichen Einladungslink\n
📅 /termin - Mache einen Chat-Termin mit einem Admin\n - 🆔 /id - zeigt dir deine USer ID und die Chat ID an\n
📩 /report - Melde eine Nachricht an die Admins\n - 📅 /termin - Mache einen Chat-Termin mit einem Admin\n
🚨 @admin - Informiere die Admins über eine Erwähnung im Chat\n - 🗑 /cancel_termin - Storniert einen Chat-Termin\n
🚨 /escalation - Melde ein Problem an alle Admins\n - 📩 /report - Melde eine Nachricht an die Admins\n
📜 /terms - Zeigt die Nutzungsbedingungen des Bots an\n - 🚨 @admin - Informiere die Admins über eine Erwähnung im Chat\n
🗑 /cancel_termin - Storniert einen Chat-Termin\n - 🚨 /escalation - Melde ein Problem an alle Admins\n
🎓 /tutorial - Startet ein Tutorial\n - 📜 /terms - Zeigt die Nutzungsbedingungen des Bots an\n
- 🎓 /tutorial - Startet ein Tutorial\n
- 🎤 /verbesserung - Verbesserungsvorschläge für den Bot machen\n
`; `;
bot.sendMessage(chatId, helpMessage); // Kein Markdown verwendet bot.sendMessage(chatId, helpMessage); // Kein Markdown verwendet
@ -1954,7 +2019,6 @@ function removeInternalNotifications(appointment) {
} }
} }
// Pfad zur Datei, in der die Benutzer-Daten gespeichert werden // Pfad zur Datei, in der die Benutzer-Daten gespeichert werden
const usersFilePath = path.join(dataDir, 'users.json'); const usersFilePath = path.join(dataDir, 'users.json');
@ -2606,6 +2670,18 @@ const tutorialSteps = [
command: '/cancel_termin', command: '/cancel_termin',
text: 'Mit dem Befehl /cancel_termin kannst du einen bereits vereinbarten Chat-Termin stornieren. Falls du nicht mehr an dem Termin teilnehmen kannst oder ihn aus einem anderen Grund absagen musst, kannst du diesen Befehl verwenden, um den Termin zu annullieren.' text: 'Mit dem Befehl /cancel_termin kannst du einen bereits vereinbarten Chat-Termin stornieren. Falls du nicht mehr an dem Termin teilnehmen kannst oder ihn aus einem anderen Grund absagen musst, kannst du diesen Befehl verwenden, um den Termin zu annullieren.'
}, },
{
command: '/id',
text: 'Mit dem Befehl /id kannst du deine eigene Benutzer-ID abrufen. Dies kann nützlich sein, wenn du deine ID für Support-Anfragen oder andere Zwecke benötigst.'
},
{
command: '/verbesserung',
text: 'Mit dem Befehl /verbesserung kannst du Verbesserungsvorschläge für den Bot einreichen. Wenn du Ideen oder Feedback hast, wie der Bot verbessert werden kann, kannst du diesen Befehl verwenden, um deine Vorschläge an die Admins zu senden.'
},
{
command: '/documentation',
text: 'Der Befehl /documentation gibt dir Zugang zu Dokumentationen und Anleitungen, die dir helfen, den Bot effektiver zu nutzen. Hier findest du nützliche Ressourcen, um die Funktionen des Bots besser zu verstehen.'
}
]; ];
let stepIndex = 0; let stepIndex = 0;
@ -2631,7 +2707,7 @@ const sendTutorialStep = (chatId) => {
} }
}); });
} else { } else {
bot.sendMessage(chatId, 'Das Tutorial ist abgeschlossen! Wenn du weitere Fragen hast, verwende den Befehl /help.'); bot.sendMessage(chatId, 'Das Tutorial ist abgeschlossen! Wenn du weitere Fragen hast, verwende den Befehl /help oder wende dich an einen Admin.');
} }
}; };
@ -2645,7 +2721,7 @@ bot.on('callback_query', (callbackQuery) => {
} }
}); });
bot.onText(/\/(help|links|faq|create_ticket|admin|chat|info|rate|einladung|termin|report|escalation|terms|cancel_termin)/, (msg) => { bot.onText(/\/(help|links|faq|create_ticket|admin|chat|info|rate|einladung|termin|report|escalation|terms|cancel_termin|id|verbesserung|documentation)/, (msg) => {
const chatId = msg.chat.id; const chatId = msg.chat.id;
if (chatId === currentChatId) { if (chatId === currentChatId) {
@ -2659,4 +2735,5 @@ bot.onText(/\/(help|links|faq|create_ticket|admin|chat|info|rate|einladung|termi
} }
}); });
console.log('Support-Bot mit Statusprüfung und Benachrichtigungen läuft...'); console.log('Support-Bot mit Statusprüfung und Benachrichtigungen läuft...');