Telegram в качестве хранилища данных для IT проектов

Есть множество способов получить данные о человеке: поискать его по социальным сетям, сделать поиск по Google или Яндекс, проанализировать доски объявлений и многое другое. Но если делать это собственными руками, то поиск превратиться в адский труд, потому что это долгая, рутинная и кропотливая работа. И нет никаких гарантий, что она увенчается успехом.

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

В данной статье мы рассмотрим, каким образом через бота для Телеграм можно найти информацию о человеке.

Содержание

Глаз Бога — смотрящий бот из Телеграм

Первый бот скромно именуется Глаз Бога и разработчики позиционируют его как самый лучший бот с персональной информацией о людях. Возможно, так и есть, потому что функций у него очень много. И действительно разработчики подошли к своему творению серьёзно и основательно, у них даже есть свой сайт с интересным дизайном и организованна служба поддержки. А на самом сайте есть предупреждение о том, что сервис представляет собой лишь поиск по открытой информации людей и не нарушает законодательства России, что, конечно же, успокаивает. Бот обрабатывает около 40 источников информации и санкционировано получает из них информацию. По заявлению разработчиков, око Божье объединяет в себе функции всех аналогичных инструментов.

Каким образом работать с ботом для поиска информации о человеке:

  1. Перейдите в браузере на сайт Глаз Бога https://eyegod.info и нажмите на кнопку «Перейти в бот«. Это можно сделать на любом устройстве, где установлен Telegram — на мобильном или компьютере.
  2. Бот откроется в приложении Телеграм. На стартовой странице вы увидите краткое описание функций бота. Нажмите кнопку «Старт«, чтобы начать.
  3. Вы увидите более подробную информацию о том, что умеет бот. И всё. Теперь бот работает и им можно пользоваться.

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

Давайте рассмотрим подробнее, по каким данным можно найти здесь человека:

Способы поиска: Пояснение:
Поиск можно сделать по имени и дате рождения. Для этого боту следует отправить имеющиеся данные — имя и фамилию, можно дополнить информацию отчеством и датой рождения, тогда поиск будет более точным. Формат сообщения такой: Устимова Ольга Сергеевна 29.03.1983.
Можно поискать человека по государственному или идентификационному (VIN) номеру автомобиля. Для этого нужно отправить боту номер: М999ММ99 (для России), ВО4561АХ (для Украины) или ХТА21150053965897 (VIN номер). Номер телефона может быть распознан, если вы отправите боту его качественную фотографию.
Поддерживается поиск по номеру телефону (79998887777) электронной почте (name@mail.ru), адресу (Москва, Тверская, д 12, кв 1), идентификатору пользователя в Telegram (id713052, @anton). В скобках указан формат сообщения, в котором нужно отправить данные боту.
С помощью этого бота можно искать не только людей, но и юридических лиц, в том числе и ИП. Для этого нужно знать ИНН, и ввести его в таком формате: /inn 7702232171.
Можно отправить боту ссылку на профиль ВКонтакте. Например, https://vk.com/id1. В результате можно получить данные о владельце профиля — почту и номер телефона.
Бот умеет работать и с IP, для этого нужно отправить ему нужный адрес в формате 8.8.8.8. В результате вы получите информацию о его географическом положении либо о домене, если он принадлежит сайту.
Можно получить данные о владельце криптокошелька Биткоин. Для этого нужно отправить адрес, например, 1AmajNxtJyU7JjAuyiFFkqDaaxuYqkNSkF.
Человека в этом Телеграм боте можно найти даже по фото. Для этого надо отправить портретную фотографию хорошего качества вложенным файлом.
Можно отправить этому боту свою геолокацию. В результате можно получить список людей, которые присутствуют рядом, и их данные.
Бот умеет также и распознавать текст по голосу. Поэтому, если нет времени писать, то можно наговорить данные.

Как видите, функций у Глаза Бога очень много, и есть даже дополнительные полезности, вроде распознавания по фото и голосу. Какие данные предоставит бот в результатах поиска? Все, которые у него имеются о найденном человеке: имя, номер телефона, электронная почта, страница во ВК, логин в Viber, Telegram, номер автомобиля и другое.

Это условно-бесплатный инструмент. Бесплатно можно попробовать его, и получить некоторые данные, но самая «вкусная» информация окажется доступной в платном тарифе.

