Как боты в Телеграмме собирают информацию

Содержание

Итак, мне удалось через doPost получить данные. Теперь их надо немного изменить для последующей обработки и передавать дальше.

doPost(e)

// основная функция, которая обрабатывает входящие данные от телеграма function doPost(e)< const main = JSON.parse(e.postData.contents); // получаем данные из телеграм бота // вытаскиваем все данные из contents const chatId = main.message.chat.id; const firstName = main.message.chat.first_name; const lastName = main.message.chat.last_name; const messageText = main.message.text; const arrayText = messageText.split(» «); // массив для последующей обработки команд const detailsArray = [chatId, firstName, lastName, messageText, arrayText]; //собираем все что выше массив const objToTransfer = Object.assign(<>, detailsArray); // делаем из массива объект для передачи analyseDetails(objToTransfer); //вызываем функцию для дальнейшей обработки того, что пришло >

Первую часть с JSON я описывал ранее.

Далее я беру по ключу объекта его значение и самое важное тут chatId = main.message.chat.id;

Telegram-бот + парсер на Python

Это уникальный айди пользователя, общающегося с ботом.

Далее я собираю все это в массив, на основе которого создаю объект при помощи Object.assign(<>, detailsArray)

В чем прелесть Object.assign так это то, что созданный объект имеет вид: .

Далее созданный объект я передаю в функцию analyseDetails

analyseDetails(obj)

function analyseDetails(objReceived) < // анализ того, что пришло со стороны телеграма const receivedCommand = objReceived[4][0].toLowerCase(); // «4»: [«/list», «», «» и тд] switch(receivedCommand)< //если пришла команда case ‘/start’: sendStartMessage(objReceived); break; case ‘/help’: sendStartMessage(objReceived); break; case ‘/join’: setNewUser(objReceived); break; case ‘/list’: sendList(objReceived); break; default: // если пришло что-то отличное от команды onModer(objReceived); break; >>

Case /start и /help

function sendStartMessage(obj) < const userId = obj[0]; //Юзер id const startMessage = ` Привет! nn В своей базе я храню данные по срокам предоставления налоговых и бухгалтерских отчетов и деклараций. За $дней до окончания срока я высылаю уведомление об этом.nn Чтобы я смог присылать такие уведомления Вам, отправьте команду /joinnn Чтобы получить список деклараций и сроков их подачи в ближайший квартал, отправьте команду /listnn Если Вам необходимо добавить в базу недостающие сроки подачи деклараций, отправьте мне сообщение в виде «Дата: Декларация» и я передам его на модерацию` sendMessage(userId, startMessage); >

Obj — это тот объект, что приходит из doPost в analyseDetails и далее из него идет на все команды

sendMessage — основная функция, передающая что-либо в телеграм

sendMessage( chatid, chatText)

Вся информация по методу детально описана здесь — https://core.telegram.org/bots/api#sendmessage и повторять ее нет никакого смысла

// базовая функция для отправки сообщения в телеграм с «сервера» function sendMessage(chatid, chatText) < const chatId = chatid; const text = chatText; const payload = < «method»: «sendMessage», «chat_id»: String(chatId), «text»: text, «parse_mode»: ‘HTML’, «disable_web_page_preview»: true >; const data = < «method»: «post», «payload»: payload >; UrlFetchApp.fetch(telegramUrl, data); >

UrlFetchApp.fetch(telegramUrl, data); — передает данные со стороны гугл таблиц на телеграм

Case /join — setNewUser(obj)

Как я уже говорил ранее, чтобы бот начал взаимодействовать с пользователем сообщениями именно этому пользователю, когда речь идет о рассылке сообщений с серверной части, пользователь должен быть «представлен» боту.

function setNewUser(obj) < const userId = obj[0]; //Юзер id const userArr = wsUsers.getDataRange().getValues() // получаю массив массивов c пользовательскими id const flatUserArr = userArr.flat() // делаю его обычным массивом для последующего indexOf const userIsHere = flatUserArr.indexOf(userId) // делаю проверку наличия записи пользовательского ID if(userIsHere !== -1)< // если такой пользователь уже есть sendMessage(userId, «Пользователь уже есть в моей базе «) >else < // добавляю нового пользователя wsUsers.appendRow([userId]) // appendRow — каждая ячейка это массив sendMessage(userId, «Пользователь был успешно добавлен.nВ ближайшее время ждите рассылку!») >>

