Исходник ChatGPT for Telegram (+image)

Суть скрипта: ничего необычного и сложного, обычный скрипт на API OpenAI.
Бот имеет 3 команды:
/help - открыть меню помощи по командам.
/chat [text] - чат с Chat GPT.
/image [text] - сгенерирует картинку по Вашему запросу.


"ТОКЕН_БОТА" - вставьте между " " токен Вашего бота в Телеграм.
"АПИ_OPEN_AI" - вставьте между " " ключ от OpenAI.

terminal:
pip install python-telegram-bot==13.15
pip install openai



ChatGPT:
import logging
from telegram import Update, ReplyKeyboardMarkup
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import openai

openai.api_key = "АПИ_OPEN_AI"

TOKEN = "ТОКЕН_БОТА"
updater = Updater(TOKEN)

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)

def start(update: Update, context):
    commands = [
        ['/chat', '/image'],
    ]
    reply_markup = ReplyKeyboardMarkup(commands, resize_keyboard=True)
    update.message.reply_text('Выберите команду в меню или воспользуйтесь командой /help.', reply_markup=reply_markup)

def help_command(update: Update, context):
    update.message.reply_text('Команды бота:\n\n/help - открыть это меню.\n/chat [текст] - задать вопрос ChatGPT.\n/image [текст] - запрос нейросети для генерации картинки.\n\n\nО авторе можете узнать на сайте: r3dd1l.tk')

def generate_text(update: Update, context):
    text = " ".join(context.args)
    if not text:
        update.message.reply_text("Ошибка! Введите /chat [текст]!")
        return

    response = openai.Completion.create(
        prompt=text,
        max_tokens=2000,  # Максимальное количество генерируемых токенов
        n=1,  # Количество предложений в ответе
        stop=None,  # Символы, по которым модель должна остановить генерацию
        temperature=0.7,  # Параметр температуры для контроля степени разнообразия генерируемого текста
        model="text-davinci-002"  # Модель ChatGPT от OpenAI
    )

    # Получаем сгенерированный текст из ответа от OpenAI
    generated_text = response['choices'][0]['text']

    # Отправляем ответ с сгенерированным текстом пользователю
    update.message.reply_text(generated_text)

# Функция для генерации изображений по тексту
def generate_image(update: Update, context):
    # Получение текста сообщения после команды /image
    text = " ".join(context.args)
    if not text:
        update.message.reply_text("Ошибка! Введите /image [текст]!")
        return

    # Используем OpenAI для генерации изображения по тексту
    prompt = f"Сгенерируй изображение на основе текста: {text}"
    response = openai.Image.create(prompt=prompt)

    # Получаем ссылку на изображение из ответа от OpenAI
    image_url = response['data'][0]['url']

    # Отправляем ответ с изображением пользователю
    update.message.reply_photo(photo=image_url)


def handle_message(update: Update, context):
    text = update.message.text

    if text.startswith('/image'):

        context.args = text.split()[1:]
        generate_image(update, context)

    if text.startswith('/chat'):
        context.args = text.split()[1:]
        generate_text(update, context)

updater.dispatcher.add_handler(CommandHandler('start', start))
updater.dispatcher.add_handler(CommandHandler('help', help_command))
updater.dispatcher.add_handler(CommandHandler('image', generate_image))
updater.dispatcher.add_handler(CommandHandler('chat', generate_text))
updater.dispatcher.add_handler(MessageHandler(Filters.text, handle_message))

if __name__ == '__main__':
    updater.start_polling()
    updater.idle()

Включать скрипт бота только на ПК - неудобно и не практично. Поэтому давайте его подключим к самому простому БЕСПЛАТНОМУ хостингу.

1) Заходим на сайт: www.pythonanywhere.com
2) Регистрируемся и подтверждаем почту. (что бы не запутаться, вот ссылка на бесплатную основу регистрации на сайте: https://www.pythonanywhere.com/registration/register/beginner/ )

1681377830354.png

3) Подтверждаем почту.
4) После того как подтвердили, переходим во вкладку "Consoles"

1681378186829.png

5) Теперь открываем консоль "Bash"
1681378287358.png

