将消息从 Telegram 群组发送到特定成员 ID 到 Google 表格 修改点:修改后的脚本:注意:参考:

问题描述

机器人已经是该群组的管理员,并将所有发送的消息发送到谷歌表格。

但是,我不想要所有成员,我只想要一个特定成员。

假设他的 ID 是 123456789,我如何让机器人只发送来自该成员的消息?

我当前的脚本:

var token = "TOKEN BOT TELEGRAM";
var telegramUrl = "https://api.telegram.org/bot" + token;
var webAppUrl = "https://script.google.com/macros/s/ID TO WEB APP/exec";

function setWebhook() {
  var url = telegramUrl + "/setWebhook?url=" + webAppUrl;
  var response = UrlFetchApp.fetch(url);
}

function doPost(e) {
  var contents = JSON.parse(e.postData.contents);
  var dateNow = new Date;
  var id = contents.message.from.id;
  var username = contents.message.from.username;
  var name = contents.message.from.first_name + " " + contents.message.from.last_name;
  var text = contents.message.text;
  var ssId = "ID TO SPREADSHEET";
  var sheet = SpreadsheetApp.openById(ssId).getSheetByName("Página1");

  sheet.appendRow([dateNow,id,username,name,text]);
}

解决方法

我相信你的目标如下。

  • 您想通过修改脚本来放置来自特定 ID 的用户的值。

修改点:

  • 从您的脚本中,我了解到可以通过 var id = contents.message.from.id 检索 ID。我认为这可能会用于实现您的目标。

当这一点反映到你的脚本中时,它变成如下。

修改后的脚本:

function doPost(e) {
  var contents = JSON.parse(e.postData.contents);
  var dateNow = new Date;
  var id = contents.message.from.id;

  if (id != 123456789) return; // <--- Added. Or if (id.toSring() != "123456789") return;

  var username = contents.message.from.username;
  var name = contents.message.from.first_name + " " + contents.message.from.last_name;
  var text = contents.message.text;
  var ssId = "ID TO SPREADSHEET";
  var sheet = SpreadsheetApp.openById(ssId).getSheetByName("Página1");

  sheet.appendRow([dateNow,id,username,name,text]);
}

注意:

  • 当您修改 Web Apps 的脚本时,请将 Web Apps 重新部署为新版本。这样,最新的脚本就会反映到 Web Apps 中。请注意这一点。

  • 如果要针对多个特定 ID 运行脚本,也可以使用以下修改后的脚本。

      function doPost(e) {
        var contents = JSON.parse(e.postData.contents);
        var dateNow = new Date;
        var id = contents.message.from.id;
    
        var ids = [123456789,];  // Please set the specific IDs.
        if (!ids.includes(id)) return;
    
        var username = contents.message.from.username;
        var name = contents.message.from.first_name + " " + contents.message.from.last_name;
        var text = contents.message.text;
        var ssId = "ID TO SPREADSHEET";
        var sheet = SpreadsheetApp.openById(ssId).getSheetByName("Página1");
    
        sheet.appendRow([dateNow,text]);
      }
    
  • 如果上述修改不是您期望的结果,您能否在脚本中提供您的示例值 e.postData.contents?借此,我想确认一下您目前的情况。

参考: