diff --git a/scripts/bot.js b/scripts/bot.js new file mode 100644 index 0000000..88827f4 --- /dev/null +++ b/scripts/bot.js @@ -0,0 +1,132 @@ +const TelegramBot = require("node-telegram-bot-api") +const { getModules, addModule, findModules } = require("../lib/module-store") +const { isAdmin } = require("../lib/auth") + +const token = "123456"// <-- ЗАМЕНИТЕ ЭТО! + + +if (token === "123456" || !token) { + console.error("Пожалуйста, замените '123456' на реальный токен вашего бота в scripts/bot.js.") + process.exit(1) +} + +const bot = new TelegramBot(token, { polling: true }) + +console.log("Telegram bot started...") + +bot.onText(/\/start/, (msg) => { + const chatId = msg.chat.id + bot.sendMessage( + chatId, + "Привет! Я бот для управления модулями Exteragram. Используйте /search для поиска модулей или /admin для доступа к админ-панели (если вы администратор).", + ) +}) + +bot.onText(/\/admin/, (msg) => { + const chatId = msg.chat.id + if (isAdmin(msg.from.id)) { + bot.sendMessage( + chatId, + "Добро пожаловать в админ-панель! Отправьте мне файл модуля, чтобы добавить его. Вы также можете переслать мне сообщение с файлом из другого канала.", + ) + } else { + bot.sendMessage(chatId, "У вас нет прав администратора.") + } +}) + +bot.onText(/\/search/, (msg) => { + const chatId = msg.chat.id + bot.sendMessage(chatId, "Введите название модуля для поиска:") +}) + +bot.on("message", async (msg) => { + const chatId = msg.chat.id + const text = msg.text + + if (text && !text.startsWith("/") && !msg.document && !msg.forward_from_chat) { + const searchResults = findModules(text) + if (searchResults.length > 0) { + const inlineKeyboard = searchResults.map((module) => [ + { text: module.name, callback_data: `send_module_${module.id}` }, + ]) + bot.sendMessage(chatId, "Найденные модули:", { + reply_markup: { + inline_keyboard: inlineKeyboard, + }, + }) + } else { + bot.sendMessage(chatId, "Модули по вашему запросу не найдены.") + } + } +}) + +bot.on("document", async (msg) => { + const chatId = msg.chat.id + const document = msg.document + + if (isAdmin(msg.from.id)) { + const moduleName = document.file_name.replace(/\.exteragram_module$/, "") + const fileId = document.file_id + const sourceChannel = msg.forward_from_chat ? msg.forward_from_chat.title : "Direct Upload" + + addModule({ name: moduleName, file_id: fileId, source_channel: sourceChannel }) + bot.sendMessage(chatId, `Модуль "${moduleName}" успешно добавлен!`) + } else { + bot.sendMessage(chatId, "У вас нет прав для загрузки модулей.") + } +}) + +bot.on("forward", async (msg) => { + const chatId = msg.chat.id + if (isAdmin(msg.from.id) && msg.document) { + const document = msg.document + const moduleName = document.file_name.replace(/\.exteragram_module$/, "") + const fileId = document.file_id + const sourceChannel = msg.forward_from_chat ? msg.forward_from_chat.title : "Unknown Channel" + + addModule({ name: moduleName, file_id: fileId, source_channel: sourceChannel }) + bot.sendMessage(chatId, `Модуль "${moduleName}" из канала "${sourceChannel}" успешно добавлен!`) + } else if (isAdmin(msg.from.id) && !msg.document) { + bot.sendMessage(chatId, "Пересланное сообщение не содержит документа.") + } +}) + +bot.on("inline_query", async (inlineQuery) => { + const query = inlineQuery.query + const searchResults = findModules(query) + + const results = searchResults.map((module) => ({ + type: "document", + id: module.id, + title: module.name, + document_file_id: module.file_id, + caption: `Модуль: ${module.name}\nИсточник: ${module.source_channel}`, + })) + + bot.answerInlineQuery(inlineQuery.id, results, { cache_time: 0 }) +}) + +bot.on("callback_query", async (callbackQuery) => { + const message = callbackQuery.message + const data = callbackQuery.data + const chatId = message.chat.id + + if (data.startsWith("send_module_")) { + const moduleId = data.replace("send_module_", "") + const modules = getModules() + const moduleToSend = modules.find((m) => m.id === moduleId) + + if (moduleToSend) { + bot.sendDocument(chatId, moduleToSend.file_id, { + caption: `Вот ваш модуль: ${moduleToSend.name}\nИсточник: ${moduleToSend.source_channel}`, + }) + bot.answerCallbackQuery(callbackQuery.id, { text: "Модуль отправлен!" }) + } else { + bot.answerCallbackQuery(callbackQuery.id, { text: "Модуль не найден.", show_alert: true }) + } + } +}) + +bot.on("polling_error", (error) => { + console.error("Polling error:", error) +})