<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>lust g</title><author><name>lust g</name></author><id>https://teletype.in/atom/seswq</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/seswq?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@seswq?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=seswq"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/seswq?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-07-05T10:37:33.206Z</updated><entry><id>seswq:Nm2MVU2zh</id><link rel="alternate" type="text/html" href="https://teletype.in/@seswq/Nm2MVU2zh?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=seswq"></link><title>LightShot и чужие скриншоты</title><published>2021-05-13T20:47:22.675Z</published><updated>2021-05-13T20:47:22.675Z</updated><category term="veb-master" label="Веб-мастер"></category><summary type="html">&lt;img src=&quot;https://habrastorage.org/storage3/a82/694/0bb/a826940bbaee9c7a78df0df118036864.gif&quot;&gt;Результат выполнения в браузере (как видно, ~95% сгенерированных рандомных ссылок выдают скриншоты)</summary><content type="html">
  &lt;pre&gt;&amp;lt;?php
set_time_limit(0); // убираем ограничение по времени выполнения скрипта
ob_implicit_flush();

function random_string($length)
{ // функция генерации рандомной строки
	$chars = &amp;quot;abcdefghijklmnopqrstuvwxyz1234567890&amp;quot;; // символы из которых генерируем
	$numChars = strlen($chars); // Определяем длину $chars
	$string = &amp;#x27;&amp;#x27;; // задаем пустую переменную
	for ($i = 0; $i &amp;lt; $length; $i++) { // Собираем строку
		$string.= substr($chars, rand(1, $numChars) - 1, 1);
	}
	return $string; // Возвращаем готовую строку
}

function get_http_response_code($url) { // функция проверки http кода
	$headers = get_headers($url);
	return substr($headers[0], 9, 3);
}

