Id и hash в Телеграм бот

Я пытаюсь понять, как получить свой Telegram API_ID и API_HASH с помощью Telethon или Pyrogram, но пока ничего не могу найти в Интернете. В моей программе пользователь может программно зарегистрироваться в Telegram (без необходимости использовать свой реальный номер телефона), но для того, чтобы он мог что-либо делать, требуются API_ID и API_HASH, но тогда сайт проверки телефона не даст код для этого старый номер, так как это только один раз.

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

Я надеюсь, что это максимально ясно.

DanielTheGeek 30 Окт 2022 в 18:15

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

How to get API ID & API HASH of a Telegram Account | No Errors | By Bemro


30 Окт 2022 в 18:42

1 ответ

Хотя учетные данные Telegram MTPROTO API привязаны к определенной учетной записи, они представляют собой приложение, такое как Telegram Android, Telegram Desktop или Telegram WebK/WebZ. Вы можете использовать одну и ту же пару API_ID и API_HASH в нескольких приложениях.

ColinShark 30 Окт 2022 в 18:22

Чтобы уточнить: API_ID и API_HASH принадлежат разработчику, а не пользователю (хотя пользователь может быть тем же разработчиком, не обязательно им быть). Если вы разрабатываете что-то с этими библиотеками, вы должны указать свой API ID/хэш, поскольку вашим пользователям не нужно регистрировать собственное приложение для использования вашей программы!

Источник: question-it.com

Телеграм-бот криптовалютного кошелька на основе php-telegram-bot

Телеграм-бот криптовалютного кошелька на основе php-telegram-bot

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