Поиск информации о человеке в Facebook

Следующий бот в Телеграм намного проще и полностью бесплатный. Он умеет искать в базе Facebook по номеру телефона.

  • В смартфоне или на компьютере перейдите по этой ссылке https://t.me/GetCont_bot, и бот откроется в вашем приложении Telegram. Нажмите кнопку «Старт».
  • И вы увидите инструкцию по работе с ботом: достаточно отправить ему номер телефона в формате +7 000 111 22 33 или +70001112233 и в результате вы получите ссылку на страницу Facebook человека, которому принадлежит данный номер, если он присутствует в базе бота.

И это всё, никаких дополнительных функций здесь нет.

Это вам будет интересно: t.me что за сайт.

Два простых бота для поиска по номеру телефона

Два бота, созданные разными разработчиками, но очень похожие — умеют искать информацию о человеке по его номеру телефона. Работает полностью бесплатно.

Какие основные функции этих ботов для поиска информации о человеке и чем они отличаются от робота Телеграм:

  • Первый называется Getcontact, и подключить его к Telegram можно по этой ссылке https://t.me/GetCont_bot. Нажмите на «Старт» после перехода по ссылке, и вы увидите предложение ввести номер телефона для поиска в формате +70001112233. Результат поиска будет через несколько секунд и в нём будут данные об операторе и регионе владельца телефона.
  • Второй бот чуть более функциональный, называется ТелПоиск и находится по этой ссылке. Чтобы подключить бота, перейдите по ссылке и нажмите «Старт». И вы увидите информацию о функциональности этого бота. Отправьте ему номер телефона в формате +70001112233, и через несколько мгновений вы получите результат поиска, в котором будут содержаться данные о социальных сетях, мессенджерах, платёжных сервисах, объявлениях на досках, где фигурирует это номер.

Способ найти данные об автомобиле

Этот бот специализируется на данных об автомобилях. Является условно-бесплатным инструментом, в бесплатном тарифе предусмотрено несколько проверок, а затем придётся оплачивать подписку. По отзывам некоторых пользователей, работает достаточно быстро и точно.

Перейдите по https://t.me/avinfobot и нажмите «Старт«. Вы увидите краткое описание бота и познакомитесь с его функциями.

Бот умеет принимать и отображать такие данные:

  • фамилию, имя и отчество;
  • номер телефона и электронная почта;
  • государственный и VIN номера автомобиля;
  • ссылка на ВК-профиль;
  • IP адрес владельца автомобиля;
  • кроме того, есть возможность распознать человека по отправленному боту фото и получить о нём вышеперечисленные данные.

Как было сказано выше — это условно бесплатный сервис.

По некоторым данным, этот робот получает данные из базы объявлений Авито, где торгуют автомобилями. Сведений о санкционированном доступе к этой базе нигде не присутствует.

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

Главная»Защита и безопасность

Telegram-бот «Глаз Бога»</figcaption>

Для отправ­ки команд бот тре­бует под­писать­ся на собс­твен­ный канал, но даже это не гаран­тиру­ет резуль­тата. По телефо­ну «Глаз Бога» выда­ет наз­вание опе­рато­ра и его реги­он (видимо, для тех, кто не уме­ет опре­делять эти дан­ные на глаз), воз­можное имя (я ввел нес­коль­ко телефон­ных номеров — име­на сов­пали).

Еще он может най­ти поч­товые адре­са (веро­ятнее все­го, по базе адми­нис­тра­торов доменов), стра­ницу «ВКон­такте», акка­унт «Телег­рам», WhatsApp, чис­ло инте­ресо­вав­шихся пер­сонажем до вас. Но эту информа­цию бот пре­дос­тавит за 30 руб­лей. То же самое каса­ется поис­ка по номеру авто­моби­ля: бес­плат­но бот показы­вает толь­ко реги­он (который мож­но опре­делить и так), а за трид­цатку пред­лага­ет ска­чать отчет «Авто­кода». При этом дан­ные об авто­моби­ле по его номеру при желании нет­рудно отыс­кать в этих ваших интерне­тах бес­плат­но.

