from cm_bot_hal import CM_BOT_HAL import logging, time, requests, json from concurrent.futures import ThreadPoolExecutor from datetime import datetime import os # Configure logging with time-based file rotation log_dir = "logs" if not os.path.exists(log_dir): os.makedirs(log_dir) # Create logger logger = logging.getLogger(__name__) logger.setLevel(logging.INFO) # Create formatter formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") # Create file handler with time-based filename log_filename = os.path.join(log_dir, f"transfer_credit_{datetime.now().strftime('%Y%m%d')}.log") file_handler = logging.FileHandler(log_filename) file_handler.setLevel(logging.INFO) file_handler.setFormatter(formatter) # Create console handler console_handler = logging.StreamHandler() console_handler.setLevel(logging.INFO) console_handler.setFormatter(formatter) # Add handlers to logger logger.addHandler(file_handler) logger.addHandler(console_handler) # Suppress httpx logs logging.getLogger("httpx").setLevel(logging.WARNING) # api_url = 'https://api.luckytown888.net' api_url = 'http://api-server:3000' max_threading = 1 def transfer(data: dict): bot = CM_BOT_HAL() logger.info(f"[Start] Transfer Credit from {data['f_username']} to {data['t_username']}") bot.transfer_credit_api(data['f_username'], data['f_password'], data['t_username'], data['t_password']) logger.info(f"[DONE] {data['f_username']} transfer done!") del bot time.sleep(0.5) while True: weekday = int(datetime.now().strftime("%w")) hour = int(datetime.now().strftime("%H")) minutes = int(datetime.now().strftime("%M")) print(f'weekday: {weekday}, hour: {hour}, minutes: {minutes}') if weekday == 6 and (hour >= 9 and hour < 22): local_logger = logging.getLogger(f"{__name__}.saturday_processing") local_logger.info("Starting Saturday transfer processing") response = requests.get(f'{api_url}/user') items = json.loads(response.text) total_items = len(items) if isinstance(items, list) else 0 if total_items == 0: logger.info("No items to process.") else: logger.info(f"Processing {total_items} transfer items...") with ThreadPoolExecutor(max_workers=max_threading) as executor: results = list(executor.map(transfer, items)) logger.info(f"Completed processing {total_items} transfer items.") time.sleep(1)