Add edit mode functionality to Mail_Confirm_Button

and implement mail checking feature
This commit is contained in:
tmddn3070 2023-11-27 00:27:32 +09:00
parent 3ec23b9525
commit 3605311570
8 changed files with 416 additions and 32 deletions

View File

@ -1,6 +1,8 @@
from discord import ApplicationContext, DiscordException from discord import ApplicationContext, DiscordException, SlashCommandGroup, Option, Member, File, Attachment, Color, utils, User, Message, TextChannel, Forbidden, HTTPException
from discord.ext.commands import Cog from discord.ext.commands import Cog, BucketType, cooldown
from Christmas.Database import database
from Christmas.UI.Embed import Aiart_Embed, ChristmasEmbed
from Christmas.UI.Modal import Aiart
class CAiart(Cog): class CAiart(Cog):
@ -8,10 +10,30 @@ class CAiart(Cog):
self.bot = bot self.bot = bot
ART = SlashCommandGroup("그림", "그림 기능")
@ART.command(name="생성", description="루나가 그림을 그려줍니다.")
@cooldown(1, 10, BucketType.user)
async def _생성(self, ctx, ress: Option(str, name="해상도",description="그림의 해상도를 입력해주세요. (기본값: 512x512)", required=False, choices=["1:1", "2:3", "7:4","3:4"], default="1:1"),
shows: Option(str, name="보기여부",description="생성된 그림을 나를 제외한 사람한테 보여줄지 말지를 지정합니다.", choices=["보여주기","보여주지 말기"],required=False, default="보여주기"),
style1: Option(float, name="디테일표현",description="그림의 디테일정도를 지정합니다. -1에 가까울수록 단순한 그림이 나오고 1에 가까울수록 높은 디테일을 구현 합니다.", required=False, min_value=-1,max_value=1, default=0),
style2: Option(float, name="광선표현", description="그림의 광선 디테일 정도를 지정합니다. 0.8에 가까울수록 더 부드럽고 좋은 광선표현을 하지만 그림의 디테일이 떨어지거나 캐릭터일 경우 손이 제대로 생성되지 않을수 있습니다.", required=False, min_value=0,max_value=0.8, default=0),
afterprocess: Option(float, name="후처리정도", description="그림의 후처리 정도를 정합니다. 0.99에 가까울수록 후처리랑 강하게 합니다", required=False, min_value=0,max_value=0.99, default=0.5)
):
if not await database.get_guild(ctx.guild.id): return await ctx.respond(embed=ChristmasEmbed(title="❌ 에러!", description="서버가 가입되어있지 않아요! 서버를 가입해주세요!", color=Color.red()),ephemeral=True)
nsfw = False
afterprocess = 1 - afterprocess
if ctx.channel.is_nsfw(): nsfw = True
if shows == "보여주기": shows = True
else: shows = False
if ress == "1:1": resoultion = [512,512]
elif ress == "2:3": resoultion = [512,768]
elif ress == "7:4": resoultion = [896,512]
elif ress == "3:4": resoultion = [600,800]
# allownsfw: bool, res: list, style1: float, style2: float, afterprocess: float
modal = Aiart(title="태그를 입력해주세요",allownsfw=nsfw, res=resoultion, style1=style1, style2=style2, afterprocess=afterprocess, show=shows)
await ctx.send_modal(modal)
@Cog.listener()
async def on_application_command_error(ctx: ApplicationContext, exception: DiscordException) -> None:
pass

View File

