Refactoring

This commit is contained in:
SuperSonic 2021-03-10 21:23:53 +08:00
parent fca26141af
commit 6a63836de0
No known key found for this signature in database
GPG key ID: E511B80256C9F20D
17 changed files with 183 additions and 183 deletions

View file

@ -6,7 +6,7 @@ This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
"""
from .config import YuukiConfig
from .config import Config
from .yuuki import Yuuki
__all__ = ['connection', 'data', 'data_mds', 'thread_control', 'Yuuki', 'YuukiConfig']
__all__ = ['connection', 'data', 'mds.py', 'thread.py', 'Yuuki', 'Config']

View file

@ -11,7 +11,7 @@ import os
import yaml
class YuukiConfig:
class Config:
"""
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

View file

@ -15,7 +15,7 @@ from thrift.transport import THttpClient
from yuuki_core.TalkService import Client, TalkException
if TYPE_CHECKING:
from .config import YuukiConfig
from .config import Config
# NC HighSpeed Library
try:
@ -24,8 +24,8 @@ except ImportError:
print("[No fast_binary using]")
class YuukiConnect:
def __init__(self, configs: YuukiConfig):
class Connect:
def __init__(self, configs: Config):
self.helper = {}

View file

@ -14,12 +14,12 @@ import time
from tornado.httpclient import HTTPClient, HTTPRequest
from yuuki_core.ttypes import OpType
from .data_mds import PythonMDS
from .thread_control import YuukiMultiprocess
from .thread_control import YuukiThread
from .mds import PythonMDS
from .thread import Multiprocess
from .thread import YuukiThread
class YuukiData:
class Data:
# Data Struct Define
Data = {}
@ -73,7 +73,7 @@ class YuukiData:
self.threading = threading
self.mds_port = mds_port
self.ThreadControl = YuukiThread()
self.MdsThreadControl = YuukiMultiprocess()
self.MdsThreadControl = Multiprocess()
self._data_initialize()
def _data_initialize(self):

View file

