133 lines
4.8 KiB
JavaScript
133 lines
4.8 KiB
JavaScript
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)
|
||
})
|