Novetat: ara pot generar imatges
This commit is contained in:
pare
f7040a7993
commit
e65290a78d
S'han modificat 2 arxius amb 94 adicions i 35 eliminacions
110
mastobot.py
110
mastobot.py
|
@ -4,6 +4,9 @@ from mastodon import Mastodon
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
import sys
|
import sys
|
||||||
|
import os
|
||||||
|
import requests
|
||||||
|
import base64
|
||||||
import pdb
|
import pdb
|
||||||
|
|
||||||
def cleanhtml(raw_html):
|
def cleanhtml(raw_html):
|
||||||
|
@ -102,37 +105,94 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
if reply == True:
|
if reply == True:
|
||||||
|
|
||||||
answer = xat.completions(prompt=query_word)
|
prompt = query_word
|
||||||
|
|
||||||
answer = answer.choices[0]['text']
|
if prompt[:7] == 'imatge:':
|
||||||
|
|
||||||
if 'com.example.demo.controller' not in answer:
|
try:
|
||||||
|
|
||||||
post_text = f'@{username} {answer}'
|
imatge = xat.create_image(prompt=prompt[7:])
|
||||||
|
|
||||||
if len(post_text) > 500:
|
if not 'error' in imatge:
|
||||||
|
|
||||||
len_post1 = 500 - len(username) - 4
|
with open("images/imatge.png", "wb") as fh:
|
||||||
|
fh.write(base64.b64decode(imatge['data'][0]['b64_json']))
|
||||||
|
|
||||||
post_text1 = post_text[:len_post1] + '... '
|
post_text = f'@{username} {prompt[8:]}'
|
||||||
|
|
||||||
post_text2 = f'@{username} ...{post_text[len_post1:]}'
|
image_id = mastodon.media_post('images/imatge.png', "image/png", description=prompt[8:]).id
|
||||||
|
|
||||||
if len(post_text2) > 500:
|
mastodon.status_post(post_text, in_reply_to_id=status_id, media_ids={image_id}, visibility=visibility)
|
||||||
|
|
||||||
len_post2 = 500 - len(username) - 8
|
else:
|
||||||
|
|
||||||
post_text2 = f'{post_text2[:len_post2]}...'
|
post_text = f'@{username} {prompt[8:]}'
|
||||||
|
|
||||||
post_text3 = f'@{username} ...{post_text2[len_post2:]}'
|
post_text += f"\n\n{imatge['error']['message']}"
|
||||||
|
|
||||||
try:
|
mastodon.status_post(post_text, in_reply_to_id=status_id, visibility=visibility)
|
||||||
|
|
||||||
|
except:
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
post_text = f'@{username} {prompt[8:]}\n\n{imatge}'
|
||||||
|
|
||||||
|
mastodon.status_post(post_text, in_reply_to_id=status_id, visibility=visibility)
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
answer = xat.completions(prompt=prompt)
|
||||||
|
|
||||||
|
answer = answer.choices[0]['text']
|
||||||
|
|
||||||
|
if 'com.example.demo.controller' not in answer:
|
||||||
|
|
||||||
|
post_text = f'@{username} {answer}'
|
||||||
|
|
||||||
|
if len(post_text) > 500:
|
||||||
|
|
||||||
|
len_post1 = 500 - len(username) - 4
|
||||||
|
|
||||||
|
post_text1 = post_text[:len_post1] + '... '
|
||||||
|
|
||||||
|
post_text2 = f'@{username} ...{post_text[len_post1:]}'
|
||||||
|
|
||||||
|
if len(post_text2) > 500:
|
||||||
|
|
||||||
|
len_post2 = 500 - len(username) - 8
|
||||||
|
|
||||||
|
post_text2 = f'{post_text2[:len_post2]}...'
|
||||||
|
|
||||||
|
post_text3 = f'@{username} ...{post_text2[len_post2:]}'
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
post_id = mastodon.status_post(post_text1, in_reply_to_id=status_id,visibility=visibility).id
|
||||||
|
|
||||||
|
post_id = mastodon.status_post(post_text2, in_reply_to_id=post_id,visibility=visibility).id
|
||||||
|
|
||||||
|
mastodon.status_post(post_text3, in_reply_to_id=post_id,visibility=visibility)
|
||||||
|
|
||||||
|
except:
|
||||||
|
|
||||||
|
print(f'Notification {notification_id} dissmised')
|
||||||
|
|
||||||
|
mastodon.notifications_dismiss(notification_id)
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
post_id = mastodon.status_post(post_text1, in_reply_to_id=status_id,visibility=visibility).id
|
post_id = mastodon.status_post(post_text1, in_reply_to_id=status_id,visibility=visibility).id
|
||||||
|
|
||||||
post_id = mastodon.status_post(post_text2, in_reply_to_id=post_id,visibility=visibility).id
|
mastodon.status_post(post_text2, in_reply_to_id=post_id,visibility=visibility)
|
||||||
|
|
||||||
mastodon.status_post(post_text3, in_reply_to_id=post_id,visibility=visibility)
|
else:
|
||||||
|
|
||||||
|
try:
|
||||||
|
|
||||||
|
mastodon.status_post(post_text, in_reply_to_id=status_id,visibility=visibility)
|
||||||
|
|
||||||
except:
|
except:
|
||||||
|
|
||||||
|
@ -142,26 +202,6 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
else:
|
|
||||||
|
|
||||||
post_id = mastodon.status_post(post_text1, in_reply_to_id=status_id,visibility=visibility).id
|
|
||||||
|
|
||||||
mastodon.status_post(post_text2, in_reply_to_id=post_id,visibility=visibility)
|
|
||||||
|
|
||||||
else:
|
|
||||||
|
|
||||||
try:
|
|
||||||
|
|
||||||
mastodon.status_post(post_text, in_reply_to_id=status_id,visibility=visibility)
|
|
||||||
|
|
||||||
except:
|
|
||||||
|
|
||||||
print(f'Notification {notification_id} dissmised')
|
|
||||||
|
|
||||||
mastodon.notifications_dismiss(notification_id)
|
|
||||||
|
|
||||||
pass
|
|
||||||
|
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
|
|
||||||
print(f'Notification {notification_id} replied')
|
print(f'Notification {notification_id} replied')
|
||||||
|
|
19
xatapi.py
19
xatapi.py
|
@ -86,6 +86,23 @@ class Xat:
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
def create_image(self, model=None, prompt=None):
|
||||||
|
|
||||||
|
data = {
|
||||||
|
'prompt': prompt,
|
||||||
|
'n': 1,
|
||||||
|
'size': "512x512",
|
||||||
|
'response_format': "b64_json"
|
||||||
|
}
|
||||||
|
|
||||||
|
endpoint = f'{self.api_base_url}/v1/images/generations'
|
||||||
|
|
||||||
|
response = self.__api_request('POST', endpoint, data)
|
||||||
|
|
||||||
|
response = self.__json_allow_dict_attrs(response.json())
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def __check_setup(self):
|
def __check_setup(self):
|
||||||
|
|
||||||
|
@ -165,6 +182,8 @@ class Xat:
|
||||||
# this is for compatibility with older versions
|
# this is for compatibility with older versions
|
||||||
# which raised OpenaiAPIError('Endpoint not found.')
|
# which raised OpenaiAPIError('Endpoint not found.')
|
||||||
# on any 404
|
# on any 404
|
||||||
|
elif response.status_code == 400:
|
||||||
|
return response
|
||||||
elif response.status_code == 401:
|
elif response.status_code == 401:
|
||||||
ex_type = OpenaiUnauthorizedError
|
ex_type = OpenaiUnauthorizedError
|
||||||
elif response.status_code == 422:
|
elif response.status_code == 422:
|
||||||
|
|
Loading…
Referencia en una nova incidència