Добавить telegram-userbot.js
This commit is contained in:
parent
5a53fe449c
commit
7a758802fe
184
telegram-userbot.js
Normal file
184
telegram-userbot.js
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
import { TelegramClient } from "telegram"
|
||||||
|
import { StringSession } from "telegram/sessions/index.js"
|
||||||
|
import { NewMessage } from "telegram/events/index.js"
|
||||||
|
import fs from "fs"
|
||||||
|
import path from "path"
|
||||||
|
import { fileURLToPath } from "url"
|
||||||
|
import readline from "readline"
|
||||||
|
|
||||||
|
const __filename = fileURLToPath(import.meta.url)
|
||||||
|
const __dirname = path.dirname(__filename)
|
||||||
|
|
||||||
|
const apiId = "YOUR_API_ID"
|
||||||
|
const apiHash = "YOUR_API_HASH"
|
||||||
|
const phoneNumber = "YOUR_PHONE_NUMBER"
|
||||||
|
|
||||||
|
const sessionFile = path.join(__dirname, "session.txt")
|
||||||
|
let stringSession = ""
|
||||||
|
|
||||||
|
if (fs.existsSync(sessionFile)) {
|
||||||
|
stringSession = fs.readFileSync(sessionFile, "utf8")
|
||||||
|
}
|
||||||
|
|
||||||
|
const client = new TelegramClient(new StringSession(stringSession), apiId, apiHash, {
|
||||||
|
connectionRetries: 5,
|
||||||
|
})
|
||||||
|
|
||||||
|
const commands = new Map()
|
||||||
|
const startTime = Date.now()
|
||||||
|
|
||||||
|
async function loadCommands() {
|
||||||
|
const modulesDir = path.join(__dirname, "modules")
|
||||||
|
|
||||||
|
if (!fs.existsSync(modulesDir)) {
|
||||||
|
console.log("Папка modules не найдена. Создаю...")
|
||||||
|
fs.mkdirSync(modulesDir, { recursive: true })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const files = fs.readdirSync(modulesDir).filter((file) => file.endsWith(".js"))
|
||||||
|
|
||||||
|
for (const file of files) {
|
||||||
|
try {
|
||||||
|
const modulePath = path.join(modulesDir, file)
|
||||||
|
delete require.cache[require.resolve(modulePath)]
|
||||||
|
|
||||||
|
const module = await import(`file://${modulePath}?t=${Date.now()}`)
|
||||||
|
const command = module.default
|
||||||
|
|
||||||
|
if (command && command.name && command.execute) {
|
||||||
|
commands.set(command.name, command)
|
||||||
|
console.log(`Загружен модуль: ${file}`)
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`Ошибка загрузки модуля ${file}: ${error.message}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`Загружено команд: ${commands.size}`)
|
||||||
|
|
||||||
|
if (commands.size === 0) {
|
||||||
|
console.log("Команды не найдены. Убедитесь, что файлы команд находятся в папке modules/")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function reloadCommand(commandName) {
|
||||||
|
const modulePath = path.join(__dirname, "modules", `${commandName}.js`)
|
||||||
|
|
||||||
|
if (!fs.existsSync(modulePath)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
delete require.cache[require.resolve(modulePath)]
|
||||||
|
const module = await import(`file://${modulePath}?t=${Date.now()}`)
|
||||||
|
const command = module.default
|
||||||
|
|
||||||
|
if (command && command.name && command.execute) {
|
||||||
|
commands.set(command.name, command)
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log(`Ошибка перезагрузки модуля ${commandName}: ${error.message}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
client.addEventHandler(async (event) => {
|
||||||
|
try {
|
||||||
|
const message = event.message
|
||||||
|
if (!message || !message.text) return
|
||||||
|
|
||||||
|
const sender = await message.getSender()
|
||||||
|
if (!sender || sender.id.toString() !== (await client.getMe()).id.toString()) return
|
||||||
|
|
||||||
|
const text = message.text.trim()
|
||||||
|
if (!text.startsWith("!") && !text.startsWith(".")) return
|
||||||
|
|
||||||
|
const args = text.slice(1).split(" ")
|
||||||
|
const commandName = args.shift().toLowerCase()
|
||||||
|
|
||||||
|
if (commandName === "lm" || commandName === "loadmod") {
|
||||||
|
if (args.length === 0) {
|
||||||
|
await client.sendMessage(message.chatId, {
|
||||||
|
message: "Использование: .lm <название_модуля>\nПример: .lm ping",
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const moduleName = args[0]
|
||||||
|
const success = await reloadCommand(moduleName)
|
||||||
|
|
||||||
|
if (success) {
|
||||||
|
await client.sendMessage(message.chatId, {
|
||||||
|
message: `Модуль ${moduleName} успешно загружен/перезагружен`,
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
await client.sendMessage(message.chatId, {
|
||||||
|
message: `Ошибка загрузки модуля ${moduleName}. Проверьте, что файл ${moduleName}.js существует в папке modules/`,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const command = commands.get(commandName)
|
||||||
|
if (!command) return
|
||||||
|
|
||||||
|
await command.execute(client, message, args, { startTime })
|
||||||
|
} catch (error) {
|
||||||
|
console.log("Ошибка обработки сообщения:", error)
|
||||||
|
}
|
||||||
|
}, new NewMessage({}))
|
||||||
|
|
||||||
|
async function start() {
|
||||||
|
console.log("Запуск Telegram UserBot...")
|
||||||
|
|
||||||
|
try {
|
||||||
|
await client.start({
|
||||||
|
phoneNumber: async () => phoneNumber,
|
||||||
|
password: async () => {
|
||||||
|
const rl = readline.createInterface({
|
||||||
|
input: process.stdin,
|
||||||
|
output: process.stdout,
|
||||||
|
})
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
rl.question("Введите пароль двухфакторной аутентификации: ", (answer) => {
|
||||||
|
rl.close()
|
||||||
|
resolve(answer)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
phoneCode: async () => {
|
||||||
|
const rl = readline.createInterface({
|
||||||
|
input: process.stdin,
|
||||||
|
output: process.stdout,
|
||||||
|
})
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
rl.question("Введите код из Telegram: ", (answer) => {
|
||||||
|
rl.close()
|
||||||
|
resolve(answer)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
onError: (err) => console.log("Ошибка авторизации:", err),
|
||||||
|
})
|
||||||
|
|
||||||
|
const session = client.session.save()
|
||||||
|
fs.writeFileSync(sessionFile, session)
|
||||||
|
console.log("Сессия сохранена")
|
||||||
|
|
||||||
|
await loadCommands()
|
||||||
|
|
||||||
|
console.log("UserBot запущен и готов к работе!")
|
||||||
|
console.log("Доступные команды:")
|
||||||
|
commands.forEach((command, name) => {
|
||||||
|
console.log(`!${name} - ${command.description || "Нет описания"}`)
|
||||||
|
})
|
||||||
|
console.log("Отправьте !help в любой чат для получения справки")
|
||||||
|
} catch (error) {
|
||||||
|
console.log("Ошибка запуска:", error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
start()
|
||||||
Loading…
x
Reference in New Issue
Block a user