This commit is contained in:
tmddn3070 2023-12-05 23:35:48 +09:00
parent de8f12a4b0
commit efdf6f0f24
5 changed files with 46 additions and 18 deletions

View File

@ -23,7 +23,7 @@ class Event(Cog):
@Cog.listener() @Cog.listener()
async def on_application_command_error(self, ctx: ApplicationContext, exception: DiscordException) -> None: async def on_application_command_error(self, ctx: ApplicationContext, exception: DiscordException) -> None:
if isinstance(exception, CommandOnCooldown): 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: else:
print(exception) print(exception)
@Cog.listener() @Cog.listener()
@ -44,9 +44,9 @@ class Event(Cog):
@Cog.listener() @Cog.listener()
async def on_guild_join(self, guild: Guild) -> None: async def on_guild_join(self, guild: Guild) -> None:
if guild.system_channel is not 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: 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() @Cog.listener()
async def on_guild_update(self, before: Guild, after: Guild) -> None: async def on_guild_update(self, before: Guild, after: Guild) -> None:

View File

@ -8,8 +8,9 @@ import aiohttp
import asyncio import asyncio
from aiogoogletrans import Translator from aiogoogletrans import Translator
from typing import Any, Dict 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() translator = Translator()
weight = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.7, 0.8, 0.9] 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] cfg = [6, 7, 8, 9, 10, 11]
@ -20,10 +21,22 @@ def is_korean(string):
match = pattern.search(string) match = pattern.search(string)
return bool(match) return bool(match)
async def process_prompt(prompt: str, remove: str, res: list, isnsfw: bool, style1: float, style2: float, afterprocess: float): async def process_prompt(prompt: str, remove: str, res: list, isnsfw: bool, style1: float, style2: float, afterprocess: float, avatar):
# prompt에 "남자"가 들어있거나 remove에 "여자"가 들어있으면 man = True 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 man = False
if "남자" in prompt or "여자" in remove: if "남자" in prompt and "여자" in remove:
man = True man = True
if is_korean(prompt): if is_korean(prompt):
prompt = await translator.translate(prompt, dest="en") 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)" prompt = prompt + "," + "(1boy)"
negative_prompt = negative_prompt + "," + "(1girl)" negative_prompt = negative_prompt + "," + "(1girl)"
add_prompt = random.choice([True, False]) add_prompt = random.choice([True, False])
#if add_prompt == True: if add_prompt == True:
prompt = prompt + f"<lora:canistermix1.1:{random.choice(weight)}>" prompt = prompt + f"<lora:canistermix1.1:{random.choice(weight)}>"
if tags != None:
prompt = prompt + "," + tags
payloads = { payloads = {
"prompt": prompt, "prompt": prompt,
"negative_prompt": negative_prompt, "negative_prompt": negative_prompt,
@ -96,7 +111,7 @@ async def base64_to_image(base642) -> File:
async def get_gpuserver_status(url) -> Dict: async def get_gpuserver_status(url) -> Dict:
async with aiohttp.ClientSession() as session: async with aiohttp.ClientSession() as session:
try: 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: if response.status == 200:
result = await response.json() result = await response.json()

View File

@ -7,7 +7,7 @@ from discord.types.embed import EmbedType
from datetime import datetime from datetime import datetime
from korcen import korcen from korcen import korcen
from Christmas.Module import get_gpuserver_status
start_time = datetime.now() start_time = datetime.now()
class ChristmasEmbed(Embed): class ChristmasEmbed(Embed):
@ -37,6 +37,7 @@ class Default_Embed:
def default_join_embed(): def default_join_embed():
embed = ChristmasEmbed(title="🎉 크돌이를 추가해주셔서 감사해요!", description="봇을 사용하기 전에 이 서버의 관리자라면 다음의 절차를 따라주세요!") embed = ChristmasEmbed(title="🎉 크돌이를 추가해주셔서 감사해요!", description="봇을 사용하기 전에 이 서버의 관리자라면 다음의 절차를 따라주세요!")
embed.add_field(name="1. 약관 동의", value="다음의 약관을 읽고 ``/서버 가입``명령어를 실행해주세요", inline=False) 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="2. 설정", value="``/설정`` 명령어를 통해 크돌이의 여러 기능을 설정할수 있어요!", inline=False)
embed.add_field(name="3. 도움말", value="``/도움말`` 명령어를 통해 크돌이의 명령어를 확인할 수 있어요!", inline=False) embed.add_field(name="3. 도움말", value="``/도움말`` 명령어를 통해 크돌이의 명령어를 확인할 수 있어요!", inline=False)
embed.set_footer() embed.set_footer()
@ -76,7 +77,7 @@ class Default_Embed:
embed.add_field(name="``/봇정보``", value="크돌이의 정보를 확인해요!", inline=False) 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="``/그림 생성``: 크돌이가 그림을 그려줘요!\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() embed.set_footer()
return embed return embed
@ -89,7 +90,7 @@ class Default_Embed:
gpuserver: [system_memory_usage,cuda_memory_usage,oom_count] gpuserver: [system_memory_usage,cuda_memory_usage,oom_count]
""" """
embed = Embed(title="**봇 정보**", description="크돌이의 정보에요!") 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 = psutil.virtual_memory().used
orin = orin / 1024 / 1024 / 1024 orin = orin / 1024 / 1024 / 1024
if gpuserver == None or gpuserver["status"] == "offline": if gpuserver == None or gpuserver["status"] == "offline":

View File

@ -1,3 +1,4 @@
import re
from discord import InputTextStyle, Interaction, Member from discord import InputTextStyle, Interaction, Member
from discord.ui import Modal, InputText from discord.ui import Modal, InputText
@ -82,8 +83,20 @@ class Aiart(Modal):
if i in prompt: if i in prompt:
prompt = prompt.replace(i, "") prompt = prompt.replace(i, "")
await interaction.response.send_message(embed=Aiart_Embed.generating(), ephemeral=self.show) 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 #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() config = ChristmasConfig()
result = await post_gpu_server(f"{config.AI}/sdapi/v1/txt2img", payload) result = await post_gpu_server(f"{config.AI}/sdapi/v1/txt2img", payload)
if result["status"] != True: if result["status"] != True:

View File

@ -1,5 +1,4 @@
import os import os
import mafic
from types import SimpleNamespace from types import SimpleNamespace
from typing import Any, cast from typing import Any, cast
@ -13,14 +12,14 @@ class Christmas(AutoShardedBot):
def __init__(self, *args: Any, **kwargs: Any): def __init__(self, *args: Any, **kwargs: Any):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.config = ChristmasConfig() 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: def run(self, *args: Any, **kwargs: Any) -> None:
kwargs.update({"token": self.config.TOKEN}) kwargs.update({"token": self.config.TOKEN})
super().run(*args, **kwargs) super().run(*args, **kwargs)
def load_cogs(bot) -> None: def load_cogs(bot: AutoShardedBot) -> None:
for filename in os.listdir("Christmas/Cogs"): for filename in os.listdir("Christmas/Cogs"):
if filename.endswith(".py"): if filename.endswith(".py"):
bot.load_extension(f"Christmas.Cogs.{filename[:-3]}") bot.load_extension(f"Christmas.Cogs.{filename[:-3]}")