Задать вопрос
Ответы пользователя по тегу Node.js
  • Как реализовать логи вк бота через команду?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    1. Сохраняйте данные по событиям, которые должны быть в логах
    2. По команде выводите сохраненные данные
    Ответ написан
    Комментировать
  • Как добавить клавиатуру из массива?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    Смотрите описание объекта ReplyKeyboardMarkup в офиц документации Telegram Bot API: https://core.telegram.org/bots/api#replykeyboardmarkup
    Ответ написан
    1 комментарий
  • Как написать бота для предложения новостей?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    1. Вместе с ответом бота (text) я хочу чтобы была кнопка "Назад", которая бы возвращала к первому пункту (выбора какого рода новость предложить).


    При редактировании сообщения (editMessageText) в опциях можно также передавать клавиатурную разметку reply_markup с кнопкой "Назад". Соответственно, в обработчике callback_query нужно будет также добавить подмену сообщения на предыдущее, если была нажата кнопка "Назад".

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


    Для этого нужно хранить состояние пользователя (шаг, на котором находится). Чтобы при получении сообщения проверить находится ли пользователь на шаге ввода вопроса, и выполнить необходимые действия с введенным вопросом.
    Ответ написан
    Комментировать
  • Бот не реагирует на сообщения в беседе, что делать?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    Убедитесь, что у бота в настройках беседы установлены права, дающие доступ к сообщениям.
    Ответ написан
  • Как отправить пользователю вопрос и получив на него ответ записать его в переменную?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    В приведенном коде по получению оповещения о нажатой кнопке с `createBTCcheque` происходит отправка сообщения `На какую сумму вы хотите создать чек?` и тут же идет попытка получить данные сообщения, которого нет.

    Во-первых, нужно запоминать состояние пользователя (сохранять где-то, что юзер находится на таком-то шаге). В данном случае с отправкой сообщения о вводе суммы запоминать, что юзер находится на шаге ввода суммы.

    Во-вторых, все то, что идет у вас за отправкой сообщения с вопросом, нужно увести из блока, слушающего нажатие кнопки, в прослушивание отправляемых сообщений. Там проверить, что юзер на шаге ввода суммы, и далее извлекать сумму, вкидывать в `cheque` и отправлять следующее сообщение. И зафиксировать, что юзер ушел на другой шаг.
    Ответ написан
    Комментировать
  • Как сделать бота в вк, который получает айди пользователя?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    Чтобы получить айди пользователя, нужно вызвать метод users.get, передав в параметре `user_ids` короткое имя пользователя из url (для указанного вами примера это `durov`)
    Ответ написан
    Комментировать
  • Почему запрос через пакет request возвращает 404?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    У данного ресурса стоит проверка "user-agent" в заголовках. Добавление этого заголовка решает проблему.
    Ответ написан
  • Как установить js-библиотеку без NPM?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    Ответ написан
    Комментировать
  • Как отправить сообщение из группы человеку написавшему боту в Телеграм?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    Если не программист, то вот готовый поток для Ботодрома, реализующий эту логику.

    1. Импортируйте JSON код из окошка ниже в ваш Ботодром
    2. В настройках конфиг-узла "Мой Telegram Бот" установите токен вашего Telegram бота
    3. В узле "Id супергруппы" установите id вашей супер-группы, куда будут форвардиться сообщения приходящие боту
    4. Нажмите "Развернуть"
    5. Затем нажмите кнопку узла "Настроить хранение данных"
    6. Готово

    602b93d6be8ac408845624.png

    [{"id":"20fc1f49.0ac97","type":"drom-tg-updates","z":"816191d5.cb781","name":"","method":"longpoll","property":"tgUpdate","client":"8ab3ffbd.097a1","x":440,"y":320,"wires":[["581f6191.a03c4"]]},{"id":"581f6191.a03c4","type":"drom-tg-switch-update","z":"816191d5.cb781","name":"Какое событие?","tgUpdate":"tgUpdate","property":"tgUpdateObj","updates":["message"],"outputs":1,"x":770,"y":320,"wires":[["f1b47a6d.c871d8"]]},{"id":"9a5462b0.20203","type":"drom-tg-api-call","z":"816191d5.cb781","name":"Форвард сообщения","data":"apiData","dataType":"msg","method":"forwardMessage","methodType":"str","property":"apiRes","client":"8ab3ffbd.097a1","x":1400,"y":300,"wires":[["d700d74.3b99228"]]},{"id":"1f5ca683.997369","type":"change","z":"816191d5.cb781","name":" Id супергруппы","rules":[{"t":"set","p":"apiData.chat_id","pt":"msg","to":"-123456","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":1390,"y":220,"wires":[["a2ffad93.bc7eb"]]},{"id":"f1b47a6d.c871d8","type":"switch","z":"816191d5.cb781","name":"Сообщение в личку Боту?","property":"tgUpdateObj.from.id","propertyType":"msg","rules":[{"t":"eq","v":"tgUpdateObj.chat.id","vt":"msg"},{"t":"else"}],"checkall":"false","repair":false,"outputs":2,"x":1100,"y":320,"wires":[["1f5ca683.997369"],["7b7d959c.a503ac"]],"outputLabels":["Да","Нет"]},{"id":"63e53df1.7d73a4","type":"drom-tg-api-call","z":"816191d5.cb781","name":"Отправка ответа","data":"apiData","dataType":"msg","method":"sendMessage","methodType":"str","property":"payload","client":"8ab3ffbd.097a1","x":1690,"y":420,"wires":[[]]},{"id":"6c4344ad.334b9c","type":"change","z":"816191d5.cb781","name":"Данные tg api","rules":[{"t":"set","p":"apiData.chat_id","pt":"msg","to":"message_sender[0].value2","tot":"msg"},{"t":"set","p":"apiData.text","pt":"msg","to":"tgUpdateObj.text","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1680,"y":380,"wires":[["63e53df1.7d73a4"]]},{"id":"a2ffad93.bc7eb","type":"change","z":"816191d5.cb781","name":"Данные tg api","rules":[{"t":"set","p":"apiData.from_chat_id","pt":"msg","to":"tgUpdateObj.from.id","tot":"msg"},{"t":"set","p":"apiData.message_id","pt":"msg","to":"tgUpdateObj.message_id","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1380,"y":260,"wires":[["9a5462b0.20203"]]},{"id":"7e643f.62614bc","type":"drom-data-relationships-num","z":"816191d5.cb781","storage":"6c999ed1.7d41f","action":"setup-rels","rels":"message_sender","relsType":"storId","value1":"inviter","value1Type":"msg","value2":"invitee","value2Type":"msg","value1Req":"inviter","value1ReqType":"msg","value2Req":"invitee","value2ReqType":"msg","limitRes":"20","limitResType":"num","offsetRes":"0","offsetResType":"num","name":"","property":"payload","x":800,"y":140,"wires":[[]]},{"id":"f553b75.a386048","type":"inject","z":"816191d5.cb781","name":"Настроить хранение данных","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":460,"y":140,"wires":[["7e643f.62614bc"]]},{"id":"d700d74.3b99228","type":"drom-data-relationships-num","z":"816191d5.cb781","storage":"6c999ed1.7d41f","action":"add","rels":"message_sender","relsType":"storId","value1":"inviter","value1Type":"msg","value2":"invitee","value2Type":"msg","value1Req":"apiRes.message_id","value1ReqType":"msg","value2Req":"tgUpdateObj.from.id","value2ReqType":"msg","limitRes":"20","limitResType":"num","offsetRes":"0","offsetResType":"num","name":"Добав в message_sender","property":"payload","x":1710,"y":260,"wires":[[]]},{"id":"7b7d959c.a503ac","type":"switch","z":"816191d5.cb781","name":"Ответ?","property":"tgUpdateObj","propertyType":"msg","rules":[{"t":"hask","v":"reply_to_message","vt":"str"}],"checkall":"false","repair":false,"outputs":1,"x":1160,"y":380,"wires":[["3c811c29.b17d74"]],"outputLabels":["Да"]},{"id":"3c811c29.b17d74","type":"drom-data-relationships-num","z":"816191d5.cb781","storage":"6c999ed1.7d41f","action":"get","rels":"message_sender","relsType":"storId","value1":"tgUpdateObj.reply_to_message.message_id","value1Type":"msg","value2":"","value2Type":"undef","value1Req":"apiRes.message_id","value1ReqType":"msg","value2Req":"tgUpdateObj.from.id","value2ReqType":"msg","limitRes":"","limitResType":"undef","offsetRes":"0","offsetResType":"num","name":"Найти в message_sender","property":"message_sender","x":1410,"y":380,"wires":[["ed52d334.5457c"]]},{"id":"ed52d334.5457c","type":"switch","z":"816191d5.cb781","name":"Есть?","property":"message_sender","propertyType":"msg","rules":[{"t":"nempty"}],"checkall":"false","repair":false,"outputs":1,"x":1470,"y":420,"wires":[["6c4344ad.334b9c"]],"outputLabels":["Да"]},{"id":"35df003b.499d4","type":"comment","z":"816191d5.cb781","name":"Настройка","info":"","x":400,"y":100,"wires":[]},{"id":"8ab3ffbd.097a1","type":"drom-tg-api-config","name":"Мой Telegram Бот"},{"id":"6c999ed1.7d41f","type":"drom-data-config","name":"","dbType":"sqlite","sqliteFile":"my-data.sqlite"}]
    Ответ написан
  • Почему при отправке PUT запроса приходит undefined?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    Проблема по всей видимости в том, что middleware асинхронный, а об окончании его выполнения нет оповещения (не вызывается next()).

    Вариант 1. Либо уберите async - он, судя по синхронной работе содержимого, тут не нужен:

    router.put('/', (req, res) => {
        const {id} = req.body;
        console.log(id);
        res.send(id);
    });


    Вариант 2. Еслии все таки планируется какая-то асинхронная работа внутри middleware, тогда используйте next(), чтобы объявить окончание выполнения асинхронного middleware

    router.put('/', async (req, res, next) => {
        const {id} = req.body;
        console.log(id);
        res.send(id);
        next();
    });


    UPD1: В клиентской части при обращении к /api не передается заголовок "content-type", соответствующий передаваемому body.

    Должно быть так:

    fetch('http://localhost:5000/api', {
                method: 'PUT',
                headers: {
                  'Content-Type': 'application/json',
                },
                body: JSON.stringify({
                    "id": "2"
                })
            })


    UPD2: как верно подметил Игорь Махов - console.log в res.send вам вряд ли нужен.
    Ответ написан
  • Как получить id только своих сообщений в ВК?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    Специального метода для этого нет. Только "messages.getHistory", затем отфильтровать список по id получателя/отправителя.
    Ответ написан
    Комментировать
  • Как исправить ошибку в pre-commit?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    Судя по "JavaScript heap out of memory" имеет место проблема нехватки памяти. Если ситуация с неконтроллируемым пожиранием всей памяти каким-то процессом исключена, тогда должно помочь увеличение размера выделяемой для Node.js памяти через установку такой переменной среды:

    NODE_OPTIONS=--max_old_space_size=8192

    По умолчанию Node.js выделяется 4гб памяти. Установка значения 8192 увеличит до 8гб.
    Ответ написан
  • Как очистить историю канала с помощью телеграм бота?

    alexk111
    @alexk111
    Автор Ботодрома (автоматизация Telegram, VK и др.)
    Готовый код не выдам, но алгоритм будет следующий:

    - при добавлении сообщения методом `sendMessage` - запоминаем его `message_id`
    - по таймеру удаляем сообщения методом `deleteMessage` для каждого `message_id`
    Ответ написан
    Комментировать