feat: add personal wechat wcf collector deploy
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
import json
|
||||
import os
|
||||
import signal
|
||||
import sys
|
||||
import time
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from wcferry import Wcf
|
||||
|
||||
|
||||
PORT = int(os.environ.get("WCF_COMMAND_PORT", "10086"))
|
||||
STATE_ROOT = os.environ.get("WCF_STATE_ROOT", r"C:\UniDesk\personal-wechat\wcf-state")
|
||||
DEBUG = os.environ.get("WCF_DEBUG", "false").lower() == "true"
|
||||
|
||||
STOP = False
|
||||
|
||||
|
||||
def now_iso():
|
||||
return datetime.now(timezone.utc).isoformat()
|
||||
|
||||
|
||||
def log(event, **fields):
|
||||
os.makedirs(STATE_ROOT, exist_ok=True)
|
||||
payload = {"ts": now_iso(), "event": event, **fields}
|
||||
line = json.dumps(payload, ensure_ascii=False, sort_keys=True)
|
||||
print(line, flush=True)
|
||||
with open(os.path.join(STATE_ROOT, "wcf-host.log"), "a", encoding="utf-8") as fp:
|
||||
fp.write(line + "\n")
|
||||
|
||||
|
||||
def handle_signal(_signum, _frame):
|
||||
global STOP
|
||||
STOP = True
|
||||
|
||||
|
||||
signal.signal(signal.SIGTERM, handle_signal)
|
||||
signal.signal(signal.SIGINT, handle_signal)
|
||||
|
||||
|
||||
def main():
|
||||
log("wcf-host-start", port=PORT, debug=DEBUG)
|
||||
wcf = Wcf(port=PORT, debug=DEBUG, block=False)
|
||||
while not STOP:
|
||||
try:
|
||||
logged_in = bool(wcf.is_login())
|
||||
qrcode = ""
|
||||
if not logged_in:
|
||||
try:
|
||||
qrcode = wcf.get_qrcode()
|
||||
except Exception:
|
||||
qrcode = ""
|
||||
state = {
|
||||
"ts": now_iso(),
|
||||
"isLogin": logged_in,
|
||||
"qrcodePresent": bool(qrcode),
|
||||
"commandPort": PORT,
|
||||
"messagePort": PORT + 1,
|
||||
}
|
||||
if qrcode:
|
||||
state["qrcode"] = qrcode
|
||||
with open(os.path.join(STATE_ROOT, "status.json"), "w", encoding="utf-8") as fp:
|
||||
json.dump(state, fp, ensure_ascii=False, indent=2, sort_keys=True)
|
||||
log("wcf-host-status", isLogin=logged_in, qrcodePresent=bool(qrcode))
|
||||
time.sleep(5)
|
||||
except Exception as exc:
|
||||
log("wcf-host-error", error=f"{type(exc).__name__}: {exc}"[:1000])
|
||||
time.sleep(3)
|
||||
try:
|
||||
wcf.cleanup()
|
||||
except Exception:
|
||||
pass
|
||||
log("wcf-host-stop")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user