import os import openai from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request import pickle import dateparser # Load OpenAI API key openai.api_key = os.getenv('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') # Replace with your actual API key for testing if needed SCOPES = ['https://www.googleapis.com/auth/calendar'] def authenticate_google_calendar(): """Authenticate and return the Google Calendar API service.""" creds = None if os.path.exists('token.pickle'): with open('token.pickle', 'rb') as token: creds = pickle.load(token) if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES ) creds = flow.run_local_server(port=0) with open('token.pickle', 'wb') as token: pickle.dump(creds, token) return build('calendar', 'v3', credentials=creds) def parse_schedule_input(user_input): """Parse natural language input for scheduling details.""" prompt = f"Extract an event title, date, and time from this input: '{user_input}'. Return in JSON format as {{'title': '...', 'date': 'YYYY-MM-DD', 'time': 'HH:MM'}}." response = openai.Completion.create( engine="text-davinci-003", prompt=prompt, max_tokens=100, temperature=0.3, ) try: details = eval(response['choices'][0]['text'].strip()) # Parse string to dictionary return details except Exception as e: raise ValueError("Error parsing schedule input: " + str(e)) def add_event_to_calendar(service, event_details): """Add a parsed event to the Google Calendar.""" try: event = { 'summary': event_details['title'], 'start': { 'dateTime': f"{event_details['date']}T{event_details['time']}:00", 'timeZone': 'UTC', # Adjust to user-specific timezone if needed }, 'end': { 'dateTime': f"{event_details['date']}T{event_details['time']}:00", 'timeZone': 'UTC', }, } created_event = service.events().insert(calendarId='primary', body=event).execute() return f"Event created: {created_event.get('htmlLink')}" except Exception as e: return f"Failed to add event: {str(e)}" def schedule_bot_response(user_input): """Main function to process user input and schedule a task.""" try: service = authenticate_google_calendar() event_details = parse_schedule_input(user_input) confirmation = add_event_to_calendar(service, event_details) return confirmation except Exception as e: return f"An error occurred: {str(e)}"