2023-12-05 14:35:48 +00:00
import re
2023-11-25 17:28:48 +00:00
from discord import InputTextStyle , Interaction , Member
from discord . ui import Modal , InputText
2023-11-26 04:27:34 +00:00
#from Christmas.Module import check_curse
2023-11-25 17:28:48 +00:00
2023-11-26 15:27:32 +00:00
from Christmas . UI . Embed import Mail_Embed , Aiart_Embed
2023-11-25 17:28:48 +00:00
from Christmas . UI . Buttons import Mail_Confirm_Button
2023-11-26 15:27:32 +00:00
from Christmas . Module import process_prompt , post_gpu_server , base64_to_image
2023-12-02 06:03:50 +00:00
from Christmas . config import ChristmasConfig
2023-11-26 15:27:32 +00:00
BLOCKTAG = [
" nsfw " ,
" nude " ,
" nipples " ,
" nipple " ,
" pussy " ,
" public hair " ,
" gay " ,
" lesbian " ,
" corpse " ,
" no panties " ,
" no panty " ,
" no bra " ,
" bra " ,
" panty " ,
" panties " ,
" underwear " ,
" undergarment " ,
" underpants " ,
" underpant " ,
" blowjob " ,
" sex " ,
" sexy " ,
" pennis "
" realistic " ,
" open breasts " ,
" breasts "
]
2023-11-25 17:28:48 +00:00
class Send_Mail_Modal ( Modal ) :
2023-11-26 15:27:32 +00:00
def __init__ ( self , reciveuser : Member , editmode : bool , * args , * * kwargs ) :
2023-11-25 17:28:48 +00:00
self . reciveuser = reciveuser
2023-11-26 15:27:32 +00:00
self . editmode = editmode
2023-12-02 06:03:50 +00:00
2023-11-25 17:28:48 +00:00
super ( ) . __init__ ( timeout = None , * args , * * kwargs )
2023-11-26 04:27:34 +00:00
self . add_item ( InputText ( label = " 제목 " , placeholder = " 제목을 입력해주세요. " , style = InputTextStyle . short , required = True , custom_id = " mail_title " ) )
self . add_item ( InputText ( label = " 내용 " , placeholder = " 내용을 입력해주세요. " , style = InputTextStyle . long , required = True , custom_id = " mail_content " ) )
2023-11-25 17:28:48 +00:00
async def callback ( self , interaction : Interaction ) :
2023-11-26 15:27:32 +00:00
if self . editmode == False :
await interaction . response . send_message ( embed = Mail_Embed . mail_confirm ( self . children [ 0 ] . value , self . children [ 1 ] . value , self . reciveuser ) , view = Mail_Confirm_Button ( recive_user = self . reciveuser , title = self . children [ 0 ] . value , description = self . children [ 1 ] . value , editmode = False ) , ephemeral = True )
else :
await interaction . response . send_message ( embed = Mail_Embed . mail_confirm_edit ( self . children [ 0 ] . value , self . children [ 1 ] . value , self . reciveuser ) , view = Mail_Confirm_Button ( recive_user = self . reciveuser , title = self . children [ 0 ] . value , description = self . children [ 1 ] . value , editmode = True ) , ephemeral = True )
class Aiart ( Modal ) :
def __init__ ( self , show : bool , allownsfw : bool , res : list , style1 : float , style2 : float , afterprocess : float , * args , * * kwargs ) :
self . show = show
self . allownsfw = allownsfw
self . res = res
self . style1 = style1
self . style2 = style2
2023-12-02 06:03:50 +00:00
self . config = ChristmasConfig ( )
2023-11-26 15:27:32 +00:00
self . afterprocess = afterprocess
super ( ) . __init__ ( timeout = None , * args , * * kwargs )
self . add_item ( InputText ( label = " 그람에 포함시키고 싶은 태그를 입력해주세요. " , placeholder = " 한글도 입력 가능해요! " , style = InputTextStyle . long , required = True , custom_id = " aiart_tag " ) )
self . add_item ( InputText ( label = " 그림에서 제거하고 싶은 태그를 입력해주세요. " , placeholder = " 한글도 입력 가능해요! " , style = InputTextStyle . long , required = False , custom_id = " aiart_remove_tag " ) )
async def callback ( self , interaction : Interaction ) :
prompt = self . children [ 0 ] . value
remove = self . children [ 1 ] . value
#255자까지 자름
original_prompt = prompt
original_remove = remove
if len ( prompt ) > 255 :
original_prompt = original_prompt [ : 255 ]
if len ( remove ) > 255 :
original_remove = original_remove [ : 255 ]
if self . allownsfw is False :
for i in BLOCKTAG :
if i in prompt :
prompt = prompt . replace ( i , " " )
await interaction . response . send_message ( embed = Aiart_Embed . generating ( ) , ephemeral = self . show )
2023-12-05 14:35:48 +00:00
avatars = None
if re . search ( r " \ { [0-9] {18} \ } " , prompt ) :
user_id = re . search ( r " \ { [0-9] {18} \ } " , prompt ) . group ( ) [ 1 : - 1 ]
user = await interaction . guild . fetch_member ( int ( user_id ) )
print ( user )
if user == None :
avatars = None
else :
avatars = user . avatar
print ( " OK " )
config = ChristmasConfig ( )
2023-11-26 15:27:32 +00:00
#prompt: str, remove: str, res: list, isnsfw: bool, style1: float, style2: float, afterprocess: float
2023-12-05 14:35:48 +00:00
print ( avatars )
payload = await process_prompt ( prompt , remove , self . res , self . allownsfw , self . style1 , self . style2 , self . afterprocess , avatars )
2023-12-05 13:30:58 +00:00
config = ChristmasConfig ( )
result = await post_gpu_server ( f " { config . AI } /sdapi/v1/txt2img " , payload )
2023-11-26 15:27:32 +00:00
if result [ " status " ] != True :
return await interaction . edit_original_response ( embed = Aiart_Embed . failed_generate ( ) )
else :
try :
#print(result)
attachment = await base64_to_image ( result [ " data " ] [ " images " ] [ 0 ] )
except Exception as e :
return await interaction . edit_original_response ( embed = Aiart_Embed . failed_generate ( ) )
await interaction . edit_original_response ( embed = Aiart_Embed . sucess_generate ( original_prompt , original_remove ) , file = attachment )