|  | @@ -0,0 +1,44 @@
 | 
	
		
			
				|  |  | +from datetime import datetime
 | 
	
		
			
				|  |  | +from typing import Any, Union
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +import pytz
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +from core.tools.entities.tool_entities import ToolInvokeMessage
 | 
	
		
			
				|  |  | +from core.tools.errors import ToolInvokeError
 | 
	
		
			
				|  |  | +from core.tools.tool.builtin_tool import BuiltinTool
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class LocaltimeToTimestampTool(BuiltinTool):
 | 
	
		
			
				|  |  | +    def _invoke(
 | 
	
		
			
				|  |  | +        self,
 | 
	
		
			
				|  |  | +        user_id: str,
 | 
	
		
			
				|  |  | +        tool_parameters: dict[str, Any],
 | 
	
		
			
				|  |  | +    ) -> Union[ToolInvokeMessage, list[ToolInvokeMessage]]:
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        Convert localtime to timestamp
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        localtime = tool_parameters.get("localtime")
 | 
	
		
			
				|  |  | +        timezone = tool_parameters.get("timezone", "Asia/Shanghai")
 | 
	
		
			
				|  |  | +        if not timezone:
 | 
	
		
			
				|  |  | +            timezone = None
 | 
	
		
			
				|  |  | +        time_format = "%Y-%m-%d %H:%M:%S"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        timestamp = self.localtime_to_timestamp(localtime, time_format, timezone)
 | 
	
		
			
				|  |  | +        if not timestamp:
 | 
	
		
			
				|  |  | +            return self.create_text_message(f"Invalid localtime: {localtime}")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        return self.create_text_message(f"{timestamp}")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    @staticmethod
 | 
	
		
			
				|  |  | +    def localtime_to_timestamp(localtime: str, time_format: str, local_tz=None) -> int | None:
 | 
	
		
			
				|  |  | +        try:
 | 
	
		
			
				|  |  | +            if local_tz is None:
 | 
	
		
			
				|  |  | +                local_tz = datetime.now().astimezone().tzinfo
 | 
	
		
			
				|  |  | +            if isinstance(local_tz, str):
 | 
	
		
			
				|  |  | +                local_tz = pytz.timezone(local_tz)
 | 
	
		
			
				|  |  | +            local_time = datetime.strptime(localtime, time_format)
 | 
	
		
			
				|  |  | +            localtime = local_tz.localize(local_time)
 | 
	
		
			
				|  |  | +            timestamp = int(localtime.timestamp())
 | 
	
		
			
				|  |  | +            return timestamp
 | 
	
		
			
				|  |  | +        except Exception as e:
 | 
	
		
			
				|  |  | +            raise ToolInvokeError(str(e))
 |