Ес­ли вы вве­дете адрес элек­трон­ной поч­ты, бот любез­но покажет вам логин (то, что до сим­вола @) и домен (то, что пос­ле @) — это осо­бо цен­ная информа­ция! Так­же вам пред­ложат купить адрес при­вязан­ной к это­му мылу стра­нич­ки «ВКон­такте» и свя­зан­ные с email пароли из какой‑то сли­той базы. По име­ни бот ищет толь­ко номер телефо­на в задан­ном реги­оне, находит неп­равиль­ный и для его прос­мотра пред­лага­ет купить под­писку.

В общем и целом, поль­за от это­го бота показа­лась мне весь­ма сом­нитель­ной: инфу, которую «Глаз Бога» отда­ет бес­плат­но, мож­но при желании нагуг­лить и без него, а плат­ная информа­ция скуд­на и не всег­да дос­товер­на.

AVinfo

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

Заключение

Мои экспе­римен­ты показа­ли, что боты для поис­ка пер­сональ­ных дан­ных в целом могут быть полез­ны, но с неболь­шими ого­вор­ками:

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

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

Бо­ты могут под­ска­зать нап­равле­ние поис­ка и рас­ширить набор исходных дан­ных, но в качес­тве пол­ноцен­ного инс­тру­мен­та для пробива пер­сональ­ных дан­ных они вряд ли сго­дят­ся.

Еще по теме: Угон Телеграм и как от этого защититься

ВКонтактеTwitterFacebookOKTelegramWhatsAppViber

Не­дав­ние разоб­лачитель­ные пуб­ликации извес­тно­го оппо­зици­оне­ра Алек­сея Наваль­ного вско­лых­нули вол­ну небыва­лого инте­реса общес­твен­ности к тенево­му биз­несу, свя­зан­ному с услу­гами про­бива. То, что поч­ти любые дан­ные у нас про­дают­ся и покупа­ются, — не сек­рет, но, говорят, кое‑что мож­но разуз­нать и вов­се бес­плат­но у ботов в «Телег­раме». Так ли это и о каких ботах речь, мы сей­час выяс­ним.

warning

Не­закон­ный сбор пер­сональ­ной информа­ции — это наруше­ние закона «О пер­сональ­ных дан­ных» и дру­гих законов РФ. Так­же подоб­ные дей­ствия могут обра­зовать сос­тав прес­тупле­ния по статье 137 УК РФ «Наруше­ние неп­рикос­новен­ности час­тной жиз­ни». Ни автор, ни редак­ция не несут ответс­твен­ности за любые пос­ледс­твия исполь­зования при­веден­ных в этой пуб­ликации све­дений, которые пред­став­лены здесь исклю­читель­но ради информи­рова­ния читате­ля.

Боль­шинс­тво ботов Telegram, выпол­няющих по зап­росу поль­зовате­ля поиск и выдачу пер­сональ­ных дан­ных, работа­ют по схе­ме OSINT, то есть опи­рают­ся на откры­тые источни­ки, для чего экс­плу­ати­руют API раз­личных служб и интернет‑ресур­сов. Дру­гие исполь­зуют сли­тые базы дан­ных, но такие сер­висы, во‑пер­вых, не всег­да фун­кци­они­руют ста­биль­но, а во‑вто­рых, испы­тыва­ют проб­лемы с акту­али­заци­ей информа­ции: любая утек­шая в паб­лик база со вре­менем уста­рева­ет и, разуме­ется, не обновля­ется. Монети­зиру­ются подоб­ные боты либо за счет донатов, либо за счет рек­ламы, или же адми­ны огра­ничи­вают количес­тво бес­плат­ных зап­росов, пос­ле чего бот начина­ет про­сить денег за каж­дую сле­дующую выдачу. Иног­да — если адми­ны ну очень жад­ные — исполь­зуют­ся все методы сра­зу.

bots.jpg
Не все боты оди­нако­во удоб­ны в исполь­зовании

Лю­ди ищут пер­сональ­ную информа­цию по раз­ным при­чинам. Кто‑то пыта­ется таким обра­зом отыс­кать сво­их <strike>от­равите­лей</strike> дол­жни­ков или сим­патич­ную сосед­ку по подъ­езду с боль­шими и кра­сивы­ми си… ними гла­зами. Кто‑то разыс­кива­ет пря­мые кон­такты бло­геров или вла­дель­цев паб­ликов либо пыта­ется из чис­того любопытс­тва пос­мотреть пос­ты в зак­рытых про­филях соц­сетей <strike>сво­ей быв­шей</strike>.