@ -1,8 +1,12 @@
import pendulum
from discord import Member, SlashCommandGroup, Option from discord import Member, SlashCommandGroup, Option
from discord.ext.commands import Cog, cooldown, BucketType, command, has_permissions, bot_has_permissions, Context, guild_only, bot_has_guild_permissions, check from discord.ext.commands import Cog, cooldown, BucketType, command, has_permissions, bot_has_permissions, Context, guild_only, bot_has_guild_permissions, check
from Christmas.UI.Modal import Send_Mail_Modal from Christmas.UI.Modal import Send_Mail_Modal
from Christmas.UI.Embed import Mail_Embed
from Christmas.Database import database
from Christmas.UI.Paginator import Mail_Paginator
class CMail(Cog): class CMail(Cog):
def __init__(self, bot): def __init__(self, bot):
self.bot = bot self.bot = bot
@ -13,8 +17,38 @@ class CMail(Cog):
@cooldown(1, 10, BucketType.user) @cooldown(1, 10, BucketType.user)
@guild_only() @guild_only()
async def _send(self, ctx: Context, member: Option(Member, name="보낼사람", description="편지를 받을 사람을 선택해주세요.", required=True)): async def _send(self, ctx: Context, member: Option(Member, name="보낼사람", description="편지를 받을 사람을 선택해주세요.", required=True)):
modal = Send_Mail_Modal(reciveuser=member, title="편지 보내기") if pendulum.now().year >= 2023 and pendulum.now().month >= 12 and pendulum.now().day >= 24 and pendulum.now().hour >= 11 and pendulum.now().minute >= 59 and pendulum.now().second >= 59:
await ctx.respond("이미 편지를 보낼수 있는 기간이 지났어요! 받은 편지가 있다면 확인해보세요!", ephemeral=True)
return
if await database.get_mail_user(member.id, ctx.author.id):
if await database.get_instered_mail_edited(member.id, ctx.author.id):
await ctx.respond(embed=Mail_Embed.mail_cant_edit(), ephemeral=True)
return
else:
modal = Send_Mail_Modal(reciveuser=member, editmode=True, title="편지 수정하기")
await ctx.send_modal(modal)
return
modal = Send_Mail_Modal(editmode=False, reciveuser=member, title="편지 보내기")
await ctx.send_modal(modal) await ctx.send_modal(modal)
@MAIL.command(name="확인", description="받은 편지를 확인합니다.")
@cooldown(1, 10, BucketType.user)
async def _check(self, ctx: Context):
#관리자를 제외하고는 2023년 12월 25일 00시 00분 00초 이후부터 확인 가능
#if pendulum.now().year >= 2023 and pendulum.now().month >= 12 and pendulum.now().day >= 25 and pendulum.now().hour >= 00 and pendulum.now().minute >= 00 and pendulum.now().second >= 00:
# await ctx.respond("아직 편지를 확인할수 있는 기간이 아니에요! 조금만 기다려주세요!")
# return
mails = await database.get_mail(ctx.author.id)
if mails == None:
await ctx.respond(embed=Mail_Embed.mail_notfound(), ephemeral=True)
return
else:
mails = mails["mails"]
embeds = []
for data in mails:
embeds.append(Mail_Embed.mail_page(data))
print(embeds)
paginator = Mail_Paginator(embeds=embeds, senduser=ctx.author, timeout=None)
await ctx.respond(embed=embeds[0], view=paginator, ephemeral=True)
def setup(bot): def setup(bot):
bot.add_cog(CMail(bot)) bot.add_cog(CMail(bot))

View File

@ -21,20 +21,48 @@ class database:
conn = await MongoDBClient().connect() conn = await MongoDBClient().connect()
await conn.guild.insert_one({"_id": guild_id}) await conn.guild.insert_one({"_id": guild_id})
async def insert_mail(send_user_id: int, user_id: int, mail_title: str, mail_content: str): async def insert_mail(send_user_id: int, user_id: int, user_name: str, mail_title: str, mail_content: str):
try: try:
conn = await MongoDBClient().connect() conn = await MongoDBClient().connect()
mail_title = f"""{mail_title}""" mail_title = f"""{mail_title}"""
mail_content = f"""{mail_content}""" mail_content = f"""{mail_content}"""
if await conn.mail.find_one({"_id": user_id}) == None: if await conn.mail.find_one({"_id": user_id}) == None:
await conn.mail.insert_one({"_id": user_id, "mails": [{"userid": send_user_id, "title": mail_title, "content": mail_content}]}) await conn.mail.insert_one({"_id": user_id, "mails": [{"userid": send_user_id, "username": user_name, "title": mail_title, "content": mail_content, "edited": False}]})
else: else:
await conn.db.mail.update_one({"_id": user_id}, {"$push": {"mails": {"userid": send_user_id, "title": mail_title, "content": mail_content}}}) result = await conn.mail.update_one({"_id": user_id}, {"$push": {"mails": {"userid": send_user_id, "username": user_name, "title": mail_title, "content": mail_content, "edited": False}}})
print(result)
except Exception as e: except Exception as e:
print(e) print(e)
async def get_mail(user_id: int) -> dict: async def update_inserted_mail(send_user_id: int, user_id: int, mail_title: str, mail_content: str):
try:
conn = await MongoDBClient().connect() conn = await MongoDBClient().connect()
return await conn.mail.find_one({"_id": user_id}) await conn.mail.update_one({"_id": user_id, "mails.userid": send_user_id}, {"$set": {"mails.$.title": mail_title, "mails.$.content": mail_content, "mails.$.edited": True}})
return True
except Exception as e:
print(e)
return None
async def get_instered_mail_edited(send_user_id: int, user_id: int):
try:
conn = await MongoDBClient().connect()
data = await conn.mail.find_one({"_id": user_id, "mails.userid": send_user_id})
return data["mails"][0]["edited"]
except Exception as e:
print(e)
return None
async def get_mail(user_id: int):
conn = await MongoDBClient().connect()
data = await conn.mail.find_one({"_id": user_id})
if data == None: return None
return data
async def get_mail_user(one_user_id: int, two_user_id: int):
conn = await MongoDBClient().connect()
data = await conn.mail.find_one({"_id": one_user_id})
if data == None: return False
for mail in data["mails"]:
if mail["userid"] == two_user_id:
return True

