4242
4343# noinspection PyBroadException
4444class Bot :
45- def __init__ (self , account : str ):
45+ def __init__ (self , account : str , readonly : bool = False ):
4646 """
4747 实例化机器人
4848 Args:
4949 account: QQ账号
50+ readonly: 只读模式,跳过本地化文件写入(适用于测试环境)
5051 """
5152 import core .command as command
5253 import module # module中可能会定义新的DataChunk和local text等, 所以要在一开始import
@@ -68,7 +69,7 @@ def __init__(self, account: str):
6869 self .tick_task : Optional [asyncio .Task ] = None
6970 self .todo_tasks : Dict [Union [Callable , asyncio .Task ], Dict ] = {}
7071
71- self .start_up ()
72+ self .start_up (readonly = readonly )
7273
7374 def set_client_proxy (self , proxy ):
7475 from adapter import ClientProxy
@@ -77,12 +78,14 @@ def set_client_proxy(self, proxy):
7778 else :
7879 raise TypeError ("Incorrect Client Proxy!" )
7980
80- def start_up (self ):
81+ def start_up (self , readonly : bool = False ):
8182 self .register_command ()
8283 self .loc_helper .load_localization () # 要在注册完命令后再读取本地化文件
83- self .loc_helper .save_localization () # 更新本地文件
84+ if not readonly :
85+ self .loc_helper .save_localization () # 更新本地文件
8486 self .loc_helper .load_chat ()
85- self .loc_helper .save_chat ()
87+ if not readonly :
88+ self .loc_helper .save_chat ()
8689 self .cfg_helper .load_config ()
8790 self .cfg_helper .save_config ()
8891
@@ -544,10 +547,12 @@ async def process_message(self, msg: str, meta: MessageMetaData) -> List:
544547 feedback = self .loc_helper .format_loc_text (LOC_GROUP_ONLY_NOTICE )
545548 bot_commands += [BotSendMsgCommand (self .account , feedback , [PrivateMessagePort (meta .user_id )])]
546549 break
547- # 无权限者/权限不足者企图使用一条需要权限的指令, 回复一条提示
550+ # 无权限者/权限不足者企图使用一条需要权限的指令
548551 if meta .permission < command .permission_require :
549- feedback = self .loc_helper .format_loc_text (LOC_PERMISSION_DENIED_NOTICE )
550- bot_commands += [BotSendMsgCommand (self .account , feedback , [GroupMessagePort (meta .group_id ) if meta .group_id else PrivateMessagePort (meta .user_id )])]
552+ # 骰管理及以上级别的指令 (permission_require >= 3) 对普通用户静默,避免暴露管理指令
553+ if command .permission_require < 3 :
554+ feedback = self .loc_helper .format_loc_text (LOC_PERMISSION_DENIED_NOTICE )
555+ bot_commands += [BotSendMsgCommand (self .account , feedback , [GroupMessagePort (meta .group_id ) if meta .group_id else PrivateMessagePort (meta .user_id )])]
551556 break
552557 # 执行指令
553558 # 注意: process_msg 是异步方法,需要使用 await 调用
@@ -633,12 +638,14 @@ async def process_notice(self, data: NoticeData) -> List:
633638 activate = False
634639
635640 if activate :
636- feedback = self .data_manager .get_data (DC_WELCOME , [data .group_id ],default_val = "" )
641+ # "default" 表示未设置(用默认欢迎词),"" 表示已关闭(不发送)
642+ feedback = self .data_manager .get_data (DC_WELCOME , [data .group_id ], default_val = "default" )
637643
638- if not feedback :
644+ if feedback == "default" :
639645 feedback = self .loc_helper .format_loc_text (LOC_WELCOME_DEFAULT )
640646
641- bot_commands += [BotSendMsgCommand (self .account , choice (feedback .split ("|" )), [GroupMessagePort (data .group_id )])]
647+ if feedback : # 关闭时 feedback 为 "",跳过发送
648+ bot_commands += [BotSendMsgCommand (self .account , choice (feedback .split ("|" )), [GroupMessagePort (data .group_id )])]
642649
643650 if self .proxy :
644651 for command in bot_commands :
0 commit comments