Еще мож­но по номеру машины отыс­кать мобиль­ный телефон под­резав­шего тебя на дороге водят­ла, поз­вонить ему, наз­вать по име­ни‑отчес­тву и веж­ливо поп­росить объ­ясне­ний. Некото­рые «гон­щики» в такие момен­ты почему‑то нем­ного сму­щают­ся. В общем, при­чины могут быть раз­ными, а средс­тво одно: условно‑бес­плат­ные Telegram-боты или услу­ги про­бива, до сих пор широко рек­ламиру­емые в дар­кне­те.

info

О том, как и за сколь­ко пре­дос­тавля­ют в дар­кне­те услу­ги про­бива, читай в статье «Про­бей меня пол­ностью! Кто, как и за сколь­ко про­бива­ет пер­сональ­ные дан­ные в Рос­сии».

Оче­вид­но, что не все боты оди­нако­во полез­ны. Некото­рые про­сят денег, но в ответ либо не находят акту­аль­ную информа­цию, либо отда­ют откро­вен­ную туф­ту. Дру­гие вро­де бы работа­ют, но нас­толь­ко стран­но, что дос­товер­ность пред­лага­емых ботом дан­ных оста­ется сом­нитель­ной. Что­бы ты не тра­тил дра­гоцен­ное вре­мя и день­ги на поиск жем­чужин в куче орга­ничес­ких удоб­рений, твой любимый жур­нал про­тес­тировал наибо­лее популяр­ные боты в Telegram и пря­мо сей­час поделит­ся с тобой получен­ными резуль­татами. Пог­нали!

Get Contact

Еще один популяр­ный бот, упо­минав­ший­ся в ряде недав­них жур­налист­ских пуб­ликаций. Бот обла­дает доволь­но‑таки обширным набором фун­кций: поиск по име­ни в прос­том тек­сто­вом фор­мате, по номеру авто­моби­ля, по номеру телефо­на, по адре­су элек­трон­ной поч­ты, по наз­ванию юри­дичес­кого лица или ИНН.

Telegram-бот «Глаз Бога»

Для отправ­ки команд бот тре­бует под­писать­ся на собс­твен­ный канал, но даже это не гаран­тиру­ет резуль­тата. По телефо­ну «Глаз Бога» выда­ет наз­вание опе­рато­ра и его реги­он (видимо, для тех, кто не уме­ет опре­делять эти дан­ные на глаз), воз­можное имя (я ввел нес­коль­ко телефон­ных номеров — име­на сов­пали). Еще он может най­ти поч­товые адре­са (веро­ятнее все­го, по базе адми­нис­тра­торов доменов), стра­ницу «ВКон­такте», акка­унт «Телег­рам», WhatsApp, чис­ло инте­ресо­вав­шихся пер­сонажем до тебя. Но эту информа­цию бот пре­дос­тавит за 30 руб­лей. То же самое каса­ется поис­ка по номеру авто­моби­ля: бес­плат­но бот показы­вает толь­ко реги­он (который мож­но опре­делить и так), а за трид­цатку пред­лага­ет ска­чать отчет «Авто­кода». При этом дан­ные об авто­моби­ле по его номеру при желании нет­рудно отыс­кать в этих ваших интерне­тах бес­плат­но.

Ес­ли ты вве­дешь адрес элек­трон­ной поч­ты, бот любез­но покажет тебе логин (до сим­вола @) и домен (пос­ле @) — это осо­бо цен­ная информа­ция! Так­же тебе пред­ложат купить адрес при­вязан­ной к это­му мылу стра­нич­ки «ВКон­такте» и свя­зан­ные с email пароли из какой‑то сли­той базы. По име­ни бот ищет толь­ко номер телефо­на в задан­ном реги­оне, находит неп­равиль­ный и для его прос­мотра пред­лага­ет купить под­писку.

В общем и целом поль­за от это­го бота показа­лась мне весь­ма сом­нитель­ной: инфу, которую «Глаз Бога» отда­ет бес­плат­но, мож­но при желании нагуг­лить и без него, а плат­ная информа­ция скуд­на и не всег­да дос­товер­на.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.

