cwadayi commited on
Commit
a2c5df6
·
verified ·
1 Parent(s): a8eda7b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -7
app.py CHANGED
@@ -5,10 +5,10 @@ from linebot.v3 import WebhookHandler
5
  from linebot.v3.exceptions import InvalidSignatureError
6
  from linebot.v3.messaging import (
7
  Configuration, ApiClient, MessagingApi,
8
- ReplyMessageRequest, TextMessage
 
 
9
  )
10
- # --- ✨✨✨ CORRECTION: Import ImageSendMessage from the correct module ✨✨✨ ---
11
- from linebot.v3.messaging.models.image_send_message import ImageSendMessage
12
  from linebot.v3.webhooks import MessageEvent, TextMessageContent
13
 
14
  import requests
@@ -118,9 +118,12 @@ def handle_message(event):
118
  line_bot_api = MessagingApi(api_client)
119
 
120
  if "臺灣地震畫圖" in user_message or "台灣地震畫圖" in user_message:
 
121
  line_bot_api.reply_message_with_http_info(ReplyMessageRequest(
122
  reply_token=event.reply_token, messages=[TextMessage(text="🗺️ 收到指令!正在繪製地震分佈圖,請稍候...")]
123
  ))
 
 
124
  result = fetch_taiwan_earthquake_data_df()
125
  if isinstance(result, pd.DataFrame):
126
  filename = create_and_save_map(result)
@@ -132,6 +135,7 @@ def handle_message(event):
132
  line_bot_api.push_message(body={'to': event.source.user_id, 'messages': [TextMessage(text=result)]})
133
  return
134
 
 
135
  reply_text = ""
136
  if user_message == "/help":
137
  reply_text = """📖 地震預警dayichen 指令說明
@@ -157,12 +161,12 @@ def handle_message(event):
157
  if isinstance(result, pd.DataFrame):
158
  count = len(result)
159
  reply_text = f"🇹🇼 今年 ({datetime.now().year}年) 台灣區域顯著地震 (M≥5.0),共 {count} 筆:\n{'-'*20}\n"
160
- for index, row in result.iterrows():
 
161
  time_str = row['time'].strftime('%Y-%m-%d %H:%M')
162
  reply_text += f"震級: {row['magnitude']:.1f} | 時間: {time_str} (UTC)\n地點: {row['place']}\n\n"
163
- if len(reply_text) > 4500:
164
- reply_text += "... (資料過多,僅顯示部分)"
165
- break
166
  else:
167
  reply_text = result
168
  elif "地震" in user_message or "quake" in user_message:
 
5
  from linebot.v3.exceptions import InvalidSignatureError
6
  from linebot.v3.messaging import (
7
  Configuration, ApiClient, MessagingApi,
8
+ ReplyMessageRequest, TextMessage,
9
+ # --- ✨✨✨ CORRECTION: ImageSendMessage is now directly in messaging ✨✨✨ ---
10
+ ImageSendMessage
11
  )
 
 
12
  from linebot.v3.webhooks import MessageEvent, TextMessageContent
13
 
14
  import requests
 
118
  line_bot_api = MessagingApi(api_client)
119
 
120
  if "臺灣地震畫圖" in user_message or "台灣地震畫圖" in user_message:
121
+ # We must reply to the webhook post request quickly, so we send a "processing" message first.
122
  line_bot_api.reply_message_with_http_info(ReplyMessageRequest(
123
  reply_token=event.reply_token, messages=[TextMessage(text="🗺️ 收到指令!正在繪製地震分佈圖,請稍候...")]
124
  ))
125
+
126
+ # Then we process the data and send the image with a push message.
127
  result = fetch_taiwan_earthquake_data_df()
128
  if isinstance(result, pd.DataFrame):
129
  filename = create_and_save_map(result)
 
135
  line_bot_api.push_message(body={'to': event.source.user_id, 'messages': [TextMessage(text=result)]})
136
  return
137
 
138
+ # --- Handle other text-based commands ---
139
  reply_text = ""
140
  if user_message == "/help":
141
  reply_text = """📖 地震預警dayichen 指令說明
 
161
  if isinstance(result, pd.DataFrame):
162
  count = len(result)
163
  reply_text = f"🇹🇼 今年 ({datetime.now().year}年) 台灣區域顯著地震 (M≥5.0),共 {count} 筆:\n{'-'*20}\n"
164
+ # To avoid exceeding LINE message length limits, we only show a few recent ones.
165
+ for index, row in result.head(15).iterrows():
166
  time_str = row['time'].strftime('%Y-%m-%d %H:%M')
167
  reply_text += f"震級: {row['magnitude']:.1f} | 時間: {time_str} (UTC)\n地點: {row['place']}\n\n"
168
+ if count > 15:
169
+ reply_text += f"... (還有 {count-15} 筆,請使用「臺灣地震畫圖」查看全部)"
 
170
  else:
171
  reply_text = result
172
  elif "地震" in user_message or "quake" in user_message: