Данная статья написана по видео-ролику «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», копируем получившийся ключ.
Как создать бота в телеграм:
Создаем бота в телеграме — https://t.me/BotFather :
- Переходим по ссылке выше и запускаем бота, нажимаем кнопку «Меню»
- Вводим любое имя для нашего бота, отправляем сообщение
- Вводим логин нашего бота, по которому мы сможем его найти. Важно: login должен оканчиваться на bot (Пример правильного логина: illarion_bot), а так же логин должен быть уникальным
- Копируем токен API нашего бота (начинается после слов — «Use this token to access the HTTP API:»)
Пишем код телеграм-бота на Python:
Создаем любой файл с расширением .py , а в сам файл вставляем следующий код:
import openai
from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
token = 'TELEGRAM_BOT_TOKEN'
openai.api_key = 'OPENAI_KEY'
bot = Bot(token)
dp = Dispatcher(bot)
@dp.message_handler()
async def send(message: types.Message):
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:"]
)
await message.answer(response['choices'][0]['text'])
executor.start_polling(dp, skip_updates=True)Замените токены Телеграм и 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 = {tg_id1,tg_id2}
accepted_users = lambda message: message.from_user.id not in users
@dp.message_handler(accepted_users, content_types=['any'])
async def handle_unwanted_users(message: types.Message):
await message.answer("Извините, бот работает только для одобренных пользователей. Если вы хотите написать такой же бот - перейдите по ссылке: https://nikonorow.ru/pishem-telegram-bota-chatgpt-na-python/")
return
users = {tg_id1,tg_id2} — в фигурных скобках, через запятую, перечисляется id пользователей телеграма (вводить только числа), которые допущены к данному боту.
Узнать свой id в телеграме можно тут. Подставляем свои id, заменяем текст в скобках после message.answer (если это необходимо, так же не забывайте обернуть свой текст в кавычки «»)
Как сделать проверку по количеству введенных символов пользователя в aiogram?
Если количество введенных символов превышает 2000 — выводится ошибка с пояснением. Код следующий:
max_symbols = lambda message: int(len(message.text)) > 2000
@dp.message_handler(max_symbols, content_types=['any'])
async def handle_unwanted_users(message: types.Message):
await message.answer("Ошибка! Введенное количество символов превышает максимальное значение в 2000" + "\n\nКоличество введенных символов: " + str(len(message.text)) + "\n\nСократите Ваш запрос")
returnЕсли вы не делали проверку по id телеграм, то код вставляем на строку номер 12, (пустая строка после dp = Dispatcher(bot), и в пустой строке вставляем данный код.
Если вы сделали проверку по id, то вставляем после через строку после кода ограничения
Число 2000 в проверке — приблизительное. Читать подробнее об ограничениях OpenAI API >
Готово! ChatGPT в Telegram работает. Смотрите так же другие статьи, правда они в основном касаются веб-разработки.
Дата создания статьи: 09.02.2023
Update от 20.12.2023:
Если у вас возникает ошибка «ImportError: cannot import name ‘Dispatcher’ …», то попробуйте установить прошлую версию aiogram, например, 2.25.1.
Для этого удалите установленную версию:
pip uninstall aiogramИ установите нужную нам версию:
pip install aiogram==2.25.1Это должно помочь решить данную проблему.
Надеюсь, эта статья была для вас полезной и интересной. Если вы хотите, чтобы я создавал больше контента и делал это чаще, вы можете поддержать меня донатом. Благодарю вас за ваш вклад в творческий процесс!
Т-Банк (Тинькофф): 2200700867913161
Ozon Bank: 2204240107102131
Boosty: https://boosty.to/woronokin/donate
Личный блог






