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

Бот на Python, использующий ChatGPT для Telegram [Гайд]

Бот на Python, использующий ChatGPT для Telegram [Гайд]

09 февраля 2023
Оценки статьи
Еще никто не оценил статью

В этой статье мы реализуем бота, работающего на базе ChatGPT, с помощью языка Python и библиотеки aiogram. А также проверим его в работе!

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

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

Как получить токен для Telegram бота

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

Все откликнувшиеся на зов помощи будут упомянуты после выполнения целей

Примечание: у вас уже должен быть зарегистрирован аккаунт в ChatGPT — OpenAI, если вы этого ещё не сделали, можете ознакомиться с этой статьёй

Дополнительно (может быть полезно): доступен гайд для запуска данного telegram-бота с ChatGPT на VPS сервере, используя Docker контейнер.

Получаем API токен для ChatGPT

  1. Нам необходимо получить токен для API, переходим на сайт: platform.openai.com

На сайте нажимаем Personal, и выбираем View API keys:

Personal -></p><p> View API keys

Далее нажимаем Create new secret key

Нажимаем Create new secret key

Получаем наш ключ для ChatGPT API.

Сохраняем куда-нибудь в блокнот, потом его вставим в main.py

Опционально: вы можете изучить документацию и другие моменты в управлении ChatGPT.

Получаем токен для бота в телеграмм

Получаем ключ для доступа к API, на скриншоте он закрашен. Сохраняем в удобное место.

Создаем бота на Python

Создание виртуального окружения

Как получить токен бота Telegram API / Где найти токен

  1. Открываем папку, где хотим хранить проект с помощью IDE редактора, например VS CODE, открываем терминал, пишем команду cmd и создаем виртуальное окружение с помощью команды py -m venv venv . На компьютере у вас должен быть установлен Python. Скачать его можно на официальном сайте.

Далее активируем виртуальное окружение следующей командой: cd venv/scripts activate и возвращаемся в корневой каталог с помощью команды cd ../../ , в терминале у нас появится, что вирутальное окружение активировано, в скобках (venv).

Активировали виртуальное окружение

Далее создаем файл рядом с venv под названием main.py.

Файл для запуска бота

Теперь нам необходимо установить два пакета с помощью терминала: pip install openai aiogram

Результат выполнения команды:

(venv) C:UsersRazilatorDesktopProjectsProgHunterBot>pip install openai aiogram Collecting openai Downloading openai-0.26.5.tar.gz (55 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 55.5/55.5 kB 481.5 kB/s eta 0:00:00 Installing build dependencies done Getting requirements to build wheel

Еще по теме:  Где в Телеграмме шапка профиля

done Installing backend dependencies done Preparing metadata (pyproject.toml) done Collecting aiogram Using cached aiogram-2.25.1-py3-none-any.whl (203 kB) Collecting requests>=2.20 Using cached requests-2.28.2-py3-none-any.whl (62 kB) Collecting tqdm Using cached tqdm-4.64.1-py2.py3-none-any.whl (78 kB) Collecting aiohttp Using cached aiohttp-3.8.3-cp311-cp311-win_amd64.whl (317 kB) Collecting Babel2.10.0,>=2.9.1 Using cached Babel-2.9.1-py2.py3-none-any.whl (8.8 MB) Collecting certifi>=2021.10.8 Using cached certifi-2022.12.7-py3-none-any.whl (155 kB) Collecting magic-filter>=1.0.9 Using cached magic_filter-1.0.9-py3-none-any.whl (9.3 kB) Collecting attrs>=17.3.0 Using cached attrs-22.2.0-py3-none-any.whl (60 kB) Collecting charset-normalizer3.0,>=2.0 Using cached charset_normalizer-2.1.1-py3-none-any.whl (39 kB) Collecting multidict7.0,>=4.5 Using cached multidict-6.0.4-cp311-cp311-win_amd64.whl (28 kB) Collecting async-timeout5.0,>=4.0.0a3 Using cached async_timeout-4.0.2-py3-none-any.whl (5.8 kB) Collecting yarl2.0,>=1.0 Using cached yarl-1.8.2-cp311-cp311-win_amd64.whl (55 kB) Collecting frozenlist>=1.1.1 Using cached frozenlist-1.3.3-cp311-cp311-win_amd64.whl (32 kB) Collecting aiosignal>=1.1.2 Using cached aiosignal-1.3.1-py3-none-any.whl (7.6 kB) Collecting pytz>=2015.7 Using cached pytz-2022.7.1-py2.py3-none-any.whl (499 kB) Collecting idna4,>=2.5 Using cached idna-3.4-py3-none-any.whl (61 kB) Collecting urllib31.27,>=1.21.1 Using cached urllib3-1.26.14-py2.py3-none-any.whl (140 kB) Collecting colorama Using cached colorama-0.4.6-py2.py3-none-any.whl (25 kB) Building wheels for collected packages: openai Building wheel for openai (pyproject.toml) done Created wheel for openai: filename=openai-0.26.5-py3-none-any.whl size=67643 sha256=37dc116c709234495442341b7ee6aa3dd3bc4106aaff6db62e06b270896d5d7e Stored in directory: c:usersrazilatorappdatalocalpipcachewheelsea6cec84e3e339332a539336f4b1c6990779c508ee73a760b2697e6 Successfully built openai Installing collected packages: pytz, urllib3, multidict, magic-filter, idna, frozenlist, colorama, charset-normalizer, certifi, Babel, attrs, async-timeout, yarl, tqdm, requests, aiosignal, aiohttp, openai, aiogram Successfully installed Babel-2.9.1 aiogram-2.25.1 aiohttp-3.8.3 aiosignal-1.3.1 async-timeout-4.0.2 attrs-22.2.0 certifi-2022.12.7 charset-normalizer-2.1.1 colorama-0.4.6 frozenlist-1.3.3 idna-3.4 magic-filter-1.0.9 multidict-6.0.4 openai-0.26.5 pytz-2022.7.1 requests-2.28.2 tqdm-4.64.1 urllib3-1.26.14 yarl-1.8.2 [notice] A new release of pip available: 22.3 -> 23.0 [notice] To update, run: python.exe -m pip install —upgrade pip

Теперь в наш файл main.py добавляем следующий фрагмент кода:

В примере выше вы должны вставить токены, которые сохранили соответственно для телеграмм бота и для OpenAI ChatGPT.

Это самые стандартные настройки для запуска и работы бота и стандартные настройки для нейросети, чтоб он вам отвечал непосредственно от нейросети ChatGPT в телеграмме. В коде я передаю ответ от нейросети в виде пришедшего ответа по API.

Запускам бота, проверяем работу

Теперь нам необходимо запустить бота, для этого в терминале напишите py main.py и если все сделали правильно, результат будет следующим:

(venv) C:UsersRazilatorDesktopProjectsProgHunterBot>py main.py Updates were skipped successfully.

Теперь напишем нашему боту

Пример работы нашего бота с ChatGPT

Отлично. Надеюсь у вас все получилось! Иногда может случится такое, что сервер будет выдавать ошибку, к сожалению, это просто нагружен сам сервер нейросети.

Плюсы способа с телеграм-ботом:

  • Вы можете обойтись без VPN.
  • Всегда в легкой доступности. Минусы:
  • Ограниченное кол-во на использование, OpenAI выдает вам 30$ как проверка. На самом деле вы можете долго им пользоваться. Тарификация маленькая и если будет желание, можете купить подписку. Это касается только использования ChatGPT через API.
  • Общение не в рамках контекста. Нейросеть просто не запоминает ваши предудыщие сообщения через API, как это реализовано на самом сайте с нейросетью.

Меню категорий

    Загрузка категорий.

Добро пожаловать в Блог Разработчика Владислава Александровича.

Ведется медленная, но уверенная разработка функционала сайта.

Django Core: 0.3.4 / Next.js 1.0 / UPD: 05.06.2023

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

Реализация аутентификации в telegram-боте через OAuth2 на примере Box API

Author's picture

Возникла идея простого бота, который будет отправлять переданные ему файлы в облако. Однако для аутентификации сейчас практически везде используется OAuth2. Если в web-приложениях пользоваться OAuth2 все уже научились, то с telegram у меня возникли вопросы.

Еще по теме:  Завершение сеансов в целях безопасности Телеграм

В этой заметке будет минимальный пример telegram-бота, который работает с box.com через API с аутентификацией через OAuth2.

disclaimer #1: В статье не будет подробного описания работы OAuth2 — только необходимый минимум информации для понимания процесса.

disclaimer #2: Для примера использую облачное хранилище box.com, так как именно в нём лежит моя библиотека электронных книг. При реализации аналогичной функциональности для других облаков проблем возникнуть не должно.

Какой сценарий с точки зрения пользователя получим в конце текущей статьи:

  1. Пользователь добавляет бота в telegram
  2. По команде /login пользователь получает ссылку на аутентификацию
  3. Пользователь переходит по ссылке в браузере на box.com
  4. Пользователь аутентифицируется на box.com
  5. Открывается страница бота https://t.me/?start= с предложением отправить ему сообщение по кнопке Send message
  6. Пользователь нажимает на кнопку Send message
  7. В telegram открывается диалог с ботом с активной кнопкой Start
  8. Пользователь нажимает на кнопку Start
  9. Бот отправляет пользователю его login в box.com

Добавить остальную функциональность — дело техники.

Необходимый минимум об OAuth2

Для реализация аутентификации через OAuth2 необходимо выполнить несколько пунктов:

  1. Получить client_id и client_secret в консоли разработчика box.com. Подробно процесс описан в приложении в конце статьи
  2. Сформировать ссылку для аутентификации пользователя https://account.box.com/api/oauth2/authorize?client_id=response_type=code . client_id и redirect_url необходимо скопировать из настроек созданного ранее приложения в консоли box.com
  3. На адресе redirect_url (по-умолчанию в этой статье — это localhost:8000 ) поднять веб-сервер, который сможет получить код для аутентификации в box.com
  4. С полученным в п.3 кодом и параметрами client_id и client_secret из п.1 обратиться к endpoint box.com API для получения access_token и refresh_token . access_token в дальнейшем необходимо добавлять во все запросы к API.

Реализация

Шаг 1. Подготовка

Для работы понадобятся три внешних библиотеки:

  • python-telegram-bot — для работы с Telegram Bot API
  • requests — для выполнения запросов к API
  • boxsdk — для работы с API box.com

Библиотеки и их версии прописаны в requirements.txt. Установить всё через pip install -r requirements.txt — ничего необычного. Но лучше для этого создать отдельное виртуальное окружение.

Шаг 2. Продолжаем подготовку

Теперь надо получить токен для бота. Я уже писал об этом ранее.

Шаг 3. Веб-сервис для получения OAuth2-кода

Нужен простой веб-сервис. На URI этого веб-сервиса будет происходить перенаправление со страницы аутентификации box.com. Адрес перенаправления будет содержать параметр code в строке запроса. Этот код используется для получения access_token и refresh_token дальше.

Веб-сервис будет без использования внешних зависимостей. Реализован на встроенном simple http server. Код позаимоствован из gist, но немного модифицирован:

Использовать код выше в настоящем боевом production я бы, конечно, не стал, но для демонстрации идеи подойдёт.

Шаг 4. Минимально работающий бот

Простейший бот с использованием библиотеки python-telegram-bot выглядит так:

from telegram.ext import Updater from telegram.update import Update from telegram.ext.callbackcontext import CallbackContext from telegram.ext import CommandHandler token = ‘TG_BOT_TOKEN’ updater = Updater(token=token, use_context=True) dispatcher = updater.dispatcher def start(update: Update, context: CallbackContext): context.

bot.send_message(chat_id=update.effective_chat.id, text=»I’m a bot, please talk to me!») start_handler = CommandHandler(‘start’, start) dispatcher.add_handler(start_handler) updater.

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

start_polling()

Этот бот не делает ничего полезного — только отправляет сообщение «I’m a bot, please talk to me!» по команде /start .

Теперь надо добавить самое важное — аутентификацию через OAuth2.

Шаг 4.1. OAuth2-аутентификация

Для аутентификации необходимо перейти по сформированной особым образом ссылке: https://account.box.com/api/oauth2/authorize?client_id=response_type=code , где client_id и redirect_url параметры из настроек созданного ранее приложения в консоли разработчика box.com.

login-page

На этой странице будет стандартная форма логина в box.com .

После ввода логина и пароля произойдёт перенаправление на redirect_url . На этом адресе сервис, получив GET-запрос, вычленит из строки запроса code . После чего перенаправит запрос на страницу старта работы с telegram-ботом. В адрес будет добавлен полученный код. Далее должен открыться диалог с ботом с активной кнопкой Start . По клику на кнопку в обработчике команды /start можно будет получить переданный код.

Простейший код как proof of concept:

from telegram.ext import Updater from telegram.update import Update from telegram.ext.callbackcontext import CallbackContext from telegram.ext import CommandHandler import requests import json import boxsdk client_secret: str = ‘CLIENT_SECRET’ client_id: str = ‘CLIENT_ID’ redirect_url: str = ‘REDIRECT_URL’ token = ‘TG_BOT_TOKEN’ updater = Updater(token=token, use_context=True) dispatcher = updater.dispatcher # Обработчик команды /start def start(update: Update, context: CallbackContext): message_text: str = update.message.text # В deep linking параметры из url передаются в сообщении в виде строки «/start code», # где code — строка из url https://t.me/?start=code. message_parts: list[str] = message_text.split(‘ ‘) if len(message_parts) == 2: # Во втором элементе будет содержаться переданный код, # который необходим для получения access_token и refresh_token code: str = message_parts[1] # Формируем запрос к API box.com для получения access_token и refresh_token access_token_url = ‘https://api.box.com/oauth2/token’ headers = ‘Content-Type’: ‘application/x-www-form-urlencoded’> params = < ‘client_id’: client_id, ‘client_secret’: client_secret, ‘code’: code, ‘grant_type’: ‘authorization_code’ > req = requests.post(access_token_url, data=params, headers=headers) data = json.loads(req.text) # Полученный JSON содержит необходимые данные. # Используя их можно инициализировать клиент boxsdk # и начать обращаться к его API. oauth: boxsdk.OAuth2 = boxsdk.OAuth2( client_id, client_secret, access_token=data[‘access_token’], refresh_token=data[‘refresh_token’]) box_client = boxsdk.Client(oauth) # Например, можно получить информацию об аутентифицированном пользователе. user = box_client.user().get() context.bot.send_message(chat_id=update.effective_chat.id, text=user.login) else: show_welcome_message(update, context) # Обработчик команды /login def login(update: Update, context: CallbackContext): context.bot.send_message(chat_id=update.effective_chat.id, text=f’response_type=code»>Connect to Box.com’, parse_mode=’HTML’) def show_welcome_message(update: Update, context: CallbackContext): context.bot.send_message(chat_id=update.effective_chat.id, text=»I’m a bot, please talk to me!») start_handler = CommandHandler(‘start’, start) login_handler = CommandHandler(‘login’, login) dispatcher.add_handler(start_handler) dispatcher.add_handler(login_handler) updater.start_polling()

Что дальше

  1. Привести код бота в порядок: выделить классы, методы,
  2. Сделать конфигурирование бота более удобным,
  3. Реализовать загрузку файлов в облако.

О чём-то из этого постараюсь написать позже.

Исходники для этой заметки можно найти на github.

Приложение

Получить client_id и client_secret необходимо в консоли разработчика box.com:

  1. Cоздать новое приложение с типом Custom appcreate-app
  2. В настройках приложения выбрать User Authentication (OAuth2) и указывать App Namesetup-app
  3. В разделе Configuration созданного приложения:
  1. в секции OAuth 2.0 Credentials забрать client_id и client_secret ,
  2. в секции OAuth 2.0 Redirect URI указать localhost:8000 (или другой адрес, если есть понимание, что это и зачем)
  3. поставить галочку в чекбоксе Write all files and folders stored in Boxcredentials(в этой статье про это говорить не буду)

Если вам понравилась статья, то можете зайти в мой telegram-канал. В канал попадают небольшие заметки о Python, .NET, Go.

Источник: makesomecode.me

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