View File

@ -1,7 +1,86 @@
import korcen import io
import PIL
import base64
import re
import random
import aiohttp
import asyncio
from aiogoogletrans import Translator
from typing import Any, Dict
from discord import File
korcen_checker = korcen.Korcen() translator = Translator()
weight = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.8, 0.9]
cfg = [6,7,8,9,10,11]
#def check_curse(text: str):
# return korcen_checker.check(text)
def is_korean(string):
pattern = re.compile(r"[ㄱ-ㅎㅏ-ㅣ가-힣]")
match = pattern.search(string)
return bool(match)
async def process_prompt(prompt: str, remove: str, res: list, isnsfw: bool, style1: float, style2: float, afterprocess: float):
if is_korean(prompt):
prompt = await translator.translate(prompt, dest="en")
prompt = prompt.text
if is_korean(remove):
remove = await translator.translate(remove, dest="en")
remove = remove.text
default_negative = """(KHFB, AuroraNegative, easynegative, negative_hand-neg, verybadimagenegative_v1.3:0.8), (Worst Quality, Low Quality:1.4), border, skimpy, grayscale, multiple_girls, 3d, realistic, string, multiple hands, chinese, thick abs, chubby abs, lowres, bad anatomy, asymmetric wings, elf, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, large areolae, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, Multiple legs, multiple feet, tie, (necktie:1.5), several hands, three feet, four legs, three legs,animal ears"""
if style1 != 0:
prompt = prompt + f"<lora:addDetail:{style1}>"
if style2 != 0:
prompt = prompt + f"<lora:光影:{style2}>"
if remove != None:
negative_prompt = default_negative + "," + remove
add_prompt = random.choice([True, False])
if add_prompt == True:
qprompt = prompt + f"<lora:canistermix1.1:{random.choice(weight)}>"
payloads = {
"prompt": prompt,
"negative_prompt": negative_prompt,
"seed": random.randint(0, 1000000000),
"steps": 25,
"cfg_scale": random.choice(cfg),
"width": res[0],
"height": res[1],
"sampler_index": "DPM++ 2M Karras",
"refiner_checkpoint": "smooREFINERV2R10_half",
"refiner_switch_at": afterprocess,
"alwayson_scripts": {
"ADetailer": {
'args': [
{
'ad_model': 'face_yolov8n.pt',
'ad_inpaint_only_masked': True
}]
}}}
return payloads
def check_curse(text: str): async def post_gpu_server(url: str, payload: Dict[str, Any]):
return korcen_checker.check(text) async with aiohttp.ClientSession() as session:
try:
async with session.post(url, json=payload, timeout=300) as response:
if response.status == 200:
return {"status": True, "data": await response.json()}
else:
return {"status": False, "data": None}
except Exception as e:
if isinstance(e, asyncio.TimeoutError):
return {"status": False, "data": None}
async def image_to_base64(image) -> str:
img = PIL.Image.open(image)
img = img.convert("RGB")
img_byte_arr = io.BytesIO()
img.save(img_byte_arr, format='PNG')
img_byte_arr = img_byte_arr.getvalue()
img_str = base64.b64encode(img_byte_arr).decode("utf-8")
return img_str
async def base64_to_image(base642) -> File:
attachment = File(io.BytesIO(base64.b64decode(base642)), filename="image.png")
return attachment

