v6.5.1_RC3

This commit is contained in:
SuperSonic 2019-09-18 19:25:43 +08:00
parent 41b1b474c0
commit ae052f7a31
3 changed files with 49 additions and 34 deletions

View file

@ -34,6 +34,7 @@ class English:
"You are our blacklist. Bye~": "You are our blacklist. Bye~", "You are our blacklist. Bye~": "You are our blacklist. Bye~",
"You had been blocked by our database.": "You had been blocked by our database.", "You had been blocked by our database.": "You had been blocked by our database.",
"\nExtend Administrator(s)": "\nExtend Administrator(s)", "\nExtend Administrator(s)": "\nExtend Administrator(s)",
"Enable(True): 1\nDisable(False): 0": "Enable(True): 1\nDisable(False): 0",
"The one who was been kicked:": "The one who was been kicked:", "The one who was been kicked:": "The one who was been kicked:",
"Kick Limit.": "Kick Limit.", "Kick Limit.": "Kick Limit.",
"Cancel Limit.": "Cancel Limit.", "Cancel Limit.": "Cancel Limit.",

View file

@ -34,6 +34,7 @@ class Traditional_Chinese:
"You are our blacklist. Bye~": "再見了~黑名單用戶。", "You are our blacklist. Bye~": "再見了~黑名單用戶。",
"You had been blocked by our database.": "您目前已被本程序封鎖。", "You had been blocked by our database.": "您目前已被本程序封鎖。",
"\nExtend Administrator(s)": "\n延伸管理員", "\nExtend Administrator(s)": "\n延伸管理員",
"Enable(True): 1\nDisable(False): 0": "開啟(True): 1\n關閉(False): 0",
"The one who was been kicked:": "這是那個被踢的可憐孩子:", "The one who was been kicked:": "這是那個被踢的可憐孩子:",
"Kick Limit.": "踢人次數已達上限", "Kick Limit.": "踢人次數已達上限",
"Cancel Limit.": "取消次數已達上限", "Cancel Limit.": "取消次數已達上限",

View file

