mirror of
https://github.com/TriM-Organization/Musicreater.git
synced 2025-09-05 11:56:23 +00:00
增强多语言支持
This commit is contained in:
Binary file not shown.
@ -21,7 +21,7 @@ def makeZip(sourceDir, outFilename,compression = 8,exceptFile = None):
|
||||
for parent, dirnames, filenames in os.walk(sourceDir):
|
||||
for filename in filenames:
|
||||
if filename == exceptFile:
|
||||
continue;
|
||||
continue
|
||||
print(filename)
|
||||
pathfile = os.path.join(parent, filename)
|
||||
arcname = pathfile[pre_len:].strip(os.path.sep) #相对路径
|
||||
@ -43,51 +43,51 @@ class report():
|
||||
''':param senderName 发送者名称
|
||||
:param senderContact 发送者联系方式
|
||||
:param describetion 问题描述'''
|
||||
self.senderName = senderName;
|
||||
self.senderContact = senderContact;
|
||||
self.describetion = describetion;
|
||||
self.senderName = senderName
|
||||
self.senderContact = senderContact
|
||||
self.describetion = describetion
|
||||
if not self.senderName :
|
||||
self.senderName = 'Unknown';
|
||||
self.senderName = 'Unknown'
|
||||
if not self.senderContact :
|
||||
self.senderContact = 'None';
|
||||
self.senderContact = 'None'
|
||||
|
||||
|
||||
|
||||
def emailReport(self):
|
||||
'''使用E-mail方法发送当前的日志和临时文件等'''
|
||||
import smtplib
|
||||
from email.mime.text import MIMEText;
|
||||
from email.mime.multipart import MIMEMultipart;
|
||||
from email.header import Header;
|
||||
from email.mime.text import MIMEText
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from email.header import Header
|
||||
from nmcsup.log import log
|
||||
log("发送错误报告")
|
||||
import os;
|
||||
import os
|
||||
log("添加标题与正文")
|
||||
msg = MIMEMultipart();
|
||||
msg = MIMEMultipart()
|
||||
#发送者与接收者显示名称
|
||||
msg["From"] = Header(self.senderName,'utf-8');
|
||||
msg["To"] = Header("W-YI (QQ2647547478)",'utf-8');
|
||||
msg["From"] = Header(self.senderName,'utf-8')
|
||||
msg["To"] = Header("W-YI (QQ2647547478)",'utf-8')
|
||||
#标题
|
||||
msg["Subject"] = '音·创 - 来自 '+self.senderName+' 的错误报告';
|
||||
msg["Subject"] = '音·创 - 来自 '+self.senderName+' 的错误报告'
|
||||
#正文
|
||||
msg.attach(MIMEText("来自"+self.senderName+"( "+self.senderContact+" )的错误描述:\n"+self.describetion,'plain','utf-8'));
|
||||
msg.attach(MIMEText("来自"+self.senderName+"( "+self.senderContact+" )的错误描述:\n"+self.describetion,'plain','utf-8'))
|
||||
log("添加完毕,正在生成压缩包...")
|
||||
makeZip("./","Temps&Logs.zip",exceptFile="Temps&Logs.zip");
|
||||
attafile=MIMEText(open("Temps&Logs.zip",'rb').read(),"base64",'gb2312');
|
||||
attafile["Content-Type"] = 'application/octet-stream';
|
||||
attafile["Content-Disposition"] = 'attachment;filename="BugReport_from_'+self.senderName+'.zip"';
|
||||
msg.attach(attafile);
|
||||
makeZip("./","Temps&Logs.zip",exceptFile="Temps&Logs.zip")
|
||||
attafile=MIMEText(open("Temps&Logs.zip",'rb').read(),"base64",'gb2312')
|
||||
attafile["Content-Type"] = 'application/octet-stream'
|
||||
attafile["Content-Disposition"] = 'attachmentfilename="BugReport_from_'+self.senderName+'.zip"'
|
||||
msg.attach(attafile)
|
||||
log("完毕,准备发送")
|
||||
try:
|
||||
smtp = smtplib.SMTP()
|
||||
smtp.connect("smtp.163.com");
|
||||
#smtp.login("RyounDevTeam@163.com","RyounDaiYi99");
|
||||
smtp.connect("smtp.163.com")
|
||||
#smtp.login("RyounDevTeam@163.com","RyounDaiYi99")
|
||||
#SIQQKQQYCZRVIDFJ是授权密码
|
||||
smtp.login("RyounDevTeam@163.com","SIQQKQQYCZRVIDFJ");
|
||||
smtp.login("RyounDevTeam@163.com","SIQQKQQYCZRVIDFJ")
|
||||
smtp.sendmail("RyounDevTeam@163.com",["RyounDevTeam@163.com",],msg.as_string())
|
||||
log("错误汇报邮件已发送")
|
||||
except smtplib.SMTPException as e:
|
||||
log("错误汇报邮件发送失败:\n"+str(e));
|
||||
log("错误汇报邮件发送失败:\n"+str(e))
|
||||
log("清空内存和临时文件")
|
||||
del msg,attafile
|
||||
os.remove("./Temps&Logs.zip")
|
||||
@ -102,7 +102,7 @@ class version:
|
||||
libraries = ('mido','amulet','amulet-core','amulet-nbt','piano_transcription_inference','pypinyin','pyinstaller','py7zr','websockets','torch')
|
||||
'''当前所需库,有一些是开发用的,用户不需要安装'''
|
||||
|
||||
version = ('0.0.0','Delta',)
|
||||
version = ('0.0.1','Delta',)
|
||||
'''当前版本'''
|
||||
|
||||
def __init__(self) -> None:
|
||||
@ -122,12 +122,13 @@ class version:
|
||||
try:
|
||||
shutil.rmtree(os.getenv('APPDATA')+'\\Musicreater\\')
|
||||
except:
|
||||
pass;
|
||||
pass
|
||||
for i in self.libraries:
|
||||
print("安装库:"+i)
|
||||
os.system("python -m pip install "+i+" -i https://pypi.tuna.tsinghua.edu.cn/simple")
|
||||
elif platform == 'linux':
|
||||
os.system("sudo apt-get install python3-pip")
|
||||
os.system("sudo apt-get install python3-tk")
|
||||
os.system("sudo apt-get install python3-tkinter")
|
||||
for i in self.libraries:
|
||||
print("安装库:"+i)
|
||||
|
@ -12,21 +12,21 @@ def delPart(Data,starter,ender,includeStart :bool= True,includend :bool= True):
|
||||
starter与ender若为None则默认从首或尾开始'''
|
||||
try:
|
||||
if starter == None:
|
||||
includeStart = True;
|
||||
starter = Data[0];
|
||||
includeStart = True
|
||||
starter = Data[0]
|
||||
if ender == None:
|
||||
includend = True;
|
||||
ender = Data[len(Data)-1];
|
||||
includend = True
|
||||
ender = Data[len(Data)-1]
|
||||
if includend:
|
||||
if includeStart:
|
||||
return Data[Data.index(starter):len(Data)-Data[len(Data)::-1].index(ender)];
|
||||
return Data[Data.index(starter):len(Data)-Data[len(Data)::-1].index(ender)]
|
||||
else:
|
||||
return Data[Data.index(starter)+1:len(Data)-Data[len(Data)::-1].index(ender)];
|
||||
return Data[Data.index(starter)+1:len(Data)-Data[len(Data)::-1].index(ender)]
|
||||
else:
|
||||
if includeStart:
|
||||
return Data[Data.index(starter):len(Data)-Data[len(Data)::-1].index(ender)-1];
|
||||
return Data[Data.index(starter):len(Data)-Data[len(Data)::-1].index(ender)-1]
|
||||
else:
|
||||
return Data[Data.index(starter)+1:len(Data)-Data[len(Data)::-1].index(ender)-1];
|
||||
return Data[Data.index(starter)+1:len(Data)-Data[len(Data)::-1].index(ender)-1]
|
||||
except:
|
||||
return 0
|
||||
|
||||
@ -37,21 +37,21 @@ def keepart(Data,starter,ender,includeStart :bool= True,includend :bool= True):
|
||||
starter与ender若为None则默认从首或尾开始'''
|
||||
try:
|
||||
if starter == None:
|
||||
includeStart = True;
|
||||
starter = Data[0];
|
||||
includeStart = True
|
||||
starter = Data[0]
|
||||
if ender == None:
|
||||
includend = True;
|
||||
ender = Data[len(Data)-1];
|
||||
includend = True
|
||||
ender = Data[len(Data)-1]
|
||||
if includend:
|
||||
if includeStart:
|
||||
return Data[Data.index(starter):Data.index(ender)+1];
|
||||
return Data[Data.index(starter):Data.index(ender)+1]
|
||||
else:
|
||||
return Data[Data.index(starter)+1:Data.index(ender)+1];
|
||||
return Data[Data.index(starter)+1:Data.index(ender)+1]
|
||||
else:
|
||||
if includeStart:
|
||||
return Data[Data.index(starter):Data.index(ender)];
|
||||
return Data[Data.index(starter):Data.index(ender)]
|
||||
else:
|
||||
return Data[Data.index(starter)+1:Data.index(ender)];
|
||||
return Data[Data.index(starter)+1:Data.index(ender)]
|
||||
except:
|
||||
return 0
|
||||
|
||||
@ -66,13 +66,13 @@ def keepart(Data,starter,ender,includeStart :bool= True,includend :bool= True):
|
||||
def lenFunction(fun) -> int:
|
||||
'''取得函数指令部分长度,即忽略#开头的注释'''
|
||||
try:
|
||||
l = 0;
|
||||
l = 0
|
||||
for i in fun:
|
||||
if i.replace(" ",'')[0] == '#':
|
||||
l += 1;
|
||||
return len(fun)-l;
|
||||
l += 1
|
||||
return len(fun)-l
|
||||
except:
|
||||
return -1;
|
||||
return -1
|
||||
|
||||
|
||||
|
||||
@ -82,21 +82,21 @@ def funSplit(bigFile,maxCmdLen : int = 10000 ):
|
||||
返回-1为大小低于maxCmdLen最长函数指令长度'''
|
||||
bigFile = bigFile.readlines()
|
||||
if lenFunction(bigFile) < maxCmdLen:
|
||||
return -1;
|
||||
part = [];
|
||||
parts = [];
|
||||
l = 0;
|
||||
return -1
|
||||
part = []
|
||||
parts = []
|
||||
l = 0
|
||||
for i in bigFile:
|
||||
if i.replace(" ",'')[0] == '#':
|
||||
part.append(i+'\n');
|
||||
part.append(i+'\n')
|
||||
else:
|
||||
part.append(i+'\n');
|
||||
l += 1;
|
||||
part.append(i+'\n')
|
||||
l += 1
|
||||
if l >= 10000:
|
||||
parts.append(part)
|
||||
part = [];
|
||||
l = 0;
|
||||
return parts;
|
||||
part = []
|
||||
l = 0
|
||||
return parts
|
||||
|
||||
|
||||
|
||||
|
@ -13,7 +13,7 @@ def hans2pinyin(hans,style=3):
|
||||
result = lazy_pinyin(hans=hans,style=style)
|
||||
final = ''
|
||||
for i in result:
|
||||
final += i;
|
||||
final += i
|
||||
return final
|
||||
|
||||
|
||||
@ -83,7 +83,7 @@ def note2bdx(filePath:str,dire:list,Notes : list,ScoreboardName:str,Instrument:s
|
||||
i = 0
|
||||
down = False
|
||||
blocks = [formCmdBlock(dire,cdl.pop(0),1,1)]
|
||||
dire[1]+=1;
|
||||
dire[1]+=1
|
||||
for j in cdl:
|
||||
if dire[1]+i > height:
|
||||
dire[0]+=1
|
||||
@ -124,12 +124,12 @@ def note2webs(Notes : list,Instrument:str, speed:float = 5.0, PlayerSelect:str='
|
||||
await fcwslib.tellraw(websocket, '已连接服务器——音·创'+VER[1]+VER[0]+' 作者:金羿(W-YI)')
|
||||
if isProsess:
|
||||
length = len(Notes)
|
||||
j = 1;
|
||||
j = 1
|
||||
for i in range(len(Notes)):
|
||||
await fcwslib.send_command(websocket,'execute @a'+PlayerSelect+' ~ ~ ~ playsound '+Instrument+' @s ~ ~ ~ 1000 '+str(Notes[i][0])+' 1000')
|
||||
if isProsess:
|
||||
fcwslib.send_command(websocket,'execute @a'+PlayerSelect+' ~ ~ ~ title @s actionbar §e▶ 播放中: §a'+str(j)+'/'+str(length)+' || '+str(int(j/length*1000)/10))
|
||||
j+=1;
|
||||
j+=1
|
||||
time.sleep(Notes[i][1]/speed)
|
||||
|
||||
fcwslib.run_server(run_server)
|
||||
@ -170,19 +170,19 @@ def note2RSworld(world:str,startpos:list,notes:list,instrument:str,speed:float =
|
||||
:param note: 0~24
|
||||
:return Block()'''
|
||||
if powered:
|
||||
powered = 'true';
|
||||
powered = 'true'
|
||||
else:
|
||||
powered = 'false';
|
||||
powered = 'false'
|
||||
return Block('universal_minecraft','noteblock',{"instrument":ts(instrument.replace("note.",'')),'note':ts(str(note)),'powered':ts(powered)})
|
||||
|
||||
def formRepeater(delay:int,facing:str,locked:bool=False,powered:bool=False):
|
||||
'''生成中继器方块
|
||||
:param delay: 1~4
|
||||
:return Block()'''
|
||||
if powered:powered = 'true';
|
||||
else:powered = 'false';
|
||||
if locked:locked = 'true';
|
||||
else:locked = 'false';
|
||||
if powered:powered = 'true'
|
||||
else:powered = 'false'
|
||||
if locked:locked = 'true'
|
||||
else:locked = 'false'
|
||||
return Block('universal_minecraft','repeater',{"delay":ts(str(delay)),'facing':ts(facing),'locked':ts(locked),'powered':ts(powered)})
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user