Я уже участник «Xakep.ru»← Ранее Вьетнам пострадал от сложной атаки на цепочку поставокДалее → Торопись! С 1 января возрастет стоимость курса «Безопасность веб-приложений»Добрый день, сегодня я хотел бы поделится с Вами проблемами и их необычными решениями, которые встретились при написании небольших IT проектов. Сразу скажу, что статья для тех, кто хоть немного разбирается в разработке телеграмм ботов, баз данных, SQL и в языке программировании python. Весь проект выложен на github, ссылка будет в конце статьи.y-pDbyfXZqI.jpg

Основная проблема

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

  1. Вариант — глобальные переменные, оперативная память. Вариант сразу провальный, так как при падении программы мы теряем все
  2. Вариант — запись в файл на диске. Для такого проекта может и пойдет, но я планировал деплой бота на heroku, который каждый день стирает все данные с диска. Так что этот вариант не подошел
  3. Вариант — Google-таблицы. Изначально я хотел остановится на этом варианте, но начал разбираться и понял, что есть ограничение на количество запросов к таблице, и чтобы только начать использовать таблицу нужно написать кучу строк кода и разобраться в их не самом простом апи
  4. Вариант — база данных. Да, это наилучший вариант во всем. Но для такого проекта это даже смешно использовать. Также развертывание и поддержка базы данных на стороннем сервере обойдется в копеечку.

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

Решение

Идея очень простая, для хранения данных мы будем использовать in memory базу данных sqllite, так как она уже встроена в python 3 и будем делать бэкапы нашей таблицы на сервера Telegram с небольшим интервалом (примерно каждые 30 секунд) и бэкап при закрытие процесса программы. Если сервер упал, то при первом запросе мы автоматически загрузим нашу таблицу с сервера Telegram и восстановим данные в sqllite. Можно использовать и любую другую in memory бд, кому как нравится.

Плюсы

  1. Быстродействие — за счет работы с данными в оперативной памяти скорость выполнения программы даже быстрее, чем при использовании бд на стороннем сервере (графики скорости выполнения и тестирования будут в конце)
  2. Бесплатно — не нужно покупать сторонние сервера для баз данных и все данные хранятся в виде бэкапа бесплатно на серверах Telegramа
  3. Относительно надежно — если сервер падает по непонятным причинам, то мы максимум теряем данные за последние 30 секунд (время интервала бэкапов), для рабочего прототипа или небольшого проекта будет достаточно.
  4. Минимальные затраты при переходе на обычную бд — нужно заменить данные подключения, убрать код бекапов и перенести данные таблицы из бэкапа на новую бд.

Минусы

  1. Отсутствие горизонтального масштабирования
  2. Нужно два аккаунта в Telegramе (один для администратора, другой для тестирования пользователя)
  3. Сервер не будет работать в России из-за блокировок
  4. В комментариях я думаю Вы найдете еще десяток других нюансов.

Время говнокодить

Напишем простой кликер и проведем тесты на скорость выполнения. Бот будет написан на языке программирования python с использованием асинхронной библиотеки взаимодействия с api телеграмма aiogram. Первым делом нужно заполнить настройки бота, не буду рассказывать как получить токен от BotFather, уже сотни статей есть на эту тему. Также нам нужен второй аккаунт в телеграмме для админа, в котором будут сохраняться наши бекапы. Для того, чтобы получить admin_id и config_id нам нужно запустить бота с аккаунта администратора и написать боту «admin», после чего он создаст первый бекап, и напишет ваш admin_id, config_id. Заменяем и запускаем бота заново.

#--------------------Настройки бота------------------------- # Ваш токен от BotFather TOKEN = '1234567:your_token'  # Логирование logging.basicConfig(level=logging.INFO)  bot = Bot(token=TOKEN) dp = Dispatcher(bot)  # Ваш айди аккаунта администратора и айди сообщения где хранится файл с данными admin_id=12345678 config_id=12345  conn = sqlite3.connect(":memory:")  # настройки in memory бд cursor = conn.cursor() 

Так теперь пройдемся по основной логике бота

Если боту приходит сообщение со словом «admin», то мы создаем таблицу пользователей с такой моделью данных:

  • chatid — уникальный чат айди пользователя
  • name — имя пользователя
  • click — количество кликов
  • state — значение для машины состояний, в данном проекте не используется, но в более сложных без него не обойтись

