Evaaaaa06 commited on
Commit
b92f1fc
Β·
verified Β·
1 Parent(s): 3b91af5

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +50 -76
main.py CHANGED
@@ -91,13 +91,21 @@ def upload_image_to_imgur_with_token(image_path, access_token):
91
  print("εœ–η‰‡δΈŠε‚³δΎ‹ε€–οΌš", e)
92
  return None
93
 
94
- def generate_image_with_gemini(prompt):
95
  model_name = "gemini-2.0-flash-exp-image-generation"
96
  image_model = genai.GenerativeModel(model_name)
 
97
  response = image_model.generate_content(prompt)
98
  if response.parts and hasattr(response.parts[0], "inline_data"):
99
  image_data = response.parts[0].inline_data.data
100
  with tempfile.NamedTemporaryFile(delete=False, suffix=".png", dir="/tmp") as tmp_file:
 
 
 
 
 
 
 
101
  tmp_file.write(image_data)
102
  return tmp_file.name
103
  return None
@@ -159,104 +167,70 @@ def get_previous_message(user_id):
159
  # 主程式(εœ–η‰‡θˆ‡ζ–‡ε­—)
160
  #==========================
161
  # ε»Ίη«‹ chat_sessions ε­—ε…Έ
162
- chat_sessions = {}
163
- @line_handler.add(MessageEvent, message=(ImageMessage,TextMessage))
164
  def handle_image_message(event):
165
  user_id = event.source.user_id
166
- if user_id in chat_sessions:
167
- chat = chat_sessions[user_id]
168
- else:
169
- chat = model.start_chat(history=[])
170
- chat_sessions[user_id] = chat
171
 
