Tomati/woochek.py

102 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import time, json, hashlib
from pathlib import Path
from woocommerce import API
from files2 import toom
from dotenv import load_dotenv
import os
import logging
load_dotenv()
CONSUMER_KEY = os.getenv('CONSUMER_KEY') # токен бота
CONSUMER_SECRET = os.getenv('CONSUMER_SECRET') # id чата
URLS = os.getenv('URLS')
# Настройки подключения
wcapi = API(
url=URLS,
consumer_key = CONSUMER_KEY, # ключ пользователя с правами admin/shop_manager
consumer_secret = CONSUMER_SECRET,
version="wc/v3",
timeout=30
)
STATE_FILE = Path("./last_order_state.json")
def load_last_state():
if STATE_FILE.exists():
with open(STATE_FILE, 'r') as f:
return json.load(f)
return None
def save_last_state(data):
with open(STATE_FILE, 'w') as f:
json.dump(data, f)
def get_order_hash(order):
# Хеш только по важным полям (чтобы не реагировать на мелочи)
important = {
'id': order.get('id'),
'status': order.get('status'),
'total': order.get('total'),
'date_modified': order.get('date_modified')
}
return hashlib.md5(json.dumps(important, sort_keys=True).encode()).hexdigest()
def check_order_changes():
last_state = load_last_state()
while True:
try:
response = wcapi.get("orders", params={
"per_page": 1,
"orderby": "date",
"order": "desc"
})
response.raise_for_status()
orders = response.json()
if not orders:
time.sleep(60)
continue
current_order = orders[0]
order_id = current_order['id']
current_hash = get_order_hash(current_order)
logging.info(f"🔍 [{order_id}] {current_order.get('status')} | {current_order.get('total')}")
if last_state and last_state.get('hash') == current_hash:
logging.info("⏳ Без изменений, жду...")
else:
logging.info("🔄 Изменения обнаружены!")
# 🔥 ТВОЯ ЛОГИКА
toom()
if last_state: # Не первый запуск
old_status = last_state.get('status')
new_status = current_order.get('status')
if old_status != new_status:
print(f"🎯 Статус сменился: {old_status}{new_status}")
# process_order_change(order_id, new_status)
# Сохраняем новое состояние
save_last_state({
'id': order_id,
'hash': current_hash,
'status': current_order.get('status'),
'total': current_order.get('total'),
'modified': current_order.get('date_modified')
})
last_state = {'hash': current_hash, 'status': current_order.get('status')}
time.sleep(60)
except Exception as e:
print(f"❌ Ошибка: {e}")
time.sleep(60)
# if __name__ == "__main__":
# check_order_changes()