Всем привет. Давно ничего не писал, так как не было никаких идей, но недавно, 31 мая 2019 года, Telegram выпустил новое обновление, в котором добавил новый тип данных — LoginUrl. Итак, попробую объяснить идею авторизации с помощью Telegram бота. Для начала, чтобы бот мог писать пользователю, пользователь должен отправить сообщение /start.
Бот может как угодно ответить на это сообщение, например обычным приветствием или набором кнопок для взаимодействия с ботом. Именно кнопками мы и будем пользоваться для авторизации, но об этом чуть позже. Пользователь жмет на нашу кнопку, после чего перед ним появляется окошко с подтверждением действия. Если пользователь подтверждает свое действие, то он переходит на указанный в параметрах url с данными своего аккаунта, в том числе и уникальный id для пользователя.
- chat_id — в данном случае id пользователю, которому мы отправляем сообщение. Получаем от Telegram в методе getUpdates или с помощью Webhook.
- text — текст сообщения. В данном случае он нам не нужен, так как мы будем использовать кнопку. Но если хотите объясниться перед пользователем, то это идеальный момент.
- parse_mode — Указывает формат отправляемого сообщения. Поддерживаются Markdown и HTML.
- disable_web_page_preview — Отключает превью для ссылки в данном сообщении.
- disable_notification — Отправка сообщение без уведомления для юзера.
- reply_to_message_id — Указывает на id сообщения, которое мы цитируем.
- reply_markup — Добавляет кнопки.
Как можно было догадаться, нам необходимы chat_id и reply_markup. reply_markup принимает параметры в виде json массива с указанием типа кнопок и их параметров. Мы будем использовать inline_keyboard, так как они поддерживают LoginUrl. Ну давайте создадим простую кнопку:
Как получить токен для Telegram бота
$keyboard = Array( ‘inline_keyboard’ => [ [ [‘text’ => ‘Нажми меня’, ‘login_url’ => [ ‘url’ => ‘https://web-wost.ru’ ] ] ] ] );
Не забываем перевести данную кнопку в json:
$keyboard_json = json_encode($keyboard);
Ну и отправляем:
file_get_contents(‘https://api.telegram.org/bot’ . $token . ‘/sendMessage?chat_id=’ . $id . ‘reply_markup=’ . $keyboard_json);
Не забываем так же создать переменные $token с токеном бота и $id с указанием id пользователя. Если всё сделано верно, то после выполнения данного php скрипта, бот отправит пользователю сообщение с кнопкой ‘Нажми меня’. После нажатия на кнопку, пользователя спросят разрешение об отправке данных и переходе по ссылке. Получаем данные от пользователя с помощью REQUEST:
$user_id = $_REQUEST[‘id’]; $username = $_REQUEST[‘username’]; $hash = $_REQUEST[‘hash’];
В принципе так мы получаем необходимые данные о пользователе, но их можно легко подменить. Для безопасности передачи данных Telegram отправляет нам hash. Для его проверки воспользуемся следующим кодом:
$data = $_REQUEST; $hash = $data[‘hash’]; unset($data[‘hash’]); $new_data = []; foreach($data as $key => $value) $new_data[] = $key . ‘=’ . $value; sort($new_data); $data_string = implode(‘n’, $new_data); $secret_hash = hash(‘sha256’, $token, true); $new_hash = hash_hmac(‘sha256’, $data_string, $secret_hash); if(strcmp($hash, $new_hash) !== 0) exit(‘Подмена данных. ‘); echo ‘Привет ‘ . $data[‘username’];
Попробую разобрать данный код.
Сначала мы записываем все полученные данные в переменную $data, далее сохраняем hash в специальную переменную($hash) и удаляем его из массива данных $data. Создаем новый пустой массив($new_data) для наших данных. Используя foreach, мы проходим через все полученные данные, записывая их в наш новый массив($new_data), сохраняя ключ=значение.
Сортируем по алфавиту, превращаем в строку $data_string, записывая элементы через n. Хешируем наш токен($secret_hash), а дальше и все наши данные($new_hash). И последним шагом является проверка подлинности хэша.
Ну и осталось лишь осмотреть все параметры объекта LoginUrl:
- url — указывает url, куда будет отправлен пользователь после нажатия на ссылку.
- forward_text — текст кнопки в пересылаемых сообщениях.
- bot_username — имя бота, через которого будет происходить авторизация.
- request_write_access — запрос на возможность ботом писать пользователю сообщения.
На этом я заканчиваю, надеюсь эта запись будет полезна 🙂
0 комментариев
Новый комментарий
- О проекте
- Отправить публикацию
- Реклама на сайте
- Условия пользования
Источник: web-wost.ru
Получение токена бота в Telegram — как узнать, назначение и использование кода
Интересное в тг
Автор Евгения А. На чтение 4 мин Просмотров 4.5к.
Понять, что такое токен бота в «Телеграмме», просто – это уникальный буквенно-цифровой идентификатор программы, однозначно связанный с нею. Применяется при работе через bot-API интерфейс для точной идентификации.
Токен и его назначение в Telegram
При образовании нового бота ему присваивается уникальный код, называемый токеном.
Его функция – однозначно идентифицировать приложение, обратившееся к сервису Bot-API мессенджера. В дальнейшем обращения к роботу осуществляются при помощи уникального номера.
Как использовать токен своего бота – пример
Все роботы при регистрации получают уникальный идентификатор вида 635421:DJQ-GSJ4321gh2v3-zyx15W1v3u321ew22. Все обращения к Bot API осуществляются запросами вида //api.telegram.org/bot/имя_метода. Строка обращения к API для данного токена примет вид //api.telegram.org/bot635421:DJQ-GSJ4321gh2v3-zyx15W1v3u321ew22/getMe.
Способы узнать токен бота в «Телеграме»
Узнавать токен бота можно несколькими способами, такими как:
- подбор требуемого значения путем перебора всех возможных комбинаций, на профессиональном сленге «брутфорс», при длине идентификатора в 40 символов на решение задачи могут уйти десятки лет;
- взлом переписки с ботом, выдающим токены, однако, по утверждению создателя «Телеграма», это невозможно, такие случаи до сих пор неизвестны;
- захват учетной записи, которой принадлежит bot, для чего потребуется доступ к смартфону владельца.
Для рядового пользователя вероятность завладеть ботом мала. Отсюда следует, что предложение услуг и программного обеспечения для взлома представляется попыткой продать некачественный товар или неисполнимые обязательства, т. е. мошенничеством.
Чужого бота
Получение чужого токена равносильно его взлому, может преследоваться согласно административному или уголовному законодательству. Попытки узнать код обманным путем также преследуются по закону. Для обмана Telegram-bot написаны скрипты, главной задачей которых есть попытка запутать программу, сломать сценарий ее работы. Я уделю внимание мерам предосторожности, уменьшающим вероятность взлома аккаунта:
- не пользуйтесь услугами сторонних лиц по взлому бота или аккаунта;
- не применяйте программ взлома аккаунта через «брутфорс»;
- не доверяйте фотографиям, якобы доказывающим действенность методов вскрытия, скорее всего, они окажутся скриншотами, отредактированными в графическом пакете;
- проверяйте написание username для обнаружения похожих названий, с целью обмана может быть создана учетная запись, отличная от оригинала на 1 символ.
- ни при каких обстоятельствах не делайте авансовых платежей, что бы ни обещали вам.
Несмотря на заявления и премию в $300 000, обещанную создателем мессенджера, еще никто не смог найти решение задачи.
Своего бота
Также читайте: Как узнать владельца или его номер телефона в Telegram через Автобот — поиск по номеру авто, по вин коду
Необходимо зайти в свой аккаунт и выполнить следующие действия:
- запустить BotFather;
- набрать команду /mybots;
- выбрать из списка требуемое наименование;
- нажать кнопку API token;
- сохранить значение.
Как получить токен для бота в ТГ
Простой и быстрый способ получения токена в «Телеграме» – использовать специализированные программы, информация о которых размещена на официальном сайте мессенджера. Действия для получения идентификатора:
При отсутствии зарегистрированных роботов в аккаунте идентификатор не выводится. Проверить правильность функционирования системы можно путем создания нового робота командой /newbots. Удачное выполнение всех инструкций завершится выводом токена в окно мессенджера.
Обзор
Источник: instaguru.online
Пишем Telegram-бота ChatGPT на Питоне
Данная статья написана по видео-ролику «ChatGPT OpenAI в Telegram на Python / Пишем Telegram-бота ChatGPT на Питоне» c небольшим дополнением — добавил в код проверку по id в телеграме.
Как ограничить доступ к боту телеграм (aiogram) — об этом читайте в конце данной статьи.
Если вы не сталкивались с питоном, то необходимо установить его. О том, как это сделать, подробно описано здесь.
Теперь приступим к созданию бота ChatGPT в Telegram.
Установка библиотек для телеграм-бота:
Первое, что нам нужно сделать — это установить библиотеки aiogram и OpenAI:
- Чтобы установить aiogram, введите в терминале:
pip install aiogram
- Чтобы установить OpenAI, введите в терминале:
pip install openai
Регистрация в OpenAI:
Чтобы добавить функционал ChatGPT в Telegram, для начала, необходимо зарегистрироваться здесь — https://platform.openai.com, о том как зарегистрировать аккаунт в ChatGPT на территории РФ, снято уже очень много видео.
Далее переходим в раздел API Keys и нажимаем кнопку «Create new secret key», копируем получившийся ключ.
Как создать бота в телеграм:
- Переходим по ссылке выше и запускаем бота, нажимаем кнопку «Меню»
- Вводим любое имя для нашего бота, отправляем сообщение
- Вводим логин нашего бота, по которому мы сможем его найти. Важно: login должен оканчиваться на bot (Пример правильного логина: illarion_bot), а так же логин должен быть уникальным
- Копируем токен API нашего бота (начинается после слов — «Use this token to access the HTTP API:»)
Пишем код телеграм-бота на Python:
Создаем любой файл с расширением .py , а в сам файл вставляем следующий код:
Замените токены Телеграм и OpenAI в коде на те, что мы получили выше.
Прописываются они здесь (строки кода номер 7 и 8):
token = ‘TELEGRAM_BOT_TOKEN’ openai.api_key = ‘OPENAI_KEY’
В данном коде используется языковая модель text-davinci-003, т.е. — Чат. Чтобы использовать другие модули — перейдите в раздел «Examples«, выберите необходимый модуль и замените фрагмент кода:
response = openai.Completion.create( model=»text-davinci-003″, prompt=message.text, temperature=0.9, max_tokens=4000, top_p=1.0, frequency_penalty=0.0, presence_penalty=0.6, stop=[» Human:», » AI:»] )
Замените данный фрагмент на аналогичный код из описания нужного модуля (начинается с «response =» и заканчивается «)»
Все это было пересказом видео одного программиста, бот мы создали и теперь то, зачем я пишу данную статью и то, что может помочь многим начинающим разработчикам на python.
Если вы запускаете код на GNU/Linux дистрибутивах, то на вторую строчку, после фрагмента import openai вставьте следующую строку:
import os
Как ограничить доступ к боту телеграм (aiogram)?
Находим строку 12, (пустая строка после dp = Dispatcher(bot), и в пустой строке вставляем следующий код:
users = — в фигурных скобках, через запятую, перечисляется id пользователей телеграма (вводить только числа), которые допущены к данному боту.
Узнать свой id в телеграме можно тут. Подставляем свои id, заменяем текст в скобках после message.answer (если это необходимо, так же не забывайте обернуть свой текст в кавычки «»)
Как сделать проверку по количеству введенных символов пользователя в aiogram?
Если количество введенных символов превышает 2000 — выводится ошибка с пояснением. Код следующий:
Если вы не делали проверку по id телеграм, то код вставляем на строку номер 12, (пустая строка после dp = Dispatcher(bot), и в пустой строке вставляем данный код.
Если вы сделали проверку по id, то вставляем после через строку после кода ограничения
Число 2000 в проверке — приблизительное. Читать подробнее об ограничениях OpenAI API >
Готово! ChatGPT в Telegram работает. Смотрите так же другие статьи, правда они в основном касаются веб-разработки.
Дата создания статьи: 09.02.2023
Комментарии
Оставьте Ваше сообщение
Подписаться
27 Комментарий
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
3 месяцев назад
все токены вставил и не получается нифига. можете у себя запустить готовый код с моими токенами ?
3 месяцев назад
Ответить на Виталий
Добрый день, есть несколько уточнений:
1. Что выдает консоль при запуске скрипта?
2. Пайтон и все библиотеки стоят?
3. Запускаете скрипт на сервере или локально?
Если все стоит, включая библиотеки OpenAI и aiogram, и все равно не работает — пишите мне в телегу, попробую запустить.
3 месяцев назад
Очень круто, спасибо! Получилось. Вопрос — чтобы ограничить пользователей, как надо вставлять их айди в скобках? (tg_4534345345) или просто цифры без tg? Или как-то еще? Пробовал и так и так — все-равно люди с чужих айди могут пользоваться.
3 месяцев назад
Ответить на Иван
Доброй ночи, спасибо за комментарий!
Просто цифры, без tg. Примерно так: users = (111111111,2222222222)
2 месяцев назад
Ответить на Иван
если айди лишь 1, то вместо обычных скобок используйте фигурные
пример: users =
переписал данный момент в статье
3 месяцев назад
Спасибо тебе, все сделал по инструкции, оно работает!)))
3 месяцев назад
Ответить на Киря
Доброй ночи, благодарю за комментарий! Рад, что все получилось)
2 месяцев назад
Добрый день, попытался стартануть бота на replit.com, стартует нормально, но при запуске бота из телеги ошибка на сервере
Task exception was never retrieved
future: exception=TypeError(«argument of type ‘int’ is not iterable»)>
Traceback (most recent call last):
File «/home/runner/DiscreteOvercookedValue/venv/lib/python3.10/site-packages/aiogram/dispatcher/dispatcher.py», line 415, in _process_polling_updates
for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
File «/home/runner/DiscreteOvercookedValue/venv/lib/python3.10/site-packages/aiogram/dispatcher/dispatcher.py», line 235, in process_updates
return await asyncio.gather(*tasks)
File «/home/runner/DiscreteOvercookedValue/venv/lib/python3.10/site-packages/aiogram/dispatcher/handler.py», line 117, in notify
response = await handler_obj.handler(*args, **partial_data)
File «/home/runner/DiscreteOvercookedValue/venv/lib/python3.10/site-packages/aiogram/dispatcher/dispatcher.py», line 256, in process_update
return await self.message_handlers.notify(update.message)
File «/home/runner/DiscreteOvercookedValue/venv/lib/python3.10/site-packages/aiogram/dispatcher/handler.py», line 108, in notify
data.update(await check_filters(handler_obj.filters, args))
File «/home/runner/DiscreteOvercookedValue/venv/lib/python3.10/site-packages/aiogram/dispatcher/filters/filters.py», line 77, in check_filters
f = await execute_filter(filter_, args)
File «/home/runner/DiscreteOvercookedValue/venv/lib/python3.10/site-packages/aiogram/dispatcher/filters/filters.py», line 63, in execute_filter
return filter_.filter(*args, **filter_.kwargs)
File «main.py», line 17, in
accepted_users = lambda message: message.from_user.id not in users
TypeError: argument of type ‘int’ is not iterable
Источник: nikonorow.ru