Creé un bot de Telegram simple usando Telegraf y usé este código para registrar una información específica que necesito:
bot.on('text', (ctx, next) => { console.log(`[text] ${ ctx.message.chat.id } ${ ctx.from.username } ${ ctx.message.chat.first_name+ " " + ctx.message.chat.last_name } ${ ctx.message.text }`); return next(); });y como resultado, el registro será algo como esto
[texto] 563789142 xMA3x Mohammed Abbas / inicio
Ahora quiero guardar esa información en una hoja de cálculo de Google, seguí este tutorial y pude insertar valores marcados con comillas solo en la hoja de cálculo, pero no sé cómo insertar el resultado de console.log en la hoja de cálculo
de todos modos, aquí está mi código
const { Telegraf } = require('telegraf'); const bot = new Telegraf("xyz") const { google } = require("googleapis"); const keys = require("./Keys.json") bot.on('text', (ctx, next) => { console.log(`[text] ${ ctx.message.chat.id } ${ ctx.from.username } ${ ctx.message.chat.first_name+ " " + ctx.message.chat.last_name } ${ ctx.message.text }`); return next(); }); bot.start((ctx) => ctx.reply('Welcome')) bot.help((ctx) => ctx.reply('Send me a sticker')) bot.on('sticker', (ctx) => ctx.reply('👍')) bot.hears('hi', (ctx) => ctx.reply('Hey there')) const client = new google.auth.JWT( keys.client_email, null, keys.private_key, ["https://www.googleapis.com/auth/spreadsheets"] ); client.authorize(function(err){ if(err){ console.log(err); return; } else { console.log("connected"); gsrun(client); } }); async function gsrun(cl){ const gsapi = google.sheets({version:"v4", auth: cl}); const updateOptions = { spreadsheetId: "xyz", range: "Sheet1", valueInputOption: "RAW", insertDataOption: "INSERT_ROWS", resource: { values:[ ["this is working"] ]} }; let res = await gsapi.spreadsheets.values.append(updateOptions); console.log(res); } bot.launch()entonces, como puede ver, "esto está funcionando" se inserta correctamente en la hoja de cálculo, pero cuando intento agregar otro valor como ctx.message.chat.id , me da ReferenceError: ctx no está definido
Entonces, ¿cómo puedo hacer que la API de la hoja de Google reconozca los comandos de Telegraf? o para ser más general, ¿cómo puedo guardar la información de *ctx.message.chat.id,ctx.from.username..etc * (que proviene del telegrama) en el spreedhsset?
ctx vive dentro de los ganchos de su bot, por lo que para guardar la información en la hoja, debe llamar a su función googlesheets dentro del gancho relevante.
Posibles actualizaciones:
const { Telegraf } = require('telegraf'); const bot = new Telegraf("xyz") const { google } = require("googleapis"); const keys = require("./Keys.json") const client = new google.auth.JWT( keys.client_email, null, keys.private_key, ["https://www.googleapis.com/auth/spreadsheets"] ); async function gsrun(cl, data){ const gsapi = google.sheets({version:"v4", auth: cl}); const updateOptions = { spreadsheetId: "xyz", range: "Sheet1", valueInputOption: "RAW", insertDataOption: "INSERT_ROWS", resource: { values:[ [data] ]} }; let res = await gsapi.spreadsheets.values.append(updateOptions); console.log(res); } const saveMetadataToSheets = (data) => { client.authorize(function(err){ if(err){ console.log(err); return; } else { console.log("connected"); gsrun(client, data); } }); } bot.on('text', (ctx, next) => { const data = `[text] ${ ctx.message.chat.id } ${ ctx.from.username } ${ ctx.message.chat.first_name+ " " + ctx.message.chat.last_name } ${ ctx.message.text }` console.log(data); // pass any data that you need to save to the sheets saveMetadataToSheets(data) return next(); }); bot.start((ctx) => ctx.reply('Welcome')) bot.help((ctx) => ctx.reply('Send me a sticker')) bot.on('sticker', (ctx) => ctx.reply('👍')) bot.hears('hi', (ctx) => ctx.reply('Hey there')) bot.launch()