Функция setNewUser() проверяет наличие записанного пользовательского id на листе «Users» и если такого айди там нет — записывает его через wsUsers.appendRow([userId])

Case /list — отправка списка деклараций к подаче в ближайшие 90 дней

// для выполнения /list — список подаваемых деклараций на ближайшие QUARTER дней function getQuarterList() < const today = new Date() // сегодня const quarter = new Date() quarter.setDate(today.getDate() + QUARTER) // сегодня + QUARTER дней const allArr = wsDb.getDataRange().getValues() // массив со всеми датами и декларациями const filteredArr = allArr.filter(row =>(new Date(row[0])) > today (new Date(row[0])) < quarter) // выбираем записи которые больше чем сегодня и меньше чем через QUARTER дней const beautyArr = filteredArr.map(row =>[(row[0].toLocaleString().split(‘,’)[0]) + » : » + row[1]]) // причесываем для последующей конвертации в текст const arrToText = beautyArr.join(‘n’) return arrToText > // послать список подаваемых деклараций на ближайшие QUARTER дней function sendList(obj)< const userId = obj[0]; //Юзер id const text = getQuarterList() // данные к подаче на ближайшие QUARTER дней sendMessage(userId, text); >

Еще по теме:  Как переделать Telegram канал в группу

getQuarterList — выбирает весь список данных и фильтрует их между датами сегодня и сегодня + 90 дней

sendList — посылает список пользователю

Case default — когда приходит что угодно

// если пришло что-то отличное от команды — отправить администратору бота function onModer(obj) < const userId = obj[0] const userName = obj[1] const userSurname = obj[2] const userMessage = obj[3] const text = `Пользователь $$ с ID $ послал на модерацию сообщение: $` sendMessage(ADMIN_ID, text) >

Функция отправляет «что угодно, отличное от пришедших команд» администратору ADMIN_ID на модерацию

И последняя часть — «серверная»:

Отправка боту «списка приближающихся сроков» по триггеру

// Фильтрованный массив с датами в текст function filteredArrToText()< const filteredArr = filteredDaysArr(); // фильтрованный массив const beautyArr = filteredArr.map(row =>[row[0]+» : » +row[1]]) // «причесанный» фильтрованный массив const textFromArr = beautyArr.join(‘n’) // массив в текст с разделителем новой строки для отправки в телеграм return textFromArr > // Для ежедневного триггера — проверка на наличие отправки function checkerToSend() < const text = filteredArrToText() // что сегодня рассылать — текст из фильтрованного массива if(text.length !== 0)< // если длина текста не равна 0 — т.е. там есть что отправлять const userArr = wsUsers.getDataRange().getValues() // получаю массив с пользовательскими id — кому идет рассылка for(let elem of userArr)< // для каждого элемента массива с пользовательскими id let messageText = ` Через $дней срок подачи:n` sendMessage(elem, (messageText + text)) // отправка сообшения > > >

checkerToSend вешается на триггер по дням и если длина text собранного из filteredArrToText не равна 0, т.е. когда там есть текст — отправляется на всех пользователей из wsUsers.getDataRange().getValues()

Вам также может понравиться

Гугл календарь: забираем мероприятия скриптом

Google sheets цветами радуги

Из google sheets в google docs: три способа перенести таблицу

У этой записи 9 комментариев

Егор Караваев 08.12.2021 Ответить

