diff --git a/Christmas/Cogs/Event.py b/Christmas/Cogs/Event.py index 35e9f25..7ac2cf9 100644 --- a/Christmas/Cogs/Event.py +++ b/Christmas/Cogs/Event.py @@ -23,7 +23,7 @@ class Event(Cog): @Cog.listener() async def on_application_command_error(self, ctx: ApplicationContext, exception: DiscordException) -> None: if isinstance(exception, CommandOnCooldown): - await ctx.respond(embed=Default_Embed.cooldown(exception.retry_after), ephemeral=True) + await ctx.respond(Default_Embed.cooldown(exception.retry_after), ephemeral=True) else: print(exception) @Cog.listener() @@ -44,9 +44,9 @@ class Event(Cog): @Cog.listener() async def on_guild_join(self, guild: Guild) -> None: if guild.system_channel is not None: - await guild.system_channel.send(embed=Default_Embed.guild_join()) + await guild.system_channel.send(embed=Default_Embed.default_join_embed()) else: - await random.choice(guild.text_channels).send(embed=Default_Embed.guild_join()) + await random.choice(guild.text_channels).send(embed=Default_Embed.default_join_embed()) @Cog.listener() async def on_guild_update(self, before: Guild, after: Guild) -> None: diff --git a/Christmas/Module.py b/Christmas/Module.py index 15c6290..1d07212 100644 --- a/Christmas/Module.py +++ b/Christmas/Module.py @@ -8,8 +8,9 @@ import aiohttp import asyncio from aiogoogletrans import Translator from typing import Any, Dict -from discord import File - +from discord import File, Asset +from Christmas.Tagging import Tagging +from Christmas.Cogs.Event import model 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] @@ -20,10 +21,22 @@ def is_korean(string): 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): - # prompt에 "남자"가 들어있거나 remove에 "여자"가 들어있으면 man = True +async def process_prompt(prompt: str, remove: str, res: list, isnsfw: bool, style1: float, style2: float, afterprocess: float, avatar): + tags = None + if not avatar == None: + # gif인 경우 png로 변환 + try: + if avatar.url.endswith(".gif"): + avatar = avatar.replace(format="png") + avatar = await avatar.read() + # TypeError: a bytes-like object is required, not 'PngImageFile' + taging = Tagging(model=model) + tags = await taging.predict(avatar) + tags = tags[0] + except Exception as e: + tags = None man = False - if "남자" in prompt or "여자" in remove: + if "남자" in prompt and "여자" in remove: man = True if is_korean(prompt): prompt = await translator.translate(prompt, dest="en") @@ -42,8 +55,10 @@ async def process_prompt(prompt: str, remove: str, res: list, isnsfw: bool, styl prompt = prompt + "," + "(1boy)" negative_prompt = negative_prompt + "," + "(1girl)" add_prompt = random.choice([True, False]) - #if add_prompt == True: - prompt = prompt + f"" + if add_prompt == True: + prompt = prompt + f"" + if tags != None: + prompt = prompt + "," + tags payloads = { "prompt": prompt, "negative_prompt": negative_prompt, @@ -96,7 +111,7 @@ async def base64_to_image(base642) -> File: async def get_gpuserver_status(url) -> Dict: async with aiohttp.ClientSession() as session: try: - async with session.get(f"{url}/sdapi/v1/memory", timeout=10) as response: + async with session.get(f"http://172.30.1.49:7860/sdapi/v1/memory", timeout=10) as response: if response.status == 200: result = await response.json() diff --git a/Christmas/UI/Embed.py b/Christmas/UI/Embed.py index add5ea6..90b2113 100644 --- a/Christmas/UI/Embed.py +++ b/Christmas/UI/Embed.py @@ -7,7 +7,7 @@ from discord.types.embed import EmbedType from datetime import datetime from korcen import korcen -from Christmas.Module import get_gpuserver_status + start_time = datetime.now() class ChristmasEmbed(Embed): @@ -37,6 +37,7 @@ class Default_Embed: def default_join_embed(): embed = ChristmasEmbed(title="🎉 크돌이를 추가해주셔서 감사해요!", description="봇을 사용하기 전에 이 서버의 관리자라면 다음의 절차를 따라주세요!") embed.add_field(name="1. 약관 동의", value="다음의 약관을 읽고 ``/서버 가입``명령어를 실행해주세요", inline=False) + embed.add_field(name="1.1 약관", value="크돌이는 음악 재생과 명령어 전송을 위해 사용자가 쓴 커맨드를 확인할수 있어요, 또한 그림생성은 어떤 결과물이 나오든 크돌이는 책임지지 않아요!") embed.add_field(name="2. 설정", value="``/설정`` 명령어를 통해 크돌이의 여러 기능을 설정할수 있어요!", inline=False) embed.add_field(name="3. 도움말", value="``/도움말`` 명령어를 통해 크돌이의 명령어를 확인할 수 있어요!", inline=False) embed.set_footer() @@ -76,7 +77,7 @@ class Default_Embed: embed.add_field(name="``/봇정보``", value="크돌이의 정보를 확인해요!", inline=False) embed.add_field(name="**편지**", value="``/편지 보내기 (유저)``: 유저에게 편지를 보내요!\n``/편지 확인``: 받은 편지를 확인해요!", inline=False) embed.add_field(name="**그림**", value="``/그림 생성``: 크돌이가 그림을 그려줘요!\n``/그림 분석``: 그림을 분석해요!", inline=False) - embed.add_field(name="**음악**", value="``/음악 재생``: 크돌이가 음악을(LOFI) 재생해요!\n``/음악 정지``: 크돌이가 음악을 정지해요!\n``음악 설정 (설정이름) (값)``: 음악 설정을 변경해요!", inline=False) + embed.add_field(name="**음악**", value="``/음악 재생``: 크돌이가 음악을(LOFI) 재생해요!\n``/음악 정지``: 크돌이가 음악을 정지해요!\n``/음악 설정 (설정이름) (값)``: 음악 설정을 변경해요!", inline=False) embed.set_footer() return embed @@ -89,7 +90,7 @@ class Default_Embed: gpuserver: [system_memory_usage,cuda_memory_usage,oom_count] """ embed = Embed(title="**봇 정보**", description="크돌이의 정보에요!") - embed.add_field(name="**봇 개요**", value=f"봇 ID: {bot.user.id}\n봇 버전: 1.0.0\n가동시간: {str(uptime)}\n개발자: RunaLab(tmddn3070)", inline=False) + embed.add_field(name="**봇 개요**", value=f"봇 ID: {bot.user.id}\n봇 버전: 1.1.0\n가동시간: {str(uptime)}\n개발자: RunaLab(tmddn3070,Flag_Fan,Pma,Gunu,i3l3,Non)", inline=False) orin = psutil.virtual_memory().used orin = orin / 1024 / 1024 / 1024 if gpuserver == None or gpuserver["status"] == "offline": diff --git a/Christmas/UI/Modal.py b/Christmas/UI/Modal.py index efc6d53..3bed122 100644 --- a/Christmas/UI/Modal.py +++ b/Christmas/UI/Modal.py @@ -1,3 +1,4 @@ +import re from discord import InputTextStyle, Interaction, Member from discord.ui import Modal, InputText @@ -82,8 +83,20 @@ class Aiart(Modal): if i in prompt: prompt = prompt.replace(i, "") await interaction.response.send_message(embed=Aiart_Embed.generating(), ephemeral=self.show) + 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() #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) + print(avatars) + payload = await process_prompt(prompt, remove, self.res, self.allownsfw, self.style1, self.style2, self.afterprocess, avatars) config = ChristmasConfig() result = await post_gpu_server(f"{config.AI}/sdapi/v1/txt2img", payload) if result["status"] != True: diff --git a/Christmas/discord.py b/Christmas/discord.py index 1f81a16..878ee10 100644 --- a/Christmas/discord.py +++ b/Christmas/discord.py @@ -1,5 +1,4 @@ import os -import mafic from types import SimpleNamespace from typing import Any, cast @@ -13,14 +12,14 @@ class Christmas(AutoShardedBot): def __init__(self, *args: Any, **kwargs: Any): super().__init__(*args, **kwargs) self.config = ChristmasConfig() - self.debug_guilds = [1090621667778244638,1015236495910649926,957142859629342790,1125370139165081612,1170310470503247993] + #self.debug_guilds = [1090621667778244638,1015236495910649926,957142859629342790,1125370139165081612,1170310470503247993] def run(self, *args: Any, **kwargs: Any) -> None: kwargs.update({"token": self.config.TOKEN}) super().run(*args, **kwargs) -def load_cogs(bot) -> None: +def load_cogs(bot: AutoShardedBot) -> None: for filename in os.listdir("Christmas/Cogs"): if filename.endswith(".py"): bot.load_extension(f"Christmas.Cogs.{filename[:-3]}")