AYP
13.04.2023, 13:56
Суть скрипта: ничего необычного и сложного, обычный скрипт на 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/ )
https://forum.antichat.xyz/attachments/28291604/img_a9bb3ff1eb.png
3) Подтверждаем почту.
4) После того как подтвердили, переходим во вкладку "Consoles"
https://forum.antichat.xyz/attachments/28291604/img_f2ac4efade.png
5) Теперь открываем консоль "Bash"
https://forum.antichat.xyz/attachments/28291604/img_cdfe5c7dc2.png
6) Ждем загрузку консоли и вставляем в нее эти 2 команды:
terminal:
pip install python
-
telegram
-
bot
==
13.15
pip install openai
7) Ждем пока загрузятся библиотеки и переходим во вкладку "Files"
https://forum.antichat.xyz/attachments/28291604/img_2998178f4b.png
8) Теперь создаем файл с нашим ботом. У меня это "bot.py" (ВАЖНО: в конце .py - ОБЯЗАТЕЛЬНО!)
https://forum.antichat.xyz/attachments/28291604/img_4b621bc1c1.png
9) После создания у нас откроется редактор кода. Вставляем код, который был выше, сюда, и нажимаем "Save" получится вот так:
https://forum.antichat.xyz/attachments/28291604/img_33bafcf914.png
10) Теперь меняем значения на 6 и 8 строке на свои.
11) И вуа-ля! Еще раз нажимаем "Save" и потом "Run this file". И бот должен заработать.
Буду благодарен если умельцы будут дополнять\оптимизировать код.
По возможности буду обновлять скрипт, хотя обновлять тут нечего и не зачем, а код с "мусорными" функциями можно найти и на гите.
/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/ )
https://forum.antichat.xyz/attachments/28291604/img_a9bb3ff1eb.png
3) Подтверждаем почту.
4) После того как подтвердили, переходим во вкладку "Consoles"
https://forum.antichat.xyz/attachments/28291604/img_f2ac4efade.png
5) Теперь открываем консоль "Bash"
https://forum.antichat.xyz/attachments/28291604/img_cdfe5c7dc2.png
6) Ждем загрузку консоли и вставляем в нее эти 2 команды:
terminal:
pip install python
-
telegram
-
bot
==
13.15
pip install openai
7) Ждем пока загрузятся библиотеки и переходим во вкладку "Files"
https://forum.antichat.xyz/attachments/28291604/img_2998178f4b.png
8) Теперь создаем файл с нашим ботом. У меня это "bot.py" (ВАЖНО: в конце .py - ОБЯЗАТЕЛЬНО!)
https://forum.antichat.xyz/attachments/28291604/img_4b621bc1c1.png
9) После создания у нас откроется редактор кода. Вставляем код, который был выше, сюда, и нажимаем "Save" получится вот так:
https://forum.antichat.xyz/attachments/28291604/img_33bafcf914.png
10) Теперь меняем значения на 6 и 8 строке на свои.
11) И вуа-ля! Еще раз нажимаем "Save" и потом "Run this file". И бот должен заработать.
Буду благодарен если умельцы будут дополнять\оптимизировать код.
По возможности буду обновлять скрипт, хотя обновлять тут нечего и не зачем, а код с "мусорными" функциями можно найти и на гите.