Для быстрого создания сервиса будем использовать PHP, возьмем одну из библиотек с core.telegram.org (https://core.telegram.org/bots/samples) php-telegram-bot (https://github.com/php-telegram-bot/core/). Эта библиотека часто обновляется и подходит для дальнейшего масштабирования бота.

В свободном доступе есть несколько API-сервисов для работы с криптовалютами:

Во всех перечисленных сервисах нет проверки KYC и свободная регистрация. Blockchain.info требует получение токена для работы, он условно без проверки, но его получение может занять несколько дней или даже недель.

Выбор пал на сервис Apirone, потому что тут нет ограничений на создание кошельков и адресов.

Итак, наш бот будет уметь:

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

Вся обработка колбэков от телеграма уже реализована в php-telegram-bot .

< «require»: < «longman/telegram-bot»: «^0.74.0», «monolog/monolog»: «^2.2» >, «autoload»: < «classmap»: [«Classes»] >>

Запускаем composer update для создания базовой структуры. Создаем ее и добавляем туда папку Apirone и в нее файл ApironeWallet.php, в котором реализуем класс взаимодействия с криптопроцессингом.

В нем реализованы следующие функции:

getWallets($user_id, $currencyId = null) //получить кошельки для telegram Пользователя addWallet($user_id, $wallet, $address) //add generated wallet into DB postWallet($user_id, $currency) //get wallet from Apirone createWallets($user_id) //create all available wallets getCurrencyId($currency,$units = null) //get currency id from DB getAddress($chat_id, $user_id, $currency) //outputs wallet from DB getAvailableCurrencies() //collect available currencies from DB getCurrencyById($id, $units = null) // return currency by Id getBalance($chat_id, $user_id, $wallet_id = null) // get wallet or wallets balance checkAddress($currency, $address) // validate crypto address estimate($user_id, $currencyName, $address, $amount) // pre-calculation of crypto transaction transfer($user_id, $currencyName, $address, $amount) // transfer funds explorerUrl($currency, $tx) // get explorer link

Еще по теме:  Как в ТГ отключить безопасный режим на Айфоне

Подробно работу этих функций смотрим в примере. Создадим MySQL базу данных, она будет нужна для работы интерактивных диалогов. В нее требуется добавить три таблицы: apirone_currencies, apirone_transactions и apirone_users.

С телеграмом будем общаться с помощью вебхуков (Webhook). Для этого set.php и unset.php — включение и отключение колбэков. hook.php принимает сами колбэки из телеграма:

$telegram->handle();

Установка и удаление вебхука выполняются в две функции:

$result = $telegram->setWebhook($config[‘webhook’][‘url’]); $result = $telegram->deleteWebhook();

В корне проекта нужна папка Commands, в нее запишем наши кастомные команды и изменим существующие. Из изменений в базовых классах нас интересует взаимодействие с меню не только через команды, начинающихся со слэша, но и просто текстовые команды. Для этого в папке Commands добавляем папку ServiceMessages и в ней создаем GenericmessageCommand.php , в который путем перечисления вносим нужные команды и реакции на них:

// Fetch conversation command if it exists and execute it. if ($conversation->exists() $command = $conversation->getCommand()) < return $this->telegram->executeCommand($command); > if($type === «text») < $text = $message->getText(true); if (stripos($text, ‘Receive’) === 0) < return $this->telegram->executeCommand(‘receive’); > if (stripos($text, ‘Menu’) === 0) < return $this->telegram->executeCommand(‘menu’); > if (stripos($text, ‘Balance’) === 0) < return $this->telegram->executeCommand(‘balance’); > if (stripos($text, ‘Send’) === 0) < return $this->telegram->executeCommand(‘send’); > return $this->replyToChat( ‘Command not found’ ); >

Также добавляем наши четыре кастомные команды BalanceCommand.php , MenuCommand.php , ReceiveCommand.php и SendCommand.php.

Каждой команде делаем описание, использование по умолчанию, присваиваем версию.

protected $name = ‘balance’; protected $description = ‘Show balance of wallet’; protected $usage = ‘/balance’; protected $version = ‘1.2.0’;

Сам код команды закладывается в функцию execute(). В ней происходит выполнение операций. Например, вот команда, которая смотрит баланс

$message = $this->getMessage(); $text = $message->getText(true); $chat = $message->getChat(); $user = $message->getFrom(); $chat_id = $chat->getId(); $user_id = $user->getId(); $sql = ‘ SELECT * FROM `apirone_currencies` ‘; $pdo = DB::getPdo(); $sth = $pdo->prepare($sql); $sth->execute(); $result = $sth->fetchAll(PDO::FETCH_ASSOC); foreach ($result as $currency) < if (stripos($text, $currency[‘name’]) === 8) < $response = new ApironeWallet; $response->getAddress($chat_id,$user_id,$currency[‘name’]); return Request::emptyResponse(); > > if ($text === ‘Balance’ || $text ===») < $response = new ApironeWallet; $response->getBalance($chat_id, $user_id); > return Request::emptyResponse();

SendCommand.php будет интерактивным. В нем бот спросит криптовалюту, адрес для перевода средств и сумму платежа.

$this->conversation = new Conversation($user_id, $chat_id, $this->getName()); // Load any existing notes from this conversation $notes = conversation->notes; … // Every time a step is achieved the state is updated if($text === ‘Cancel’) < $state = 4; $notes[‘answer’] = ‘Cancel’; >if($text === ‘Send’) < $text = »; >switch ($state) < case 0: $currencies = $apirone->getAvailableCurrencies(); if ($text === » || !in_array(strtoupper($text), $currencies, true)) < . $data[‘reply_markup’] = (new Keyboard( [$currencies[0],$currencies[1]], [$currencies[2],$currencies[3],$currencies[4]], [‘Cancel’])) ->setResizeKeyboard(true) ->setOneTimeKeyboard(true) ->setSelective(true); $result = Request::sendMessage($data); break; > $notes[‘currency’] = strtolower($text); $text = »; case 1: if ($text === »|| !$apirone->checkAddress($notes[‘currency’], $text)) < $notes[‘state’] = 1; $this->conversation->update(); $data[‘text’] = ‘Type address for transfer:’; if ($text !== ») < . break; >$notes[‘address’] = $text; $text = »; // No break! case 2: … case 3: if ($text === » || !in_array($text, [‘Ok’, ‘Cancel’], true)) < $notes[‘state’] = 3; $this->conversation->update(); $currency = $apirone->getCurrencyId($notes[‘currency’], true); $estimate = $apirone->estimate($user_id, $notes[‘currency’], $notes[‘address’], $notes[‘amount’]); if(isset($estimate[‘message’])) < $data[‘text’] = ‘Message from Apirone:’. PHP_EOL. ‘*’.$estimate[‘message’].’*’ .PHP_EOL. ‘Operation cancelled.’; $data[‘parse_mode’] = ‘markdown’; $data[‘reply_markup’] = (new Keyboard([‘Receive’, ‘Send’], [‘Balance’])) ->setResizeKeyboard(true) ->setOneTimeKeyboard(true) ->setSelective(true); $this->conversation->stop(); > else < $data[‘reply_markup’] = (new Keyboard([‘Ok’, ‘Cancel’])) ->setResizeKeyboard(true) ->setOneTimeKeyboard(true) ->setSelective(true); $data[‘text’] = ‘Please double check that all data correct. Send «Ok» message in answer. If you want to stop sending type «Cancel»‘. PHP_EOL; . if ($text !== ») < $data[‘text’] = ‘Simply type Ok or Cancel.’; >> $result = Request::sendMessage($data); break; > $notes[‘answer’] = $text; // No break! case 4: $this->conversation->update(); unset($notes[‘state’]); if($notes[‘answer’] === ‘Ok’) < $transfer = $apirone->transfer($user_id, $notes[‘currency’], $notes[‘address’], $notes[‘amount’]); if(isset($transfer[‘message’])) < $data[‘text’] = ‘Message from Apirone:’. PHP_EOL. ‘*’.$transfer[‘message’].’*’ .PHP_EOL. ‘Operation cancelled.’; . $this->conversation->stop(); > else < $data[‘text’] = ‘Transfer successfully complete.’.PHP_EOL. ‘Transactions:’. PHP_EOL ; foreach ($transfer[‘txs’] as $tx) < $data[‘text’].= $tx .PHP_EOL. $apirone->explorerUrl($notes[‘currency’], $tx).PHP_EOL; >; > > . $result = Request::sendMessage($data); $this->conversation->stop(); break; > return $result;

Создаем StartCommand.php И в нем при первом обращении генерируем данные для нашей базы данных

Еще по теме:  Кошачий язык в Телеграмме мяумаграм

$message = $this->getMessage(); $user_id = $message->getFrom()->getId(); $apirone = new ApironeWallet; $apirone->createWallets($user_id); return $this->replyToChat( ‘Welcome to Apirone wallet bot! You are ready to use BTC,BCH,DOGE and LTC wallets right now’ . PHP_EOL . ‘Type /menu to start using it now!’ );

В корне проекта создаем callback.php . Здесь будет приниматься колбэк от процессинга:

require_once __DIR__ . ‘/vendor/autoload.php’; use LongmanTelegramBotRequest; use ClassesApironeApironeWallet; $config = require __DIR__ . ‘/config.php’; $telegram = new LongmanTelegramBotTelegram($config[‘api_key’], $config[‘bot_username’]); $apirone = new ApironeWallet; $telegram->enableMySql($config[‘mysql’]);; $apironeData = file_get_contents(‘php://input’); if ($apironeData) < $params = json_decode($apironeData, true); // check your secret code if ($params[«data»][«secret»] !== $config[‘apirone_secret’]) die(); $user_id = $params[«data»][«user_id»]; $input_address = $params[«input_address»]; $input_transaction_hash = $params[«input_transaction_hash»]; $value_in_satoshi = $params[«value»]; $wallets = $apirone->getWallets($user_id); foreach ($wallets as $wallet) < if($wallet[‘wallet_id’] === $params[‘wallet’]) < $currency = $apirone->getCurrencyById($wallet[‘currency’], true); > > //Save unconfirmed transactions and data to your Database. $data[‘chat_id’] = $user_id; $data[‘parse_mode’] = ‘markdown’; if ($params[«confirmations»] < 2 ) < $data[‘text’] = ‘*’.strtoupper($currency[‘name’]) .’ wallet*: ‘. PHP_EOL . «Transaction «. $input_transaction_hash . PHP_EOL. ‘Waiting *’. number_format($value_in_satoshi/pow(10, $currency[‘units-factor’]), 8, ‘.’, »). strtoupper($currency[‘name’]) .’*’. PHP_EOL . $params[«confirmations»].’ of 2 confirmations received’. PHP_EOL . $apirone->explorerUrl($currency[‘name’], $input_transaction_hash); > if ($params[«confirmations»] >= 2) < $balance = $apirone->getBalance($user_id, $user_id, $params[‘wallet’]); $data[‘text’] = ‘*’.strtoupper($currency[‘name’]) .’ wallet*: ‘. PHP_EOL . «Transaction «. $input_transaction_hash . PHP_EOL. ‘Payment successfully received!’. PHP_EOL .’Amount: *’. number_format($value_in_satoshi/pow(10, $currency[‘units-factor’]), 8, ‘.’, »). strtoupper($currency[‘name’]) .’*’. PHP_EOL. ‘Current balance:’. PHP_EOL . $balance . PHP_EOL. $apirone->explorerUrl($currency[‘name’], $input_transaction_hash); echo «*ok*»; > return Request::sendMessage($data);

В итоговом результате имеем простого бота, который в дальнейшем можно будет трансформировать и дорабатывать, т.к. заложена серьезная база в виде php-telegram-bot.

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

Источник: unetway.com

Telegram API и библиотека TDLib для .NET платформ

image

Доброго времени суток! В Telegram существует два вида API: Telegram Bot API (обыкновенный бот с пометкой «бот») и Telegram API (клиент и юзербот, который обладает больше функционалом, чем просто бот). В этой статье пойдет речь о втором виде, а именно: что требуется для взаимодействия с Telegram API, какие средства нужны для написания кода своего юзербота на языке C#, как их правильно установить, а также каким образом использовать их.

Введение

Администраторам групп и чатов порой необходимо пользоваться таким полезным инструментом как боты, а кому-то и вовсе требуется свой клиент для запросов серверу Telegram. Для взаимодействия с ботами существует немалое количество готовых библиотек для различных языков и платформ, но если требуется написать собственную программу или библиотеку (возможно, написанные другими людьми библиотеки ограничены и не содержат требуемых вам функций), то для этого Telegram имеет собственный API.

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

Для реализации юзербота потребуются две вещи: библиотека TDLib и любой язык, который способен выполнять функции языка C (в нашем случае используем C#).

Сборка и подключение библиотеки TDLib

Чтобы обеспечить взаимодействие между вашим клиентом и сервером Telegram, используется кроссплатформенная библиотека TDLib (Telegram Database Library). Будем устанавливать ее для Visual Studio (нужна версия от 2015 и выше, а также CMake в консоли).

TDLib через NuGet

Обратите внимание, что библиотека TDLib, устанавливаемая через NuGet, и библиотека Telegram.Td.dll, собираемая через CMake — это разные вещи, обладающие несколько разными интерфейсами. В нашем случае мы используем собираемый через CMake вариант.

TDLib имеет следующие зависимости, т. е. на вашем компьютере это должно быть:

  • компилятор C++14 (Visual Studio имеет свой компилятор MSVC);
  • Библиотека OpenSSL;
  • Библиотека zlib;
  • gperf (только сборка);
  • CMake (3.0.2+, только сборка).
Еще по теме:  Почему заблокирован Телеграмм канал

Для установки необходимых зависимостей, выполните следующие команды в командной строке (обратите внимание, что требуется git):

git clone https://github.com/Microsoft/vcpkg.git cd vcpkg git checkout 1b1ae50e1a69f7c659bd7d731e80b358d21c86ad .bootstrap-vcpkg.bat .vcpkg.exe install gperf:x64-windows gperf:x86-windows openssl:x64-windows openssl:x86-windows zlib:x64-windows zlib:x86-windows

Далее скачиваем саму библиотеку и собираем её для .NET-проектов:

  1. Переходим в папку (в командной строке) /example/csharp, т.е. туда, где будем собирать нашу библиотеку
  2. Создаём папку, куда будем собирать библиотеку, и переходим в неё:

mkdir build cd build
cmake -A Win32 -DTD_ENABLE_DOTNET=ON -DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake ../../..
cmake -A x64 -DTD_ENABLE_DOTNET=ON -DCMAKE_TOOLCHAIN_FILE=/scripts/buildsystems/vcpkg.cmake ../../..
cmake —build . —config Release
cmake —build . —config Debug

Готово! Теперь в папке build/Release или build/Debug (в зависимости от того, что вы выбрали) находится готовый файл Telegram.Td.dll, который и нужно использовать в своем проекте.

Давайте теперь подключим её в Visual Studio:

  1. Добавляем ссылку на наш файл Telegram.Td.dll, это можно сделать по следующему пути:
    Проект -> Добавить -> Ссылка на проект -> Обзор -> Обзор
    Ставим галочку напротив нашей библиотеки.
    image
  2. Запускаем проект, для того, чтобы создать папку с exe- и dll-файлами нашей программы, и туда докидываем следующие dll, которые можно взять из той же папки, где мы получили собранную библиотеку Telegram.Td.dll: libcrypto-1_1-x64.dll, libssl-1_1-x64.dll, zlib1.dll.
    Должен получиться похожий набор файлов, но главное, чтобы все 4 dll-файла для нашей библиотеки были вместе, включая саму библиотеку:
    image

Теперь мы можем подключать библиотеку в коде:

using Td = Telegram.Td; using TdApi = Telegram.Td.Api;

Получение API Id и API Hash

Перед тем, как полноценно использовать библиотеку, нужно получить id и hash — своеобразная защита, чтобы пользоваться юзерботом можно было только с вашего разрешения. Их можно получить здесь:

  1. Войдите, пройдите небольшую аутентификацию и создайте новое приложение (поля URL и Description можно оставить пустыми, в Platform выберите Desktop):
    image
  2. В разделе App Configuration найдите два поля: App api_id и App api_hash. Скопируйте их, они понадобятся для дальнейшей работы с TDLib.
    image

Использование библиотеки TDLib

Рассмотрим готовый вариант использования, находящийся в самой папке библиотеки, которую мы скачали до этого: . TDLibtd-masterexamplecsharpTdExample.cs

Перед тем, как запускать для проверки этот пример в коде, в методе OnAuthorizationStateUpdated, содержащем все необходимое для авторизации, включая обработки текущих стадий авторизации, стоит исправить эти две строки на ваш api_id и api_hash, которые мы получили до этого:

request.ApiId = /*api_id*/; request.ApiHash = /*api_hash*/;

Разберемся с основным методом Main, где до основного цикла происходит процедура создания клиента:

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

Далее идёт основной цикл:

while (!_needQuit) < // Ожидание авторизации _gotAuthorization.Reset(); _gotAuthorization.WaitOne(); // Предзагрузка чатов _client.Send(new TdApi.LoadChats(null, 100), _defaultHandler); // Пока пользователь авторизован, происходит обработка команд в консоли. // Если же окажется, что пользователь разлогинился (метод GetCommand содержит данную // возможность), то авторизация происходит снова. // Выход из цикла организуется, когда пользователь выходит из клиента // (опять же метод GetCommand содержит данную возможность). while (_haveAuthorization) < GetCommand(); >>

Пример содержит также два достаточно важных класса: DefaultHandler и UpdateHandler. В них происходит обработка всех пришедших данных от сервера Telegram.

UpdateHandler нужен, когда происходит какое-то обновление (новые сообщения, информация, что пользователь в текущем клиенте разлогинился, и т. д.).
Например, можно написать следующее:

DefaultHandler нужен, когда мы где-то в коде посылаем команду-запрос с помощью метода Send:

_client.Send(new /*метод*/, _defaultHandler);

При этом ответ на этот запрос обрабатывается в DefaultHandler:

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

Заключение

TDLib является удобным инструментом для реализации собственного клиента на .NET-платформе, но, к сожалению, для других систем, кроме тех, что на базе Windows, этот вариант создания своего клиента не подходит, поэтому можно воспользоваться JSON-интерфейсом через P/Invoke, если нужен именно C#.

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

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