mirror of
https://github.com/jlengrand/whatsapp-mcp.git
synced 2026-03-10 00:41:24 +00:00
Merge pull request #30 from lharries/luke/improved-date-filtering
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 datetime import datetime
|
||||
from whatsapp import (
|
||||
search_contacts as whatsapp_search_contacts,
|
||||
list_messages as whatsapp_list_messages,
|
||||
@@ -28,7 +27,8 @@ def search_contacts(query: str) -> List[Dict[str, Any]]:
|
||||
|
||||
@mcp.tool()
|
||||
def list_messages(
|
||||
date_range: Optional[Tuple[datetime, datetime]] = None,
|
||||
after: Optional[str] = None,
|
||||
before: Optional[str] = None,
|
||||
sender_phone_number: Optional[str] = None,
|
||||
chat_jid: Optional[str] = None,
|
||||
query: Optional[str] = None,
|
||||
@@ -41,7 +41,8 @@ def list_messages(
|
||||
"""Get WhatsApp messages matching specified criteria with optional context.
|
||||
|
||||
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
|
||||
chat_jid: Optional chat JID to filter messages by chat
|
||||
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)
|
||||
"""
|
||||
messages = whatsapp_list_messages(
|
||||
date_range=date_range,
|
||||
after=after,
|
||||
before=before,
|
||||
sender_phone_number=sender_phone_number,
|
||||
chat_jid=chat_jid,
|
||||
query=query,
|
||||
|
||||
@@ -185,9 +185,9 @@ def print_recent_messages(limit=10) -> List[Message]:
|
||||
if 'conn' in locals():
|
||||
conn.close()
|
||||
|
||||
|
||||
def list_messages(
|
||||
date_range: Optional[Tuple[datetime, datetime]] = None,
|
||||
after: Optional[str] = None,
|
||||
before: Optional[str] = None,
|
||||
sender_phone_number: Optional[str] = None,
|
||||
chat_jid: Optional[str] = None,
|
||||
query: Optional[str] = None,
|
||||
@@ -209,10 +209,24 @@ def list_messages(
|
||||
params = []
|
||||
|
||||
# Add filters
|
||||
if date_range:
|
||||
where_clauses.append("messages.timestamp BETWEEN ? AND ?")
|
||||
params.extend([date_range[0].isoformat(), date_range[1].isoformat()])
|
||||
if after:
|
||||
try:
|
||||
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:
|
||||
where_clauses.append("messages.sender = ?")
|
||||
params.append(sender_phone_number)
|
||||
|
||||
Reference in New Issue
Block a user