# Telegram UserBot Модульный Telegram UserBot на JavaScript с поддержкой динамической загрузки команд. ## Установка 1. Получите API ключи на https://my.telegram.org 2. Установите зависимости: \`\`\`bash npm install \`\`\` 3. Замените в `telegram-userbot.js`: - `YOUR_API_ID` на ваш API ID - `YOUR_API_HASH` на ваш API Hash - `YOUR_PHONE_NUMBER` на ваш номер телефона ## Запуск \`\`\`bash node telegram-userbot.js \`\`\` ## Встроенные команды - `!help` - Список всех команд - `!info` - Информация о системе и аптайме - `!ping` - Пинг до DC2 Telegram - `!calc <выражение>` - Калькулятор - `!time` - Текущее время - `!docs` - Документация - `.lm <имя_модуля>` - Загрузить новый модуль ## Создание модулей ### Структура модуля Создайте файл в папке `modules/` с расширением `.js`: \`\`\`javascript export default { name: 'имя_команды', description: 'Описание команды', usage: '!команда [параметры]', async execute(client, message, args) { // Ваш код здесь await client.sendMessage(message.chatId, { message: 'Ответ команды' }); } }; \`\`\` ### Параметры функции execute - `client` - Экземпляр GramJS клиента - `message` - Объект сообщения с полями: - `chatId` - ID чата - `text` - Текст сообщения - `senderId` - ID отправителя - `args` - Массив аргументов команды (без самой команды) ### Пример простого модуля \`\`\`javascript export default { name: 'hello', description: 'Приветствие пользователя', usage: '!hello [имя]', async execute(client, message, args) { const name = args.length > 0 ? args.join(' ') : 'Мир'; await client.sendMessage(message.chatId, { message: `Привет, ${name}!` }); } }; \`\`\` ### Пример модуля с API запросом \`\`\`javascript export default { name: 'weather', description: 'Получить погоду', usage: '!weather <город>', async execute(client, message, args) { if (args.length === 0) { await client.sendMessage(message.chatId, { message: 'Укажите название города' }); return; } try { const city = args.join(' '); const response = await fetch(`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=YOUR_API_KEY&units=metric&lang=ru`); const data = await response.json(); if (data.cod === 200) { const weather = `🌤 Погода в ${data.name}:\n` + `🌡 Температура: ${data.main.temp}°C\n` + `💨 Ветер: ${data.wind.speed} м/с\n` + `💧 Влажность: ${data.main.humidity}%`; await client.sendMessage(message.chatId, { message: weather }); } else { await client.sendMessage(message.chatId, { message: 'Город не найден' }); } } catch (error) { await client.sendMessage(message.chatId, { message: 'Ошибка получения данных о погоде' }); } } }; \`\`\` ### Загрузка модулей 1. **Автоматическая загрузка**: Поместите файл в папку `modules/` и перезапустите бота 2. **Динамическая загрузка**: Используйте команду `.lm имя_модуля` для загрузки без перезапуска ### Рекомендации - Используйте async/await для асинхронных операций - Обрабатывайте ошибки с помощью try/catch - Проверяйте наличие аргументов перед их использованием - Используйте описательные имена команд - Добавляйте проверки входных данных - Не забывайте про обработку edge cases ### Отладка Для отладки используйте `console.log()` в коде модуля. Логи будут отображаться в консоли бота. ### Безопасность - Не используйте `eval()` или подобные функции - Валидируйте пользовательский ввод - Не храните чувствительные данные в коде - Используйте переменные окружения для API ключей