runabot/Christmas/UI/Embed.py

245 lines
12 KiB
Python
Raw Normal View History

2023-12-02 06:03:50 +00:00
import wavelink
import typing
import psutil
2023-11-25 17:28:48 +00:00
from typing import Any, Optional
from discord import Embed, Colour, Embed, Member
from discord.types.embed import EmbedType
from datetime import datetime
from korcen import korcen
2023-11-25 17:28:48 +00:00
2023-12-02 06:03:50 +00:00
from Christmas.Module import get_gpuserver_status
start_time = datetime.now()
2023-11-25 17:28:48 +00:00
class ChristmasEmbed(Embed):
def __init__(self, *,
color: int | Colour | None = 0xf4f9ff,
title: Any | None = None,
type: EmbedType = "rich",
url: Any | None = None,
description: Any | None = None,
timestamp: datetime | None = None,
):
super().__init__(
color=color,
title=title,
type=type,
url=url,
description=description,
timestamp=timestamp,
)
def set_footer(self, *, text: Any | None = "크돌이⛄", icon_url: Any | None = "https://discord.com/assets/6dbfff5aae6b1de2b83f.svg") -> None:
super().set_footer(text=text)
2023-11-25 17:28:48 +00:00
2023-11-26 04:27:34 +00:00
class Default_Embed:
@staticmethod
def default_join_embed():
embed = ChristmasEmbed(title="🎉 크돌이를 추가해주셔서 감사해요!", description="봇을 사용하기 전에 이 서버의 관리자라면 다음의 절차를 따라주세요!")
embed.add_field(name="1. 약관 동의", value="다음의 약관을 읽고 ``/서버 가입``명령어를 실행해주세요", inline=False)
embed.add_field(name="2. 설정", value="``/설정`` 명령어를 통해 크돌이의 여러 기능을 설정할수 있어요!", inline=False)
embed.add_field(name="3. 도움말", value="``/도움말`` 명령어를 통해 크돌이의 명령어를 확인할 수 있어요!", inline=False)
embed.set_footer()
return embed
@staticmethod
def register_sucess():
embed = ChristmasEmbed(title="🎉 가입 성공!", description="서버가입을 성공했어요!")
embed.add_field(name="안내", value="이제 크돌이를 즐겨보세요!", inline=False)
embed.set_footer()
return embed
@staticmethod
def register_failed():
embed = ChristmasEmbed(title="❌ 가입 실패!", description="서버가입을 실패했어요!")
embed.add_field(name="안내", value="알수없는 오류로 인해 가입에 실패했어요! 이 현상이 지속된다면 서비스 서버에 문의해주세요!", inline=False)
embed.set_footer()
return embed
2023-12-02 06:03:50 +00:00
@staticmethod
def already_register():
embed = ChristmasEmbed(title="❌ 가입 실패!", description="이미 가입된 서버에요!")
embed.add_field(name="안내", value="이미 가입된 서버에요!", inline=False)
embed.set_footer()
return embed
@staticmethod
def cooldown(sec):
return "이 명령어는 " + str(sec) + "초 뒤에 다시 사용할 수 있어요!"
2023-11-25 17:28:48 +00:00
2023-12-02 06:03:50 +00:00
@staticmethod
def BotInfo(gpuserver: typing.Dict[str, typing.Any], bot, APIlatency) -> Embed:
current_time = datetime.now()
uptime = current_time - start_time
uptime = str(uptime).split(".")[0]
"""
gpuserver: [system_memory_usage,cuda_memory_usage,oom_count]
"""
embed = Embed(title="**봇 정보**", description="크돌이의 정보에요!")
embed.add_field(name="**봇 개요**", value=f"봇 ID: {bot.user.id}\n봇 버전: 0.0.9\n가동시간: {str(uptime)}", inline=False)
orin = psutil.virtual_memory().used
orin = orin / 1024 / 1024 / 1024
if gpuserver == None or gpuserver["status"] == "offline":
embed.add_field(name="**봇 자원**", value=f"GPU서버1 메모리 사용량: **오류**\nGPU서버1 CUDA 메모리 사용량: **오류**\nGPU서버1 메모리 오류 횟수: **오류**\n 현재 샤드 메모리 사용량:{round(orin)}GB", inline=False)
else:
mem_usage = gpuserver["system_memory_usage"]
cuda_memory_usage = gpuserver["cuda_memory_usage"]
oom_count = gpuserver["oom_count"]
embed.add_field(name="**봇 자원**", value=f"현재 샤드 메모리 사용량: {round(orin)}GB\n\nGPU서버1 메모리 사용량: {mem_usage}GB/128GB\nGPU서버1 GPU 메모리 사용량: {cuda_memory_usage}GB/80GB\nGPU서버1 메모리 오류 횟수: {oom_count}", inline=False)
embed.add_field(name="**봇 통계**", value=f"🏘️ **{len(bot.guilds)}**개의 서버에서 봇을 사용중이에요!\n🤖 **{len(bot.users)}**명의 유저와 함께하는 중이에요!", inline=False)
if APIlatency is None:
embed.add_field(name="**봇 핑**", value=f"🏓 **디스코드 게이트웨이 핑**: {round(bot.latency * 1000)}ms\n🏓 **AI 게이트웨이 핑**: 오류", inline=False)
else:
embed.add_field(name="**봇 핑**", value=f"🏓 **디스코드 게이트웨이 핑**: {round(bot.latency * 1000)}ms\n🏓 **AI 게이트웨이 핑**: {APIlatency}ms", inline=False)
embed.set_footer()
return embed
2023-11-25 17:28:48 +00:00
class Mail_Embed:
@staticmethod
2023-11-26 04:27:34 +00:00
def mail_confirm(title: str, description: str, receive_user: Member) -> Embed:
embed = ChristmasEmbed(title="⚠️ 전송전 확인", description="편지를 정말로 전송하시겠습니까?")
embed.add_field(name="⚠️ 주의사항 ⚠️", value="편지는 한 번 전송하면 한번의 수정 기회 이후에는 취소할 수 없어요!\n 내용을 잘 읽고 ``전송``버튼을 눌러주세요!", inline=False)
2023-11-26 04:27:34 +00:00
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)
2023-11-25 17:28:48 +00:00
embed.set_footer()
return embed
@staticmethod
def mail_confirm_edit(title: str, description: str, receive_user: Member) -> Embed:
embed = ChristmasEmbed(title="⚠️ 수정전 확인", description="편지를 정말로 수정하시겠습니까?")
embed.add_field(name="⚠️ 주의사항 ⚠️", value="이번에 편지를 수정하면 다시는 수정할 수 없게 되요!\n 내용을 잘 읽고 ``전송``버튼을 눌러주세요!", 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="편지 수정에 실패했어요!")
2023-12-02 06:03:50 +00:00
embed.add_field(name="안내", value="편지는 한 번 전송하면 한번의 수정 기회 이후에는 취소하거나 수정 할 수 없어요!", inline=False)
embed.set_footer()
return embed
2023-11-25 17:28:48 +00:00
@staticmethod
def mail_sended(receive_user: Member) -> Embed:
2023-11-26 04:27:34 +00:00
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)
2023-11-26 04:27:34 +00:00
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
2023-12-02 06:03:50 +00:00
@staticmethod
def generating() -> Embed:
embed = ChristmasEmbed(title="그림 생성중...", description="그림을 생성하는 중이에요!")
embed.add_field(name="안내", value="그림 생성에는 최대 2분이 소요될 수 있어요!(크돌이는 돈이 없어요...)", inline=False)
embed.set_footer()
return embed
2023-12-02 06:03:50 +00:00
@staticmethod
def evalate(tags, rating) -> ChristmasEmbed:
if tags == None:
embed = ChristmasEmbed(name="**오류**", value="그림 분석에 실패했어요. 나중에 다시 시도해주세요", inline=False)
return embed
else:
embed = ChristmasEmbed(title="**그림 분석 완료**", description="그림 분석이 완료되었어요!")
embed.set_image(url="attachment://image.png")
embed.add_field(name="**등급**", value=f"{rating}", inline=False)
texts = ""
for tag, score in tags:
percentage = score * 100
texts = texts + f"{tag} : {percentage:.1f}%\n"
embed.add_field(name="**분석된 요소**", value=f"{texts}", inline=False)
embed.set_footer()
return embed
class Music_Embed:
@staticmethod
def music_notenable():
embed = ChristmasEmbed(title="❌ 음악 재생 실패!", description="음악 재생에 실패했어요!")
embed.add_field(name="안내", value="이 서버에서는 음악을 재생할수 없어요! \n만약 서버의 관리자라면 ``/설정`` 명령어로 음악 기능을 다시 활성화사킬수 있어요!", inline=False)
embed.set_footer()
return embed
@staticmethod
def author_not_voice():
embed = ChristmasEmbed(title="❌ 음악 재생 실패!", description="음악 재생에 실패했어요!")
embed.add_field(name="안내", value="음악을 재생하려면 음성채널에 들어가야 해요!", inline=False)
embed.set_footer()
return embed
@staticmethod
def author_diffrent_voice():
embed = ChristmasEmbed(title="❌ 음악 재생 실패!", description="음악 재생에 실패했어요!")
embed.add_field(name="안내", value="이미 다른 채널에 접속되어있어요!", inline=False)
embed.set_footer()
return embed
#@staticmethod
#def music_queue(music: wavelink.Playable):
#음악을 queue에 넣음
#embed = ChristmasEmbed(title="✅ 음악 재생 성공!", description="음악 재생에 성공했어요!")
#embed =