Тоже делаю что-то подобное с ботом. Передачу любого текста из таблицы боту и обратно освоил, но никак не могу настроить передачу картинок через sendPhoto.
Допустим, хочу отправлять боту pie chart в виде картинки. Приходится сохранять сначала на google drive, а оттуда уже по URL отправлять в телегу. Но проблема в том, что URL меняется и в итоге отправляется один и тот же файл. При этом с отправкой картинки на gmail все работает как надо. Были похожие задачи? function createPieChart() < var parents = DriveApp.getFileById(«1tQzMwEtPeFLx….6SfJ_BMcbb4-Y7FQY»).getParents();
var folder = parents.hasNext() ? parents.next() : DriveApp.getRootFolder(); var sheet = SpreadsheetApp.openById(«1tQzMwEtPeFLxMx….bH6SfJ_BMcbb4-Y7FQY»).getSheetByName(«Settings»);
var totalChartLabels = sheet.getRange(«A2:A28»);
var totalChartValues = sheet.getRange(«D2:D28»); var totalsChart = sheet.newChart()
.setChartType(Charts.ChartType.PIE)
.addRange(totalChartLabels)
.addRange(totalChartValues)
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS)
.setPosition(6,7,0,0)
.setOption(‘legend.position’, ‘bottom’)
.setOption(‘pieSliceText’, ‘value-and-percentage’)
.setOption(‘width’, 300)
.setOption(‘height’, 300)
.setNumHeaders(1) var blob = totalsChart.build().getBlob(); //Email
//sendMail(blob); //Google Drive
folder.createFile(blob); //Telegram
sendChart(adminID);
> function sendChart(id) var url = telegramUrl + «/sendPhoto?chat_id=» + id + «
var response = UrlFetchApp.fetch(url);
>

Добрый день!
Вам в коде нужно дать доступ к файлу другим системам (а не только вам) и еще получить урл:
const resultURL = resultFile.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW).getUrl()

function getPicture() < const chart = ws.newChart()
.asColumnChart()
.addRange(ws.getRange(‘A1:B7’))
.setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS)
.setTransposeRowsAndColumns(false)
.setNumHeaders(-1)
.setHiddenDimensionStrategy(Charts.ChartHiddenDimensionStrategy.IGNORE_BOTH)
.setPosition(9, 1, 448, 1)
.build(); const chartBlob = chart.getBlob()
const resultFile = DriveApp.createFile(chartBlob)
const resultURL = resultFile.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW).getUrl() console.log(resultURL)
>

Григорий 04.04.2022 Ответить
Евгений 10.08.2023 Ответить

Дмитрий, полезная статья, благодарю!
Подскажи, плиз, а при рассылке сообщений не нужно учитывать лимиты телеграм на отправку 30 сообщений в 1 сек? Если, например, пользователей в массиве на отправку будет 300 человек.
В коде только цикл.
for(let elem of userArr) < // для каждого элемента массива с пользовательскими id
let messageText = ` Через $ дней срок подачи:n`
sendMessage(elem, (messageText + text)) // отправка сообшения
> Или тут как-то по-другому работает? Если не сложно, поясни плиз ;)))

Привет.
Спасибо за очень хороший вопрос.
Учитывать конечно нужно. Равно как и учитывать квоты самого гугла (я об этом тоже уже много раз писал) — 300, кстати, гугл пропустит.
Тут 2 пути:
1) Гугловый — использовать Utilities.sleep() — когда скрипт засыпает на указанное количество миллисекунд. Немедленно переводит скрипт в спящий режим на указанное количество миллисекунд. Максимально допустимое значение — 300 000 (или 5 минут). То есть можно принудительно ограничить количество отправок за определенный интервал времени
Можно сделать массив рассылки сообщений пользователей и через каждые 30 сообщений — засыпать.
2) Телеграмовый — просто создать группу в которой находятся хоть 300 хоть 3000 пользователей и туда завесить бота. Бот будет слать всего лишь одно сообщение в группу (id которой начинается со знака «-«) и оно будет видно всем пользователям. В целом гугл скрипт в связке с таблицами (или firebase) по работе с телегой — далеко не самое лучшее решение, когда количество пользователей начинает расти по экспоненте. Но он бесплатный, остальные же варианты — стоят денег. Именно поэтому я использую второй путь, через группы телеграма.

Еще по теме:  Как настроить иконку Телеграмма на Андроид

Евгений 11.08.2023 Ответить

Дмитрий, спасибо за такое подробное пояснение!
Да, про второй вариант тоже думал, что можно так делать. Именно интересовал вариант «Гугловый » :)))
А так да, гугл скрипт + телеграм бот — есть понимание, что для очень большого количества пользователей не гууд. Но для себя и небольшой базы, думаю самое то:) Еще такой вопрос возник: вот например я использую 1 вариант и ставлю выполнение скрипта на паузу, всё это зацикливаю. Отправилась порция, пауза, отправилась порция, пауза и т.д. Как по лимитам гугла это будет? Пока скрипт «спит» — не идет серверное время? Время исполнения считается? Или как?
Вопрос к тому, что, например, есть база в 3 000 чел. настроил на отправка 30 / пауза. Это 100 пауз. Не будет такого, что на 25 или 45 цикле выполнение остановится и все, дальше не пойдет?