View File

@ -5,7 +5,8 @@ from Christmas.UI.Embed import Mail_Embed
from Christmas.Database import database from Christmas.Database import database
class Mail_Confirm_Button(View): class Mail_Confirm_Button(View):
def __init__(self, recive_user: Member, title: str, description: str, *args, **kwargs): def __init__(self, editmode: bool, recive_user: Member, title: str, description: str, *args, **kwargs):
self.editmode = editmode
self.recive_user = recive_user self.recive_user = recive_user
self.title = title self.title = title
self.description = description self.description = description
@ -18,7 +19,11 @@ class Mail_Confirm_Button(View):
await interaction.edit_original_response(embed=Embed(title="❌ 에러!", description="서버가 가입되어있지 않아요! 서버에 가입해주세요!"), view=None) await interaction.edit_original_response(embed=Embed(title="❌ 에러!", description="서버가 가입되어있지 않아요! 서버에 가입해주세요!"), view=None)
return return
else: else:
await database.insert_mail(interaction.user.id, self.recive_user.id, self.title, self.description) if self.editmode == True:
await database.update_inserted_mail(self.recive_user.id, interaction.user.id, self.title, self.description)
await interaction.edit_original_response(embed=Mail_Embed.mail_edit_sended(receive_user=self.recive_user), view=None)
else:
await database.insert_mail(interaction.user.id, self.recive_user.id, interaction.user.name, self.title, self.description)
await interaction.edit_original_response(embed=Mail_Embed.mail_sended(receive_user=self.recive_user), view=None) await interaction.edit_original_response(embed=Mail_Embed.mail_sended(receive_user=self.recive_user), view=None)
@button(label="취소", style=ButtonStyle.red, custom_id="mail_cancel") @button(label="취소", style=ButtonStyle.red, custom_id="mail_cancel")

View File

