• Как зациклить запросы по идентификатору после получения списка идентификаторов в Postman?

    @Fellow_Fiend
    Документация Postman'а
    const res = pm.response.json();
    const ids = res.items.map(elem => elem.id);
    
    for (const id of ids) {
        pm.sendRequest(`https://api.hh.ru/vacancies/${id}`, (err, result) => {
            if (err) return console.err(err);
            console.log(Buffer(result.stream).toString('utf8'));
        })
    }
    Ответ написан
    1 комментарий
  • Как на телеграф js при нажатии на кнопку дать команду боту?

    @Fellow_Fiend
    Не инлайн кнопки не могут возвращать callback_data, и наоборот, инлайновые кнопки не могут возвращать текст.
    Про инлайн кнопки
    Про обычные кнопки

    Поэтому вам нужно изменить тип кнопок в клавиатуре и начать обрабатывать с помощью
    bot.command('command', callback) // вместо command - текст кнопки без /

    либо
    bot.on('text', callback) // и проверять не равно ли ctx.message.text нужному значению

    либо
    const { message } = require('telegraf/filters')
    
    bot.on(message('text'), callback) // рекомендуемая версия предыдущего примера


    Либо вы можете изменить тип клавиатуры на инлайновую и обрабатывать уже callback_data, кодом, который предложил выше StepsOnes
    Ответ написан
    Комментировать
  • Как передать объект от сцены к сцене в telegraf js?

    @Fellow_Fiend
    Знаю, что поздно, но отвечу для будущих ботоделов.
    Чтобы передавать объекты между handlers Wizard-сцены, в telegraf.js есть объект ctx.wizard.state, куда можно положить любые данные, например так:
    Пример ctx.wizard.state

    const { Composer, Scenes, Telegraf } = require('telegraf');
    
    const TELEGRAM_BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN;
    const bot = new Telegraf(TELEGRAM_BOT_TOKEN);
    
    const first_handler = new Composer();
    const second_handler = new Composer();
    const exit = new Composer();
    
    first_handler.on('text', async ctx => {
        ctx.wizard.state.name = ctx.message.text;
        await ctx.reply("Отлично, теперь введи свой возраст: ");
        return ctx.wizard.next();
    });
    second_handler.hears(/[0-9]+/, async ctx => {
        ctx.wizard.state.age = ctx.message.text;
        await ctx.reply('Отлично. Теперь введи свой адрес: ');
        return ctx.wizard.next();
    });
    
    exit.on('text', async ctx => {
          ctx.wizard.state.address = ctx.message.text;
          await ctx.reply(
    `Твое имя: ${ctx.wizard.state.name}
    Твой возраст: ${ctx.wizard.state.age}
    Твой адрес: ${ctx.wizard.state.address}`)
          return ctx.scene.leave();
    });
    
    const wizard_scene = new Scenes.WizardScene('wizard_scene', first_handler, second_handler, exit);
    const stage = new Scenes.Stage([wizard_scene]);
    bot.use(session(), stage.middleware());
    
    bot.start(async ctx => {
        await ctx.reply('Привет! Введи свое имя: ');
        return ctx.scene.enter('wizard_scene');
    });
    
    bot.launch().then(
      console.log('Bot launched!')
    );
    // Enable graceful stop
    process.once('SIGINT', () => bot.stop('SIGINT'));
    process.once('SIGTERM', () => bot.stop('SIGTERM'));



    Чтобы передать значение из одной сцены в другую, достаточно вместо ctx.wizard.state написать ctx.state.
    Ответ написан
    Комментировать