mirror of
https://github.com/jlengrand/whatsapp-mcp.git
synced 2026-03-10 08:51:23 +00:00
improve date handling
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
from typing import List, Dict, Any, Optional, Tuple
|
from typing import List, Dict, Any, Optional
|
||||||
from mcp.server.fastmcp import FastMCP
|
from mcp.server.fastmcp import FastMCP
|
||||||
from datetime import datetime
|
|
||||||
from whatsapp import (
|
from whatsapp import (
|
||||||
search_contacts as whatsapp_search_contacts,
|
search_contacts as whatsapp_search_contacts,
|
||||||
list_messages as whatsapp_list_messages,
|
list_messages as whatsapp_list_messages,
|
||||||
@@ -28,7 +27,8 @@ def search_contacts(query: str) -> List[Dict[str, Any]]:
|
|||||||
|
|
||||||
@mcp.tool()
|
@mcp.tool()
|
||||||
def list_messages(
|
def list_messages(
|
||||||
date_range: Optional[Tuple[datetime, datetime]] = None,
|
after: Optional[str] = None,
|
||||||
|
before: Optional[str] = None,
|
||||||
sender_phone_number: Optional[str] = None,
|
sender_phone_number: Optional[str] = None,
|
||||||
chat_jid: Optional[str] = None,
|
chat_jid: Optional[str] = None,
|
||||||
query: Optional[str] = None,
|
query: Optional[str] = None,
|
||||||
@@ -41,7 +41,8 @@ def list_messages(
|
|||||||
"""Get WhatsApp messages matching specified criteria with optional context.
|
"""Get WhatsApp messages matching specified criteria with optional context.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
date_range: Optional tuple of (start_date, end_date) to filter messages by date
|
after: Optional ISO-8601 formatted string to only return messages after this date
|
||||||
|
before: Optional ISO-8601 formatted string to only return messages before this date
|
||||||
sender_phone_number: Optional phone number to filter messages by sender
|
sender_phone_number: Optional phone number to filter messages by sender
|
||||||
chat_jid: Optional chat JID to filter messages by chat
|
chat_jid: Optional chat JID to filter messages by chat
|
||||||
query: Optional search term to filter messages by content
|
query: Optional search term to filter messages by content
|
||||||
@@ -52,7 +53,8 @@ def list_messages(
|
|||||||
context_after: Number of messages to include after each match (default 1)
|
context_after: Number of messages to include after each match (default 1)
|
||||||
"""
|
"""
|
||||||
messages = whatsapp_list_messages(
|
messages = whatsapp_list_messages(
|
||||||
date_range=date_range,
|
after=after,
|
||||||
|
before=before,
|
||||||
sender_phone_number=sender_phone_number,
|
sender_phone_number=sender_phone_number,
|
||||||
chat_jid=chat_jid,
|
chat_jid=chat_jid,
|
||||||
query=query,
|
query=query,
|
||||||
|
|||||||
@@ -185,9 +185,9 @@ def print_recent_messages(limit=10) -> List[Message]:
|
|||||||
if 'conn' in locals():
|
if 'conn' in locals():
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
|
||||||
def list_messages(
|
def list_messages(
|
||||||
date_range: Optional[Tuple[datetime, datetime]] = None,
|
after: Optional[str] = None,
|
||||||
|
before: Optional[str] = None,
|
||||||
sender_phone_number: Optional[str] = None,
|
sender_phone_number: Optional[str] = None,
|
||||||
chat_jid: Optional[str] = None,
|
chat_jid: Optional[str] = None,
|
||||||
query: Optional[str] = None,
|
query: Optional[str] = None,
|
||||||
@@ -209,10 +209,24 @@ def list_messages(
|
|||||||
params = []
|
params = []
|
||||||
|
|
||||||
# Add filters
|
# Add filters
|
||||||
if date_range:
|
if after:
|
||||||
where_clauses.append("messages.timestamp BETWEEN ? AND ?")
|
try:
|
||||||
params.extend([date_range[0].isoformat(), date_range[1].isoformat()])
|
after = datetime.fromisoformat(after)
|
||||||
|
except ValueError:
|
||||||
|
raise ValueError(f"Invalid date format for 'after': {after}. Please use ISO-8601 format.")
|
||||||
|
|
||||||
|
where_clauses.append("messages.timestamp > ?")
|
||||||
|
params.append(after)
|
||||||
|
|
||||||
|
if before:
|
||||||
|
try:
|
||||||
|
before = datetime.fromisoformat(before)
|
||||||
|
except ValueError:
|
||||||
|
raise ValueError(f"Invalid date format for 'before': {before}. Please use ISO-8601 format.")
|
||||||
|
|
||||||
|
where_clauses.append("messages.timestamp < ?")
|
||||||
|
params.append(before)
|
||||||
|
|
||||||
if sender_phone_number:
|
if sender_phone_number:
|
||||||
where_clauses.append("messages.sender = ?")
|
where_clauses.append("messages.sender = ?")
|
||||||
params.append(sender_phone_number)
|
params.append(sender_phone_number)
|
||||||
|
|||||||
Reference in New Issue
Block a user