@ -13,20 +13,20 @@ from typing import TYPE_CHECKING
from yuuki_core.ttypes import ContentType
from ..tools import YuukiDynamicTools
from ..tools import DynamicTools
if TYPE_CHECKING:
from ..yuuki import Yuuki
class YuukiCallback:
class Callback:
def __init__(self, handler: Yuuki):
"""
Event Type:
SEND_MESSAGE(25)
"""
self.Yuuki = handler
self.YuukiDynamicTools = YuukiDynamicTools(self.Yuuki)
self.DynamicTools = DynamicTools(self.Yuuki)
def _shutdown(self, operation):
self.Yuuki.Thread_Control.add(self._shutdown_reply, (operation,))
@ -34,7 +34,7 @@ class YuukiCallback:
def _shutdown_reply(self, operation):
time.sleep(1)
self.YuukiDynamicTools.send_text(
self.DynamicTools.send_text(
operation.message.to,
self.Yuuki.get_text("Exit.")
)

View file

@ -14,24 +14,24 @@ from typing import TYPE_CHECKING
from yuuki_core.ttypes import MIDType, ContentType, OpType
from ..tools import YuukiStaticTools, YuukiDynamicTools
from ..tools import StaticTools, DynamicTools
if TYPE_CHECKING:
from ..yuuki import Yuuki
class YuukiCommand:
class Command:
def __init__(self, handler: Yuuki):
"""
Event Type:
RECEIVE_MESSAGE (26)
"""
self.Yuuki = handler
self.YuukiDynamicTools = YuukiDynamicTools(self.Yuuki)
self.DynamicTools = DynamicTools(self.Yuuki)
def _help(self, operation):
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text(
"%s\n\t%s\n\nCommands Info:\n%s\n\nPrivacy:\n%s\n\nMore Information:\n%s\n\n%s") %
(
@ -45,41 +45,41 @@ class YuukiCommand:
)
def _version(self, operation):
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.configs["version"]
)
def _user_id(self, operation):
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("LINE System UserID:\n") + operation.message.from_
)
def _get_all_helper(self, operation):
if operation.message.toType == MIDType.GROUP:
group = self.YuukiDynamicTools \
group = self.DynamicTools \
.get_client(self.Yuuki.MyMID) \
.getGroup(operation.message.to)
group_privilege = [
*self.Yuuki.Admin,
YuukiStaticTools.get_group_creator(group).mid,
StaticTools.get_group_creator(group).mid,
*self.Yuuki.data.get_group(group.id)["Ext_Admin"]
]
if operation.message.from_ in group_privilege:
for user_id in self.Yuuki.Connect.helper:
self.YuukiDynamicTools \
.send_user(YuukiStaticTools.send_to_who(operation), user_id)
self.DynamicTools \
.send_user(StaticTools.send_to_who(operation), user_id)
def _speed(self, operation):
timer_start = time.time()
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Testing...")
)
timer_end = time.time()
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Speed:\n %s com/s") % (timer_end - timer_start,)
)
@ -90,34 +90,34 @@ class YuukiCommand:
if message_separated[1].isdigit() and 1 >= int(message_separated[1]) >= 0:
self.Yuuki.data.update_data(
["Global", "SecurityService"], bool(message_separated[1]))
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Okay")
)
else:
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Enable(True): 1\nDisable(False): 0")
)
else:
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
str(bool(self.Yuuki.data.get_data(["Global", "SecurityService"])))
)
def _switch(self, operation):
if operation.message.toType == MIDType.GROUP:
group = self.YuukiDynamicTools \
group = self.DynamicTools \
.get_client(self.Yuuki.MyMID) \
.getGroup(operation.message.to)
group_privilege = [
*self.Yuuki.Admin,
YuukiStaticTools.get_group_creator(group).mid,
StaticTools.get_group_creator(group).mid,
*self.Yuuki.data.get_group(group.id)["Ext_Admin"]
]
if not self.Yuuki.data.get_data(["Global", "SecurityService"]):
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("SecurityService of %s was disable") % (self.Yuuki.configs["name"],)
)
elif operation.message.from_ in group_privilege:
@ -133,53 +133,53 @@ class YuukiCommand:
status.append(int(code))
elif count != 0:
unknown_msg.append(code.strip())
self.YuukiDynamicTools.config_security_status(
self.DynamicTools.config_security_status(
operation.message.to, status)
if unknown_msg:
unknown_msg_text = ", ".join(unknown_msg)
if status:
self.YuukiDynamicTools.send_text(YuukiStaticTools.send_to_who(
self.DynamicTools.send_text(StaticTools.send_to_who(
operation), self.Yuuki.get_text("Okay"))
else:
self.YuukiDynamicTools.send_text(YuukiStaticTools.send_to_who(
self.DynamicTools.send_text(StaticTools.send_to_who(
operation), self.Yuuki.get_text("Not Found"))
if unknown_msg_text != "":
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Notice: Unknown command line argument(s)") + f"\n({unknown_msg_text})"
)
def _disable_all(self, operation):
if operation.message.toType == MIDType.GROUP:
group = self.YuukiDynamicTools \
group = self.DynamicTools \
.get_client(self.Yuuki.MyMID) \
.getGroup(operation.message.to)
group_privilege = [
*self.Yuuki.Admin,
YuukiStaticTools.get_group_creator(group).mid,
StaticTools.get_group_creator(group).mid,
*self.Yuuki.data.get_group(group.id)["Ext_Admin"]
]
if not self.Yuuki.data.get_data(["Global", "SecurityService"]):
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("SecurityService of %s was disable") % (self.Yuuki.configs["name"],)
)
elif operation.message.from_ in group_privilege:
self.YuukiDynamicTools.config_security_status(operation.message.to, [])
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.config_security_status(operation.message.to, [])
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Okay")
)
def _ext_admin(self, operation):
message_separated = operation.message.text.split(" ")
if operation.message.toType == MIDType.GROUP:
group = self.YuukiDynamicTools \
group = self.DynamicTools \
.get_client(self.Yuuki.MyMID) \
.getGroup(operation.message.to)
group_privilege = [
*self.Yuuki.Admin,
YuukiStaticTools.get_group_creator(group).mid
StaticTools.get_group_creator(group).mid
]
if len(message_separated) == 3:
if operation.message.from_ in group_privilege:
@ -193,8 +193,8 @@ class YuukiCommand:
def _ext_admin_add(self, operation, message_separated, group):
if message_separated[2] in [Member.mid for Member in group.members]:
if message_separated[2] in self.Yuuki.data.get_group(group.id)["Ext_Admin"]:
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Added")
)
elif message_separated[2] not in self.Yuuki.data.get_data(["BlackList"]):
@ -202,18 +202,18 @@ class YuukiCommand:
ext_admin_list = origin.copy()
ext_admin_list.append(message_separated[2])
self.Yuuki.data.update_data(["Group", group.id, "Ext_Admin"], ext_admin_list)
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Okay")
)
else:
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("The User(s) was in our blacklist database.")
)
else:
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Wrong UserID or the guy is not in Group")
)
@ -226,13 +226,13 @@ class YuukiCommand:
["Group", group.id, "Ext_Admin"],
ext_admin_list
)
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Okay")
)
else:
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Not Found")
)
@ -250,19 +250,19 @@ class YuukiCommand:
self.Yuuki.get_text("Unknown"),
user_id
)
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
status + self.Yuuki.get_text("\nExtend Administrator(s)")
)
else:
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Not Found")
)
def _status(self, operation):
if operation.message.toType == MIDType.GROUP:
group = self.YuukiDynamicTools \
group = self.DynamicTools \
.get_client(self.Yuuki.MyMID) \
.getGroup(operation.message.to)
group_status = self.Yuuki.data.get_se_group(operation.message.to)
@ -270,7 +270,7 @@ class YuukiCommand:
status = self.Yuuki.get_text("SecurityService of %s was disable") % (self.Yuuki.configs["name"],)
elif group_status is None:
status = self.Yuuki.get_text("Default without Initialize\nMain Admin of the Group:\n%s") % \
(YuukiStaticTools.get_group_creator(group).displayName,)
(StaticTools.get_group_creator(group).displayName,)
else:
status = self.Yuuki.get_text(
"SecurityService is Listening on\n"
@ -281,22 +281,22 @@ class YuukiCommand:
group_status[OpType.NOTIFIED_INVITE_INTO_GROUP],
group_status[OpType.NOTIFIED_ACCEPT_GROUP_INVITATION],
group_status[OpType.NOTIFIED_KICKOUT_FROM_GROUP],
YuukiStaticTools.get_group_creator(
StaticTools.get_group_creator(
group).displayName,
)
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
status
)
def _group_backup(self, operation):
if operation.message.toType == MIDType.GROUP:
group = self.YuukiDynamicTools \
group = self.DynamicTools \
.get_client(self.Yuuki.MyMID) \
.getGroup(operation.message.to)
group_privilege = [
*self.Yuuki.Admin,
YuukiStaticTools.get_group_creator(group).mid,
StaticTools.get_group_creator(group).mid,
*self.Yuuki.data.get_group(group.id)["Ext_Admin"]
]
if operation.message.from_ in group_privilege:
@ -309,29 +309,29 @@ class YuukiCommand:
"Members": group_members,
"Invites": group_invitations
}
self.YuukiDynamicTools.send_text(
self.DynamicTools.send_text(
operation.message.from_, group.name)
self.YuukiDynamicTools.send_text(
self.DynamicTools.send_text(
operation.message.from_, json.dumps(output_info))
self.YuukiDynamicTools.send_text(
self.DynamicTools.send_text(
operation.message.to, self.Yuuki.get_text("Okay"))
def _quit(self, operation):
if operation.message.toType == MIDType.GROUP:
group = self.YuukiDynamicTools \
group = self.DynamicTools \
.get_client(self.Yuuki.MyMID) \
.getGroup(operation.message.to)
group_privilege = [
*self.Yuuki.Admin,
YuukiStaticTools.get_group_creator(group).mid
StaticTools.get_group_creator(group).mid
]
if operation.message.from_ in group_privilege:
self.YuukiDynamicTools.leave_group(group)
self.DynamicTools.leave_group(group)
def _exit(self, operation):
if operation.message.from_ in self.Yuuki.Admin:
self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Exit.")
)
self.Yuuki.exit()
@ -341,12 +341,12 @@ class YuukiCommand:
if operation.message.from_ in self.Yuuki.Admin:
# noinspection PyBroadException
try:
command_message = YuukiStaticTools.read_commands(message_separated[1:len(message_separated)])
command_message = StaticTools.read_commands(message_separated[1:len(message_separated)])
reporting_message = str(eval(command_message))
except:
(err1, err2, err3, error_info) = YuukiStaticTools.report_error()
(err1, err2, err3, error_info) = StaticTools.report_error()
reporting_message = f"Star Yuuki BOT - Eval Error:\n{err1}\n{err2}\n{err3}\n\n{error_info}"
self.YuukiDynamicTools.send_text(YuukiStaticTools.send_to_who(operation), reporting_message)
self.DynamicTools.send_text(StaticTools.send_to_who(operation), reporting_message)
def _text(self, operation):
yuuki_name = self.Yuuki.configs["name"]
@ -372,14 +372,14 @@ class YuukiCommand:
function_ = actions[message_separated[1]]
if callable(function_):
return function_(operation)
return self.YuukiDynamicTools.send_text(
YuukiStaticTools.send_to_who(operation),
return self.DynamicTools.send_text(
StaticTools.send_to_who(operation),
self.Yuuki.get_text("Helllo^^\nMy name is %s ><\nNice to meet you OwO") % (yuuki_name,)
)
def _contact(self, operation):
cache = operation.message.contentMetadata["mid"]
contact_info = self.YuukiDynamicTools.get_contact(cache)
contact_info = self.DynamicTools.get_contact(cache)
if not contact_info:
msg = self.Yuuki.get_text("Not Found")
elif contact_info.mid in self.Yuuki.data.get_data(["BlackList"]):
@ -396,7 +396,7 @@ class YuukiCommand:
contact_info.statusMessage,
contact_info.mid
)
self.YuukiDynamicTools.send_text(YuukiStaticTools.send_to_who(operation), msg)
self.DynamicTools.send_text(StaticTools.send_to_who(operation), msg)
def action(self, operation):
blocked_user = (operation.message.to in self.Yuuki.data.get_data(["BlackList"])) or \
@ -406,7 +406,7 @@ class YuukiCommand:
pass
elif operation.message.toType == MIDType.ROOM:
self.YuukiDynamicTools \
self.DynamicTools \
.get_client(self.Yuuki.MyMID) \
.leaveRoom(self.Yuuki.Seq, operation.message.to)

View file

@ -10,20 +10,20 @@ from __future__ import annotations
from typing import TYPE_CHECKING
from ..tools import YuukiStaticTools, YuukiDynamicTools
from ..tools import StaticTools, DynamicTools
if TYPE_CHECKING:
from ..yuuki import Yuuki
class YuukiJoinGroup:
class JoinGroup:
def __init__(self, handler: Yuuki):
"""
Event Type:
NOTIFIED_INVITE_INTO_GROUP (13)
"""
self.Yuuki = handler
self.YuukiDynamicTools = YuukiDynamicTools(self.Yuuki)
self.DynamicTools = DynamicTools(self.Yuuki)
def _accept(self, group_id, group, inviter):
group_list = self.Yuuki.data.get_data(["Global", "GroupJoined"])
@ -31,20 +31,20 @@ class YuukiJoinGroup:
new_group_list.append(group_id)
self.Yuuki.data.update_data(
["Global", "GroupJoined"], new_group_list)
self.YuukiDynamicTools.send_text(
self.DynamicTools.send_text(
group_id,
self.Yuuki.get_text("Helllo^^\nMy name is %s ><\nNice to meet you OwO") %
(self.Yuuki.configs["name"],)
)
self.YuukiDynamicTools.send_text(
self.DynamicTools.send_text(
group_id,
self.Yuuki.get_text("Type:\n\t%s/Help\nto get more information\n\nMain Admin of the Group:\n%s") %
(
self.Yuuki.configs["name"],
YuukiStaticTools.get_group_creator(group).displayName,
StaticTools.get_group_creator(group).displayName,
)
)
self.YuukiDynamicTools.get_group_ticket(group_id, self.Yuuki.MyMID, True)
self.DynamicTools.get_group_ticket(group_id, self.Yuuki.MyMID, True)
# Log
self.Yuuki.data.update_log(
"JoinGroup",
@ -52,12 +52,12 @@ class YuukiJoinGroup:
)
def _reject(self, group_id, inviter):
self.YuukiDynamicTools.send_text(
self.DynamicTools.send_text(
group_id,
self.Yuuki.get_text("Sorry...\nThe number of members is not satisfied (%s needed)") %
(self.Yuuki.configs["GroupMembers_Demand"],)
)
self.YuukiDynamicTools.get_client(self.Yuuki.MyMID).leave_group(self.Yuuki.Seq, group_id)
self.DynamicTools.get_client(self.Yuuki.MyMID).leave_group(self.Yuuki.Seq, group_id)
# Log
self.Yuuki.data.update_log(
"JoinGroup",
@ -67,9 +67,9 @@ class YuukiJoinGroup:
def _check_helper(self, operation, group_invitations, blocked_user):
if operation.param1 in self.Yuuki.data.get_data(["Global", "GroupJoined"]) and not blocked_user:
for user_id in self.Yuuki.Connect.helper:
if self.YuukiDynamicTools.check_invitation(operation, user_id) or user_id in group_invitations:
self.YuukiDynamicTools.get_client(user_id).acceptGroupInvitation(self.Yuuki.Seq, operation.param1)
self.YuukiDynamicTools.get_group_ticket(operation.param1, user_id, True)
if self.DynamicTools.check_invitation(operation, user_id) or user_id in group_invitations:
self.DynamicTools.get_client(user_id).acceptGroupInvitation(self.Yuuki.Seq, operation.param1)
self.DynamicTools.get_group_ticket(operation.param1, user_id, True)
# Log
self.Yuuki.data.update_log("JoinGroup", (
self.Yuuki.data.get_time(),
@ -81,15 +81,15 @@ class YuukiJoinGroup:
def action(self, operation):
group_invitations = []
blocked_user = operation.param2 in self.Yuuki.data.get_data(["BlackList"])
if self.YuukiDynamicTools.check_invitation(operation) and not blocked_user:
if self.DynamicTools.check_invitation(operation) and not blocked_user:
group_id = operation.param1
inviter = operation.param2
group = self.YuukiDynamicTools \
group = self.DynamicTools \
.get_client(self.Yuuki.MyMID) \
.getGroup(group_id)
group_member = [user.mid for user in group.members] if group.members else []
group_invitations = [user.mid for user in group.invitee] if group.invitee else []
self.YuukiDynamicTools.get_client(self.Yuuki.MyMID).acceptGroupInvitation(self.Yuuki.Seq, group_id)
self.DynamicTools.get_client(self.Yuuki.MyMID).acceptGroupInvitation(self.Yuuki.Seq, group_id)
if len(group_member) >= self.Yuuki.configs["GroupMembers_Demand"]:
self._accept(group_id, group, inviter)
else:

View file

@ -12,7 +12,7 @@ from typing import TYPE_CHECKING
from yuuki_core.ttypes import OpType
from ..tools import YuukiStaticTools, YuukiDynamicTools
from ..tools import StaticTools, DynamicTools
if TYPE_CHECKING:
from ..yuuki import Yuuki
@ -27,7 +27,7 @@ def security_access_checker(function):
return wrapper
class YuukiSecurity:
class Security:
def __init__(self, handler: Yuuki):
"""
Event Type:
@ -37,21 +37,21 @@ class YuukiSecurity:
NOTIFIED_KICKOUT_FROM_GROUP (19)
"""
self.Yuuki = handler
self.YuukiDynamicTools = YuukiDynamicTools(self.Yuuki)
self.DynamicTools = DynamicTools(self.Yuuki)
@security_access_checker
def _notified_update_group(self, group, security_info, operation):
if security_info["Another"] == '4':
if not group.preventJoinByTicket and security_info["Action"] not in self.Yuuki.Connect.helper:
self.Yuuki.thread_append(
self.YuukiDynamicTools.switch_group_url_status,
self.DynamicTools.switch_group_url_status,
(group, False)
)
self.Yuuki.thread_append(
self.YuukiDynamicTools.send_text,
self.DynamicTools.send_text,
(security_info["GroupID"], self.Yuuki.get_text("DO NOT ENABLE THE GROUP URL STATUS, see you..."))
)
kicker = self.YuukiDynamicTools.modify_group_members(1, group, security_info["Action"])
kicker = self.DynamicTools.modify_group_members(1, group, security_info["Action"])
# Log
self.Yuuki.data.update_log("KickEvent", (
self.Yuuki.data.get_time(),
@ -71,7 +71,7 @@ class YuukiSecurity:
elif security_info["Another"] not in self.Yuuki.AllAccountIds + security_info["GroupPrivilege"]:
canceler = self._notified_invite_into_group_single(group, security_info, operation)
if canceler != "None":
self.YuukiDynamicTools.send_text(
self.DynamicTools.send_text(
security_info["GroupID"],
self.Yuuki.get_text("Do not invite anyone...thanks")
)
@ -80,9 +80,9 @@ class YuukiSecurity:
for user_id in security_info["Another"].split("\x1e"):
if user_id not in self.Yuuki.AllAccountIds + security_info["GroupPrivilege"]:
if group.invitee and user_id in [user.mid for user in group.invitee]:
canceler = self.YuukiDynamicTools.modify_group_members(2, group, user_id)
canceler = self.DynamicTools.modify_group_members(2, group, user_id)
else:
canceler = self.YuukiDynamicTools.modify_group_members(1, group, user_id)
canceler = self.DynamicTools.modify_group_members(1, group, user_id)
# Log
self.Yuuki.data.update_log("KickEvent", (
self.Yuuki.data.get_time(),
@ -106,9 +106,9 @@ class YuukiSecurity:
def _notified_invite_into_group_single(self, group, security_info, operation):
if group.invitee and security_info["Another"] in [user.mid for user in group.invitee]:
canceler = self.YuukiDynamicTools.modify_group_members(2, group, security_info["Another"])
canceler = self.DynamicTools.modify_group_members(2, group, security_info["Another"])
else:
canceler = self.YuukiDynamicTools.modify_group_members(1, group, security_info["Another"])
canceler = self.DynamicTools.modify_group_members(1, group, security_info["Another"])
# Log
self.Yuuki.data.update_log("KickEvent", (
self.Yuuki.data.get_time(),
@ -133,10 +133,10 @@ class YuukiSecurity:
for user_id in self.Yuuki.data.get_data(["BlackList"]):
if user_id == security_info["Action"]:
self.Yuuki.thread_append(
self.YuukiDynamicTools.send_text,
self.DynamicTools.send_text,
(security_info["GroupID"], self.Yuuki.get_text("You are our blacklist. Bye~"))
)
kicker = self.YuukiDynamicTools.modify_group_members(1, group, security_info["Action"])
kicker = self.DynamicTools.modify_group_members(1, group, security_info["Action"])
# Log
self.Yuuki.data.update_log("KickEvent", (
self.Yuuki.data.get_time(),
@ -163,7 +163,7 @@ class YuukiSecurity:
elif security_info["Another"] in self.Yuuki.AllAccountIds:
kicker = "None"
try:
kicker = self.YuukiDynamicTools.modify_group_members(
kicker = self.DynamicTools.modify_group_members(
1,
group,
security_info["Action"],
@ -184,7 +184,7 @@ class YuukiSecurity:
security_info["GroupID"]
))
self.Yuuki.thread_append(
self.YuukiDynamicTools.send_text,
self.DynamicTools.send_text,
(
security_info["Action"],
self.Yuuki.get_text("You had been blocked by our database.")
@ -207,41 +207,41 @@ class YuukiSecurity:
assert kicker != "None", "No Helper Found"
if group.preventJoinByTicket:
self.Yuuki.thread_append(
self.YuukiDynamicTools.switch_group_url_status,
self.DynamicTools.switch_group_url_status,
(group, True, kicker)
)
group_ticket = self.YuukiDynamicTools.get_group_ticket(
group_ticket = self.DynamicTools.get_group_ticket(
security_info["GroupID"], kicker)
try:
self.YuukiDynamicTools.get_client(security_info["Another"]).acceptGroupInvitationByTicket(
self.DynamicTools.get_client(security_info["Another"]).acceptGroupInvitationByTicket(
self.Yuuki.Seq,
security_info["GroupID"],
group_ticket
)
except:
if group.preventJoinByTicket:
self.YuukiDynamicTools.switch_group_url_status(
self.DynamicTools.switch_group_url_status(
group,
True,
kicker
)
group_ticket = self.YuukiDynamicTools.get_group_ticket(
group_ticket = self.DynamicTools.get_group_ticket(
security_info["GroupID"], kicker, True)
self.YuukiDynamicTools.get_client(security_info["Another"]).acceptGroupInvitationByTicket(
self.DynamicTools.get_client(security_info["Another"]).acceptGroupInvitationByTicket(
self.Yuuki.Seq,
security_info["GroupID"],
group_ticket
)
if group.preventJoinByTicket:
self.Yuuki.thread_append(
self.YuukiDynamicTools.switch_group_url_status, (group, False, security_info["Another"]))
self.YuukiDynamicTools.get_group_ticket(
self.DynamicTools.switch_group_url_status, (group, False, security_info["Another"]))
self.DynamicTools.get_group_ticket(
security_info["GroupID"], security_info["Another"], True)
def _notified_kickout_from_group_rescue_failure(self, group, security_info, operation, kicker):
(err1, err2, err3, error_info) = YuukiStaticTools.report_error()
(err1, err2, err3, error_info) = StaticTools.report_error()
for Root in self.Yuuki.Admin:
self.YuukiDynamicTools.send_text(
self.DynamicTools.send_text(
Root,
"Star Yuuki BOT - SecurityService Failure\n\n%s\n%s\n%s\n\n%s" % (err1, err2, err3, error_info)
)
@ -262,9 +262,9 @@ class YuukiSecurity:
))
def _notified_kickout_from_group_normal(self, group, security_info, operation):
self.Yuuki.thread_append(self.YuukiDynamicTools.send_text, (
self.Yuuki.thread_append(self.DynamicTools.send_text, (
security_info["GroupID"], self.Yuuki.get_text("DO NOT KICK, thank you ^^")))
kicker = self.YuukiDynamicTools.modify_group_members(1, group, security_info["Action"])
kicker = self.DynamicTools.modify_group_members(1, group, security_info["Action"])
# Log
self.Yuuki.data.update_log("KickEvent", (
self.Yuuki.data.get_time(),
@ -275,18 +275,18 @@ class YuukiSecurity:
security_info["Another"],
operation.type
))
self.Yuuki.thread_append(self.YuukiDynamicTools.send_text, (security_info["GroupID"], self.Yuuki.get_text(
self.Yuuki.thread_append(self.DynamicTools.send_text, (security_info["GroupID"], self.Yuuki.get_text(
"The one who was been kicked:")))
self.Yuuki.thread_append(
self.YuukiDynamicTools.send_user, (security_info["GroupID"], security_info["Another"]))
self.DynamicTools.send_user, (security_info["GroupID"], security_info["Another"]))
def action(self, operation):
security_info = YuukiStaticTools.security_for_where(operation)
security_info = StaticTools.security_for_where(operation)
group = self.YuukiDynamicTools.get_client(self.Yuuki.MyMID).getGroup(security_info["GroupID"])
group = self.DynamicTools.get_client(self.Yuuki.MyMID).getGroup(security_info["GroupID"])
security_info["GroupPrivilege"] = [
*self.Yuuki.Admin,
YuukiStaticTools.get_group_creator(group).mid,
StaticTools.get_group_creator(group).mid,
*self.Yuuki.data.get_group(group.id)["Ext_Admin"]
]
if security_info["Action"] in security_info["GroupPrivilege"] or \

View file

@ -10,7 +10,7 @@ from .en import English
from .zh_TW import Traditional_Chinese
class Yuuki_LangSetting:
class LangSetting:
def __init__(self, default):
self.default = default
self.support = {

View file

@ -14,13 +14,13 @@ from typing import TYPE_CHECKING
from yuuki_core.ttypes import Operation
from .tools import YuukiStaticTools, YuukiDynamicTools
from .tools import StaticTools, DynamicTools
if TYPE_CHECKING:
from .yuuki import Yuuki
class YuukiPoll:
class Poll:
Power = True
NoWork = 0
@ -31,13 +31,13 @@ class YuukiPoll:
def __init__(self, handler: Yuuki):
self.Yuuki = handler
self.YuukiDynamicTools = YuukiDynamicTools(handler)
self.DynamicTools = DynamicTools(handler)
def _action(self):
operation = Operation()
if time.localtime().tm_hour != self.Yuuki.data.get_data(["Global", "LastResetLimitTime"]):
self.YuukiDynamicTools.reset_limit()
self.DynamicTools.reset_limit()
self.Yuuki.data.update_data(["Global", "LastResetLimitTime"], time.localtime().tm_hour)
if self.NoWork >= self.NoWorkLimit:
@ -61,7 +61,7 @@ class YuukiPoll:
self.Yuuki.revision = max(self.cacheOperations[-1].revision, self.cacheOperations[-2].revision)
def _exception(self):
(err1, err2, err3, error_info) = YuukiStaticTools.report_error()
(err1, err2, err3, error_info) = StaticTools.report_error()
operation = Operation()
@ -74,7 +74,7 @@ class YuukiPoll:
if operation.revision != self.Yuuki.revision:
self.Yuuki.revision = self.Yuuki.client.getLastOpRevision()
for Root in self.Yuuki.Admin:
self.YuukiDynamicTools.send_text(
self.DynamicTools.send_text(
Root,
"Star Yuuki BOT - Something was wrong...\nError:\n%s\n%s\n%s\n\n%s" %
(err1, err2, err3, error_info)

View file

@ -10,7 +10,7 @@ import multiprocessing
import threading
class YuukiThread:
class Thread:
def __init__(self):
self.lock = threading.Lock()
@ -26,7 +26,7 @@ class YuukiThread:
print(f"{threading.current_thread()} add Threading\n")
class YuukiMultiprocess:
class Multiprocess:
multiprocess_list = {}
def add(self, function, args=()):

View file

@ -23,7 +23,7 @@ if TYPE_CHECKING:
from .yuuki import Yuuki
class YuukiStaticTools:
class StaticTools:
@staticmethod
def get_group_creator(group):
"""
@ -111,7 +111,7 @@ class YuukiStaticTools:
return operation.message.to
class YuukiDynamicTools:
class DynamicTools:
def __init__(self, handler: Yuuki):
self.Yuuki = handler
@ -271,7 +271,7 @@ class YuukiDynamicTools:
assert action in actions, "Invalid action code"
if len(self.Yuuki.Connect.helper) >= 1:
members = [member.mid for member in group.members if member.mid in self.Yuuki.AllAccountIds]
accounts = YuukiStaticTools.dict_shuffle(
accounts = StaticTools.dict_shuffle(
self.Yuuki.data.get_data(["LimitInfo", actions[action].get("command")]), members)
if len(accounts) == 0:
return "None"

View file

@ -8,11 +8,11 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
"""
from bs4 import BeautifulSoup
from ..data import YuukiData
from ..data import Data
class YuukiWebDataReader:
def __init__(self, yuuki_data: YuukiData):
class WebDataReader:
def __init__(self, yuuki_data: Data):
self.handle = yuuki_data
def get_logs(self, name):

View file

@ -18,7 +18,7 @@ from flask_bootstrap import Bootstrap
from gevent.pywsgi import WSGIServer
from .reader import YuukiWebDataReader
from ..tools import YuukiDynamicTools
from ..tools import DynamicTools
wa_app = Flask(__name__)
@ -47,7 +47,7 @@ def authorized_response(function):
return wrapper
class YuukiWebAdmin:
class WebAdmin:
Bootstrap(wa_app)
http_server = None
@ -140,7 +140,7 @@ class YuukiWebAdmin:
if request.method == "PUT" and "name" in request.values and "status" in request.values:
Yuuki_Handle.profile.displayName = request.values["name"]
Yuuki_Handle.profile.statusMessage = request.values["status"]
YuukiDynamicTools(Yuuki_Handle).get_client(Yuuki_Handle.MyMID).updateProfile(
DynamicTools(Yuuki_Handle).get_client(Yuuki_Handle.MyMID).updateProfile(
Yuuki_Handle.Seq, Yuuki_Handle.profile
)
return {"status": 200}
@ -153,14 +153,14 @@ class YuukiWebAdmin:
if request.method == "GET":
return Yuuki_Handle_Data.get_data(["Global", "GroupJoined"])
if request.method == "POST" and "id" in request.values:
return YuukiDynamicTools(Yuuki_Handle).get_client(Yuuki_Handle.MyMID).acceptGroupInvitation(
return DynamicTools(Yuuki_Handle).get_client(Yuuki_Handle.MyMID).acceptGroupInvitation(
Yuuki_Handle.Seq, request.values["id"]
)
if request.method == "DELETE" and "id" in request.values:
group_information = YuukiDynamicTools(Yuuki_Handle).get_client(
group_information = DynamicTools(Yuuki_Handle).get_client(
Yuuki_Handle.MyMID
).getGroup(request.values["id"])
return YuukiDynamicTools(Yuuki_Handle).leave_group(group_information)
return DynamicTools(Yuuki_Handle).leave_group(group_information)
return {"status": 400}
@staticmethod
@ -168,7 +168,7 @@ class YuukiWebAdmin:
@authorized_response
def group_ticket():
if "id" in request.values and "ticket" in request.values:
return YuukiDynamicTools(Yuuki_Handle).get_client(Yuuki_Handle.MyMID).acceptGroupInvitationByTicket(
return DynamicTools(Yuuki_Handle).get_client(Yuuki_Handle.MyMID).acceptGroupInvitationByTicket(
Yuuki_Handle.Seq, request.values["id"], request.values["ticket"]
)
return {"status": 400}
@ -193,7 +193,7 @@ class YuukiWebAdmin:
return [
type_handle(obj)
for obj in YuukiDynamicTools(Yuuki_Handle).get_client(Yuuki_Handle.MyMID).getGroups(read_id_list)
for obj in DynamicTools(Yuuki_Handle).get_client(Yuuki_Handle.MyMID).getGroups(read_id_list)
]
return {"status": 400}
@ -240,7 +240,7 @@ class YuukiWebAdmin:
if request.values["audience"] not in audience_ids:
return {"status": "404"}
return [
YuukiDynamicTools(Yuuki_Handle).send_text(target_id, request.values["message"])
DynamicTools(Yuuki_Handle).send_text(target_id, request.values["message"])
for target_id in audience_ids[request.values["audience"]]()
]
return {"status": 400}
@ -251,7 +251,7 @@ class YuukiWebAdmin:
def shutdown():
LINE_ACCOUNT_SECURITY_NOTIFY_ID = "u085311ecd9e3e3d74ae4c9f5437cbcb5"
# The ID belongs to an official account, which is controlled by SysOp of LINE.
YuukiDynamicTools(Yuuki_Handle).send_text(
DynamicTools(Yuuki_Handle).send_text(
LINE_ACCOUNT_SECURITY_NOTIFY_ID,
"[Yuuki] Remote Shutdown"
)

View file

@ -19,31 +19,31 @@ from git import Repo
from yuuki_core.ttypes import OpType
if TYPE_CHECKING:
from .config import YuukiConfig
from .connection import YuukiConnect
from .data import YuukiData
from .config import Config
from .connection import Connect
from .data import Data
from .events import YuukiCommand, YuukiJoinGroup, YuukiSecurity, YuukiCallback
from .i18n import Yuuki_LangSetting
from .poll import YuukiPoll
from .thread_control import YuukiMultiprocess
from .webadmin.server import YuukiWebAdmin
from .i18n import LangSetting
from .poll import Poll
from .thread import Multiprocess
from .webadmin.server import WebAdmin
class Yuuki:
def __init__(self, yuuki_config: YuukiConfig):
def __init__(self, yuuki_config: Config):
self.Connect = YuukiConnect(yuuki_config)
self.Connect = Connect(yuuki_config)
self.configs = yuuki_config.system_config
# Static_Variable
self.Thread_Control = YuukiMultiprocess()
self.Thread_Control = Multiprocess()
self.Seq = self.configs["Seq"]
self.Admin = self.configs["Admin"]
self.Threading = self.configs["Advanced"]
self.KickLimit = self.configs["Hour_KickLimit"]
self.CancelLimit = self.configs["Hour_CancelLimit"]
self.i18n = Yuuki_LangSetting(self.configs["Default_Language"])
self.i18n = LangSetting(self.configs["Default_Language"])
self.LINE_Media_server = "https://obs.line-apps.com"
@ -98,7 +98,7 @@ class Yuuki:
self.Callback = YuukiCallback(self).action
mds_port = self.configs["MDS_Port"]
self.data = YuukiData(self.Threading, mds_port)
self.data = Data(self.Threading, mds_port)
self.data.update_data(["Global", "GroupJoined"], self.client.getGroupIdsJoined())
self.data.update_data(["Global", "SecurityService"], self.configs["SecurityService"])
@ -122,7 +122,7 @@ class Yuuki:
if self.Threading and self.configs.get("WebAdmin"):
wa_port = self.configs["WebAdmin_Port"]
password = str(hash(random.random()))
self.web_admin = YuukiWebAdmin(self, wa_port)
self.web_admin = WebAdmin(self, wa_port)
self.web_admin.set_password(password)
self.Thread_Control.add(self.web_admin.wa_listen)
print(
@ -184,5 +184,5 @@ class Yuuki:
self.thread_append(self.Callback, (operation,))
def main(self):
handle = YuukiPoll(self)
handle = Poll(self)
handle.init()

View file

@ -12,9 +12,9 @@
The software licensed under Mozilla Public License Version 2.0
"""
from libs import Yuuki, YuukiConfig
from libs import Yuuki, Config
config = YuukiConfig()
config = Config()
Console = Yuuki(config)
if __name__ == "__main__":