16

I want to create a Telegram Bot with Node.js and I am using Telegraf for it. I know I can answer to messages like this:

app.hears('hi', (ctx) => ctx.reply('Hey there!'))

But how can I send a message without getting a message before? I want to read a file and always when the file got changed I want to send a message.

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

const app = new Telegraf(process.env.BOT_TOKEN);

var filePath = "C:\\path\\to\\my\\file.txt";

fs.watchFile(filePath, function() {
    file = fs.readFileSync(filePath);

    // Send message to chat or group with the file content here

    console.log("File content at: " + new Date() + " is: \n" + file);
})

Would be nice if someone can help me with it.

Nono
  • 1,073
  • 4
  • 23
  • 46
  • Having a similar situation xD funny how that usecase is not as straightforward as it is thought to be... So as far as I got it - I need to have the chatID of course if the chat is initially startet just when the bot is running I may get the chatId from the ctx object. But what if the bot just later connects from the service? Do I have to manually find out that specific chatId and provide it to the Bot hardcodedly? – Lenny Sep 30 '20 at 10:19

2 Answers2

15

You can use app.telegram.sendMessage for that, see following snippet.

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

const app = new Telegraf(process.env.BOT_TOKEN);

var filePath = "C:\\path\\to\\my\\file.txt";

fs.watchFile(filePath, function() {
  file = fs.readFileSync(filePath);
  app.telegram.sendMessage(chatId, "File content at: " + new Date() + " is: \n" + file);
})
YakovL
  • 7,557
  • 12
  • 62
  • 102
Vitaly Domnikov
  • 306
  • 2
  • 4
3
app.on('message', function (ctx, next) {
    ctx.telegram.sendMessage(ctx.message.chat.id,
      "File content at: " + new Date() + " is: \n" + file
    )
});