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
2023-11-26 15:27:32 +00:00
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 ,
)
2023-11-26 15:27:32 +00:00
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 메모리 사용량: **오류** \n GPU서버1 CUDA 메모리 사용량: **오류** \n GPU서버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 \n GPU서버1 메모리 사용량: { mem_usage } GB/128GB \n GPU서버1 GPU 메모리 사용량: { cuda_memory_usage } GB/80GB \n GPU서버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 = " 편지를 정말로 전송하시겠습니까? " )
2023-11-26 15:27:32 +00:00
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
2023-11-26 15:27:32 +00:00
@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 )
2023-11-26 15:27:32 +00:00
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 = " 편지 전송을 완료했어요! " )
2023-11-26 15:27:32 +00:00
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
2023-11-26 15:27:32 +00:00
@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
2023-11-26 15:27:32 +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 =