 |

13.04.2023, 13:56
|
|
Новичок
Регистрация: 18.10.2022
Сообщений: 8
С нами:
1881060
Репутация:
3
|
|
Суть скрипта: ничего необычного и сложного, обычный скрипт на 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
(
)
Буду благодарен если умельцы будут дополнять\оптимизировать код.
По возможности буду обновлять скрипт, хотя обновлять тут нечего и не зачем, а код с "мусорными" функциями можно найти и на гите.
|
|
|

13.04.2023, 14:44
|
|
Постоянный
Регистрация: 25.02.2021
Сообщений: 745
С нами:
2744398
Репутация:
68
|
|
ну пачиму не 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'
)
|
|
|

13.04.2023, 15:36
|
|
Новичок
Регистрация: 18.10.2022
Сообщений: 8
С нами:
1881060
Репутация:
3
|
|
Сообщение от 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 припас для другого 😉
|
|
|

13.04.2023, 18:32
|
|
Постоянный
Регистрация: 05.11.2021
Сообщений: 634
С нами:
2380746
Репутация:
68
|
|
Сообщение от AYP
aiogram припас для другого 😉
Аиограм основа для всего +- крупного на питоне)
|
|
|

14.04.2023, 00:29
|
|
Постоянный
Регистрация: 06.11.2021
Сообщений: 397
С нами:
2378594
Репутация:
48
|
|
На aiogram лучше всего
|
|
|

14.04.2023, 06:43
|
|
Участник форума
Регистрация: 03.09.2022
Сообщений: 225
С нами:
1945476
Репутация:
48
|
|
Сделай на gpt-3.5-turbo
|
|
|

27.07.2024, 21:00
|
|
Новичок
Регистрация: 03.07.2024
Сообщений: 17
С нами:
982653
Репутация:
3
|
|
можно не на openai?
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|