Загрузка...

Как сохранить фото отправленное пользователем в telegraf?

Тема в разделе Node.js создана пользователем RichPerson 8 апр 2023. 477 просмотров

  1. RichPerson
    RichPerson Автор темы 8 апр 2023 Разработка - https://zelenka.guru/threads/4480553/ 2160 23 сен 2019
    Требуется сохранять фото отправленные пользователем на сервере.
     
  2. ChatGPT
    ChatGPT 8 апр 2023 2250 14 мар 2023
    RichPerson, для сохранения фото, отправленных пользователем в Telegraf, можно использовать модуль `telegraf-session-redis`. Он позволяет сохранять данные сессии в Redis, включая фото, отправленные пользователем.

    Для начала, необходимо установить модуль с помощью команды `npm install telegraf-session-redis`.

    Затем, в коде бота нужно подключить модуль и настроить сессию:

    JavaScript

    const Telegraf = require('telegraf')
    const session = require('telegraf-session-redis')
    const Redis = require('ioredis')

    const redis = new Redis() // создаем объект Redis
    const bot = new Telegraf(process.env.BOT_TOKEN)

    bot.use(session({
    store: {
    host: 'localhost', // адрес Redis сервера
    port: 6379, // порт Redis сервера
    client: redis // объект Redis
    }
    }))

    bot.on('photo', (ctx) => {
    const photo = ctx.message.photo[0] // получаем первое фото из сообщения
    ctx.session.photo = photo // сохраняем фото в сессии
    ctx.reply('Фото сохранено!')
    })

    bot.command('getphoto', (ctx) => {
    const photo = ctx.session.photo // получаем фото из сессии
    if (photo) {
    ctx.replyWithPhoto({ source: photo }) // отправляем фото пользователю
    } else {
    ctx.reply('Фото не найдено!')
    }
    })

    bot.launch()
    В этом примере, при получении фото от пользователя, мы сохраняем его в сессии с помощью `ctx.session.photo = photo`. Затем, при получении команды `/getphoto`, мы проверяем наличие фото в сессии и отправляем его пользователю с помощью `ctx.replyWithPhoto({ source: photo })`.

    Надеюсь, это поможет тебе сохранять фото, отправленные пользователями в Telegraf!
     
    1. Посмотреть предыдущие комментарии (2)
    2. RichPerson Автор темы
      ChatGPT, Как сохранить фото в telegraf в директории с ботом? Без использования сессий.
    3. ChatGPT
      RichPerson, для сохранения фото, отправленных пользователем в Telegraf, в директории с ботом, можно использовать модуль `fs` (file system). Он позволяет работать с файловой системой и сохранять файлы на диск.

      Вот пример кода, который сохраняет фото в директории с ботом:

      JavaScript

      const Telegraf = require('telegraf')
      const fs = require('fs')

      const bot = new Telegraf(process.env.BOT_TOKEN)

      bot.on('photo', async (ctx) => {
      const photo = ctx.message.photo[0] // получаем первое фото из сообщения
      const file = await ctx.telegram.getFile(photo.file_id) // получаем объект файла
      const filePath = `./${file.file_path}` // путь к файлу на сервере Telegram
      const fileStream = fs.createWriteStream(filePath) // создаем поток для записи файла
      await ctx.telegram.downloadFile(file.file_id, fileStream) // скачиваем файл и записываем его на диск
      ctx.reply(`Фото сохранено на сервере: ${filePath}`)
      })

      bot.launch()
      В этом примере, мы получаем объект файла с помощью `await ctx.telegram.getFile(photo.file_id)`. Затем, мы получаем путь к файлу на сервере Telegram и создаем поток для записи файла с помощью `fs.createWriteStream(filePath)`. Далее, мы скачиваем файл и записываем его на диск с помощью `await ctx.telegram.downloadFile(file.file_id, fileStream)`. Наконец, мы отправляем пользователю сообщение с путем к сохраненному файлу.

      Надеюсь, это поможет тебе сохранять фото, отправленные пользователями в Telegraf в директории с ботом!
    4. Лакич
      ChatGPT, а возможно если пользователь скинет изображение с встроенным вирусом и если программа скачает этот вирусное изображение считай у тебя минус window?
Загрузка...
Top