@Absolutlepozitiv

Как доработать скрипт бота — чтобы он только один раз отвечал на последнее сообщение?

Сделать так, чтобы бот не повторял то что уже написано, и в то же время работал в реальном времени.

setInterval(function(){




let url = "https://api.telegram.org/bot/getUpdates";

//создание обьекта который умеет отправлять запросы
let xhr = new XMLHttpRequest();

// говорим обьекту как отправить запрос
xhr.open('GET', url , false);

//отправляем запрос
xhr.send();

//раскодируем данные которые получили в ответ
let data = JSON.parse(xhr.responseText);

//выводим результат на экран
console.log(data);

//находим последнее сообщение
let lastNumber =  data.result.length - 1;// номер последнего сообщения
let last = data['result'][lastNumber];

//находим айди юзера и текст сообщения
let userId = last['message']['from']['id']
let text = last['message']['text']


//отправляем ответ
sendMessage(userId,text);

}, 3000);



function sendMessage(userId, text) {
    let url = `https://api.telegram.org/bot/sendMessage?chat_id=${userId}&text=${text}`;
     let xhr = new XMLHttpRequest();
     xhr.open('GET',url,false);
     xhr.send();
}
let lastMessageId = 0;
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 1
@nickname9
Male
Привет

1. Работа в реальном времени обеспечивается при наличии хостинга

Чтобы бот срабатывал - это нужно делать WebHook

Не могу сделать точный вывод о вашем подходе, но, кажется, вы это через браузер делаете и исполняете локально JS. Да? Если да, то так не получится, вам нужен хостинг с поддержкой Node JS. Это если планируете разрабатывать на JS. Вот как это на NodeJS сделал человек

Также можете программировать бота на Python: aiogram; или PHP, Laravel: Telegraph

2.
function sendMessage(userId, text) {
    let url = `https://api.telegram.org/bot/sendMessage?chat_id=${userId}&text=${text}`;
     let xhr = new XMLHttpRequest();
     xhr.open('GET',url,false);
     xhr.send();
}


Обратите внимание на этот кусок кода, ещё более подробно:
let url = `https://api.telegram.org/bot/sendMessage?chat_id=${userId}&text=${text}`;


В параметрах есть `?chat_id=${}&text=ЭТОТ ТЕКСТ ОТПРАВЛЯЕТСЯ`
То, что указано около text - будет отправлено. Решение - убрать параметр из URI

чтобы бот не повторял то что уже написано,

Я вас не понял, у вас бот перебирает все сообщения и отправляет в ответ?
Или я уже ответил на этот вопрос?
Бот присылает только одно сообщение?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы