ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Python (https://forum.antichat.xyz/forumdisplay.php?f=205)
-   -   ChatGPT for Telegram (+image) (https://forum.antichat.xyz/showthread.php?t=1474044)

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/attachmen...a9bb3ff1eb.png

3) Подтверждаем почту.

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


https://forum.antichat.xyz/attachmen...f2ac4efade.png

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

https://forum.antichat.xyz/attachmen...cdfe5c7dc2.png

6) Ждем загрузку консоли и вставляем в нее эти 2 команды:

terminal:





Код:

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



7) Ждем пока загрузятся библиотеки и переходим во вкладку "Files"

https://forum.antichat.xyz/attachmen...2998178f4b.png

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

https://forum.antichat.xyz/attachmen...4b621bc1c1.png

9) После создания у нас откроется редактор кода. Вставляем код, который был выше, сюда, и нажимаем "Save" получится вот так:

https://forum.antichat.xyz/attachmen...33bafcf914.png
10) Теперь меняем значения на 6 и 8 строке на свои.

11) И вуа-ля! Еще раз нажимаем "Save" и потом "Run this file". И бот должен заработать.


Буду благодарен если умельцы будут дополнять\оптимизировать код.

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

xionerme 13.04.2023 14:44

ну пачиму не 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'
)


AYP 13.04.2023 15:36

Цитата:

Сообщение от xionerme

ну пачиму не 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 припас для другого 😉

TastyBread123 13.04.2023 18:32

Цитата:

Сообщение от AYP

aiogram припас для другого 😉

Аиограм основа для всего +- крупного на питоне)

riverya4life 14.04.2023 00:29

На aiogram лучше всего

хомяк553 14.04.2023 06:43

Сделай на gpt-3.5-turbo

MaximRazrab 27.07.2024 21:00

можно не на openai?


Время: 11:34