172
-
173
- # 從 LINE API η²ε–εœ–η‰‡ζ•Έζ“š
174
- image_path = get_image_url(event.message.id)
175
- if image_path:
176
- try:
177
- # θ™•η†εœ–η‰‡ζˆ–ι€²θ‘Œι€²δΈ€ζ­₯εˆ†ζž
178
- print(f"εœ–η‰‡ε·²δΏε­˜θ‡³: {image_path}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  store_user_message(user_id, "image", image_path)
180
- # ε›žζ‡‰η”¨ζˆΆ
181
- line_bot_api.reply_message(event.reply_token,TextSendMessage(text="εœ–η‰‡ε·²ζŽ₯ζ”ΆζˆεŠŸε›‰οΌŒεΉ«ζˆ‘θΌΈε…₯δ½ ζƒ³θ©’ε•ηš„ε•ι‘Œε–”~"))
182
- except:
183
- line_bot_api.reply_message(event.reply_token,TextSendMessage(text="ζ²’ζœ‰ζŽ₯ζ”Άεˆ°εœ–η‰‡~"))
184
-
185
  previous_message = get_previous_message(user_id)
186
- # η²ε–ε‚³ι€εœ–η‰‡εΎŒηš„η”¨ζˆΆε•ι‘ŒοΌˆζ–‡ε­—οΌ‰
187
  if previous_message and previous_message["type"] == "image" and event.message.type == "text":
188
- # η²ε–δΈŠδΈ€ε‰‡εœ–η‰‡θ¨Šζ―ηš„θ·―εΎ‘
189
  image_path = previous_message["content"]
190
-
191
- # ε„²ε­˜η•Άε‰ζ–‡ε­—θ¨Šζ―
192
  user_text = event.message.text
193
  store_user_message(user_id, "text", user_text)
194
-
195
  try:
196
- # η’ΊδΏεœ–η‰‡ε­˜εœ¨
197
  if not os.path.exists(image_path):
198
  raise FileNotFoundError(f"εœ–η‰‡θ·―εΎ‘η„‘ζ•ˆοΌš{image_path}")
199
-
200
  organ = PIL.Image.open(image_path)
201
  completion = chat.send_message([user_text, organ])
202
  out = completion.text
203
-
204
  except Exception as e:
205
  out = f"η™Όη”ŸιŒ―θͺ€: {e}"
206
-
207
  else:
208
- global working_status
209
- # ζͺ’ζŸ₯δΊ‹δ»Άι‘žεž‹ε’Œθ¨Šζ―ι‘žεž‹
210
- if event.type != "message" or event.message.type != "text":
211
- # ε›žθ¦†ιŒ―θͺ€θ¨Šζ―
212
- line_bot_api.reply_message(
213
- event.reply_token,
214
- TextSendMessage(text="Event type error:[No message or the message does not contain text]")
215
- )
216
-
217
- # ζͺ’ζŸ₯δ½Ώη”¨θ€…ζ˜―ε¦θΌΈε…₯ "再見"
218
- elif event.message.text == "再見":
219
- # ε›žθ¦† "Bye!"
220
- line_bot_api.reply_message(event.reply_token,TextSendMessage(text="Bye!"))
221
  return
222
-
223
- # ζͺ’ζŸ₯ζ˜―ε¦ζ­£εœ¨θˆ‡δ½Ώη”¨θ€…δΊ€θ«‡
224
- elif working_status:
225
- try:
226
-
227
- if user_text and user_text.startswith("θ«‹εΉ«ζˆ‘η”Ÿζˆεœ–η‰‡"):
228
- prompt = user_text.replace("θ«‹εΉ«ζˆ‘η”Ÿζˆεœ–η‰‡", "").strip()
229
-
230
- image_path_gen = generate_image_with_gemini(prompt)
231
- if image_path:
232
- # 使用 Access Token δΈŠε‚³θ‡³ Imgur
233
- IMGUR_ACCESS_TOKEN = os.environ.get("IMGUR_ACCESS_TOKEN")
234
- image_url = upload_image_to_imgur_with_token(image_path, IMGUR_ACCESS_TOKEN)
235
-
236
- if image_url:
237
- line_bot_api.reply_message(event.reply_token,ImageSendMessage(original_content_url=image_url, preview_image_url=image_url))
238
- else:
239
- line_bot_api.reply_message(event.reply_token, TextSendMessage(text="εœ–η‰‡δΈŠε‚³ε€±ζ•—οΌŒθ«‹η¨εΎŒε†θ©¦~"))
240
- # 取得使用者輸ε…₯ηš„ζ–‡ε­—
241
  prompt = event.message.text
242
- store_user_message(user_id, "text", prompt)
243
-
244
- # 使用 Gemini ζ¨‘εž‹η”Ÿζˆζ–‡ε­—
245
  completion = chat.send_message(prompt)
246
- # ζͺ’ζŸ₯η”Ÿζˆη΅ζžœζ˜―ε¦η‚Ίη©Ί
247
- if (completion.text != None):
248
- # ε–εΎ—η”Ÿζˆη΅ζžœ
249
- out = completion.text
250
- else:
251
- # ε›žθ¦† "Geminiζ²’η­”ζ‘ˆ!請換個θͺͺ法!"
252
- out = "ζˆ‘δΈε€ͺζ‡‚δ»€ιΊΌζ„ζ€δΉŸ~"
253
  except:
254
- # θ™•η†ιŒ―θͺ€
255
- out = "εŸ·θ‘Œε‡ΊιŒ―!請換個θͺͺ法!"
256
 
257
-
258
- # ε›žθ¦†η”Ÿζˆη΅ζžœ
259
- line_bot_api.reply_message(event.reply_token,TextSendMessage(text=out))
260
 
261
 
262
  if __name__ == "__main__":
 
91
  print("εœ–η‰‡δΈŠε‚³δΎ‹ε€–οΌš", e)
92
  return None
93
 
94
+ def generate_image_with_gemini(prompt, size=(512, 512)):
95
  model_name = "gemini-2.0-flash-exp-image-generation"
96
  image_model = genai.GenerativeModel(model_name)
97
+ prompt += f",尺寸:{size[0]}x{size[1]}"
98
  response = image_model.generate_content(prompt)
99
  if response.parts and hasattr(response.parts[0], "inline_data"):
100
  image_data = response.parts[0].inline_data.data
101
  with tempfile.NamedTemporaryFile(delete=False, suffix=".png", dir="/tmp") as tmp_file:
102
+ # ζΈ…η†ε…ˆε‰η”Ÿζˆηš„ζš«ε­˜εœ–ζͺ”οΌˆιΈζ“‡ζ€§οΌŒε―εŠ εΌ·οΌ‰
103
+ for f in os.listdir("/tmp"):
104
+ if f.endswith(".png") and os.path.getmtime(f"/tmp/{f}") < os.path.getmtime(tmp_file.name):
105
+ try:
106
+ os.remove(f"/tmp/{f}")
107
+ except:
108
+ pass
109
  tmp_file.write(image_data)
110
  return tmp_file.name
111
  return None
 
167
  # 主程式(εœ–η‰‡θˆ‡ζ–‡ε­—)
168
  #==========================
169
  # ε»Ίη«‹ chat_sessions ε­—ε…Έ
170
+ @line_handler.add(MessageEvent, message=(ImageMessage, TextMessage))
 
171
  def handle_image_message(event):
172
  user_id = event.source.user_id
173
+ chat = chat_sessions.get(user_id) or model.start_chat(history=[])
174
+ chat_sessions[user_id] = chat
 
 
 
175
 
176
+ user_text = event.message.text if event.message.type == "text" else None
177
+
178
+ if user_text and user_text.startswith("θ«‹εΉ«ζˆ‘η”Ÿζˆεœ–η‰‡"):
179
+ prompt = user_text.replace("θ«‹εΉ«ζˆ‘η”Ÿζˆεœ–η‰‡", "").strip()
180
+
181
+ image_path = generate_image_with_gemini(prompt, size=(512, 512))
182
+ if image_path:
183
+ image_url = f"https://your-domain.com/tmp/{os.path.basename(image_path)}"
184
+ line_bot_api.reply_message(
185
+ event.reply_token,
186
+ [
187
+ TextSendMessage(text="ι€™ζ˜―ζˆ‘η‚Ίδ½ η”Ÿζˆηš„εœ–η‰‡ε–”ο½ž ✨"),
188
+ ImageSendMessage(original_content_url=image_url, preview_image_url=image_url)
189
+ ]
190
+ )
191
+ else:
192
+ line_bot_api.reply_message(event.reply_token, TextSendMessage(text="εœ–η‰‡η”Ÿζˆε€±ζ•—οΌŒθ«‹η¨εΎŒε†θ©¦~"))
193
+ return
194
+
195
+ if event.message.type == "image":
196
+ image_path = get_image_url(event.message.id)
197
+ if image_path:
198
  store_user_message(user_id, "image", image_path)
199
+ line_bot_api.reply_message(event.reply_token, TextSendMessage(text="εœ–η‰‡ε·²ζŽ₯ζ”ΆζˆεŠŸε›‰οΌŒεΉ«ζˆ‘θΌΈε…₯δ½ ζƒ³θ©’ε•ηš„ε•ι‘Œε–”~"))
200
+ else:
201
+ line_bot_api.reply_message(event.reply_token, TextSendMessage(text="ζ²’ζœ‰ζŽ₯ζ”Άεˆ°εœ–η‰‡~"))
202
+ return
203
+
204
  previous_message = get_previous_message(user_id)
 
205
  if previous_message and previous_message["type"] == "image" and event.message.type == "text":
 
206
  image_path = previous_message["content"]
 
 
207
  user_text = event.message.text
208
  store_user_message(user_id, "text", user_text)
 
209
  try:
 
210
  if not os.path.exists(image_path):
211
  raise FileNotFoundError(f"εœ–η‰‡θ·―εΎ‘η„‘ζ•ˆοΌš{image_path}")
 
212
  organ = PIL.Image.open(image_path)
213
  completion = chat.send_message([user_text, organ])
214
  out = completion.text
 
215
  except Exception as e:
216
  out = f"η™Όη”ŸιŒ―θͺ€: {e}"
 
217
  else:
218
+ if event.message.type != "text":
219
+ line_bot_api.reply_message(event.reply_token, TextSendMessage(text="θ«‹θΌΈε…₯ζ–‡ε­—ζˆ–εœ–η‰‡~"))
 
 
 
 
 
 
 
 
 
 
 
220
  return
221
+ if event.message.text == "再見":
222
+ line_bot_api.reply_message(event.reply_token, TextSendMessage(text="Bye!"))
223
+ return
224
+ if working_status:
225
+ try:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
226
  prompt = event.message.text
227
+ store_user_message(user_id, "text", prompt)
 
 
228
  completion = chat.send_message(prompt)
229
+ out = completion.text if completion.text else "ζˆ‘δΈε€ͺζ‡‚δ»€ιΊΌζ„ζ€δΉŸ~"
 
 
 
 
 
 
230
  except:
231
+ out = "εŸ·θ‘Œε‡ΊιŒ―!請換個θͺͺ法!"
 
232
 
233
+ line_bot_api.reply_message(event.reply_token, TextSendMessage(text=out))
 
 
234
 
235
 
236
  if __name__ == "__main__":