如何将电报数据保存在谷歌电子表格中? [英] How to save telegram data in a google spreedsheet?

查看:55
本文介绍了如何将电报数据保存在谷歌电子表格中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用telegraf构建了一个简单的电报机器人,并使用此代码记录了我需要的特定信息:

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();
});

因此,日志如下所示

[文本]563789142 x穆罕默德·阿巴斯/START

现在我想将该信息保存在Google电子表格中,我已经按照this教程操作,并且只能将标有值的报价推送到电子表格中,但我不知道如何将console.log结果推送到电子表格中

不管怎样,这是我的代码

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()

如您所见,";This is Working";已在电子表格中成功推送,但当我尝试添加另一个值(如ctx.Message.chat.id)时,它给出了ReferenceError:未定义CTX

那么,如何才能使Google Sheet API识别Telegraf命令呢?或者更笼统地说,如何将*ctx.Message.chat.id、ctx.from、用户名..等*信息(来自电报)保存到spreedhsset中?

推荐答案

ctx位于您的bot钩子中,因此要将信息保存到工作表,您必须在相关钩子内调用您的googlesheets函数。

可能的更新:

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()

这篇关于如何将电报数据保存在谷歌电子表格中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