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
2023-12-02 10:42:36 +00:00
from discord import Embed , Colour , Embed , Member , Guild
2023-11-25 17:28:48 +00:00
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-05 14:35:48 +00:00
2023-12-02 06:03:50 +00:00
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 )
2023-12-05 14:35:48 +00:00
embed . add_field ( name = " 1.1 약관 " , value = " 크돌이는 음악 재생과 명령어 전송을 위해 사용자가 쓴 커맨드를 확인할수 있어요, 또한 그림생성은 어떤 결과물이 나오든 크돌이는 책임지지 않아요! " )
2023-11-26 04:27:34 +00:00
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-12-03 10:06:21 +00:00
@staticmethod
def help ( ) :
embed = ChristmasEmbed ( title = " 🎉 크돌이 도움말 " , description = " 크리스마스를 즐겨보세요! " )
embed . add_field ( name = " ``/도움말`` " , value = " 크돌이의 도움말을 확인해요! " , inline = False )
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 )
2023-12-05 14:35:48 +00:00
embed . add_field ( name = " **음악** " , value = " ``/음악 재생``: 크돌이가 음악을(LOFI) 재생해요! \n ``/음악 정지``: 크돌이가 음악을 정지해요! \n ``/음악 설정 (설정이름) (값)``: 음악 설정을 변경해요! " , inline = False )
2023-12-03 10:06:21 +00:00
embed . set_footer ( )
return embed
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 = " 크돌이의 정보에요! " )
2023-12-05 14:35:48 +00:00
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 )
2023-12-02 06:03:50 +00:00
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
2023-12-02 10:42:36 +00:00
@staticmethod
def music_play ( ) :
embed = ChristmasEmbed ( title = " ✅ 재생 시작! " , description = " LOFI 재생을 시작했어요! " )
embed . set_footer ( )
return embed
@staticmethod
def music_stop ( ) :
embed = ChristmasEmbed ( title = " ✅ 재생 정지! " , description = " LOFI 재생을 정지했어요! " )
embed . set_footer ( )
return embed
@staticmethod
def changed_christmas ( ) :
embed = ChristmasEmbed ( title = " ✅ 크리스마스 모드 변경! " , description = " 크리스마스 모드를 변경했어요! 이 시간부터 25일 11시 59분까지 크리스마스 모드가 적용되요! " )
embed . set_footer ( )
return embed
2023-12-03 10:06:21 +00:00
@staticmethod
def music_setting ( value : bool , settings : str ) :
embed = ChristmasEmbed ( title = " ✅ 음악 설정 변경! " , description = " 음악 설정을 변경했어요! " )
if settings == " music " :
if value == True :
embed . add_field ( name = " 안내 " , value = " 이제 이 서버에서 음악을 재생할수 있어요! " , inline = False )
else :
embed . add_field ( name = " 안내 " , value = " 이제 이 서버에서 음악을 재생할수 없어요! " , inline = False )
elif settings == " admin_run " :
if value == False :
embed . add_field ( name = " 안내 " , value = " 이제 이 서버에서 관리자를 제외한 사람들도 음악을 재생할수 있어요! " , inline = False )
else :
embed . add_field ( name = " 안내 " , value = " 이제 이 서버에서 관리자를 제외한 사람은 음악을 재생할수 없어요! " , inline = False )
embed . set_footer ( )
return embed
2023-12-02 10:42:36 +00:00
class Arcade_Embed :
@staticmethod
def register_inital ( ) :
embed = ChristmasEmbed ( title = " 🎉 눈싸움 등록! " , description = " 눈싸움 등록을 시작해요! " )
embed . add_field ( name = " 안내 " , value = " 크돌이의 눈싸움은 서버대 서버로 경쟁하며 그 안의 유저들이 서로 협동하여 이뤄지는 게임이에요! \n 1.눈싸움은 매일 항상 열려있어요! \n 2.눈싸움은 시즌당 1달로 구성되있어요! \n 3.시즌은 1주일 간격으로 준비-싸움-준비-싸움으로 구성되있어요! \n 4.이 과정에서 절대로 봇을 이용한 싸움은 허락되지 않아요! \n 5.눈싸움의 규정을 위반할경우 통보없이 눈싸움에서 제외될수 있어요! " , inline = False )
embed . add_field ( name = " 약관 " , value = " 다음의 약관을 읽고 동의한다면 `동의`버튼을 눌러주세요. " , inline = False )
embed . set_footer ( )
return embed
@staticmethod
def register_sucessfull ( ) :
embed = ChristmasEmbed ( title = " 🎉 눈싸움 등록 성공! " , description = " 눈싸움 등록을 성공했어요! " )
embed . add_field ( name = " 안내 " , value = " 이제 이 서버에서 눈싸움을 즐겨보세요! " , inline = False )
embed . add_field ( name = " 안내 " , value = " 초기금으로 ``10000 눈덩이``가 지급되었어요! " )
embed . set_footer ( )
return embed
@staticmethod
def register_already ( ) :
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
@staticmethod
def register_cancel ( ) :
embed = ChristmasEmbed ( title = " ❌ 눈싸움 등록 실패! " , description = " 눈싸움 등록에 실패했어요! " )
embed . add_field ( name = " 안내 " , value = " 눈싸움 등록을 취소했어요! " , inline = False )
embed . set_footer ( )
return embed
@staticmethod
def static_info ( guild : Guild , region : str ) :
region_dict = {
" south " : " 남쪽 " ,
" north " : " 북쪽 "
}
region = region_dict [ region ]
embed = ChristmasEmbed ( title = " 🎉 눈싸움 정보! " , description = f " { guild . name } 서버의 눈싸움 정보에요! " )
embed . add_field ( name = " 진영 " , value = f " { region } " , inline = False )
embed . add_field ( name = " 상대진영 " , value = f " { region } " , inline = False )
2023-12-03 10:06:21 +00:00