File size: 2,243 Bytes
071beff
 
 
 
 
 
 
 
 
2c25eaa
071beff
 
2c25eaa
 
 
071beff
 
2c25eaa
 
071beff
 
2c25eaa
 
071beff
 
2c25eaa
 
 
071beff
 
 
 
 
 
 
 
2c25eaa
071beff
 
 
 
 
 
2c25eaa
071beff
 
 
 
 
2c25eaa
 
071beff
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# command_handler.py
import pandas as pd
from linebot.v3.messaging import TextMessage, ImageMessage

# 匯入服務函式
from cwa_service import fetch_cwa_alarm_list
from usgs_service import fetch_global_last24h_text, fetch_taiwan_df_this_year
from plotting_service import create_and_save_map
from ai_service import generate_ai_text
from weather_service import fetch_forecast_by_location  # [修改] 更新匯入的函式名稱
from config import CURRENT_YEAR, HF_SPACE_URL

# ... (get_help_message, get_info_message 等函式不變) ...
def get_help_message():
    # ...
    return TextMessage(text=text)

def get_info_message():
    # ...
    return TextMessage(text=text)

def get_taiwan_earthquake_list():
    # ...
    return TextMessage(text=reply_text)

def get_taiwan_earthquake_map(base_url: str):
    # ...
    return [
            TextMessage(text="🗺️ 已為您繪製今年台灣區域 M≥5.0 地震分佈圖(UTC)。"),
            ImageMessage(original_content_url=image_url, preview_image_url=image_url),
        ]

def process_message(user_message_raw: str, request_base_url: str) -> list:
    """處理使用者的文字訊息並回傳一個包含回覆訊息的列表。"""
    user_message = (user_message_raw or "").strip()
    
    # ... (舊指令相容性轉換不變) ...

    if user_message.startswith('/'):
        parts = user_message.split(' ', 1)
        command = parts[0].lower()
        arg = parts[1] if len(parts) > 1 else ""

        # ... (其他 command 判斷不變) ...
        elif command == '/alert':
            return [TextMessage(text=fetch_cwa_alarm_list(limit=5))]
        elif command == '/weather':
            if not arg:
                return [TextMessage(text="請輸入地點,例如:/weather 台北")]
            # [修改] 呼叫新的天氣預報函式
            return [TextMessage(text=fetch_forecast_by_location(arg))]
        elif command == '/ai':
            if not arg:
                return [TextMessage(text="請輸入問題,例如:/ai 台灣最高的山是哪座?")]
            return [TextMessage(text=generate_ai_text(arg))]

    # 若非指令,則預設交給 AI 處理 (作為備援)
    return [TextMessage(text=generate_ai_text(user_message))]