Источник: dmitriizhuk.ru

Какую информацию о нас хранят телеграм‑боты, чем они опасны и как удалить их из аккаунта? Отвечают эксперты

Какие данные хранят о пользователях телеграм-боты? Как правильно удалить их из своего аккаунта? Как отличить настоящий бот от фейкового? «Медиазона» отвечает на эти вопросы вместе с разработчиком партизанского телеграма и одним из участников объединения «Киберпартизаны».

Что такое телеграм-бот?

Под телеграм-ботом могут иметься в виду как классические боты, которыми мы привыкли пользоваться (например, боты обратной связи), так и юзер-боты. В первом случае телеграм выделяет боты в отдельную сущность наравне с каналами, чатами и пользователями. У таких ботов есть ограничения. Например, они не могут написать вам первыми или добавиться в группу.

Юзер-бот — это пользовательский аккаунт, поведение которого автоматизировано. Например, в комментариях можно увидеть таких ботов, которые что-нибудь рекламируют. При помощи таких ботов силовики могут автоматически собирать информацию из открытых групп. И даже из закрытых, если удастся в них попасть.

Ниже идет разговор про классические боты.

Какую информацию собирают телеграм-боты?

По словам экспертов, после нажатия кнопки Start любой бот может получить доступ к ID пользователя, его имени и фамилии, никнейму, разделу «о себе» и языку, установленному в приложении. Бот автоматически получит доступ к фото профиля, если в настройках конфиденциальности юзер не скрыл его ото всех. Бот не имеет автоматического доступа к номеру телефона пользователя, но может его запросить. Если пользователь разрешит отправку, бот получит доступ к номеру.

Разработчик бота может решить, будет бот сохранять эти данные данные или нет. Если бот сохранит ID пользователя, разработчик сможет получить доступ к этим данным позже, даже если пользователь заблокирует бот. Правда, после блокировки бот не сможет узнать актуальные данные пользователя. То есть если после блокировки пользователь сменит свой никнейм, то бот будет видеть его старую версию.

— Любые сообщения, отправленные в бот, могут быть им сохранены. Даже если пользователь их удалит. Пользователь не может узнать, как бот распоряжается полученной информацией. То есть бот может как удалять полученные сообщения сразу после прочтения, так и хранить их, — объясняют эксперты.

Что такое ID в телеграме?

ID — это набор цифр, по сути номер вашего аккаунта. Изменить его невозможно, даже если пользователь сменит аватарку, имя или никнейм. Опасность в том, что если пользователь оставлял комментарии, потом их удалил и поменял имя и фото в аккаунте, его ID остается тем же, а значит человека можно вычислить.

Если вы хотите поменять ID — удалите старый аккаунт и зарегистрируйте новый.

Как мне отличить фейковый бот от настоящего?

— В партизанском телеграме правильный бот помечен галочкой верификации. А фейковые боты мы стараемся помечать значками фейка.

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

Если я перешел по ссылке фейкового бота, значит меня уже сдеанонили?

Переход по ссылке бота в телеграм не означает вообще ничего, если не была нажата кнопка Start. Как только кнопка будет нажата, бот получит информацию о пользователе, о которой мы писали выше.

Если ссылка на бот была оставлена в комментариях, например, канала Nexta, то силовики могут предположить, что человек, запустивший бот (при условии перехода по ссылке и нажатии на кнопку Start), читает этот канал. Если аккаунт человека анонимный (зарегистрирован на иностранный номер, с ненастоящим именем, с соблюдением всех правил безопасности), то сам по себе запуск бота скорее всего не даст силовикам никакой полезной информации.

Еще по теме:  Как совместить Телеграмм на телефоне и компьютере

Есть специальные боты силовиков, которые могут вытянуть больше информации?

Боты не могут вытянуть больше той информации, о которой мы писали выше. То, что существуют боты, которые автоматически получают доступ к геолокации человека или к его личным перепискам — миф. При этом существуют и другие методы сбора информации о пользователе.