@ -2,6 +2,7 @@ from typing import Any, Optional
from discord import Embed, Colour, Embed, Member from discord import Embed, Colour, Embed, Member
from discord.types.embed import EmbedType from discord.types.embed import EmbedType
from datetime import datetime from datetime import datetime
from korcen import korcen
class ChristmasEmbed(Embed): class ChristmasEmbed(Embed):
def __init__(self, *, def __init__(self, *,
@ -21,8 +22,8 @@ class ChristmasEmbed(Embed):
timestamp=timestamp, timestamp=timestamp,
) )
def set_footer(self, *, text: Any | None = "크돌이", icon_url: Any | None = "https://discord.com/assets/6dbfff5aae6b1de2b83f.svg") -> None: def set_footer(self, *, text: Any | None = "크돌이", icon_url: Any | None = "https://discord.com/assets/6dbfff5aae6b1de2b83f.svg") -> None:
super().set_footer(text=text, icon_url=icon_url) super().set_footer(text=text)
class Default_Embed: class Default_Embed:
@ -56,7 +57,7 @@ class Mail_Embed:
@staticmethod @staticmethod
def mail_confirm(title: str, description: str, receive_user: Member) -> Embed: def mail_confirm(title: str, description: str, receive_user: Member) -> Embed:
embed = ChristmasEmbed(title="⚠️ 전송전 확인", description="편지를 정말로 전송하시겠습니까?") embed = ChristmasEmbed(title="⚠️ 전송전 확인", description="편지를 정말로 전송하시겠습니까?")
embed.add_field(name="⚠️ 주의사항 ⚠️", value="편지는 한 번 전송하면 취소할 수 없어요!\n 내용을 잘 읽고 ``전송``버튼을 눌러주세요!", inline=False) embed.add_field(name="⚠️ 주의사항 ⚠️", value="편지는 한 번 전송하면 한번의 수정 기회 이후에는 취소할 수 없어요!\n 내용을 잘 읽고 ``전송``버튼을 눌러주세요!", inline=False)
embed.add_field(name="받는이", value=f"{receive_user.mention}", inline=False) embed.add_field(name="받는이", value=f"{receive_user.mention}", inline=False)
embed.add_field(name="제목", value=title, inline=False) embed.add_field(name="제목", value=title, inline=False)
embed.add_field(name="내용", value=description, inline=False) embed.add_field(name="내용", value=description, inline=False)
@ -64,10 +65,88 @@ class Mail_Embed:
return embed return embed
@staticmethod @staticmethod
def mail_sended(receive_user: Member) -> Embed: def mail_confirm_edit(title: str, description: str, receive_user: Member) -> Embed:
embed = ChristmasEmbed(title="✅ 전송완료!", description="편지 전송을 완료했어요!") embed = ChristmasEmbed(title="⚠️ 수정전 확인", description="편지를 정말로 수정하시겠습니까?")
embed.add_field(name="안내", value="보낸 편지는 2023년 12월 25일부터 열람 가능해요", inline=False) embed.add_field(name="⚠️ 주의사항 ⚠️", value="이번에 편지를 수정하면 다시는 수정할 수 없게 되요!\n 내용을 잘 읽고 ``전송``버튼을 눌러주세요!", inline=False)
embed.add_field(name="받는이", value=f"{receive_user.mention}", inline=False) embed.add_field(name="받는이", value=f"{receive_user.mention}", inline=False)
embed.add_field(name="제목", value=title, inline=False)
embed.add_field(name="내용", value=description, inline=False)
embed.set_footer()
return embed
@staticmethod
def mail_cant_edit():
embed = ChristmasEmbed(title="❌ 편지 수정 실패!", description="편지 수정에 실패했어요!")
embed.add_field(name="안내", value="편지는 한 번 전송하면 한번의 수정 기회 이후에는 취소할 수 없어요!", inline=False)
embed.set_footer()
return embed return embed
@staticmethod
def mail_sended(receive_user: Member) -> Embed:
embed = ChristmasEmbed(title="✅ 전송완료!", description="편지 전송을 완료했어요!")
embed.add_field(name="안내", value="보낸 편지는 2023년 12월 25일부터 열람 가능해요!", inline=False)
embed.add_field(name="받는이", value=f"{receive_user.mention}", inline=False)
return embed
@staticmethod
def mail_edit_sended(receive_user: Member) -> Embed:
embed = ChristmasEmbed(title="✅ 수정완료!", description="편지 수정을 완료했어요!")
embed.add_field(name="안내", value="수정된 편지는 2023년 12월 25일부터 열람 가능해요!", inline=False)
embed.add_field(name="받는이", value=f"{receive_user.mention}", inline=False)
return embed
@staticmethod
def mail_notfound() -> Embed:
embed = ChristmasEmbed(title="❌ 편지 없음!", description="편지가 없어요!")
embed.add_field(name="안내", value="받은 편지가 없어요!", inline=False)
embed.set_footer()
return embed
@staticmethod
def mail_already_sended() -> Embed:
embed = ChristmasEmbed(title="❌ 편지 전송 실패!", description="이미 편지를 보냈어요!")
embed.add_field(name="안내", value="이미 편지를 보냈어요!", inline=False)
embed.set_footer()
return embed
@staticmethod
def mail_page(data) -> Embed:
embed = ChristmasEmbed(title="📨 편지", description="편지를 확인해보세요!(욕설등 민감한 내용이 포함된 내용은 자동으로 스포일러처리되요!)")
username = data["username"]
userid = data["userid"]
title = data["title"]
description = data["content"]
if korcen.check(title) == True:
title = "||" + title + "||"
if korcen.check(description) == True:
description = "||" + description + "||"
embed.add_field(name="보낸이", value=f"{username}({userid})", inline=False)
embed.add_field(name="제목", value=title, inline=False)
embed.add_field(name="내용", value=description, inline=False)
embed.set_footer()
return embed
class Aiart_Embed:
@staticmethod
def failed_generate() -> Embed:
embed = ChristmasEmbed(title="❌ 그림 생성 실패!", description="그림 생성에 실패했어요!")
embed.add_field(name="안내", value="그림 생성에 실패했어요! 이 현상이 지속된다면 서비스 서버에 문의해주세요!", inline=False)
embed.set_footer()
return embed
@staticmethod
def sucess_generate(prompt: str, remove: str) -> Embed:
embed = ChristmasEmbed(title="✅ 그림 생성 성공!", description="그림 생성에 성공했어요!")
embed.add_field(name="프롬포트", value=prompt, inline=False)
embed.add_field(name="지운 프롬포트", value=remove, inline=False)
embed.set_image(url="attachment://image.png")
embed.set_footer()
return embed
@staticmethod
def generating() -> Embed:
embed = ChristmasEmbed(title="그림 생성중...", description="그림을 생성하는 중이에요!")
embed.add_field(name="안내", value="그림 생성에는 최대 2분이 소요될 수 있어요!(크돌이는 돈이 없어요...)", inline=False)
embed.set_footer()
return embed

