diff --git a/README.md b/README.md index d5f7f43..32cbd08 100644 --- a/README.md +++ b/README.md @@ -1,206 +1,144 @@ -# πŸ“š Telegram UserBot - Полная докумСнтация +# Telegram UserBot -## πŸš€ ОписаниС -ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ Telegram UserBot Π½Π° JavaScript с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ GramJS. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ вашСго Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄. +ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ Telegram UserBot Π½Π° JavaScript с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ динамичСской Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄. -## πŸ“ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° -\`\`\` -scripts/ -β”œβ”€β”€ telegram-userbot.js # Основной Ρ„Π°ΠΉΠ» Π±ΠΎΡ‚Π° -β”œβ”€β”€ modules/ # Папка с модулями ΠΊΠΎΠΌΠ°Π½Π΄ -β”‚ β”œβ”€β”€ help.js # Π‘ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ -β”‚ β”œβ”€β”€ info.js # БистСмная информация -β”‚ β”œβ”€β”€ ping.js # Пинг Π΄ΠΎ Telegram DC2 -β”‚ β”œβ”€β”€ calc.js # ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ -β”‚ β”œβ”€β”€ time.js # Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя -β”‚ β”œβ”€β”€ loadmod.js # ДинамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ -β”‚ └── docs.js # ДокумСнтация -β”œβ”€β”€ package.json # Зависимости ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° -└── USERBOT_DOCS.md # Π­Ρ‚Π° докумСнтация -\`\`\` +## Установка -## πŸ› οΈ Установка ΠΈ настройка - -### 1. Установка зависимостСй +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` Π½Π° ваш Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° -### 2. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ API ΠΊΠ»ΡŽΡ‡Π΅ΠΉ -1. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° https://my.telegram.org -2. Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅ Π² свой Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ Telegram -3. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ -4. Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ API ID ΠΈ API Hash +## Запуск -### 3. Настройка Π±ΠΎΡ‚Π° -ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» `telegram-userbot.js` ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅: -- `YOUR_API_ID` Π½Π° ваш API ID -- `YOUR_API_HASH` Π½Π° ваш API Hash -- `YOUR_PHONE_NUMBER` Π½Π° ваш Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° - -### 4. Запуск \`\`\`bash node telegram-userbot.js \`\`\` -## πŸ“‹ ВстроСнныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ +## ВстроСнныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ -| Команда | ОписаниС | ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования | -|---------|----------|---------------------| -| `!help` | ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС доступныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ | `!help` | -| `!info` | БистСмная информация ΠΈ статистика | `!info` | -| `!ping` | Пинг Π΄ΠΎ Telegram DC2 | `!ping` | -| `!calc` | ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ скобок | `!calc 2+2*3` | -| `!time` | Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя ΠΈ Π΄Π°Ρ‚Π° | `!time` | -| `!docs` | ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ | `!docs` | -| `.lm` | Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ | `.lm mymodule` | +- `!help` - Бписок всСх ΠΊΠΎΠΌΠ°Π½Π΄ +- `!info` - Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ систСмС ΠΈ Π°ΠΏΡ‚Π°ΠΉΠΌΠ΅ +- `!ping` - Пинг Π΄ΠΎ DC2 Telegram +- `!calc <Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅>` - ΠšΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€ +- `!time` - Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя +- `!docs` - ДокумСнтация +- `.lm <имя_модуля>` - Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ -## πŸ”§ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ собствСнных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +## Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ### Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° модуля + +Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΠ΅ `modules/` с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ `.js`: + \`\`\`javascript export default { - name: 'commandname', // Имя ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ) - description: 'ОписаниС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹', // ОписаниС (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) - usage: '!commandname ', // ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования (ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ) - - async execute(client, message, args, commands) { - try { - // Π’Π°Ρˆ ΠΊΠΎΠ΄ здСсь - await client.sendMessage(message.chatId, { - message: 'ΠžΡ‚Π²Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹' - }); - } catch (error) { - console.error('Ошибка:', error); - await client.sendMessage(message.chatId, { - message: '❌ ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка' - }); - } + name: 'имя_ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹', + description: 'ОписаниС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹', + usage: '!ΠΊΠΎΠΌΠ°Π½Π΄Π° [ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹]', + async execute(client, message, args) { + // Π’Π°Ρˆ ΠΊΠΎΠ΄ здСсь + await client.sendMessage(message.chatId, { + message: 'ΠžΡ‚Π²Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹' + }); } }; \`\`\` ### ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ execute -- **client** - ЭкзСмпляр GramJS ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° для взаимодСйствия с Telegram API -- **message** - ΠžΠ±ΡŠΠ΅ΠΊΡ‚ сообщСния с полями: +- `client` - ЭкзСмпляр GramJS ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° +- `message` - ΠžΠ±ΡŠΠ΅ΠΊΡ‚ сообщСния с полями: - `chatId` - ID Ρ‡Π°Ρ‚Π° - - `text` - ΠŸΠΎΠ»Π½Ρ‹ΠΉ тСкст сообщСния - - `fromId` - ID отправитСля -- **args** - Массив Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹) -- **commands** - Map всСх Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ - -### ΠŸΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ client - -\`\`\`javascript -// ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСния -await client.sendMessage(chatId, { message: 'ВСкст' }); - -// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ сСбС -const me = await client.getMe(); - -// ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ списка Ρ‡Π°Ρ‚ΠΎΠ² -const dialogs = await client.getDialogs(); -\`\`\` + - `text` - ВСкст сообщСния + - `senderId` - ID отправитСля +- `args` - Массив Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Π±Π΅Π· самой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹) ### ΠŸΡ€ΠΈΠΌΠ΅Ρ€ простого модуля + \`\`\`javascript -// modules/hello.js 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}!` + message: `ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ${name}!` }); } }; \`\`\` -## ⚑ ДинамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ +### ΠŸΡ€ΠΈΠΌΠ΅Ρ€ модуля с API запросом -### Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ модуля -1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» модуля Π² ΠΏΠ°ΠΏΠΊΠ΅ `modules/` -2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ `.lm имя_Ρ„Π°ΠΉΠ»Π°` для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ -3. ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ доступСн сразу Π±Π΅Π· пСрСзапуска Π±ΠΎΡ‚Π° - -### ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ модуля -Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `.lm имя_модуля` для ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ модуля с обновлСниями. - -## πŸ”’ Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ - -- Userbot Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с сообщСниями ΠΎΡ‚ вашСго Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° -- НС ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ API ΠΊΠ»ΡŽΡ‡ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌ Π»ΠΈΡ†Π°ΠΌ -- Π‘ΡƒΠ΄ΡŒΡ‚Π΅ остороТны с модулями ΠΎΡ‚ нСизвСстных источников -- РСгулярно провСряйтС ΠΊΠΎΠ΄ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ - -## πŸ› ΠžΡ‚Π»Π°Π΄ΠΊΠ° - -### Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ -Π‘ΠΎΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ Π»ΠΎΠ³ΠΈ Π² консоль: -- Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ -- Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ -- Ошибки ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ - -### ЧастыС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ - -1. **"require is not defined"** - - Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ `export default` вмСсто `module.exports` - - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ `"type": "module"` Π² package.json - -2. **"Could not find the input entity"** - - ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ sendMessage - - Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ chatId - -3. **ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π½Π΅ загруТаСтся** - - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ синтаксис модуля - - Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» находится Π² ΠΏΠ°ΠΏΠΊΠ΅ modules/ - -## πŸ“ˆ Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ возмоТности - -### Π Π°Π±ΠΎΡ‚Π° с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… \`\`\`javascript -// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΊΠ°ΠΊ Π‘Π” -import fs from 'fs'; - -const data = JSON.parse(fs.readFileSync('data.json', 'utf8')); -data.users.push(newUser); -fs.writeFileSync('data.json', JSON.stringify(data, null, 2)); +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: 'Ошибка получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΎΠ³ΠΎΠ΄Π΅' + }); + } + } +}; \`\`\` -### HTTP запросы -\`\`\`javascript -// ΠŸΡ€ΠΈΠΌΠ΅Ρ€ HTTP запроса -const response = await fetch('https://api.example.com/data'); -const data = await response.json(); -\`\`\` +### Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ -### Π Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ -\`\`\`javascript -import fs from 'fs'; -import path from 'path'; +1. **АвтоматичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°**: ΠŸΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» Π² ΠΏΠ°ΠΏΠΊΡƒ `modules/` ΠΈ пСрСзапуститС Π±ΠΎΡ‚Π° +2. **ДинамичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°**: Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ `.lm имя_модуля` для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π±Π΅Π· пСрСзапуска -// Π§Ρ‚Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° -const content = fs.readFileSync('file.txt', 'utf8'); +### Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ -// Π—Π°ΠΏΠΈΡΡŒ Ρ„Π°ΠΉΠ»Π° -fs.writeFileSync('output.txt', 'content'); -\`\`\` +- Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ async/await для асинхронных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ +- ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ошибки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ try/catch +- ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉΡ‚Π΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… использованиСм +- Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ +- ДобавляйтС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… +- НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ edge cases -## 🀝 Π’ΠΊΠ»Π°Π΄ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ +### ΠžΡ‚Π»Π°Π΄ΠΊΠ° -1. Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ -2. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ свой ΠΊΠΎΠ΄ -3. ВСстируйтС ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ -4. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ ΡΡ‚ΠΈΠ»ΡŽ кодирования ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° +Для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `console.log()` Π² ΠΊΠΎΠ΄Π΅ модуля. Π›ΠΎΠ³ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ Π² консоли Π±ΠΎΡ‚Π°. -## πŸ“ž ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° +### Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ -ΠŸΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: -1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π»ΠΎΠ³ΠΈ Π² консоли -2. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ API ΠΊΠ»ΡŽΡ‡Π΅ΠΉ -3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ синтаксис ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ -4. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ GramJS +- НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ `eval()` ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ +- Π’Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄ +- НС Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠ΄Π΅ +- Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния для API ΠΊΠ»ΡŽΡ‡Π΅ΠΉ