userbot/README.md

145 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 ключей