【问题标题】:Send messages to a specific member id from a Telegram group to Google Sheets将消息从 Telegram 组发送到特定成员 ID 到 Google 表格
【发布时间】:2021-02-15 23:16:45
【问题描述】:

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

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

假设他的 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]);
}

【问题讨论】:

    标签: google-apps-script google-sheets telegram telegram-bot telegram-webhook


    【解决方案1】:

    我相信你的目标如下。

    • 您想通过修改脚本来输入来自特定 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 应用程序中。请注意这一点。

    • 如果要针对多个特定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, id, username, name, text]);
        }
      
    • 如果上述修改不是您期望的结果,您能否在脚本中提供e.postData.contents 的示例值?借此,我想确认一下您目前的情况。

    参考:

    【讨论】:

    • 嗨@Tanaike,感谢您的帮助,if (id != 123456789) return; 的方法完全符合我的需要! 100% 工作
    • @Brondby IF 感谢您的回复和测试。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    相关资源
    最近更新 更多