if (!file_exists(&amp;#x27;lightshot_images&amp;#x27;)) { // создаем директорию куда сохранять картинки, если отсутствует
	mkdir(&amp;#x27;lightshot_images&amp;#x27;, 0777);
}

$options = array(
	&amp;#x27;http&amp;#x27; =&amp;gt; array(
		&amp;#x27;method&amp;#x27; =&amp;gt; &amp;quot;GET&amp;quot;,
		&amp;#x27;header&amp;#x27; =&amp;gt; &amp;quot;Accept-language: en\r\n&amp;quot; . &amp;quot;User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n&amp;quot;
	)
);
$context = stream_context_create($options);

while (1) {
	$randstring = random_string(5); // генерируем рандомную сроку
	$htmldata = file_get_contents(&amp;#x27;https://prnt.sc/m&amp;#x27; . $randstring, false, $context); // подставляем рандомную строку и получаем код страницы
	preg_match_all(&amp;#x27;/&amp;lt;meta name=\&amp;quot;twitter:image:src\&amp;quot; content=\&amp;quot;(.*?)\&amp;quot;\/&amp;gt;/is&amp;#x27;, $htmldata, $img_url); // парсим регуляркой url картинки
	if (strlen($img_url[1][0]) &amp;gt; 1) { // проверяем длину полученной строки, если больше 1 - картинка по этому адресу есть
		$imgs = str_replace(&amp;#x27;//st.prntscr&amp;#x27;, &amp;#x27;https://st.prntscr&amp;#x27;, $img_url[1][0]);
		$localname = array_pop(explode(&amp;#x27;/&amp;#x27;, $img_url[1][0])); // разбиваем строку в массив и извлекаем последний элемент массива (т.е. imagename.png)
		$localpath = &amp;quot;./lightshot_images/&amp;quot; . $localname; // определяем куда будет сохраняться картинка локально.
		if (get_http_response_code($imgs) != &amp;quot;200&amp;quot;) {
			echo &amp;quot;&amp;lt;span style=&amp;#x27;color:red;display:block;margin-bottom:10px;font-size:14px;&amp;#x27;&amp;gt;404. По адресу &amp;quot; . $imgs . &amp;quot; картинки больше нет :(&amp;lt;/span&amp;gt;&amp;quot;;
		} else {
			file_put_contents($localpath, file_get_contents($imgs, false, $context)); // скачиваем, можно было бы реализовать через curl, но на мой взгляд это проще и быстрее
			echo &amp;quot;&amp;lt;span style=&amp;#x27;color:green;display:block;margin-bottom:10px;font-size:14px;&amp;#x27;&amp;gt;Сохранение - &amp;quot; . $localname . &amp;quot; , url - http://prntscr.com/m&amp;quot; . $randstring . &amp;quot; , скачиваем с &amp;quot; . $imgs . &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;;
		}
	} else {
		echo &amp;quot;&amp;lt;span style=&amp;#x27;color:red;display:block;margin-bottom:10px;font-size:14px;&amp;#x27;&amp;gt;По адресу http://prntscr.com/m&amp;quot; . $randstring . &amp;quot; нет картинки&amp;lt;/span&amp;gt;&amp;quot;;
	}
}
?&amp;gt;
&lt;/pre&gt;
  &lt;p&gt;Результат выполнения в браузере (как видно, ~95% сгенерированных рандомных ссылок выдают скриншоты)&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/storage3/a82/694/0bb/a826940bbaee9c7a78df0df118036864.gif&quot; width=&quot;846&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;В итоге накачал целую кучу скриншотов, среди которых есть слишком личные фото людей, скриншоты кода, и много других интересных вещей.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;UPD 2018:&lt;/strong&gt; Поправил скрипт с учетом изменений произошедших на lightshot. Теперь снова работает.&lt;/p&gt;

</content></entry><entry><id>seswq:ybFumGXkQd6</id><link rel="alternate" type="text/html" href="https://teletype.in/@seswq/ybFumGXkQd6?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=seswq"></link><title>Полезные и проверенные боты Telegram</title><published>2021-05-13T20:41:41.645Z</published><updated>2021-05-13T20:46:22.405Z</updated><category term="veb-master" label="Веб-мастер"></category><summary type="html">Последнее обновление 02.12.18</summary><content type="html">
  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Последнее обновление 02.12.18&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Ботов в Телеграм сейчас уже как грязи. С каждым днем их становится все больше и больше, а функционал обрастает новыми возможностями. Это нормально, т.к. мессенджер постоянно развивается, аудитория Телеграм растет бешеными темпами, появляются конструкторы ботов, пользователи делают собственных...&lt;/p&gt;
  &lt;p&gt;Каждого бота нужно найти, запустить, проверить, а если бот говно - отключить и удалить... время, время и еще раз время.&lt;/p&gt;
  &lt;p&gt;Но телеграм любят из-за того, что он позволяет экономить время, а не тратить. Я за вас потратил свое время, проверил, изучил и сделал подборку самых популярных и полезных ботов. Их не 5, 7, 10 как пишут во многих других статьях (по-правде говоря и не пишут вовсе, а тупо копируют друг у друга), а &lt;strong&gt;больше 60 must have ботов&lt;/strong&gt;. Поехали!&lt;/p&gt;
  &lt;p&gt;Все боты разделены по рубрикам. Чтобы запустить любого бота достаточно перейти по ссылке и нажать кнопку &amp;quot;Начать&amp;quot; (Start). Бывает, что разработчики бота перестают его развивать и он умирает долгой и мучительной смертью, если Вы нашли такого, пишите мне в &lt;a href=&quot;https://t.me/niktobesfamilniy&quot; target=&quot;_blank&quot;&gt;Telegram&lt;/a&gt; и я его отправлю на кладбище ботов.&lt;/p&gt;
  &lt;h3&gt;&lt;strong&gt;Must Have финансовые и криптовалютные боты:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;https://telegram.me/profitrobot?start=549f6ef7c5340c6bbcfe259c933987d9&quot; target=&quot;_blank&quot;&gt;https://t.me/ProfitRobot&lt;/a&gt; - заработок на офферах, веб-серфинге, партнерской программе.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/Moneytellbot?start=617693725&quot; target=&quot;_blank&quot;&gt;https://t.me/Moneytellbot&lt;/a&gt; - раскрутка телеграм-каналов. Можно зарабатывать на выполнении заданий.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://telegram.me/BTC_CHANGE_BOT?start=617693725ssAffiliate&quot; target=&quot;_blank&quot;&gt;https://t.me/BTC_CHANGE_BOT&lt;/a&gt; - продажа и покупка Bitcoin, бесплатные кошельки, заработок на комиссиях.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://telegram.me/DASH_CHANGE_BOT?start=617693725ssAffiliate&quot; target=&quot;_blank&quot;&gt;https://t.me/DASH_CHANGE_BOT&lt;/a&gt; - быстрый и бесплатный кошелек, а также сервис моментально обмена криптовалюты DASH (DASH), заработок на комиссиях.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://telegram.me/LTC_CHANGE_BOT?start=617693725ssAffiliate&quot; target=&quot;_blank&quot;&gt;https://t.me/LTC_CHANGE_BOT&lt;/a&gt; - быстрый и бесплатный кошелек, а также сервис моментально обмена LTC (Litecoin), заработок на комиссиях.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://telegram.me/DOGE_CHANGE_BOT?start=617693725ssAffiliate&quot; target=&quot;_blank&quot;&gt;https://t.me/DOGE_CHANGE_BOT&lt;/a&gt; - быстрый и бесплатный кошелек, а также сервис моментально обмена DOGE (Dogecoin), заработок на комиссиях.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://telegram.me/ETH_CHANGE_BOT?start=617693725ssAffiliate&quot; target=&quot;_blank&quot;&gt;http://telegram.me/ETH_CHANGE_BOT&lt;/a&gt; - быстрый и бесплатный кошелек, а также сервис моментального обмена Ethereum, заработок на комиссиях.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3&gt;&lt;strong&gt;Must Have официальные боты (со звездочкой):&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/BotFather&quot; target=&quot;_blank&quot;&gt;https://t.me/BotFather&lt;/a&gt; - отец всех ботов, главный и официальный бот Телеграм, создает ваших собственных ботов.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/telegraph&quot; target=&quot;_blank&quot;&gt;https://t.me/telegraph&lt;/a&gt; - бот для залогинивания в Telegra.ph (Телеграф), и просмотра всех своих статей.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/SpamBot&quot; target=&quot;_blank&quot;&gt;https://t.me/SpamBot&lt;/a&gt; - официальный бот, сообщает когда исчезнет блокировка вашего аккаунта из-за спама.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/IFTTT&quot; target=&quot;_blank&quot;&gt;https://t.me/IFTTT&lt;/a&gt; - бот известного сервиса для интеграции телеграм с другими сайтами и службами.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/gamee&quot; target=&quot;_blank&quot;&gt;https://t.me/gamee&lt;/a&gt; - бот для игр в телеграм.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3&gt;&lt;strong&gt;Must Have боты в помощь администратору канала:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/vote&quot; target=&quot;_blank&quot;&gt;https://t.me/vote&lt;/a&gt; - бот для создания анонимных опросов.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/groupagreebot&quot; target=&quot;_blank&quot;&gt;https://t.me/groupagreebot&lt;/a&gt; - бот для создания персонализированных опросов, проголосовавших видят все.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/ControllerBot&quot; target=&quot;_blank&quot;&gt;https://t.me/ControllerBot&lt;/a&gt; - бот-комбайн, для форматирования постов, публикации по таймингу, просмотра статистики и др.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/markdownrobot&quot; target=&quot;_blank&quot;&gt;https://t.me/markdownrobot&lt;/a&gt; - бот для публикаций в формате маркдаун.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/chatkeeperbot&quot; target=&quot;_blank&quot;&gt;https://t.me/chatkeeperbot&lt;/a&gt; - бот помогает в управлении группой с правилами, анти-флуд, описанием, пользовательскими триггерами, и многое другое.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/UtmGeneratorBot&quot; target=&quot;_blank&quot;&gt;https://t.me/UtmGeneratorBot&lt;/a&gt; - бот для генерации UTM меток в пару кликов.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/combot&quot; target=&quot;_blank&quot;&gt;https://t.me/combot&lt;/a&gt; - бот для администрирования чатов, сбора статистики и её визуализации.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/LivegramBot&quot; target=&quot;_blank&quot;&gt;https://t.me/LivegramBot&lt;/a&gt; - бот для создания своих ботов обратной связи.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://telegram.me/chotamreaderbot&quot; target=&quot;_blank&quot;&gt;https://telegram.me/chotamreaderbot&lt;/a&gt; - Автоматически переносит в Telegraph содержимое любой статьи — копирует заголовки, базовое форматирование, изображения и видео. Всё это пользователи Телеграм могут смотреть в режиме Instant View.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/vk_bot&quot; target=&quot;_blank&quot;&gt;https://t.me/vk_bot&lt;/a&gt; - интеграция с ВКонтакте, для админов групп VK.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/banofbot&quot; target=&quot;_blank&quot;&gt;https://t.me/banofbot&lt;/a&gt; - бот, организующий голосование за бан пользователя в отсутствие админов групп.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/crssbot&quot; target=&quot;_blank&quot;&gt;https://t.me/crssbot&lt;/a&gt; - бот создает RSS для вашего Telegram канала.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/SecretgramBot&quot; target=&quot;_blank&quot;&gt;https://t.me/SecretgramBot&lt;/a&gt; - создание анонимных комментов к посту.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/ShortUrlRUBot&quot; target=&quot;_blank&quot;&gt;https://t.me/ShortUrlRUBot&lt;/a&gt; - сокращатель ссылок.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/crosser_bot&quot; target=&quot;_blank&quot;&gt;https://t.me/crosser_bot&lt;/a&gt; - Бот считает пересечения в каналах/чатах. Показывает твою аудиторию. Спасает от неэффективных ВП. Экономит расходы на маркетинг. Чистит от неактивных и удаленных аккаунтов.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3&gt;&lt;strong&gt;Must Have боты для пользователей мессенджера:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/tgvpnbot?start=5c62c0e527a0432&quot; target=&quot;_blank&quot;&gt;https://t.me/tgvpnbot&lt;/a&gt; - быстрый, безопасный и безлимитный VPN для обхода различных блокировок и анонимизации деятельности в сети.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/DrWebBot&quot; target=&quot;_blank&quot;&gt;https://t.me/DrWebBot&lt;/a&gt; - бот антивирусник, проверяет файлы и сообщения на предмет вредоносных программ.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/AVinfoBot&quot; target=&quot;_blank&quot;&gt;https://t.me/AVinfoBot&lt;/a&gt; - проверка продавца автомобиля по телефону владельца, гос. номеру или VIN-номеру автомобиля.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/zdorobot&quot; target=&quot;_blank&quot;&gt;https://t.me/zdorobot&lt;/a&gt; - бот показывает инструкции к лекарствам, значение симптомов, позволяет заказать лекарства и др.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/topdf_bot&quot; target=&quot;_blank&quot;&gt;https://t.me/topdf_bot&lt;/a&gt; - конвертирует документы в pdf.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/ya&quot; target=&quot;_blank&quot;&gt;https://t.me/ya&lt;/a&gt; - бот яндекса, ищет любую информацию.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/storebot&quot; target=&quot;_blank&quot;&gt;https://t.me/storebot&lt;/a&gt; - бот-магазин, топ ботов, описания.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/Dict_bot&quot; target=&quot;_blank&quot;&gt;https://t.me/Dict_bot&lt;/a&gt; - бот переводит слова с английского языка на русский и обратно.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/ipgeobot&quot; target=&quot;_blank&quot;&gt;https://t.me/ipgeobot&lt;/a&gt; - бот для определения гео локации домена или IP.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/voicybot&quot; target=&quot;_blank&quot;&gt;https://t.me/voicybot&lt;/a&gt; - бот переводит в текст люыбе аудио и голосовые сообщения.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/MyTeleCloudBot&quot; target=&quot;_blank&quot;&gt;https://t.me/MyTeleCloudBot&lt;/a&gt; - личное облачное хранилище в телеграм, безлимитное и приватное.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/Wikishbot&quot; target=&quot;_blank&quot;&gt;https://t.me/Wikishbot&lt;/a&gt; - присылает статьи из википедии.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/egrul_bot&quot; target=&quot;_blank&quot;&gt;https://t.me/egrul_bot&lt;/a&gt; - умеет показывать информацию о юр. лицах и их учредителях.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/tgchans_bot&quot; target=&quot;_blank&quot;&gt;https://t.me/tgchans_bot&lt;/a&gt; - бот-поисковик по каналам и группам Телеграм.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/TrafficRobot&quot; target=&quot;_blank&quot;&gt;https://t.me/TrafficRobot&lt;/a&gt; - создает анонимный почтовый ящик, который можно в любой момент удалить, все письма приходят в Телеграм.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/Cryptoneto_bot&quot; target=&quot;_blank&quot;&gt;https://t.me/Cryptoneto_bot&lt;/a&gt; - самый быстрый криптоновостной бот в телеграме, оповещает о свежих новостях (по выбранной валюте) сразу после их публикации.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3&gt;&lt;strong&gt;Must Have боты для работы с соц. сетями:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/Soberubot&quot; target=&quot;_blank&quot;&gt;https://t.me/Soberubot&lt;/a&gt; - бот для парсинга списка аккаунтов подписчиков в Инстаграм.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/hashtags_bot&quot; target=&quot;_blank&quot;&gt;https://t.me/hashtags_bot&lt;/a&gt; - подбирает хештеги по фотографии, хештеги выдает на англ. языке.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/JoinstaBot&quot; target=&quot;_blank&quot;&gt;https://t.me/JoinstaBot&lt;/a&gt; - бесплатно накручивает лайки на любое фото в Инстаграм.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/Instasave_bot&quot; target=&quot;_blank&quot;&gt;https://t.me/Instasave_bot&lt;/a&gt; - скачивает фото и видео с Инстаграм и YouTube.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/izibot&quot; target=&quot;_blank&quot;&gt;https://t.me/izibot&lt;/a&gt; - бот скачивает видео из Instagram, YouTube, VK, FB и Coub.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/pstrbot&quot; target=&quot;_blank&quot;&gt;https://t.me/pstrbot&lt;/a&gt; - отправляет записи из разных социальных сетей в ваши каналы.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/junction_bot?start=617693725&quot; target=&quot;_blank&quot;&gt;https://t.me/junction_bot&lt;/a&gt; - бот собирает посты из Telegram и Twitter каналов в одну новостную ленту. Также можно использовать для трансляции каналов и других ботов в группы или в другие каналы.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;h3&gt;&lt;strong&gt;Must Have боты для развлечений и досуга:&lt;/strong&gt;&lt;/h3&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/guggystickerbot&quot; target=&quot;_blank&quot;&gt;https://t.me/guggystickerbot&lt;/a&gt; - бот генерирует стикеры, вы пишите текст он подбирает стикер и вставляет текст.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/tap2bot&quot; target=&quot;_blank&quot;&gt;https://t.me/tap2bot&lt;/a&gt; - бот ищет фильмы, торенты, авиабилеты, гостиницы, кафе.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/freelancehelp_bot&quot; target=&quot;_blank&quot;&gt;https://t.me/freelancehelp_bot&lt;/a&gt; - бот который придумывает отмазки для фрилансеров.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;https://t.me/guggybot&quot; target=&quot;_blank&quot;&gt;https://t.me/guggybot&lt;/a&gt; - бот для постинга гифок (gif файлы).&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p&gt;&lt;strong&gt;Вступайте в наше комьюнити кибермастеров:&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;https://t.me/cybermasters&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;https://t.me/cybermasters&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;https://t.me/cybermasterschat&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;https://t.me/cybermasterschat&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>seswq:Blockchain_client</id><link rel="alternate" type="text/html" href="https://teletype.in/@seswq/Blockchain_client?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=seswq"></link><title>Внедряем оплату BTC куда угодно (Python)</title><published>2021-05-05T20:58:07.862Z</published><updated>2021-05-05T21:01:11.733Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/1c/a8/1ca892b6-eafb-458f-beac-785732ddf822.png"></media:thumbnail><category term="veb-master" label="Веб-мастер"></category><summary type="html">&lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/73a/2c1/c5c/73a2c1c5c6153e56577cd941b4a04de8.jpeg&quot;&gt;Предыстория</summary><content type="html">
  &lt;ul&gt;
    &lt;li&gt;- генерация кошелька на основе seed фразы&lt;/li&gt;
    &lt;li&gt;- проверка баланса и транзакций&lt;/li&gt;
    &lt;li&gt;- отправка BTC на другие кошельки&lt;/li&gt;
    &lt;li&gt;- создаем телеграм бота для выполнения операций с BTC&lt;/li&gt;
    &lt;li&gt;- исходники бота (github)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/73a/2c1/c5c/73a2c1c5c6153e56577cd941b4a04de8.jpeg&quot; width=&quot;696&quot; /&gt;
    &lt;figcaption&gt;📍 Source 👉  &lt;a href=&quot;https://habr.com/ru/post/525638/&quot; target=&quot;_blank&quot;&gt;https://habr.com/ru/post/525638/&lt;/a&gt;&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p&gt;Предыстория&lt;/p&gt;
  &lt;p&gt;Полгода назад взялся за один проект с возможностью оплаты биткойном. Так как проект делали на языке python, то и оплату хотелось реализовать на нем же. Сразу же взялся анализировать готовые решения, доступные библиотеки и Rest API Blockchain.com. С апи блокчейна я моментально обломался, так как их токен для использования апи довольно не просто получить.&lt;/p&gt;
  &lt;p&gt;Затем решил юзать различные библиотеки (block-io, bitcoinlib, blockchain и др.) После пару ночей попыток реализовать нормальную оплату, остановился на bitcoinlib, так как она более менее стабильно работала, и я спокойно переводил с одного кошелька на другой. Беда наступила когда появились первые 100 пользователей и вся оплата внезапно рухнула. Возможно я криво написал или что-то не так понял с работой библиотеки, но любые попытки восстановить работу оплаты были безуспешны, только если обнулять бдшку, но и так неизвестно сколько бы она продержалась.&lt;/p&gt;
  &lt;figure class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/07/64/07644c77-4902-45e9-99de-fcc40accb23b.png&quot; width=&quot;940&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;В итоге решили оставить без BTC оплаты. Я опечалился и не связывался с оплатой биткойном полгода.&lt;/p&gt;
  &lt;h2&gt;К чему я пришел&lt;/h2&gt;
  &lt;p&gt;На днях я все-таки решил добить этот вопрос для себя, надеюсь кому-то еще пригодятся мои наработки.&lt;/p&gt;
  &lt;p&gt;Все начинается с &lt;strong&gt;seed &lt;/strong&gt;фразы. Мнемоническая фраза (англ. Mnemonic phrase или Seed фраза) - это список слов, которые хранят всю информацию, необходимую для восстановления биткоин-кошелька. Существуют несколько стандартов генерации фраз BIP 32, BIP 39, BIP 44, и еще BIP 49. Самый распространенный - это BIP 44 (12 слов).&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Пример seed фразы:&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;vivid area able second bicycle advance demand alpha flip stable drift route&lt;/p&gt;
  &lt;p&gt;Чтобы сгенерировать фразу будем использовать библиотеку&lt;strong&gt; bipwallet&lt;/strong&gt;. Чтобы ее установить воспользуемся командой&lt;strong&gt; pip install bipwallet&lt;/strong&gt;.&lt;/p&gt;
  &lt;pre&gt;from bipwallet import wallet

# generate 12 word mnemonic seed
seed = wallet.generate_mnemonic()

print(seed)
&lt;/pre&gt;
  &lt;p&gt;Если мы хотим получить напрямую доступ к биткойн кошельку, то, зная фразу, можем сразу восставновить кошелек в blockhain.com:&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;https://login.blockchain.com/#/recover&quot; target=&quot;_blank&quot;&gt;https://login.blockchain.com/#/recover&lt;/a&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/dc0/c03/202/dc0c03202abe417ed613df27c1644023.JPG&quot; width=&quot;278&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Следующим шагом мы будем преобразовывать нашу seed фразу до получения нужного адреса кошелька биткойна.&lt;/p&gt;
  &lt;p&gt;Чтобы во всем не запутаться и знать какие данные мы должны получить, я использовал сайт &lt;a href=&quot;https://iancoleman.io/bip39/&quot; target=&quot;_blank&quot;&gt;https://iancoleman.io/bip39/&lt;/a&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/138/4e8/828/1384e88282bc9339997f980e9105d066.JPG&quot; width=&quot;709.5&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/d4b/b9b/24d/d4bb9b24d3a5a821cfae3f4adde7fded.JPG&quot; width=&quot;862&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Генерация дочернего адреса кошелька для каждого пользователя:&lt;/h2&gt;
  &lt;p&gt;Чтобы получить наш нулевой адрес Биткойн кошелька на основе seed фразы (12VeK1eRgPHRUikNLXq3Nuz99gS2S46QMD), нам нужно пройти всю цепочку преобразований. Методом проб и ошибок мне все-таки удалось получить адрес кошелька следующим кодом:&lt;/p&gt;
  &lt;pre&gt;from bipwallet.utils import *

def gen_address(index):
    # Наша seed фраза
    seed = &amp;#x27;vivid area able second bicycle advance demand alpha flip stable drift route&amp;#x27;

    # Мастер ключ из seed фразы
    master_key = HDPrivateKey.master_key_from_mnemonic(seed)

    # Public key из мастер ключа по пути &amp;#x27;m/44/0/0/0&amp;#x27;
    root_keys = HDKey.from_path(master_key, &amp;quot;m/44&amp;#x27;/0&amp;#x27;/0&amp;#x27;/0&amp;quot;)[-1].public_key.to_b58check()

    # Extended public key
    xpublic_key = str(root_keys, encoding=&amp;quot;utf-8&amp;quot;)

    # Адрес дочернего кошелька в зависимости от значения index
    address = Wallet.deserialize(xpublic_key, network=&amp;#x27;BTC&amp;#x27;).get_child(index, is_prime=False).to_address()

    rootkeys_wif = HDKey.from_path(master_key, f&amp;quot;m/44&amp;#x27;/0&amp;#x27;/0&amp;#x27;/0/{index}&amp;quot;)[-1]

    # Extended private key
    xprivatekey = str(rootkeys_wif.to_b58check(), encoding=&amp;quot;utf-8&amp;quot;)

    # Wallet import format
    wif = Wallet.deserialize(xprivatekey, network=&amp;#x27;BTC&amp;#x27;).export_to_wif()

    return address, str(wif, &amp;#x27;utf-8&amp;#x27;)

print(gen_address(0))&lt;/pre&gt;
  &lt;p&gt;Данная функция возвращает адрес кошелька и &lt;strong&gt;wif &lt;/strong&gt;в зависимости номера. Максимальное число с которым удалось получить адрес это 999999999.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;wif (Wallet import format)&lt;/strong&gt; - это просто кодирование байтов ключа в кодировку Base58 + контрольная сумма. Он нам понадобится в дальнейшем при генерации транзакции.&lt;/p&gt;
  &lt;p&gt;Это все значит, что имея только одну seed фразу мы можем создать 1 млрд дочерних адресов. Каждому пользователю при регистрации мы будем выдавать новый адрес, через который он сможет оплачивать по BTC. Появляется ограничение на 1 млрд пользователей, но нам никто не запрещает использовать несколько seed фраз или генерировать каждому юзеру новую фразу, но тогда каждая оплата будет кидаться не в общий ваш кошелек, а по разным.&lt;/p&gt;
  &lt;h2&gt;Проверка баланса и транзакции:&lt;/h2&gt;
  &lt;p&gt;Теперь когда у каждого пользователя свой личный адрес биткойн кошелька, нужно проверить баланс этого адреса. Для этого мы будем обращаться к сайту Blockchain.com дабы получить нужную информацию.&lt;/p&gt;
  &lt;pre&gt;import requests

# Адрес кошелька пользователя 
wallet = &amp;#x27;12VeK1eRgPHRUikNLXq3Nuz99gS2S46QMD&amp;#x27;
# wallet = gen_address(0)

url = f&amp;#x27;https://blockchain.info/rawaddr/{wallet}&amp;#x27;
x = requests.get(url)
wallet = x.json()

print(&amp;#x27;Итоговый баланс:&amp;#x27;+str(wallet[&amp;#x27;final_balance&amp;#x27;]))
print(&amp;#x27;Транзакции:&amp;#x27;+str(wallet[&amp;#x27;txs&amp;#x27;]))

if wallet[&amp;#x27;total_received&amp;#x27;]==0:
  print(&amp;#x27;баланс пустой&amp;#x27;)
&lt;/pre&gt;
  &lt;p&gt;Вот таким простым кодом мы можем получить всю информацию по балансу и транзакциях пользователя. Дальше все зависит от логики самого приложения.&lt;/p&gt;
  &lt;h2&gt;Транзакции&lt;/h2&gt;
  &lt;p&gt;На данном этапе мы дали каждому пользователю свой адрес кошелька и знаем все транзакции с данным адресом, но этого недостаточно. Нам нужно чтобы мы могли отправить его же деньги обратно. Для этого воспользуемся библотекой &lt;strong&gt;bit&lt;/strong&gt;. Чтобы ее установить воспользуемся командой&lt;strong&gt; pip install bit&lt;/strong&gt;.&lt;/p&gt;
  &lt;pre&gt;from bit import PrivateKey

# Приватный ключ из wif
my_key = PrivateKey(wif=&amp;#x27;L46ixenNSu8Bqk899ZrH8Y96t8DHqJ1ZyxzQBGFTbh38rLHLaPoY&amp;#x27;)

# Количество долларов перевода, можно поменять на btc
money=0.1

# Кошелек куда будут переведены деньги
wallet=&amp;#x27;17ya3bCpPioyPH8kAyFkEDBUqdjF6wwPxo&amp;#x27;

# Коммисия перевода, если поставить слишком маленькую, то транзакцию не примут
# И чем больше коммисия, тем быстрее пройдет перевод
fee=2000

# Генерация транзакции
tx_hash = my_key.create_transaction([(wallet, money, &amp;#x27;usd&amp;#x27;)],fee=fee,absolute_fee=True)

print(tx_hash)&lt;/pre&gt;
  &lt;p&gt;В итоге мы получили вот такую транзакцию:&lt;/p&gt;
  &lt;p&gt;&lt;code&gt;0100000001fe64490fce5e85d5eb00865663a3d44f4108549fdb2840b086cfc781390d4a2d010000006a47304402202dc1496d28bb10d50d94d70870e2a79ea472c5960de8f7418bb30f9b96643efc02204691547c98edad3181a056bf6404601efe289200ba8e3073a2f5b7c0c7f4fec10121026516c551584b484ce3ca7bb71bbf24cce133bf40bdf4e2ce5a3936bc7e66a2abffffffff02e3020000000000001976a9144c83a20250ccb62ce2b3b1ea80c6082b634fdf9f88ac08f40200000000001976a9144c83a20250ccb62ce2b3b1ea80c6082b634fdf9f88ac00000000&lt;/code&gt;&lt;/p&gt;
  &lt;p&gt;Выглядит красиво, но что с этим делать?&lt;/p&gt;
  &lt;p&gt;Можно зайти на сайт https://www.blockchain.com/btc/pushtx&lt;/p&gt;
  &lt;p&gt;и вручную отправить эту транзакцию.&lt;/p&gt;
  &lt;figure class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/2ea/d99/8e0/2ead998e0715eb38b242518fd833fda7.JPG&quot; width=&quot;503&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Также можем декодировать эту транзакцию и проверить все ли верно мы указали &lt;a href=&quot;https://www.blockchain.com/btc/decode-tx&quot; target=&quot;_blank&quot;&gt;https://www.blockchain.com/btc/decode-tx&lt;/a&gt;&lt;/p&gt;
  &lt;figure class=&quot;m_retina&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/25f/469/d8c/25f469d8c0ec42084eacee93b34b5758.JPG&quot; width=&quot;626.5&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Но нам нужно это автоматизировать, поэтому напишем несколько строк:&lt;/p&gt;
  &lt;pre&gt;import requests

url = &amp;#x27;https://blockchain.info/pushtx&amp;#x27;
tx=&amp;#x27;0100000001fe64490fce5e85d5eb00865663a3d44f4108549fdb2840b086cfc781390d4a2d010000006a47304402202dc1496d28bb10d50d94d70870e2a79ea472c5960de8f7418bb30f9b96643efc02204691547c98edad3181a056bf6404601efe289200ba8e3073a2f5b7c0c7f4fec10121026516c551584b484ce3ca7bb71bbf24cce133bf40bdf4e2ce5a3936bc7e66a2abffffffff02e3020000000000001976a9144c83a20250ccb62ce2b3b1ea80c6082b634fdf9f88ac08f40200000000001976a9144c83a20250ccb62ce2b3b1ea80c6082b634fdf9f88ac00000000&amp;#x27;
x = requests.post(url, data = {&amp;#x27;tx&amp;#x27;:tx})
result = x.text

print(result)&lt;/pre&gt;
  &lt;p&gt;Выполним пост запрос, если получаем ответ: &lt;strong&gt;Transaction Submitted&lt;/strong&gt;. Это значит, что через несколько секунд транзакция появится в сети и деньги спишутся с пользователя.&lt;/p&gt;
  &lt;h2&gt;Применение&lt;/h2&gt;
  &lt;p&gt;Ну чтож, написав всего несколько десятков строк, мы можем генерировать для каждого пользователя свой адрес кошелка, проверять его баланс, переводить биткойны с одного кошелька на любой другой.&lt;/p&gt;
  &lt;p&gt;Для демонстрации работы BTC оплаты, я напишу простенького телеграм бота, который будет выполнять роль клиента Blockchain.com, то есть вы сможете хранить в нем свои биткойны и от туда же переводить другим людям. Ссылка на исходники бота будут в конце.&lt;/p&gt;
  &lt;p&gt;Проверить работу бота можно тут: &lt;a href=&quot;https://t.me/Blockchain_client_bot&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;https://t.me/Blockchain_client_bot&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Задеплоил на heroku, так что надеюсь не будет падать)&lt;/p&gt;
  &lt;h2&gt;Функционал бота&lt;/h2&gt;
  &lt;h3&gt;Регистрация пользователя&lt;/h3&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/588/8ff/c94/5888ffc94776105b8803c1ec0e2d2b27.JPG&quot; width=&quot;485&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;В качестве БД я использовал sqlite3 и создал одну таблицу пользователей:&lt;/p&gt;
  &lt;pre&gt;import sqlite3

conn = sqlite3.connect(&amp;quot;my.db&amp;quot;)  # или :memory: чтобы сохранить в RAM
cursor = conn.cursor()
cursor.execute(&amp;quot;CREATE TABLE users (chatid INTEGER , name TEXT, balance INTEGER, btc_wallet TEXT, wif TEXT, btc_sent TEXT, state INTEGER)&amp;quot;)
conn.commit()&lt;/pre&gt;
  &lt;p&gt;При нажатии start мы регистрируем пользователя, генерируем для него адрес биткойн кошелька, wif и добавляем данные в БД:&lt;/p&gt;
  &lt;pre&gt;sql = &amp;quot;SELECT COUNT(*) FROM users &amp;quot;
cursor.execute(sql)
user = cursor.fetchone()  
address, wif= gen_address(user[0]+1)
sql_insert = &amp;quot;INSERT INTO users VALUES ({}, &amp;#x27;{}&amp;#x27;, 0,&amp;#x27;{}&amp;#x27;,&amp;#x27;{}&amp;#x27;,&amp;#x27;no&amp;#x27;,0)&amp;quot;.format(message.chat.id,
                                                                           message.chat.first_name,address,wif)

cursor.execute(sql_insert)
conn.commit()&lt;/pre&gt;
  &lt;h3&gt;Проверка баланса&lt;/h3&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/407/943/72b/40794372bb70bc16968071bf4dca8fcf.JPG&quot; width=&quot;477&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre&gt;if message.text == &amp;#x27;? Ваш баланс&amp;#x27;:
  url = f&amp;#x27;https://blockchain.info/rawaddr/{data[3]}&amp;#x27;
  x = requests.get(url)
  wallet = x.json()

  await bot.send_message(message.chat.id, f&amp;#x27;&amp;#x27;&amp;#x27;? *Итоговый баланс:* {format(wallet[&amp;#x27;final_balance&amp;#x27;] / 100000000, &amp;#x27;.9f&amp;#x27;)} BTC

*Всего получено:* {format(wallet[&amp;#x27;total_received&amp;#x27;] / 100000000, &amp;#x27;.9f&amp;#x27;)} BTC
*Всего отправлено:* {format(wallet[&amp;#x27;total_sent&amp;#x27;] / 100000000, &amp;#x27;.9f&amp;#x27;)} BTC

https://www.blockchain.com/ru/btc/address/{data[3]}&amp;#x27;&amp;#x27;&amp;#x27;, parse_mode= &amp;quot;Markdown&amp;quot;)&lt;/pre&gt;
  &lt;h2&gt;Получить BTC&lt;/h2&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/ea0/0b6/dcf/ea00b6dcf448e661912c3936f15f5b0e.JPG&quot; width=&quot;451&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;Для создания qr-кода я использовал библиотеку qrcode и на вход передал ранее сгенерированный адрес биткойн кошелька из БД.&lt;/p&gt;
  &lt;pre&gt; if message.text == &amp;#x27;? Получить BTC&amp;#x27;:
    img = qrcode.make(data[3])
    img.save(&amp;#x27;qr.jpg&amp;#x27;)

    await bot.send_message(message.chat.id, f&amp;#x27;&amp;#x27;&amp;#x27;? Ваш адрес биткойн кошелька:
*{data[3]}*&amp;#x27;&amp;#x27;&amp;#x27;, parse_mode= &amp;quot;Markdown&amp;quot;)
    
    await bot.send_photo(message.chat.id,photo=open(&amp;#x27;qr.jpg&amp;#x27;, &amp;#x27;rb&amp;#x27;))&lt;/pre&gt;
  &lt;h3&gt;Отправить BTC&lt;/h3&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/ccd/9a8/4b0/ccd9a84b0d6c832d64f2b2302d2d2f63.JPG&quot; width=&quot;461&quot; /&gt;
  &lt;/figure&gt;
  &lt;pre&gt;try:
    sum = float(message.text)
    url = f&amp;#x27;https://blockchain.info/rawaddr/{data[3]}&amp;#x27;
    x = requests.get(url)
    wallet = x.json()
    if sum + 10000 &amp;amp;lt;= wallet[&amp;#x27;final_balance&amp;#x27;] / 100000000:
        try:
            my_key = PrivateKey(wif=data[4])
            # Коммисия перевода, если поставить слишком маленькую, то транзакцию не примут
            # И чем больше коммисия, тем быстрее пройдет перевод
            fee = 10000
            # Генерация транзакции
            tx_hash = my_key.create_transaction([(data[5], sum, &amp;#x27;btc&amp;#x27;)], fee=fee, absolute_fee=True)
            print(tx_hash)
            url = &amp;#x27;https://blockchain.info/pushtx&amp;#x27;
            x = requests.post(url, data={&amp;#x27;tx&amp;#x27;: tx_hash})
            result = x.text
            sql = &amp;quot;UPDATE users SET state = {} WHERE chatid = {}&amp;quot;.format(0, message.chat.id)
            cursor.execute(sql)
            conn.commit()
            await bot.send_message(message.chat.id, result)
        except Exception:
            await bot.send_message(message.chat.id, &amp;quot;⚠ Ошибка при выолнении транзакции&amp;quot;)
    else:
        await bot.send_message(message.chat.id, &amp;#x27;⚠️  На вашем балансе недостаточно средств.&amp;#x27;)
except ValueError:
    await bot.send_message(message.chat.id, &amp;#x27;⚠️Неправильно введена сумма отправления, попробуйте еще раз&amp;#x27;)
&lt;/pre&gt;
  &lt;p&gt;Проверим через сайт, что транзакция отправилась:&lt;/p&gt;
  &lt;figure class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://habrastorage.org/getpro/habr/upload_files/e72/826/b2c/e72826b2c00aca7f2d2fad2e63951bda.JPG&quot; width=&quot;917&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2&gt;Исходники и как запустить&lt;/h2&gt;
  &lt;p&gt;Скачать исходники бота можно тут github.com/Lil-hack/blockchain-client&lt;/p&gt;
  &lt;p&gt;Склонировав репозиторий, устанавливаем необходимые пакеты:&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;pip install -r requirements.txt&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Некоторые библиотеки у меня не заработали на windows, так что лучше сразу запускать на linux.&lt;/p&gt;
  &lt;p&gt;В файле &lt;strong&gt;main.py&lt;/strong&gt; заменяем ваш &lt;strong&gt;токен телеграм&lt;/strong&gt; бота:&lt;/p&gt;
  &lt;pre&gt;# Ваш токен от BotFather
TOKEN = &amp;#x27;YOUR TOKEN&amp;#x27;&lt;/pre&gt;
  &lt;p&gt;В файле &lt;strong&gt;btc_core.py&lt;/strong&gt; заменяем на вашу &lt;strong&gt;seed &lt;/strong&gt;фразу:&lt;/p&gt;
  &lt;pre&gt;# Ваша seed фраза
seed = &amp;#x27;YOUR SEED&amp;#x27;&lt;/pre&gt;
  &lt;p&gt;И запускаем бота командой: &lt;strong&gt;python main.py&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;Работает на python 3.7.0 и выше. Бот написан за один вечер, так что просьба строго не судить ^^&lt;/p&gt;
  &lt;h2&gt;Итого&lt;/h2&gt;
  &lt;p&gt;Как оказалось, все довольно не сложно, и в несколько десятков строк можно добавить оплату BTC в любой python проект. Я не профи в криптографии, так что скорее всего многие моменты упустил, но надеюсь кому-то эта статья будет полезна.&lt;/p&gt;
  &lt;blockquote&gt;📍 Source 👉  &lt;a href=&quot;https://habr.com/ru/post/525638/&quot; target=&quot;_blank&quot;&gt;https://habr.com/ru/post/525638/&lt;/a&gt;&lt;/blockquote&gt;

</content></entry></feed>