增强多语言支持

This commit is contained in:
2022-01-15 00:40:17 +08:00
parent ce441e4905
commit 32ae868c34
18 changed files with 601 additions and 1842 deletions

View File

@ -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)

View File

@ -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

View File

@ -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)})