Создание Telegram бота с ChatGPT на Python: пошаговое руководство для начинающих

телеграм бот на Python Python

Введение: зачем нужен Telegram бот с ChatGPT?

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

Ссылка на моего телеграм бота с ChatGPT — здесь

В этой статье мы шаг за шагом разберем, как создать Telegram бота с использованием ChatGPT на языке Python. Мы также рассмотрим, как развернуть бота на виртуальном сервере в Нидерландах, чтобы он работал в России без VPN.

Подготовка рабочего окружения: Python и необходимые библиотеки

Прежде чем мы начнем, убедитесь, что у вас установлен Python. Если нет, скачайте его с официального сайта python.org.

Для Windows:

  1. Скачайте установщик Python с python.org
  2. Запустите установщик и не забудьте поставить галочку «Add Python to PATH»
  3. Откройте командную строку и введите python --version, чтобы проверить установку

Для Mac:

  1. Установите Homebrew, если еще не установлен: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. Установите Python: brew install python
  3. Проверьте установку: python3 --version

Теперь установим необходимые библиотеки:

pip install python-telegram-bot openai

Получение API ключей: Telegram и OpenAI

Для работы нашего бота понадобятся два API ключа:

  1. Telegram Bot API:
  • Найдите @BotFather в Telegram
  • Отправьте команду /newbot
  • Следуйте инструкциям для создания бота
  • Сохраните полученный токен
  1. 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.

  1. Зарегистрируйтесь на TimeWeb Cloud
  2. Выберите «Облачные серверы» и создайте новый сервер
  3. Выберите локацию «Нидерланды»
  4. Выберите операционную систему (например, Ubuntu 20.04)
  5. Выберите тариф (минимальный подойдет для начала)
  6. Создайте сервер и сохраните данные для входа
Создание Telegram бота с ChatGPT на Python: пошаговое руководство для начинающих

Настройка сервера: установка 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!



Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x