LINE-ROBOT / command_handler.py
cwadayi's picture
Update command_handler.py
2c25eaa verified
raw
history blame
2.24 kB
# 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))]