AlanRex commited on
Commit
5768946
·
verified ·
1 Parent(s): 2b5f072

Upload main.py

Browse files
Files changed (1) hide show
  1. main.py +5 -76
main.py CHANGED
@@ -111,11 +111,10 @@ def create_calendar_event(booking_data, booking_id):
111
  # ============== Gemini AI 設定 ==============
112
  GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
113
  ai_enabled = False
114
- genai_client = None
115
 
116
  if GOOGLE_API_KEY:
117
  try:
118
- genai_client = genai.Client(api_key=GOOGLE_API_KEY)
119
  ai_enabled = True
120
  logger.info("✅ Gemini AI 已啟用")
121
  except Exception as e:
@@ -340,74 +339,7 @@ def parse_people(people_str):
340
  return None, "❌ 人數必須在 1-10 人之間"
341
  return None, "❌ 請輸入有效的人數\n例如:2人、3"
342
 
343
- def check_booking_conflict(date_str, start_time, end_time, room):
344
- """檢查預約時段是否有衝突"""
345
- bookings_file = pathlib.Path("bookings/bookings.json")
346
-
347
- if not bookings_file.exists():
348
- return False, None
349
-
350
- try:
351
- with open(bookings_file, 'r', encoding='utf-8') as f:
352
- bookings = json.load(f)
353
- except:
354
- return False, None
355
-
356
- # 將時間轉換為分鐘數便於比較
357
- def time_to_minutes(time_str):
358
- h, m = map(int, time_str.split(':'))
359
- return h * 60 + m
360
-
361
- new_start = time_to_minutes(start_time)
362
- new_end = time_to_minutes(end_time)
363
-
364
- conflicts = []
365
-
366
- for booking in bookings:
367
- # 只檢查相同日期
368
- if booking.get('date') != date_str:
369
- continue
370
-
371
- # 只檢查相同琴房或任意琴房
372
- booking_room = booking.get('room', '')
373
- if room != '任意' and booking_room != '任意':
374
- if booking_room != room:
375
- continue
376
-
377
- # 獲取已預約的時段
378
- existing_start = booking.get('start_time')
379
- existing_end = booking.get('end_time')
380
-
381
- if not existing_start or not existing_end:
382
- # 如果沒有 start_time/end_time,嘗試從 time 欄位解析
383
- time_str = booking.get('time', '')
384
- start, end, _, _, _ = parse_time_range(time_str)
385
- if start and end:
386
- existing_start = start
387
- existing_end = end
388
- else:
389
- continue
390
-
391
- exist_start = time_to_minutes(existing_start)
392
- exist_end = time_to_minutes(existing_end)
393
-
394
- # 檢查是否有時段重疊
395
- # 重疊條件:新預約開始時間 < 既有預約結束時間 AND 新預約結束時間 > 既有預約開始時間
396
- if new_start < exist_end and new_end > exist_start:
397
- conflicts.append({
398
- 'booking_id': booking.get('booking_id'),
399
- 'time': booking.get('time'),
400
- 'room': booking_room
401
- })
402
-
403
- if conflicts:
404
- conflict_msg = f"❌ 預約衝突!\n\n該時段已有預約:\n"
405
- for c in conflicts:
406
- conflict_msg += f"• {c['room']} - {c['time']}\n"
407
- conflict_msg += f"\n請選擇其他時段或琴房"
408
- return True, conflict_msg
409
-
410
- return False, None
411
  room_normalized = room_str.strip().upper()
412
  for room in AVAILABLE_ROOMS:
413
  if room.upper() in room_normalized or room_normalized in room.upper():
@@ -490,7 +422,6 @@ def handle_booking_flow(user_id, user_message):
490
  # 解析並驗證時間
491
  start_time, end_time, display_time, error, err_msg = parse_time_range(user_message)
492
  if error:
493
- # 格式錯誤,不進入下一步,保持在當前狀態
494
  return err_msg
495
 
496
  # 儲存標準格式
@@ -742,14 +673,12 @@ def handle_message(event):
742
  return
743
 
744
  # AI 問答
745
- if ai_enabled and genai_client:
746
  try:
747
  prompt = f"參考資料:{pdf_content}\n\n問題:{user_message}\n\n簡潔回答。" if pdf_content else user_message
748
 
749
- response = genai_client.models.generate_content(
750
- model='gemini-2.5-flash',
751
- contents=prompt
752
- )
753
 
754
  out = response.text if response and response.text else "無法回答"
755
  except Exception as e:
 
111
  # ============== Gemini AI 設定 ==============
112
  GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
113
  ai_enabled = False
 
114
 
115
  if GOOGLE_API_KEY:
116
  try:
117
+ genai.configure(api_key=GOOGLE_API_KEY)
118
  ai_enabled = True
119
  logger.info("✅ Gemini AI 已啟用")
120
  except Exception as e:
 
339
  return None, "❌ 人數必須在 1-10 人之間"
340
  return None, "❌ 請輸入有效的人數\n例如:2人、3"
341
 
342
+ def validate_room(room_str):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  room_normalized = room_str.strip().upper()
344
  for room in AVAILABLE_ROOMS:
345
  if room.upper() in room_normalized or room_normalized in room.upper():
 
422
  # 解析並驗證時間
423
  start_time, end_time, display_time, error, err_msg = parse_time_range(user_message)
424
  if error:
 
425
  return err_msg
426
 
427
  # 儲存標準格式
 
673
  return
674
 
675
  # AI 問答
676
+ if ai_enabled:
677
  try:
678
  prompt = f"參考資料:{pdf_content}\n\n問題:{user_message}\n\n簡潔回答。" if pdf_content else user_message
679
 
680
+ model = genai.GenerativeModel('gemini-2.5-flash')
681
+ response = model.generate_content(prompt)
 
 
682
 
683
  out = response.text if response and response.text else "無法回答"
684
  except Exception as e: