- Введение: зачем нужен Telegram бот с ChatGPT?
- Подготовка рабочего окружения: Python и необходимые библиотеки
- Для Windows:
- Для Mac:
- Получение API ключей: Telegram и OpenAI
- Написание кода: создаем Telegram бота с ChatGPT
- Тестирование бота: запуск на локальном компьютере
- Развертывание на сервере: TimeWeb Cloud в Нидерландах
- Настройка сервера: установка Python и запуск бота
- Заключение: что дальше?
- Добавьте обработку ошибок и логирование
- Реализуйте дополнительные команды
- Интегрируйте другие API для расширения функциональности
- Полезные материалы по теме
Введение: зачем нужен Telegram бот с ChatGPT?
В современном мире искусственный интеллект становится неотъемлемой частью нашей жизни. Создание Telegram бота с интеграцией ChatGPT — это отличный способ для начинающих программистов погрузиться в мир AI и мессенджеров. Такой бот может стать вашим личным помощником, отвечать на вопросы пользователей или даже генерировать контент.
Ссылка на моего телеграм бота с ChatGPT — здесь
В этой статье мы шаг за шагом разберем, как создать Telegram бота с использованием ChatGPT на языке Python. Мы также рассмотрим, как развернуть бота на виртуальном сервере в Нидерландах, чтобы он работал в России без VPN.
Подготовка рабочего окружения: Python и необходимые библиотеки
Прежде чем мы начнем, убедитесь, что у вас установлен Python. Если нет, скачайте его с официального сайта python.org.
Для Windows:
- Скачайте установщик Python с python.org
- Запустите установщик и не забудьте поставить галочку «Add Python to PATH»
- Откройте командную строку и введите
python --version
, чтобы проверить установку
Для Mac:
- Установите Homebrew, если еще не установлен:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Установите Python:
brew install python
- Проверьте установку:
python3 --version
Теперь установим необходимые библиотеки:
pip install python-telegram-bot openai
Получение API ключей: Telegram и OpenAI
Для работы нашего бота понадобятся два API ключа:
- Telegram Bot API:
- Найдите @BotFather в Telegram
- Отправьте команду /newbot
- Следуйте инструкциям для создания бота
- Сохраните полученный токен
- OpenAI API:
- Зарегистрируйтесь на openai.com
- Перейдите в раздел API keys
- Создайте новый ключ и сохраните его
Написание кода: создаем Telegram бота с ChatGPT
Теперь приступим к написанию кода. Создайте новый файл bot.py
и вставьте следующий код:
import os
from telegram import Update
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import openai
# Замените на свои токены
TELEGRAM_TOKEN = 'YOUR_TELEGRAM_TOKEN'
OPENAI_API_KEY = 'YOUR_OPENAI_API_KEY'
openai.api_key = OPENAI_API_KEY
def start(update: Update, context):
update.message.reply_text('Привет! Я бот с ChatGPT. Задай мне вопрос!')
def handle_message(update: Update, context):
message = update.message.text
response = openai.Completion.create(
engine="text-davinci-002",
prompt=message,
max_tokens=150
)
update.message.reply_text(response.choices[0].text.strip())
def main():
updater = Updater(TELEGRAM_TOKEN, use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("start", start))
dp.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_message))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
Не забудьте заменить YOUR_TELEGRAM_TOKEN
и YOUR_OPENAI_API_KEY
на ваши реальные токены.
Тестирование бота: запуск на локальном компьютере
Чтобы протестировать бота, просто запустите скрипт:
python bot.py
Теперь найдите своего бота в Telegram и начните с ним диалог. Он должен отвечать на ваши сообщения, используя ChatGPT.
Развертывание на сервере: TimeWeb Cloud в Нидерландах
Чтобы ваш бот работал постоянно, нужно развернуть его на сервере. Мы будем использовать TimeWeb Cloud, так как он предоставляет серверы в Нидерландах, что позволит боту работать в России без VPN.
- Зарегистрируйтесь на TimeWeb Cloud
- Выберите «Облачные серверы» и создайте новый сервер
- Выберите локацию «Нидерланды»
- Выберите операционную систему (например, Ubuntu 20.04)
- Выберите тариф (минимальный подойдет для начала)
- Создайте сервер и сохраните данные для входа
Настройка сервера: установка Python и запуск бота
Подключитесь к серверу через SSH и выполните следующие команды:
sudo apt update
sudo apt install python3-pip
pip3 install python-telegram-bot openai
# Создайте файл bot.py и вставьте в него код бота
nano bot.py
# Запустите бота в фоновом режиме
nohup python3 bot.py &
Теперь ваш бот будет работать постоянно на сервере в Нидерландах.
Заключение: что дальше?
Поздравляем! Вы создали Telegram бота с интеграцией ChatGPT и развернули его на сервере. Вот несколько идей для дальнейшего развития:
Добавьте обработку ошибок и логирование
Пример кода с обработкой ошибок и логированием:
import logging
from telegram import Update
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import openai
# Настройка логирования
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO,
filename='bot.log'
)
logger = logging.getLogger(__name__)
def handle_message(update: Update, context):
try:
message = update.message.text
logger.info(f"Получено сообщение от {update.effective_user.id}: {message}")
response = openai.Completion.create(
engine="text-davinci-002",
prompt=message,
max_tokens=150
)
reply = response.choices[0].text.strip()
update.message.reply_text(reply)
logger.info(f"Отправлен ответ пользователю {update.effective_user.id}: {reply}")
except openai.error.OpenAIError as e:
logger.error(f"Ошибка OpenAI: {str(e)}")
update.message.reply_text("Извините, произошла ошибка при обработке вашего запроса. Попробуйте позже.")
except Exception as e:
logger.error(f"Неожиданная ошибка: {str(e)}")
update.message.reply_text("Произошла непредвиденная ошибка. Пожалуйста, сообщите администратору.")
# Остальной код бота...
Этот пример добавляет логирование всех входящих сообщений и ответов бота, а также обрабатывает возможные ошибки, такие как проблемы с API OpenAI или неожиданные исключения.
Реализуйте дополнительные команды
Давайте добавим несколько интересных команд:
def start(update: Update, context):
update.message.reply_text('Привет! Я бот с ChatGPT. Вот что я умею:\n'
'/start - показать это сообщение\n'
'/help - получить помощь\n'
'/joke - рассказать шутку\n'
'/fact - случайный факт\n'
'/image [описание] - сгенерировать изображение')
def help_command(update: Update, context):
update.message.reply_text('Я могу ответить на любой ваш вопрос! Просто напишите его в чат.')
def tell_joke(update: Update, context):
joke = openai.Completion.create(
engine="text-davinci-002",
prompt="Расскажи смешную шутку",
max_tokens=100
)
update.message.reply_text(joke.choices[0].text.strip())
def random_fact(update: Update, context):
fact = openai.Completion.create(
engine="text-davinci-002",
prompt="Расскажи интересный научный факт",
max_tokens=100
)
update.message.reply_text(fact.choices[0].text.strip())
def generate_image(update: Update, context):
if not context.args:
update.message.reply_text("Пожалуйста, добавьте описание изображения после команды.")
return
description = ' '.join(context.args)
response = openai.Image.create(
prompt=description,
n=1,
size="512x512"
)
image_url = response['data'][0]['url']
update.message.reply_photo(image_url)
def main():
updater = Updater(TELEGRAM_TOKEN, use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("start", start))
dp.add_handler(CommandHandler("help", help_command))
dp.add_handler(CommandHandler("joke", tell_joke))
dp.add_handler(CommandHandler("fact", random_fact))
dp.add_handler(CommandHandler("image", generate_image))
dp.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_message))
updater.start_polling()
updater.idle()
# Остальной код бота...
Эти команды добавляют боту возможность рассказывать шутки, делиться случайными фактами и даже генерировать изображения!
Интегрируйте другие API для расширения функциональности
Давайте добавим интеграцию с API погоды и переводчиком:
import requests
from googletrans import Translator
def get_weather(update: Update, context):
if not context.args:
update.message.reply_text("Пожалуйста, укажите город после команды.")
return
city = ' '.join(context.args)
api_key = 'YOUR_OPENWEATHERMAP_API_KEY'
url = f'http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric'
response = requests.get(url)
if response.status_code == 200:
data = response.json()
temp = data['main']['temp']
description = data['weather'][0]['description']
update.message.reply_text(f"Погода в {city}:\nТемпература: {temp}°C\nОписание: {description}")
else:
update.message.reply_text("Не удалось получить информацию о погоде. Проверьте название города.")
def translate_text(update: Update, context):
if len(context.args) < 2:
update.message.reply_text("Использование: /translate [язык] [текст для перевода]")
return
target_lang = context.args[0]
text = ' '.join(context.args[1:])
translator = Translator()
try:
translation = translator.translate(text, dest=target_lang)
update.message.reply_text(f"Перевод: {translation.text}")
except Exception as e:
update.message.reply_text(f"Ошибка при переводе: {str(e)}")
def main():
updater = Updater(TELEGRAM_TOKEN, use_context=True)
dp = updater.dispatcher
# Добавляем новые обработчики команд
dp.add_handler(CommandHandler("weather", get_weather))
dp.add_handler(CommandHandler("translate", translate_text))
# Остальные обработчики...
# Остальной код бота...
Не забудьте установить необходимые библиотеки:
pip install requests googletrans==3.1.0a0
Эти дополнения позволят пользователям узнавать погоду в любом городе и переводить текст на разные языки прямо в чате с ботом.
Теперь ваш бот стал намного функциональнее! Он может обрабатывать ошибки, логировать действия, рассказывать шутки, генерировать изображения, сообщать погоду и даже переводить тексты. Это отличная основа для дальнейшего развития и экспериментов с различными API и функциями.
Не останавливайтесь на достигнутом, экспериментируйте и создавайте удивительные проекты с AI!