View File

@ -3,11 +3,43 @@ from discord.ui import Modal, InputText
#from Christmas.Module import check_curse #from Christmas.Module import check_curse
from Christmas.UI.Embed import Mail_Embed from Christmas.UI.Embed import Mail_Embed, Aiart_Embed
from Christmas.UI.Buttons import Mail_Confirm_Button from Christmas.UI.Buttons import Mail_Confirm_Button
from Christmas.Module import process_prompt, post_gpu_server, base64_to_image
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"
]
class Send_Mail_Modal(Modal): class Send_Mail_Modal(Modal):
def __init__(self, reciveuser: Member, *args, **kwargs): def __init__(self, reciveuser: Member, editmode: bool, *args, **kwargs):
self.reciveuser = reciveuser self.reciveuser = reciveuser
self.editmode = editmode
super().__init__(timeout=None, *args, **kwargs) super().__init__(timeout=None, *args, **kwargs)
self.add_item(InputText(label="제목", placeholder="제목을 입력해주세요.", style=InputTextStyle.short, required=True, custom_id="mail_title")) self.add_item(InputText(label="제목", placeholder="제목을 입력해주세요.", style=InputTextStyle.short, required=True, custom_id="mail_title"))
@ -15,5 +47,48 @@ class Send_Mail_Modal(Modal):
async def callback(self, interaction: Interaction): async def callback(self, interaction: Interaction):
await interaction.response.send_message(embed=Mail_Embed.mail_confirm(self.children[0].value, self.children[1].value, self.reciveuser), view=Mail_Confirm_Button(self.reciveuser, title=self.children[0].value, description=self.children[1].value),ephemeral=True) 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
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)
#prompt: str, remove: str, res: list, isnsfw: bool, style1: float, style2: float, afterprocess: float
payload = await process_prompt(prompt, remove, self.res, self.allownsfw, self.style1, self.style2, self.afterprocess)
result = await post_gpu_server("http://172.30.1.49:7860/sdapi/v1/txt2img", payload)
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)

62
Christmas/UI/Paginator.py Normal file
View File

@ -0,0 +1,62 @@
from functools import cached_property
from typing import Any, Dict, List, Union
from discord.ui import button
from discord.enums import ButtonStyle
from discord.interactions import Interaction
from discord.ui import Button, View
from Christmas.UI.Embed import ChristmasEmbed
class Mail_Paginator(View):
def __init__(
self,
senduser: int,
embeds: list[ChristmasEmbed],
timeout: int = 180,
):
super().__init__(timeout=timeout)
self.embeds = embeds
self.index = 0
self.senduser = senduser
self.selected = False
@cached_property
def total(self) -> int:
return len(self.embeds)
async def interaction_check(self, interaction: Interaction) -> bool:
if user := interaction.user:
if user.id == self.senduser.id:
return True
await interaction.response.send_message(
"명령어 실행자만 상호작용이 가능합니다.", ephemeral=True
)
return False
@button(label="이전", style=ButtonStyle.primary, emoji="")
async def prev(self, button, interaction: Interaction) -> None:
self.index -= 1
if self.index < 0:
self.index = self.total - 1
await interaction.response.edit_message(embed=self.embeds[self.index])
@button(label="다음", style=ButtonStyle.primary, emoji="▶️")
async def next(self, button, interaction: Interaction) -> None:
self.index += 1
if self.index >= self.total:
self.index = 0
await interaction.response.edit_message(embed=self.embeds[self.index])
@button(label="닫기", style=ButtonStyle.danger, emoji="✖️")
async def close(self, button, interaction: Interaction) -> None:
await interaction.response.defer()
self.stop()