()
| 292 | } |
| 293 | |
| 294 | func (m *Message) ParseContent() []MediaContent { |
| 295 | if m.Content == nil { |
| 296 | return nil |
| 297 | } |
| 298 | if len(m.parsedContent) > 0 { |
| 299 | return m.parsedContent |
| 300 | } |
| 301 | |
| 302 | var contentList []MediaContent |
| 303 | // 先尝试解析为字符串 |
| 304 | content, ok := m.Content.(string) |
| 305 | if ok { |
| 306 | contentList = []MediaContent{{ |
| 307 | Type: ContentTypeText, |
| 308 | Text: content, |
| 309 | }} |
| 310 | m.parsedContent = contentList |
| 311 | return contentList |
| 312 | } |
| 313 | |
| 314 | // 尝试解析为数组 |
| 315 | //var arrayContent []map[string]interface{} |
| 316 | |
| 317 | arrayContent, ok := m.Content.([]any) |
| 318 | if !ok { |
| 319 | return contentList |
| 320 | } |
| 321 | |
| 322 | for _, contentItemAny := range arrayContent { |
| 323 | mediaItem, ok := contentItemAny.(MediaContent) |
| 324 | if ok { |
| 325 | contentList = append(contentList, mediaItem) |
| 326 | continue |
| 327 | } |
| 328 | |
| 329 | contentItem, ok := contentItemAny.(map[string]any) |
| 330 | if !ok { |
| 331 | continue |
| 332 | } |
| 333 | contentType, ok := contentItem["type"].(string) |
| 334 | if !ok { |
| 335 | continue |
| 336 | } |
| 337 | |
| 338 | switch contentType { |
| 339 | case ContentTypeText: |
| 340 | if text, ok := contentItem["text"].(string); ok { |
| 341 | contentList = append(contentList, MediaContent{ |
| 342 | Type: ContentTypeText, |
| 343 | Text: text, |
| 344 | }) |
| 345 | } |
| 346 | |
| 347 | case ContentTypeImageURL: |
| 348 | imageUrl := contentItem["image_url"] |
| 349 | temp := &MessageImageUrl{ |
| 350 | Detail: "high", |
| 351 | } |
no outgoing calls
no test coverage detected