@ -19,7 +19,7 @@ class Yuuki_Settings:
config = { config = {
"name": "Yuuki", "name": "Yuuki",
"version": "v6.5.1_RC2", "version": "v6.5.1_RC3",
"project_url": "https://tinyurl.com/syb-yuuki", "project_url": "https://tinyurl.com/syb-yuuki",
"man_page": "https://tinyurl.com/yuuki-manual", "man_page": "https://tinyurl.com/yuuki-manual",
"privacy_page": "OpenSource - Licensed under MPL 2.0", "privacy_page": "OpenSource - Licensed under MPL 2.0",
@ -121,14 +121,16 @@ class Yuuki:
print("Star Yuuki BOT - Restart Error\n\nUnknown Platform") print("Star Yuuki BOT - Restart Error\n\nUnknown Platform")
sys.exit(0) sys.exit(0)
def sybGetGroupCreator(self, group): @staticmethod
if group.creator == None: def sybGetGroupCreator(group):
if group.creator is None:
contact = group.members[0] contact = group.members[0]
else: else:
contact = group.creator contact = group.creator
return contact return contact
def readCommandLine(self, msgs): @staticmethod
def readCommandLine(msgs):
replymsg = "" replymsg = ""
for msg in msgs: for msg in msgs:
replymsg = replymsg + " " + msg replymsg = replymsg + " " + msg
@ -175,7 +177,8 @@ class Yuuki:
self.data.updateData(self.data.getGroup(groupId), "SEGroup", group_status) self.data.updateData(self.data.getGroup(groupId), "SEGroup", group_status)
def errorReport(self): @staticmethod
def errorReport():
err1, err2, err3 = sys.exc_info() err1, err2, err3 = sys.exc_info()
traceback.print_tb(err3) traceback.print_tb(err3)
tb_info = traceback.extract_tb(err3) tb_info = traceback.extract_tb(err3)
@ -199,7 +202,8 @@ class Yuuki:
contactInfo = False contactInfo = False
return contactInfo return contactInfo
def securityForWhere(self, ncMessage): @staticmethod
def securityForWhere(ncMessage):
if ncMessage.type == OpType.NOTIFIED_UPDATE_GROUP: if ncMessage.type == OpType.NOTIFIED_UPDATE_GROUP:
return ncMessage.param1, ncMessage.param2, ncMessage.param3 return ncMessage.param1, ncMessage.param2, ncMessage.param3
elif ncMessage.type == OpType.NOTIFIED_INVITE_INTO_GROUP: elif ncMessage.type == OpType.NOTIFIED_INVITE_INTO_GROUP:
@ -232,7 +236,8 @@ class Yuuki:
self.data.updateData(self.data.getData("LimitInfo")["KickLimit"], userId, self.KickLimit) self.data.updateData(self.data.getData("LimitInfo")["KickLimit"], userId, self.KickLimit)
self.data.updateData(self.data.getData("LimitInfo")["CancelLimit"], userId, self.CancelLimit) self.data.updateData(self.data.getData("LimitInfo")["CancelLimit"], userId, self.CancelLimit)
def dictShuffle(self, dict_object, requirement=None): @staticmethod
def dictShuffle(dict_object, requirement=None):
dict_key = [key for key in dict_object] dict_key = [key for key in dict_object]
random.shuffle(dict_key) random.shuffle(dict_key)
result = {} result = {}
@ -287,7 +292,8 @@ class Yuuki:
self.sendText(groupInfo.id, _("Kick Limit.")) self.sendText(groupInfo.id, _("Kick Limit."))
return helper return helper
def sendToWho(self, ncMessage): @staticmethod
def sendToWho(ncMessage):
if ncMessage.message.toType == MIDType.USER: if ncMessage.message.toType == MIDType.USER:
return ncMessage.message.from_ return ncMessage.message.from_
elif ncMessage.message.toType == MIDType.ROOM: elif ncMessage.message.toType == MIDType.ROOM:
@ -416,16 +422,21 @@ class Yuuki:
elif ncMessage.message.toType == MIDType.ROOM: elif ncMessage.message.toType == MIDType.ROOM:
self.getClient(self.MyMID).leaveRoom(self.Seq, ncMessage.message.to) self.getClient(self.MyMID).leaveRoom(self.Seq, ncMessage.message.to)
elif ncMessage.message.contentType == ContentType.NONE: elif ncMessage.message.contentType == ContentType.NONE:
msgSep = ncMessage.message.text.split(" ") msgSep = ncMessage.message.text.split(" ")
if self.YuukiConfigs["name"] + '/Help' == ncMessage.message.text: if self.YuukiConfigs["name"] + '/Help' == ncMessage.message.text:
self.sendText(self.sendToWho(ncMessage), _("%s\n\t%s\n\nCommands Info:\n%s\n\nPrivacy:\n%s\n\nMore Information:\n%s\n\n%s") % self.sendText(self.sendToWho(ncMessage), _("%s\n\t%s\n\nCommands Info:\n%s\n\nPrivacy:\n%s\n\nMore Information:\n%s\n\n%s") %
(self.YuukiConfigs["name"], self.YuukiConfigs["version"], (self.YuukiConfigs["name"], self.YuukiConfigs["version"],
self.YuukiConfigs["man_page"], self.YuukiConfigs["privacy_page"], self.YuukiConfigs["man_page"], self.YuukiConfigs["privacy_page"],
self.YuukiConfigs["project_url"], self.YuukiConfigs["copyright"])) self.YuukiConfigs["project_url"], self.YuukiConfigs["copyright"]))
elif self.YuukiConfigs["name"] + '/Version' == ncMessage.message.text: elif self.YuukiConfigs["name"] + '/Version' == ncMessage.message.text:
self.sendText(self.sendToWho(ncMessage), self.YuukiConfigs["version"]) self.sendText(self.sendToWho(ncMessage), self.YuukiConfigs["version"])
elif self.YuukiConfigs["name"] + '/UserID' == ncMessage.message.text: elif self.YuukiConfigs["name"] + '/UserID' == ncMessage.message.text:
self.sendText(self.sendToWho(ncMessage), _("LINE System UserID:\n") + ncMessage.message.from_) self.sendText(self.sendToWho(ncMessage), _("LINE System UserID:\n") + ncMessage.message.from_)
elif self.YuukiConfigs["name"] + '/GetAllHelper' == ncMessage.message.text: elif self.YuukiConfigs["name"] + '/GetAllHelper' == ncMessage.message.text:
if ncMessage.message.toType == MIDType.GROUP: if ncMessage.message.toType == MIDType.GROUP:
GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to) GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to)
@ -433,22 +444,24 @@ class Yuuki:
if ncMessage.message.from_ in GroupPrivilege: if ncMessage.message.from_ in GroupPrivilege:
for userId in self.Connect.helper_ids: for userId in self.Connect.helper_ids:
self.sendUser(self.sendToWho(ncMessage), userId) self.sendUser(self.sendToWho(ncMessage), userId)
elif self.YuukiConfigs["name"] + '/Speed' == ncMessage.message.text: elif self.YuukiConfigs["name"] + '/Speed' == ncMessage.message.text:
Time1 = time.time() Time1 = time.time()
self.sendText(self.sendToWho(ncMessage), _("Testing...")) self.sendText(self.sendToWho(ncMessage), _("Testing..."))
Time2 = time.time() Time2 = time.time()
self.sendText(self.sendToWho(ncMessage), _("Speed:\n %s com/s") % (Time2 - Time1,)) self.sendText(self.sendToWho(ncMessage), _("Speed:\n %s com/s") % (Time2 - Time1,))
elif self.YuukiConfigs["name"] + '/SecurityMode' == msgSep[0]: elif self.YuukiConfigs["name"] + '/SecurityMode' == msgSep[0]:
if ncMessage.message.from_ in self.Admin: if ncMessage.message.from_ in self.Admin:
if len(msgSep) == 2: if len(msgSep) == 2:
try: if msgSep[1].isdigit() and 1 >= int(msgSep[1]) >= 0:
status = int(msgSep[1]) self.YuukiVariable["SecurityService"] = bool(msgSep[1])
self.YuukiVariable["SecurityService"] = bool(status) self.sendText(self.sendToWho(ncMessage), _("Okay"))
except: else:
pass self.sendText(self.sendToWho(ncMessage), _("Enable(True): 1\nDisable(False): 0"))
self.sendText(self.sendToWho(ncMessage), _("Okay"))
else: else:
self.sendText(self.sendToWho(ncMessage), str(bool(self.YuukiVariable["SecurityService"]))) self.sendText(self.sendToWho(ncMessage), str(bool(self.YuukiVariable["SecurityService"])))
elif self.YuukiConfigs["name"] + '/Switch' == msgSep[0]: elif self.YuukiConfigs["name"] + '/Switch' == msgSep[0]:
if ncMessage.message.toType == MIDType.GROUP: if ncMessage.message.toType == MIDType.GROUP:
GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to) GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to)
@ -461,26 +474,20 @@ class Yuuki:
unknown_msg = [] unknown_msg = []
unknown_msgtext = "" unknown_msgtext = ""
for code in msgSep: for code in msgSep:
try: if code.isdigit() and 3 >= int(code) >= 0:
if int(code) <= 3: status.append(int(code))
status.append(int(code)) else:
else: unknown_msg.append(code.strip())
unknown_msg.append(code.replace(" ", ""))
except:
unknown_msg.append(code.replace(" ", ""))
self.configSecurityStatus(ncMessage.message.to, status) self.configSecurityStatus(ncMessage.message.to, status)
if unknown_msg: if unknown_msg:
for count, msg in enumerate(unknown_msg): unknown_msgtext = ", ".join(unknown_msg)
if count+1 == len(unknown_msg) and count != 0:
unknown_msgtext += msg
elif count != 0:
unknown_msgtext += (msg + ", ")
if status: if status:
self.sendText(self.sendToWho(ncMessage), _("Okay")) self.sendText(self.sendToWho(ncMessage), _("Okay"))
else: else:
self.sendText(self.sendToWho(ncMessage), _("Not Found")) self.sendText(self.sendToWho(ncMessage), _("Not Found"))
if unknown_msgtext != "": if unknown_msgtext != "":
self.sendText(self.sendToWho(ncMessage), _("Notice: Unknown command line argument(s)") + "\n({})".format(unknown_msgtext)) self.sendText(self.sendToWho(ncMessage), _("Notice: Unknown command line argument(s)") + "\n({})".format(unknown_msgtext))
elif self.YuukiConfigs["name"] + '/DisableAll' == ncMessage.message.text: elif self.YuukiConfigs["name"] + '/DisableAll' == ncMessage.message.text:
if ncMessage.message.toType == MIDType.GROUP: if ncMessage.message.toType == MIDType.GROUP:
GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to) GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to)
@ -491,6 +498,7 @@ class Yuuki:
elif ncMessage.message.from_ in GroupPrivilege: elif ncMessage.message.from_ in GroupPrivilege:
self.configSecurityStatus(ncMessage.message.to, []) self.configSecurityStatus(ncMessage.message.to, [])
self.sendText(self.sendToWho(ncMessage), _("Okay")) self.sendText(self.sendToWho(ncMessage), _("Okay"))
elif self.YuukiConfigs["name"] + '/ExtAdmin' == msgSep[0]: elif self.YuukiConfigs["name"] + '/ExtAdmin' == msgSep[0]:
if ncMessage.message.toType == MIDType.GROUP: if ncMessage.message.toType == MIDType.GROUP:
GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to) GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to)
@ -528,6 +536,7 @@ class Yuuki:
self.sendText(self.sendToWho(ncMessage), status + _("\nExtend Administrator(s)")) self.sendText(self.sendToWho(ncMessage), status + _("\nExtend Administrator(s)"))
else: else:
self.sendText(self.sendToWho(ncMessage), _("Not Found")) self.sendText(self.sendToWho(ncMessage), _("Not Found"))
elif self.YuukiConfigs["name"] + '/Status' == ncMessage.message.text: elif self.YuukiConfigs["name"] + '/Status' == ncMessage.message.text:
if ncMessage.message.toType == MIDType.GROUP: if ncMessage.message.toType == MIDType.GROUP:
GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to) GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to)
@ -549,6 +558,7 @@ class Yuuki:
self.sybGetGroupCreator(GroupInfo).displayName, self.sybGetGroupCreator(GroupInfo).displayName,
) )
self.sendText(self.sendToWho(ncMessage), status) self.sendText(self.sendToWho(ncMessage), status)
elif self.YuukiConfigs["name"] + '/GroupBackup' == ncMessage.message.text: elif self.YuukiConfigs["name"] + '/GroupBackup' == ncMessage.message.text:
if ncMessage.message.toType == MIDType.GROUP: if ncMessage.message.toType == MIDType.GROUP:
GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to) GroupInfo = self.getClient(self.MyMID).getGroup(ncMessage.message.to)
@ -580,14 +590,17 @@ class Yuuki:
GroupJoined_ = self.YuukiVariable["GroupJoined"] GroupJoined_ = self.YuukiVariable["GroupJoined"]
GroupJoined_.remove(GroupInfo.id) GroupJoined_.remove(GroupInfo.id)
self.YuukiVariable["GroupJoined"] = GroupJoined_ self.YuukiVariable["GroupJoined"] = GroupJoined_
elif self.YuukiConfigs["name"] + '/Exit' == ncMessage.message.text: elif self.YuukiConfigs["name"] + '/Exit' == ncMessage.message.text:
if ncMessage.message.from_ in self.Admin: if ncMessage.message.from_ in self.Admin:
self.sendText(self.sendToWho(ncMessage), _("Exit.")) self.sendText(self.sendToWho(ncMessage), _("Exit."))
self.exit() self.exit()
elif self.YuukiConfigs["name"] + '/Com' == msgSep[0] and len(msgSep) != 1: elif self.YuukiConfigs["name"] + '/Com' == msgSep[0] and len(msgSep) != 1:
if ncMessage.message.from_ in self.Admin: if ncMessage.message.from_ in self.Admin:
ComMsg = self.readCommandLine(msgSep[1:len(msgSep)]) ComMsg = self.readCommandLine(msgSep[1:len(msgSep)])
self.sendText(self.sendToWho(ncMessage), str(eval(ComMsg))) self.sendText(self.sendToWho(ncMessage), str(eval(ComMsg)))
elif ncMessage.message.contentType == ContentType.CONTACT: elif ncMessage.message.contentType == ContentType.CONTACT:
Catched = ncMessage.message.contentMetadata["mid"] Catched = ncMessage.message.contentMetadata["mid"]
contactInfo = self.getContact(Catched) contactInfo = self.getContact(Catched)
@ -715,7 +728,7 @@ class Yuuki:
NoWorkLimit = 5 NoWorkLimit = 5
fetchNum = 50 fetchNum = 50
catchedNews = [] cacheOperations = []
ncMessage = Operation() ncMessage = Operation()
if "LastResetLimitTime" not in self.data.getData("Global"): if "LastResetLimitTime" not in self.data.getData("Global"):
@ -732,7 +745,7 @@ class Yuuki:
if NoWork >= NoWorkLimit: if NoWork >= NoWorkLimit:
NoWork = 0 NoWork = 0
for ncMessage in catchedNews: for ncMessage in cacheOperations:
if ncMessage.reqSeq != -1 and ncMessage.revision > self.revision: if ncMessage.reqSeq != -1 and ncMessage.revision > self.revision:
self.revision = ncMessage.revision self.revision = ncMessage.revision
break break
@ -740,15 +753,15 @@ class Yuuki:
self.revision = self.client.getLastOpRevision() self.revision = self.client.getLastOpRevision()
try: try:
catchedNews = self.listen.fetchOperations(self.revision, fetchNum) cacheOperations = self.listen.fetchOperations(self.revision, fetchNum)
except socket.timeout: except socket.timeout:
NoWork += 1 NoWork += 1
if catchedNews: if cacheOperations:
NoWork = 0 NoWork = 0
self.Thread_Exec(self.taskDemux, (catchedNews,)) self.Thread_Exec(self.taskDemux, (cacheOperations,))
if len(catchedNews) > 1: if len(cacheOperations) > 1:
self.revision = max(catchedNews[-1].revision, catchedNews[-2].revision) self.revision = max(cacheOperations[-1].revision, cacheOperations[-2].revision)
if self.data.Data != self.YuukiVariable["Sync"]: if self.data.Data != self.YuukiVariable["Sync"]:
self.data.Data = self.YuukiVariable["Sync"] self.data.Data = self.YuukiVariable["Sync"]
@ -763,7 +776,7 @@ class Yuuki:
except: except:
(err1, err2, err3, ErrorInfo) = self.errorReport() (err1, err2, err3, ErrorInfo) = self.errorReport()
try: try:
for ncMessage in catchedNews: for ncMessage in cacheOperations:
if ncMessage.reqSeq != -1 and ncMessage.revision > self.revision: if ncMessage.reqSeq != -1 and ncMessage.revision > self.revision:
self.revision = ncMessage.revision self.revision = ncMessage.revision
break break