1. Силовики могут автоматически собирать информацию из комментариев в каналах и открытых чатах. Для этого существуют специальные «скринеры», которые отслеживают активность пользователя или чата в целом. Собирая такую базу, они могут сопоставлять ID, «утекшие» через фейковые боты, с комментаторами, а также проверять этот уникальный номер в телеграме при задержании.

2. Силовики при задержании могут войти в аккаунт человека через свое устройство. Тогда они получат доступ ко всему профилю, в том числе к вашему архиву, в котором могут храниться сообщения из закрытых чатов, из которых вы уже вышли.

Что делать, если я уже запускал телеграм-боты?

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

Есть два варианта того, как можно себя обезопасить.

Можно полностью уничтожить старый «засвеченный» телеграм-аккаунт, создать новый и пользоваться им. Эксперты рекомендуют создать как минимум два аккаунта: один чистый (чтобы его можно было показать по принуждению и не волноваться) и один «партизанский» (его использовать для непубличных дел, переписок и подписок).

Второй вариант — почистить «хвосты» своего аккаунта, хотя информация об аккаунте в боте все равно сохранится. Тем не менее, инструкция ниже поможет стереть боты, которые вы запускали, из истории поиска и ваших переписок.

Как почистить «хвосты» самостоятельно?

Боты, которыми вы когда-то пользовались, всегда указываются в поиске телеграма (окно вверху приложения). И если ввести в поисковую строку слово bot, то вы увидите всех ботов, которым когда-либо писали. Даже если вы заблокировали бот, то его можно найти по пути «Настройки > Конфиденциальность и безопасность > Заблокированные пользователи». Их же увидят и силовики в случае задержания.

Чтобы удалить всех ботов, сделайте следующее:

  • Разблокируйте в черном списке всех ботов.
  • Введите слово bot в строке поиска телеграм.
  • Выберите бот, который нужно удалить. Нажмите три вертикальные точки и выберите «Очистить историю».
  • Снова введите слово bot в строке поиска. Нажмите на тот же самый бот и выберите «Удалить чат».

Подождите сутки, в это время не ищите ботов в строке поиска. Если не получилось, пройдите все шаги еще раз и вновь подождите сутки.

Специалисты по кибербезопасности говорят, что этот вариант — полумера, и никаких гарантий он не дает. При чем на разных устройствах (Windows, macOS, Android и iOS) он работает по-разному. Лучше всего проделывать все эти манипуляции из Web-версии мессенджера или приложения на ПК.

Источник: baj.media

Топ 5 телеграм ботов для поиска информации о человеке

Телеграм (Telegram) – один из наиболее популярных мессенджеров в мире, так как он сочетает в себе безупречную функциональность, простоту в использовании и наличием огромного количества полезной информации. Кроме того, что данное приложение имеет внушительный спектр интересных функций и опций, присутствуют специальные программы, которые многократно облегчают использование Telegram. Телеграм боты для поиска людей – уникальные программы, способные находить требуемую информацию о человеке быстро и легко. Ниже представлен список ботов мессенджера Телеграм из ТОП-5, предназначенные для удобного и практически мгновенного нахождения данных о конкретном человеке.

Наиболее популярные боты

В настоящее время имеется достаточно большое количество ботов в Telegram, с помощью которых представляется возможным находить нужные сведения о людях, однако присутствуют 5 самых лучших в этой области.

Глаз Бога — Большая база пользователей, удобный и интуитивно понятный интерфейс, отличная функциональность – далеко не все преимущества представленного Телеграм бота. Использование бота доступно каждому, так как имеется возможность получать информацию и бесплатно.

AVinfoBot — еще один бот по поиску людей по фото, который пользуется достаточно большой распространенностью среди пользователей. Присутствуют различные функции, позволяющие с максимальным комфортом, удобством и быстротой получать требуемую информацию о людях.

Buzzim_Alerts – бот, дающий возможность осуществлять бесплатный поиск и мониторинг в Телеграм. В большинстве случаев его используют для нахождения каналов по интересам, чтобы присоединяться к диалогам в открытых группах.

Рейтинг
( Пока оценок нет )
Загрузка ...