6) Ждем загрузку консоли и вставляем в нее эти 2 команды:
terminal:
pip install python-telegram-bot==13.15
pip install openai
7) Ждем пока загрузятся библиотеки и переходим во вкладку "Files"
1681378514597.png

8) Теперь создаем файл с нашим ботом. У меня это "bot.py" (ВАЖНО: в конце .py - ОБЯЗАТЕЛЬНО!)
1681378677580.png

9) После создания у нас откроется редактор кода. Вставляем код, который был выше, сюда, и нажимаем "Save" получится вот так:
1681378921173.png
10) Теперь меняем значения на 6 и 8 строке на свои.
11) И вуа-ля! Еще раз нажимаем "Save" и потом "Run this file". И бот должен заработать.


Буду благодарен если умельцы будут дополнять\оптимизировать код.
По возможности буду обновлять скрипт, хотя обновлять тут нечего и не зачем, а код с "мусорными" функциями можно найти и на гите.
 

xionerme

Потрачен
748
259
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ну пачиму не aiogram??

ашывщшавы:
@dp.message_handler(commands=['нейронка'])
async def neiro(message: types.Message):
  msg = await message.reply('подождите.. генерирую ответ')
  messageid = msg.message_id
  zxc = message.get_args()
  if not zxc:
    await bot.edit_message_text('Вы не ввели текстовую подсказку',
                                message.chat.id, messageid)
    return
  completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[{
    "role": "user",
    "content": zxc
  }],
  temperature=0.7,
  max_tokens=1024,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0)
  answer = completion.choices[0].message.content.strip()
  await bot.edit_message_text(text=f'🤖 Ответ: {answer}',
                              chat_id=message.chat.id,
                              message_id=messageid)

аываыв:
@dp.message_handler(commands=['нейрофото'])
async def neiro(message: types.Message):
  msg = await message.reply('подождите.. генерирую фото')
  messageid = msg.message_id
  prompt = message.get_args()
  if not prompt:
    await bot.edit_message_text('Вы не ввели текстовую подсказку',
                                message.chat.id, messageid)
    return
  response = openai.Image.create(
    prompt=prompt,
    n=1,
    size="256x256",
  )
  image_url = response["data"][0]["url"]
  with open("image.jpg", "wb") as f:
    f.write(requests.get(image_url).content)
  photo = open('image.jpg', 'rb')
  await message.reply_photo(photo, caption='готово!')
  await bot.delete_message(message.chat.id, messageid)
  os.remove('image.jpg')
 
  • Нравится
Реакции: Z3roKwq и AYP

AYP

Новичок
Автор темы
7
15
ну пачиму не aiogram??

ашывщшавы:
@dp.message_handler(commands=['нейронка'])
async def neiro(message: types.Message):
  msg = await message.reply('подождите.. генерирую ответ')
  messageid = msg.message_id
  zxc = message.get_args()
  if not zxc:
    await bot.edit_message_text('Вы не ввели текстовую подсказку',
                                message.chat.id, messageid)
    return
  completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[{
    "role": "user",
    "content": zxc
  }],
  temperature=0.7,
  max_tokens=1024,
  top_p=1,
  frequency_penalty=0,
  presence_penalty=0)
  answer = completion.choices[0].message.content.strip()
  await bot.edit_message_text(text=f'🤖 Ответ: {answer}',
                              chat_id=message.chat.id,
                              message_id=messageid)

аываыв:
@dp.message_handler(commands=['нейрофото'])
async def neiro(message: types.Message):
  msg = await message.reply('подождите.. генерирую фото')
  messageid = msg.message_id
  prompt = message.get_args()
  if not prompt:
    await bot.edit_message_text('Вы не ввели текстовую подсказку',
                                message.chat.id, messageid)
    return
  response = openai.Image.create(
    prompt=prompt,
    n=1,
    size="256x256",
  )
  image_url = response["data"][0]["url"]
  with open("image.jpg", "wb") as f:
    f.write(requests.get(image_url).content)
  photo = open('image.jpg', 'rb')
  await message.reply_photo(photo, caption='готово!')
  await bot.delete_message(message.chat.id, messageid)
  os.remove('image.jpg')
aiogram припас для другого 😉
 

MaximRazrab

Потрачен
17
4
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
можно не на openai?
 
  • Эм
Реакции: zakatov