diff --git a/README.md b/README.md index 6ecd434..ec7cdc5 100644 --- a/README.md +++ b/README.md @@ -60,12 +60,13 @@ pip install wxhook ```python # import os # os.environ["WXHOOK_LOG_LEVEL"] = "INFO" # 修改日志输出级别 +# os.environ["WXHOOK_LOG_FORMAT"] = "INFO" # 修改日志输出格式 from wxhook import Bot from wxhook import events from wxhook.model import Event -def on_login(bot: Bot): +def on_login(bot: Bot, event: Event): print("登录成功之后会触发这个函数") @@ -115,11 +116,9 @@ from wxhook import Bot from wxhook import events from wxhook.model import Event -# faked_version="3.9.10.19"解除微信低版本登录限制 bot = Bot() -msgid_list = [] - +msg_id_list = [] @bot.handle(events.TEXT_MESSAGE) def on_text_message(bot: Bot, event: Event): @@ -164,9 +163,9 @@ def on_text_message(bot: Bot, event: Event): bot.send_pat(sender, sender) elif content.find("置顶消息") != -1: bot.top_msg(msg_id) - msgid_list.append(msg_id) + msg_id_list.append(msg_id) elif content.find("取消置顶的消息") != -1: - bot.remove_top_msg(sender, msgid_list.pop()) + bot.remove_top_msg(sender, msg_id_list.pop()) elif content.find("获取联系人列表") != -1: bot.send_text(sender, json.dumps(bot.get_contacts())) elif content.find("获取联系人详情") != -1: diff --git a/setup.py b/setup.py index 7729d58..e459682 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ URL = 'https://github.com/miloira/wxhook' EMAIL = '690126048@qq.com' AUTHOR = 'Msky' REQUIRES_PYTHON = '>=3.8.0' -VERSION = '0.0.4' +VERSION = '0.0.5' # What packages are required for this module to be executed? REQUIRED = [ diff --git a/wxhook/__init__.py b/wxhook/__init__.py index 121069c..30bc681 100644 --- a/wxhook/__init__.py +++ b/wxhook/__init__.py @@ -1,3 +1,3 @@ from .core import Bot -version = "0.0.4" +version = "0.0.5" diff --git a/wxhook/core.py b/wxhook/core.py index bc506c3..3af7377 100644 --- a/wxhook/core.py +++ b/wxhook/core.py @@ -9,8 +9,8 @@ import psutil import pyee import requests -from .events import ALL_MESSAGE from .logger import logger +from .events import ALL_MESSAGE from .model import Event, Account, Contact, ContactDetail, Room, RoomMembers, Table, DB, Response from .utils import WeChatManager, start_wechat_with_inject, fake_wechat_version, get_pid, parse_event @@ -429,7 +429,7 @@ class Bot: def info(self) -> Account: return self.get_self_info() - def on_event(self, raw_data: bytes): + def on_event(self, raw_data: bytes) -> None: try: data = json.loads(raw_data) event = Event(**parse_event(data)) @@ -443,7 +443,7 @@ class Bot: logger.error(traceback.format_exc()) logger.error(raw_data) - def handle(self, events: typing.Union[list[str], str, None] = None, once: bool = False): + def handle(self, events: typing.Union[list[str], str, None] = None, once: bool = False) -> typing.Callable[[typing.Callable], None]: def wrapper(func): listen = self.event_emitter.on if not once else self.event_emitter.once if not events: @@ -454,11 +454,11 @@ class Bot: return wrapper - def exit(self): + def exit(self) -> None: self.call_hook_func(self.on_stop, self) self.process.terminate() - def run(self): + def run(self) -> None: try: server = socketserver.ThreadingTCPServer((self.server_host, self.server_port), RequestHandler) server.bot = self diff --git a/wxhook/logger.py b/wxhook/logger.py index db51493..e6d206b 100644 --- a/wxhook/logger.py +++ b/wxhook/logger.py @@ -6,6 +6,6 @@ from loguru import logger logger.remove() logger.add( sink=sys.stdout, - format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}", + format=os.environ.get("WXHOOK_LOG_FORMAT", "{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}"), level=os.environ.get("WXHOOK_LOG_LEVEL", "DEBUG") ) diff --git a/wxhook/utils.py b/wxhook/utils.py index 0135cbb..fc7fcb2 100644 --- a/wxhook/utils.py +++ b/wxhook/utils.py @@ -1,5 +1,6 @@ import os import json +import typing import pathlib import subprocess @@ -13,18 +14,18 @@ START_WECHAT = TOOLS / "start-wechat.exe" FAKER = TOOLS / "faker.exe" -def start_wechat_with_inject(port: int): +def start_wechat_with_inject(port: int) -> typing.Tuple[int, str]: result = subprocess.run(f"{START_WECHAT} {DLL} {port}", capture_output=True, text=True) code, output = result.stdout.split(",") return int(code), output -def fake_wechat_version(pid: int, old_version: str, new_version: str): +def fake_wechat_version(pid: int, old_version: str, new_version: str) -> int: result = subprocess.run(f"{FAKER} {pid} {old_version} {new_version}", capture_output=True, text=True) return int(result.stdout) -def get_processes(process_name: str): +def get_processes(process_name: str) -> list[psutil.Process]: processes = [] for process in psutil.process_iter(): if process.name().lower() == process_name.lower(): @@ -32,16 +33,16 @@ def get_processes(process_name: str): return processes -def get_pid(port: int): +def get_pid(port: int) -> int: output = subprocess.run(f"netstat -ano | findStr \"{port}\"", capture_output=True, text=True, shell=True).stdout return int(output.split("\n")[0].split("LISTENING")[-1]) -def parse_xml(xml: str): +def parse_xml(xml: str) -> dict: return xmltodict.parse(xml) -def parse_event(event: dict, fields=None): +def parse_event(event: dict, fields=None) -> dict: for field in fields or ["content", "signature"]: try: if field in event: @@ -63,23 +64,23 @@ class WeChatManager: else: self.clean() - def init_file(self): + def init_file(self) -> None: with open(self.filename, "w", encoding="utf-8") as file: json.dump({ "increase_remote_port": 19000, "wechat": [] }, file) - def read(self): + def read(self) -> dict: with open(self.filename, "r", encoding="utf-8") as file: data = json.load(file) return data - def write(self, data: dict): + def write(self, data: dict) -> None: with open(self.filename, "w", encoding="utf-8") as file: json.dump(data, file) - def refresh(self, pid_list: list[int]): + def refresh(self, pid_list: list[int]) -> None: data = self.read() cleaned_data = [] remote_port_list = [19000] @@ -92,22 +93,22 @@ class WeChatManager: data["wechat"] = cleaned_data self.write(data) - def clean(self): + def clean(self) -> None: pid_list = [process.pid for process in get_processes("WeChat.exe")] self.refresh(pid_list) - def get_remote_port(self): + def get_remote_port(self) -> int: data = self.read() return data["increase_remote_port"] + 1 - def get_listen_port(self, remote_port: int): + def get_listen_port(self, remote_port: int) -> int: return 19000 - (remote_port - 19000) - def get_port(self): + def get_port(self) -> typing.Tuple[int, int]: remote_port = self.get_remote_port() return remote_port, self.get_listen_port(remote_port) - def add(self, pid: int, remote_port: int, server_port: int): + def add(self, pid: int, remote_port: int, server_port: int) -> None: data = self.read() data["increase_remote_port"] = remote_port data["wechat"].append({