[AskJS] Как создать бота на Node.js?

Привет всем!

Я прохожу курс “Курсы JavaScript от 0 до PRO – Полное руководство” и столкнулся с проблемой при создании бота на Node.js с использованием Telegraf и Google Translate API.

Вот часть кода, который у меня есть:

const { Telegraf } = require('telegraf');
const translate = require('google-translate-api-x');

const botToken = 'bootToken';
const bot = new Telegraf(botToken);
const targetChannel = '@channelName';
const allowedUserId = 0000000000;

bot.on('message', async (ctx) => {
    if (ctx.from && ctx.from.id === allowedUserId) {
        try {
            let translatedText = '';
            if (ctx.message.text) {
                const originalText = ctx.message.text;
                try {
                    const translation = await translate(originalText, { from: 'en', to: 'ar' });
                    translatedText = translation.text;
                } catch (error) {
                    console.error('Translation error:', error);
                    translatedText = originalText;
                }
            }
            const mediaGroup = [];
            if (ctx.message.photo) {
                const highestQualityPhoto = ctx.message.photo[ctx.message.photo.length - 1];
                mediaGroup.push({ type: 'photo', media: highestQualityPhoto.file_id });
            }
            if (ctx.message.video) {
                mediaGroup.push({ type: 'video', media: ctx.message.video.file_id });
            }
            if (mediaGroup.length > 0 && translatedText) {
                mediaGroup[0].caption = translatedText;
            }
            if (mediaGroup.length > 0) {
                await bot.telegram.sendMediaGroup(targetChannel, mediaGroup);
            } else if (translatedText) {
                await bot.telegram.sendMessage(targetChannel, translatedText);
            }
        } catch (error) {
            console.error('Error processing or sending message:', error);
        }
    } else {
        console.log(`Message ignored from user: ${ctx.from.username} (ID: ${ctx.from.id})`);
    }
});

bot.launch().then(() => {
    console.log('Bot is running...');
}).catch((error) => {
    console.error('Failed to launch bot:', error);
});

Проблема в том, что код не работает, как ожидалось. Может быть кто-то сталкивался с чем-то подобным и сможет мне помочь? Я буду очень признателен за любые советы или рекомендации!

Спасибо!

Привет!

Судя по коду, вы делаете всё правильно, но давайте проверим несколько моментов, которые могут вызвать проблемы.

1. Токен бота

Убедитесь, что переменная botToken содержит правильный токен вашего бота. Это критично!

2. ID пользователя

Проверьте, что allowedUserId содержит правильный ID пользователя, который должен отправлять сообщения. Если у вас есть доступ к консоли, вы можете вывести ctx.from.id в лог для проверки.

3. Ошибки при переводе

Вы уже обрабатываете ошибки для API перевода. Убедитесь, что библиотека google-translate-api-x установлена и работает корректно. Если API не доступен, может вернуть ошибку.

4. Формат медиа

Убедитесь, что данные о фото и видео правильные. Проверьте, что ctx.message.photo и ctx.message.video действительно содержат нужные данные. Можете добавить лог в код, чтобы посмотреть, что приходит в ctx.message.

5. Использование mediaGroup

Telegram может иметь ограничения на количество медиа в одном запросе. Попробуйте сначала отправить только текстовое сообщение и затем добавить медиа.

6. Логи

Постарайтесь добавить больше логов, чтобы понять, на каком именно этапе происходит сбой. Это позволит быстрее диагностировать проблему.

Вот улучшенный вариант вашего логирования:

console.log('Received message:', originalText);

Помимо этого, вы можете добавить логирование перед отправкой сообщений в каждые await:

console.log('Sending media group:', mediaGroup);

Если вы поделитесь конкретной ошибкой, которая возникает, я смогу помочь более предметно. Не стесняйтесь задавать вопросы! Удачи с вашим ботом! . Я ответил на ваш вопрос?

Чувак, ты не поверишь, я решил замутить бота на Node.js, но что-то пошло не так. Я следил за одним туториалом, где всё просто разжевывали, но, как обычно, комплексные моменты где-то улетели из головы.

Сначала я скачал Node.js, всё установил, как по книжке. Сначала всё шло нормально: установил пакеты, даже npm поигралось. Круто было, пока не добрался до самого кода. Я так старался, а в итоге запустил всё, а бот даже не отвечал на команды! :weary:

Я там пробовал всякие библиотеки, вроде discord.js и node-telegram-bot-api, но что-то не шмогло. Ошибки всякие вылезали, и я читал их, как бабушка свои кроссворды — нихрена не понимал. В итоге запутался в этих асинхронных функциях и промисах. Казалось, что чем больше я копаю, тем запутанней всё становится.

Но потом я наткнулся на крутую тему — курсы на yodo.im. Там, братан, столько всего интересного! Я записался на курс по Node.js для новичков, и, знаешь, уже как-то стало легче. Там всё по полочкам разложили: объясняют, что к чему, показывают шаги. Люди даже вопросы задают, и на них отвечают прямо во время лекций. Короче, мне кажется, это то, что мне очень нужно!

Так что вот, буду учиться дальше и, надеюсь, в итоге всё получится, и бот заработает! Если не сдамся, конечно. :wink:

Привет!

Звучит как настоящий квест! :sweat_smile: Если ты столкнулся с проблемами при создании бота на Node.js, это вполне нормально — многие проходят через это на старте. Вот несколько советов, которые могут помочь тебе:

  1. Проверь свои токены и настройки: Убедись, что все токены (например, для Discord или Telegram) правильно указаны и что бот действительно активен в соответствующем приложении.

  2. Логи: Используй console.log() для отладки. Это поможет понять, какие части кода выполняются, а какие нет. Логируй ответы и ошибки, чтобы видеть, где может быть проблема.

  3. Асинхронность: Это действительно может запутать, особенно в начале. Если не уверенно чувствуешь себя с промисами и async/await, попробуй потратить немного времени на повторение этой темы. Может помочь с пониманием, как работают асинхронные функции.

  4. Документация и примеры: Посмотри примеры кода в документации discord.js и node-telegram-bot-api. Это может дать тебе более четкое представление о том, как использовать их. Часто там есть примеры, которые прямо подсказывают, как правильно настроить бота.

  5. Курсы и сообщества: Отлично, что ты записался на курс на yodo.im! Это действительно может облегчить процесс обучения. Не стесняйся спрашивать у других студентов или преподавателей — они могут дать много полезных советов.

Больше читая и практикуясь, ты обязательно разберешься! Удачи тебе в создании бота! :robot: Надеюсь, вскоре он заработает как часы! Не сдавайся! :muscle: . Я ответил на ваш вопрос?