Добавляем тестового пользователя, и отправляем документ на сервер Telegram с нашей таблицей. Так же отправляем admin_id и config_id администратору в виде сообщений. После получения айдишников, данный код нужно закомментировать.

 # Логика для администратора     if message.text == 'admin':         cursor.execute("CREATE TABLE users (chatid INTEGER , name TEXT, click INTEGER, state INTEGER)")         cursor.execute("INSERT INTO users VALUES (1234, 'eee', 1,0)")         conn.commit()         sql = "SELECT * FROM users "         cursor.execute(sql)         data = cursor.fetchall()         str_data = json.dumps(data)         await bot.send_document(message.chat.id, io.StringIO(str_data))         await bot.send_message(message.chat.id, 'admin_id = {}'.format(message.chat.id))         await bot.send_message(message.chat.id, 'config_id = {}'.format(message.message_id+1)) 

Логика для пользователя

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

# Логика для пользователя     try:         sql = "SELECT * FROM users where chatid={}".format(message.chat.id)         cursor.execute(sql)         data = cursor.fetchone()  # or use fetchone()     except Exception:         data = await get_data()         cursor.execute("CREATE TABLE users (chatid INTEGER , name TEXT, click INTEGER, state INTEGER)")         cursor.executemany("INSERT INTO users VALUES (?,?,?,?)", data)         conn.commit()         sql = "SELECT * FROM users where chatid={}".format(message.chat.id)         cursor.execute(sql)         data = cursor.fetchone()  # or use fetchone() 

Если мы нашли пользователя в бд, то обрабатываем кнопки:

  • При нажатие «Клик» мы обновляем количество кликов у данного пользователя
  • При нажатие «Рейтинг» мы выводим список пятнадцати человек у которых наибольшее количество кликов.

Если не нашли пользователя, то написать ему ошибку.

 #При нажатии кнопки клик увеличиваем значение click на один и сохраняем     if data is not None:         if message.text == 'Клик':             sql = "UPDATE users SET click = {} WHERE chatid = {}".format(data[2]+1,message.chat.id)             cursor.execute(sql)             conn.commit()             await bot.send_message(message.chat.id, 'Кликов: {} '.format(data[2]+1))          # При нажатии кнопки Рейтинг выводим пользователю топ 10         if message.text == 'Рейтинг':             sql = "SELECT * FROM users ORDER BY click DESC LIMIT 15"             cursor.execute(sql)             newlist = cursor.fetchall()  # or use fetchone()             sql_count = "SELECT COUNT(chatid) FROM users"             cursor.execute(sql_count)             count=cursor.fetchone()             rating='Всего: {}n'.format(count[0])             i=1             for user in newlist:                 rating=rating+str(i)+': '+user[1]+' - '+str(user[2])+'n'                 i+=1             await bot.send_message(message.chat.id, rating)     else:         await bot.send_message(message.chat.id, 'Вы не зарегистрированы')

Напишем логику для регистрации пользователя

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

sql_select = "SELECT * FROM users where chatid={}".format(message.chat.id)     sql_insert = "INSERT INTO users VALUES ({}, '{}', {},{})".format(message.chat.id,message.chat.first_name, 0, 0)     try:         cursor.execute(sql_select)         data = cursor.fetchone()         if data is None:             cursor.execute(sql_insert)             conn.commit()             await save_data()     except Exception:         data = await get_data()         cursor.execute("CREATE TABLE users (chatid INTEGER , name TEXT, click INTEGER, state INTEGER)")         cursor.executemany("INSERT INTO users VALUES (?,?,?,?)", data)         conn.commit()         cursor.execute(sql_select)         data = cursor.fetchone()         if data is  None:             cursor.execute(sql_insert)             conn.commit()             await save_data()         # Создаем кнопки     button = KeyboardButton('Клик')     button2 = KeyboardButton('Рейтинг')     # Добавляем     kb = ReplyKeyboardMarkup(resize_keyboard=True).add(button).add(button2)     # Отправляем сообщение с кнопкой     await bot.send_message(message.chat.id,'Приветствую {}'.format(message.chat.first_name),reply_markup=kb)

