Ответы пользователя по тегу Node.js
  • Как выложить сайт на хостинг на js?

    @Israfil22
    Вам нужен выделенный сервер: VPD/VDS.
    Из самых дешевых, для 'попробовать' - firstvds.ru. Рекомендую его не первый раз. Цен ниже с качественным обслуживанием вряд ли найдете.
    Либо если это тестовый нетяжелый проект, попробуйте Heroku.
    Ответ написан
    2 комментария
  • Как Discord bot может удалить сообщение через минуту?

    @Israfil22
    Если вы получаете сообщение из события 'message', то в обработчик этого события передается объект-сообщение.
    У него доступен метод delete.
    Функция для создания отложенной процедуры в js - setTimeout().

    Если объект сообщение не доступен по какой-то причине, его, соответственно, нужно получить.
    У каждой сущности Discord API есть свой уникальный ключ. У роли, юзера, и даже сообщения.
    Судя по вопросу, речь идет об конкретном сообщении.

    Если вы уже ранее имели в распоряжении объект message, запишите его поле id куда-то.
    // channel - объект канала, snowflake - id сообщения
    channel.messages.fetch(snowflake)
        .then( message => message.delete() )

    Не забудьте реализовать проверку на undefined в then и остальные кейсы.

    Если сообщение ранее нигде ранее не появлялось (ни в одном обработчике событий, таких как message), тогда придется искать среди сообщений канала.
    Либо динамически
    Либо из кэша
    Ответ написан
  • Как сделать push в json файл?

    @Israfil22
    Нельзя использовать JSON таким образом. Это формат представления данных, а не формат хранения.
    Используйте базы данных - SQLite, к примеру. Это очень легковесная БД и не потребует от Вас кучу знаний.
    Еще проще с ней взаимодействовать может помочь любой доступный ORM.
    Ответ написан
  • Разный результат при одном и том же запросе MongoShell и Node.js?

    @Israfil22
    collection.find
    Второй аргумент options.projection
    Шелл и драйвера это разные вещи
    Ответ написан
    3 комментария
  • Как вывести текст в стандартный поток nodeJs?

    @Israfil22
    У каждого процесса есть stdout, stdin, stderr.
    В node.js - process.stdout.

    process.stdout and process.stderr differ from other Node.js streams in important ways:
    - They are used internally by console.log() and console.error(), respectively.
    Node.js docs

    Так что да: console.log.
    Ответ написан
    Комментировать
  • Необходимо, чтобы бот реагировал лишь на реакции тех, кто находится в голсовом канале. Как?

    @Israfil22
    1. Записать в переменную войс-канал создателя этого "голосования".
    const creationChannel = message.member.voice.channel


    2. Здесь нужно учесть одну важную проблему. У переменной канала(creationChannel) будет доступен кэш пользователей в свойстве members. Кэш, соответственно, создается на момент получения сообщения. Если какой-то пользователь зайдет в канал после создания голосования - его записи не будут учитываться.

    A) Если голосование длится не слишком долго, полагаю, это можно опустить и использовать кэш.
    Проблемы: Голоса пользователей зашедших после создания не будут учтены.
    B) Если данный подход крайне нежелателен, то придется асинхронно обновлять список пользователей, это относительно дорогие и продолжительные операции.
    Пролемы: Каждый запрос стоит около 100-200мс при хорошем раскладе, т.е. применять его в фильтре - нежелательно. Вариант - создание таймаута и обновления кэша.
    C) Если оба варианта не нравятся, можно составить полный список пользователей, которые проголосовали. В конце получить самый свежий кэш и отфильтровать его.

    Вариант Бэ:
    const REFRESH_INTERVAL = 1000
    
    const creationChannel = message.member.voice.channel
    
    const refreshIntervalHandler = setInterval( async () => {
        creationChannel = await creationChannel.fetch(true)
    }, REFRESH_INTERVAL)
    
    const reactionFilter = (reaction, user) => creationChannel.members.find(member => member.user.id === user.id)
    
    const collector = sentMessage.createReactionCollector(reactionFilter, {max : 1})
    
    collector.on('end', () => clearInterval(refreshIntervalHandler ))
    Ответ написан
    Комментировать
  • Как искать элемент на сайте?

    @Israfil22
    Регулярные выражения, либо парсер дом дерева.
    Ответ написан
    Комментировать
  • Как запустить код на удаленном сервере?

    @Israfil22
    Да на самом деле создание сервера на ноде - это крайне простая процедура.
    REST API на Express пишется буквально за час вместе с разбором всего материала.
    Единственное, с чем Вам придется возиться - это HTTPS, в случае аренды машины.
    Я надеюсь, что вы уже знакомы с понятиями VPS/VDS и не нужно объяснять, где хостить.
    Если планируете сильно расширять Ваш бэкенд сервер, то, конечно, нужен свой приватный сервер.
    Для одного-десятка эндпоинтов попробуйте Heroku.

    "Привет мир" из официальной документации - проще быть не может)
    https://expressjs.com/ru/starter/hello-world.html

    Однако задумайтесь над реальной пользой. Как было сказано в комментариях выше, время пересылки пакетов может быть гораздо больше, чем время выполнения операции.
    Ответ написан
    3 комментария
  • Как использовать алиасы для импортов в create-react-app?

    @Israfil22
    Без eject все будет не айс.
    craco-alias(customize-cra и тд) - единственный по типу варинт, как мне понимается (плагины поверх cra). Однако он останется без поддержки IDE (стат. анализатор, хайлаты синтаксические) WebStorm, например.
    Ответ написан
  • Можно ли использовать базу данных на lowdb в реальном проекте?

    @Israfil22
    Не нужно выбирать решения, которые будут использованы "впритык" к вашим запросам.
    Развертывание Mongo занимает не более 30 минут при знании основ конфигурации.
    Думайте немного наперед, что скорее всего какому-то разработчику придется делать это за вас, в случае если нагрузка увеличится. А также о скорости, затрачиваемых усилиях и, главное, цене при переходе.
    Простоту взаимодействия Вам без проблем обеспечат ORM, тот же mongoose.
    Ответ написан
    Комментировать
  • Как на сервере запустить index.js?

    @Israfil22
    Как было сказано выше, существуют хостинги, которые созданы только для разработки сайтов с определенными движками, например разработка на PHP, где все скрипты выполняет веб-сервер Apache / Nginx.
    И к большинству ресурсов вы не имеете доступа. Как определить? Почти всегда на таком типе хостинга в прямом доступе есть только папочка public_html (для загрузки по FTP).
    Скорее всего, это значит, что ваше приложение не может быть исполнено никаким образом.

    VDS (VPS) - это отдельная машина, с определенной операционной системой(на выбор), к ресурсам которой вы имеет полный доступ. В этом случае вы легко запустить свое приложение. Когда вы арендуете виртуальную машину, управление ей нужно производить через терминал - при помощи SSH подключения.
    Если вам необходим крайне дешевый хостинг для тестов, с уверенностью могу посоветовать firstvds.ru.

    Для выполнения программного языка JavaScript существует несколько решений: запуск в браузере, запуск при помощи Node.js (крайне популярно, выбирайте его), Deno и остальное, то что уже не стоит использовать, если рассчитываете на поддержку, работоспособность и комьюнити.

    Для запуска приложений на Node.js Вам не нужен никакой хостинг, если вы работаете в режиме тестовой разработки и необходимый уровень доступа к сайту - это с вашего же компьютера.

    Установите Node.js с официального сайта.
    Прочитайте про то, что такое package.json и зависимости.
    Например здесь.

    А запуск приложения, в консоли: node index.js.
    Ответ написан
  • Как сделать отложенное выполнение задач (планировщик) на nodejs?

    @Israfil22
    Если Вас интересуют готовые решения, может быть этот пакет будет полезным.
    Но в теории, если нежелательны частые обращения к базе данных, вы можете раз в N минут проходить по базе данных и собирать все записи, которые должны быть выполнены в интервале от Сейчас до Сейчас + N*2, а далее создавать сеттаймауты с указанным промежутком. Однако необходимо помнить о расходах памяти при создании большого количества отложенных вызовов.

    Также, необходимо помнить о том, что со структурированными данными проще работать. Если позволяет архитектура хранилища, вы можете хранить данные в отсортированном виде, и тогда вы можете просто доставать все записи по одной.
    Допустим, одна задача должна быть выполнена в 10000 секунды с эпохи эпоч, вторая 10100.
    Достаньте первую запись, установите на нее таймаут выполнения(10000), со следующей прочитайте время выполнения - установите его как следующую итерацию такого "цикла"(10100 минус дельта). (планирование выполнения и планирование создания нового таска)
    Ответ написан
    Комментировать
  • Как сделать телеграм бота который отправляет картинку по url?

    @Israfil22
    Я сейчас просматриваю API вашей библиотеки.
    Тут написано что вторым параметром вам нужно передать строку, в вашем случае url, а не объект.
    Ответ написан
    Комментировать
  • Как сделать заполнение Embed через команды?

    @Israfil22
    Есть как минимум три пути решения данной проблемы.
    1. В библиотеке discord.js существуют коллекторы сообщений.
    Вы можете создать экземпляр такого коллектора и отлавливать все настройки для вашего embed. Получится эдакий ввод из нескольких сообщений.

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

    3. Также отправлять конфигурацию вашего embed в виде токена самому пользователю - т.е. сохранить все свойства embed в объект, сериализовать его, например, с помощью JSON.stringfy и перевести его в base64 для пущего эффекта магии и чтобы с парсингом его потом не было проблем. Дальше пользователь вводит команду (например) configureEmbed <свой_токен> <настройка> <значение настройки>.
    Ответ написан
    Комментировать