Javascript сохраняет имена пользователей из телеграммы

avatar
Limbo
9 августа 2021 в 02:18
198
1
1

Я новичок в javascript и Telegram-ботах. Мне удалось связать моего бота телеграммы с листами Google, и я хочу сохранить имена отправителей, отправляющих сообщения моему боту, в листах Google. Функция отлично работает, если бот не является частью группового чата, но если он есть, то выдает отрицательное значение для идентификатора пользователя и неопределенное сообщение для имени пользователя.

Мой код выглядит следующим образом (я удалил актуальную информацию для листа и бота):

    var token = ""; //Token of Telegram Bot
    var telegramUrl = "https://api.telegram.org/bot" + token;  
  //connects bot and telegram chat
    var webAppUrl = ""; 
    var ssId = ""; 



function getMe() //gets the bot info
{
  var url = telegramUrl + "/getme";
  var response = UrlFetchApp.fetch(url); 
  Logger.log(response.getContentText());
}

function setWebhook() //links url of project 
{
  var url = telegramUrl + "/setWebhook?url=" + webAppUrl;
  var response = UrlFetchApp.fetch(url); 
  Logger.log(response.getContentText());
}

function sendText(id,text) //sends confirmation text
{
  var url = telegramUrl + "/sendMessage?chat_id=" + id + "&text=" + text;
  var response = UrlFetchApp.fetch(url); 
  Logger.log(response.getContentText());
}


function doPost(e) //
{
  var data = JSON.parse(e.postData.contents);
  var str = data.message.text; 
  var id = data.message.chat.id;
  var name = data.message.chat.first_name + " " + data.message.chat.last_name;

  SpreadsheetApp.openById(ssId).getSheets()[0].appendRow([new 
Date(),id,name,str]);
}
Источник

Ответы (1)

avatar
idfurw
9 августа 2021 в 02:53
1

Используйте data.message.from.

Кроме того, last_name пользователя может быть пустым, чтобы свойство было undefined в объекте события. С которым вам придется справиться.

  var data = JSON.parse(e.postData.contents);
  var str = data.message.text;
  var id = data.message.from.id;
  var name = data.message.from.first_name + (data.message.from.last_name ? " " + data.message.from.last_name : "");