diff --git a/src/bot_commands.py b/src/bot_commands.py index 117b8c9..4d05c3b 100644 --- a/src/bot_commands.py +++ b/src/bot_commands.py @@ -36,6 +36,8 @@ async def handle_command(event, client): if sender.id != ADMIN_ID: return + link_filter.load_data_from_file() # 在处理命令前重新加载数据 + command, *args = event.message.text.split() command = command.lower() @@ -46,24 +48,26 @@ async def handle_command(event, client): async def handle_keyword_command(event, command, args): if command == '/list': + link_filter.load_data_from_file() # 确保使用最新数据 keywords = link_filter.keywords await event.reply("当前关键词列表:\n" + "\n".join(keywords) if keywords else "关键词列表为空。") elif command == '/add' and args: - keyword = ' '.join(args) # 使用所有参数,以防关键词中含有空格 + keyword = ' '.join(args) if keyword not in link_filter.keywords: link_filter.add_keyword(keyword) + link_filter.load_data_from_file() # 重新加载以确保数据同步 await event.reply(f"关键词 '{keyword}' 已添加。") else: await event.reply(f"关键词 '{keyword}' 已存在。") elif command == '/delete' and args: - keyword = ' '.join(args) # 使用所有参数,以防关键词中含有空格 + keyword = ' '.join(args) matching_keywords = [k for k in link_filter.keywords if k.lower() == keyword.lower()] if matching_keywords: for k in matching_keywords: link_filter.remove_keyword(k) + link_filter.load_data_from_file() # 重新加载以确保数据同步 await event.reply(f"关键词 '{keyword}' 已删除。") else: - # 如果没有精确匹配,尝试查找部分匹配的关键词 similar_keywords = [k for k in link_filter.keywords if keyword.lower() in k.lower()] if similar_keywords: await event.reply(f"未找到精确匹配的关键词 '{keyword}'。\n\n是否要删除以下相似的关键词?\n" + "\n".join(similar_keywords)) @@ -72,9 +76,9 @@ async def handle_keyword_command(event, command, args): else: await event.reply("无效的命令或参数。") - async def handle_whitelist_command(event, command, args): if command == '/listwhite': + link_filter.load_data_from_file() # 确保使用最新数据 whitelist = link_filter.whitelist await event.reply("白名单域名列表:\n" + "\n".join(whitelist) if whitelist else "白名单为空。") elif command == '/addwhite' and args: @@ -82,6 +86,7 @@ async def handle_whitelist_command(event, command, args): if domain not in link_filter.whitelist: link_filter.whitelist.append(domain) link_filter.save_whitelist() + link_filter.load_data_from_file() # 重新加载以确保数据同步 await event.reply(f"域名 '{domain}' 已添加到白名单。") else: await event.reply(f"域名 '{domain}' 已在白名单中。") @@ -90,16 +95,20 @@ async def handle_whitelist_command(event, command, args): if domain in link_filter.whitelist: link_filter.whitelist.remove(domain) link_filter.save_whitelist() + link_filter.load_data_from_file() # 重新加载以确保数据同步 await event.reply(f"域名 '{domain}' 已从白名单中删除。") else: await event.reply(f"域名 '{domain}' 不在白名单中。") else: await event.reply("无效的命令或参数。") + def get_keywords(): + link_filter.load_data_from_file() return link_filter.keywords def get_whitelist(): + link_filter.load_data_from_file() return link_filter.whitelist __all__ = ['handle_command', 'get_keywords', 'get_whitelist', 'register_commands'] diff --git a/src/guard.py b/src/guard.py index 9f32812..326e541 100644 --- a/src/guard.py +++ b/src/guard.py @@ -10,8 +10,17 @@ from bot_commands import handle_command import logging # 设置日志 -logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') +DEBUG_MODE = os.environ.get('DEBUG_MODE', 'False').lower() == 'true' + +logging.basicConfig(level=logging.INFO if not DEBUG_MODE else logging.DEBUG, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') + logger = logging.getLogger('TeleGuard') +link_filter_logger = logging.getLogger('TeleGuard.LinkFilter') +link_filter_logger.setLevel(logging.DEBUG if DEBUG_MODE else logging.INFO) + +# 调整第三方库的日志级别 +logging.getLogger('telethon').setLevel(logging.WARNING) # 环境变量 BOT_TOKEN = os.environ.get('BOT_TOKEN') diff --git a/src/link_filter.py b/src/link_filter.py index 646aaa8..98c69bd 100644 --- a/src/link_filter.py +++ b/src/link_filter.py @@ -52,6 +52,7 @@ class LinkFilter: def load_data_from_file(self): self.keywords = self.load_json(self.keywords_file) self.whitelist = self.load_json(self.whitelist_file) + logger.info(f"Reloaded {len(self.keywords)} keywords and {len(self.whitelist)} whitelist entries") def normalize_link(self, link): link = re.sub(r'^https?://', '', link) @@ -75,6 +76,7 @@ class LinkFilter: self.keywords.append(keyword) self.save_keywords() logger.info(f"New keyword added: {keyword}") + self.load_data_from_file() # 重新加载文件 else: logger.debug(f"Keyword already exists: {keyword}") @@ -83,6 +85,7 @@ class LinkFilter: keyword = self.normalize_link(keyword) if keyword in self.keywords: self.keywords.remove(keyword) + self.load_data_from_file() # 重新加载文件 self.save_keywords() return True return False