Так, ну и самое интересное.

Сохранение и получение данных с сервера Telergam

Мы выгружаем все данные с таблицы пользователей, переводим словарь в строку и изменяем наш файл, который хранится на серверах Telegram.

 #--------------------Сохранение данных------------------------- async def save_data():      sql = "SELECT * FROM users "     cursor.execute(sql)     data = cursor.fetchall()  # or use fetchone()     try:         # Переводим словарь в строку         str_data=json.dumps(data)          # Обновляем  наш файл с данными         await bot.edit_message_media(InputMediaDocument(io.StringIO(str_data)), admin_id, config_id)      except Exception as ex:         print(ex) 

Для того, чтобы получить бэкап нам нужно переслать сообщение с файлом от админа к админу. Затем получить путь к файл, считать данные по url и вернуть весь бэкап.

# #--------------------Получение данных------------------------- async def get_data():     # Пересылаем сообщение в данными от админа к админу     forward_data = await bot.forward_message(admin_id, admin_id, config_id)      # Получаем путь к файлу, который переслали     file_data = await bot.get_file(forward_data.document.file_id)      # Получаем файл по url     file_url_data = bot.get_file_url(file_data.file_path)      # Считываем данные с файла     json_file= urlopen(file_url_data).read()      # Переводим данные из json в словарь и возвращаем     return json.loads(json_file)

Ну вот почти и все, осталось только написать таймер, чтобы делал бэкапы и протестировать бота. Создаем поток, который каждые 30 секунд выполняет наш метод save_data()

def timer_start():     threading.Timer(30.0, timer_start).start()     try:         asyncio.run_coroutine_threadsafe(save_data(),bot.loop)     except Exception as exc:         pass

Ну и в главной программе мы запускаем таймер и самого бота.

#--------------------Запуск бота------------------------- if __name__ == '__main__':     timer_start()     executor.start_polling(dp, skip_updates=True)

Так с кодом вроде бы разобрались, вот ссылка рабочего проекта на github.

Как запустить

  1. Скачиваем проект с гитхаба. Запускаем проект в любой среде разработки для python (Например: PyCharm).
  2. Среда разработки автоматически подгрузит необходимые библиотеки с файла requirements.
  3. Заменяем Token от BotFather в файле main.py
  4. Запускаем проект
  5. Со второго аккаунта нажимаем /start и пишем слово «admin»
  6. Выключаем проект и заполняем admin_id и config_id в файле main.py
  7. Запускаем проект и с аккаунта пользователя нажимаем старт
  8. Профит

Тестирование и графики

Тесты проводились на серверах heroku с минимальными характеристиками инстансов. Так, что можно считать, что все тесты были выполнены в более менее равных условиях. Графики сделаны по выборкам из ~100 запрос-ответов. И представлены средние показатели выборки. В качестве базы данных на стороннем сервере использовался PostgreSQL на Amazon RDS с минимальными характеристиками. При одном миллионе пользователей время бэкапов становится проблемой. Размер бэкапа полностью зависит от вашей модели данных, в моем случае при одном миллионе пользователей получился файл с данными на 21 мегабайт.

Вывод

Данный метод хранения данных имеет смысл для проектов до миллиона пользователей. То есть для прототипа или личного стартапа данный способ имеет право на жизнь. В итоге мы получили полностью автономного кликера, независящий от удаленных баз данных. Вот выше описанный проект, развернутый на heroku: @Clicker_fast_bot Так же я реализовал более сложный проект с данной идеологией: @Random_friend_bot Подобие чатвдвоем и чатрулет, но только в телеграмме. Он ищет в радиусе 100 км человека противоположного пола для общения и реализует закрытый чат с новым собеседником. Если будет интересно могу скинуть исходный код проекта. Так же если данная тема будет актуальна, то в следующей статье могу описать создание Rest api без внешних БД. То есть такой стек django-sqllite-Telegram. Буду рад любой критике, спасибо за внимание!Используемые источники:

  • https://rusadmin.biz/zashhita-i-bezopasnost/boty-telegram-s-informatsiej-o-cheloveke/
  • https://spy-soft.net/telegram-bots-for-finding-information/
  • https://xakep.ru/2020/12/28/telegram-bots/
  • https://habr.com/ru/post/464865/

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий