# shirokaproject/shirobot.plugin.myparser architecture

> Architecture diagram of the GitHub repository shirokaproject/shirobot.plugin.myparser, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/shirokaproject/shirobot.plugin.myparser
- Repository: https://github.com/shirokaproject/shirobot.plugin.myparser

## Overview

MyParser is a ShiroBot plugin that recognizes links from supported platforms, parses platform content, and sends configured cards, text, and media. The main flow runs from incoming messages through parsing and unified message handling to rendering, downloads, and delivery. Platform capabilities are preserved from the README, including Bilibili multi-part/live/article content, Douyin galleries/comments, music and social providers, and YouTube. Some provider internals are unsampled; those nodes use their exact enclosing directories, and edges are limited to documented behavior or indexed references.

Main entry points: [`src/MyParser/Runtime/MessageParseCoordinator.cs`](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/Runtime/MessageParseCoordinator.cs) (Parse coordinator), [`src/MyParser.Provider.BiliBili/Parsing/BilibiliParser.cs`](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.BiliBili/Parsing/BilibiliParser.cs) (Bilibili parsing), [`src/MyParser/MessageHandling/UnifiedMediaMessageHandler.cs`](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/MessageHandling/UnifiedMediaMessageHandler.cs) (Unified message handler), [`src/MyParser.Sharing/PluginConfig.cs`](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Sharing/PluginConfig.cs) (Runtime configuration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Plugin runtime"]
  node_coordinator["Parse coordinator"]
  node_tasks["Parse task manager"]
  node_registry["Provider catalog<br/>[ProviderCatalog.cs]"]
end

subgraph group_providers["Platform providers"]
  node_bili["Bilibili parsing<br/>[BilibiliParser.cs]"]
  node_bili_article["Articles and formats"]
  node_douyin["Douyin parsing"]
  node_douyin_comments["Douyin comments"]
  node_heybox["Heybox parsing<br/>[HeyboxParser.cs]"]
  node_netease["Music parsing<br/>[NetEaseParser.cs]"]
  node_weixin["Channels parsing"]
  node_x["X parsing<br/>[XParser.cs]"]
  node_youtube["YouTube parsing"]
  node_other_providers["Platform parsers<br/>[Parsing]"]
end

subgraph group_shared["Shared parsing"]
  node_redirect["URL redirects"]
  node_transport["Safe HTTP transport"]
  node_config["Runtime configuration<br/>[PluginConfig.cs]"]
end

subgraph group_delivery["Message delivery"]
  node_unified["Unified message handler"]
  node_renderer["Card rendering"]
  node_host["Host services"]
end

subgraph group_media["Media processing"]
  node_downloader["Provider downloads"]
  node_runtime_state[("Runtime cache<br/>[MyParserRuntime.cs]")]
end

node_user(("Message sender"))
node_platforms["External platforms"]
node_host_service["ShiroBot host"]

node_user -->|"submits links"| node_coordinator
node_coordinator -.->|"queues parsing"| node_tasks
node_coordinator -.->|"selects provider"| node_registry
node_bili -->|"delegates articles"| node_bili_article
node_douyin -->|"fetches comments"| node_douyin_comments
node_bili -.->|"requests content"| node_platforms
node_douyin -.->|"requests content"| node_platforms
node_heybox -.->|"requests content"| node_platforms
node_netease -.->|"requests content"| node_platforms
node_weixin -.->|"requests content"| node_platforms
node_x -.->|"requests content"| node_platforms
node_youtube -.->|"requests content"| node_platforms
node_unified -->|"renders cards"| node_renderer
node_unified -.->|"downloads media"| node_downloader
node_unified -.->|"sends results"| node_host
node_host -.->|"delivers messages"| node_host_service
node_downloader -->|"uses download cache"| node_runtime_state
node_bili -->|"creates HTTP handler"| node_transport
node_transport -->|"limits redirects"| node_redirect
node_x -->|"reads proxy settings"| node_config
node_coordinator -.->|"passes parse results"| node_unified
node_config -->|"configures parsing"| node_bili
node_config -->|"configures parsing"| node_douyin

click node_coordinator "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/Runtime/MessageParseCoordinator.cs"
click node_tasks "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/Runtime/ParseTaskManager.cs"
click node_registry "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/Runtime/ProviderCatalog.cs"
click node_bili "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.BiliBili/Parsing/BilibiliParser.cs"
click node_bili_article "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.BiliBili/Services/BilibiliArticleParser.cs"
click node_douyin "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.Douyin/Services/DouyinParseService.cs"
click node_douyin_comments "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.Douyin/Services/DouyinCommentService.cs"
click node_heybox "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.Heybox/Parsing/HeyboxParser.cs"
click node_netease "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.NetEaseCloudMusic/Parsing/NetEaseParser.cs"
click node_weixin "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.WeixinChannels/Parsing/WeixinChannelsParser.cs"
click node_x "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.X/Parsing/XParser.cs"
click node_youtube "https://github.com/shirokaproject/shirobot.plugin.myparser/tree/main/src/MyParser.Provider.YouTube"
click node_other_providers "https://github.com/shirokaproject/shirobot.plugin.myparser/tree/main/src/MyParser.Provider.BiliBili/Parsing"
click node_redirect "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Sharing/Parsing/UrlRedirectResolver.cs"
click node_transport "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Sharing/Parsing/SafeHttpTransport.cs"
click node_config "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Sharing/PluginConfig.cs"
click node_unified "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/MessageHandling/UnifiedMediaMessageHandler.cs"
click node_renderer "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/MessageHandling/ProviderMediaCardRenderer.cs"
click node_host "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/ProviderHostServices.cs"
click node_downloader "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/Downloading/ProviderDownloadService.cs"
click node_runtime_state "https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Sharing/Runtime/MyParserRuntime.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_coordinator,node_tasks,node_registry toneBlue
class node_bili,node_bili_article,node_douyin,node_douyin_comments,node_heybox,node_netease,node_weixin,node_x,node_youtube,node_other_providers toneAmber
class node_redirect,node_transport,node_config toneMint
class node_unified,node_renderer,node_host toneRose
class node_downloader,node_runtime_state,node_user,node_platforms,node_host_service toneIndigo
```

## Components

### Plugin runtime

- [Parse coordinator](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/Runtime/MessageParseCoordinator.cs): `src/MyParser/Runtime/MessageParseCoordinator.cs`
- [Parse task manager](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/Runtime/ParseTaskManager.cs): `src/MyParser/Runtime/ParseTaskManager.cs`
- [Provider catalog](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/Runtime/ProviderCatalog.cs): `src/MyParser/Runtime/ProviderCatalog.cs`

### Platform providers

- [Bilibili parsing](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.BiliBili/Parsing/BilibiliParser.cs): `src/MyParser.Provider.BiliBili/Parsing/BilibiliParser.cs`
- [Articles and formats](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.BiliBili/Services/BilibiliArticleParser.cs): `src/MyParser.Provider.BiliBili/Services/BilibiliArticleParser.cs`
- [Douyin parsing](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.Douyin/Services/DouyinParseService.cs): `src/MyParser.Provider.Douyin/Services/DouyinParseService.cs`
- [Douyin comments](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.Douyin/Services/DouyinCommentService.cs): `src/MyParser.Provider.Douyin/Services/DouyinCommentService.cs`
- [Heybox parsing](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.Heybox/Parsing/HeyboxParser.cs): `src/MyParser.Provider.Heybox/Parsing/HeyboxParser.cs`
- [Music parsing](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.NetEaseCloudMusic/Parsing/NetEaseParser.cs): `src/MyParser.Provider.NetEaseCloudMusic/Parsing/NetEaseParser.cs`
- [Channels parsing](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.WeixinChannels/Parsing/WeixinChannelsParser.cs): `src/MyParser.Provider.WeixinChannels/Parsing/WeixinChannelsParser.cs`
- [X parsing](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Provider.X/Parsing/XParser.cs): `src/MyParser.Provider.X/Parsing/XParser.cs`
- [YouTube parsing](https://github.com/shirokaproject/shirobot.plugin.myparser/tree/main/src/MyParser.Provider.YouTube): `src/MyParser.Provider.YouTube`
- [Platform parsers](https://github.com/shirokaproject/shirobot.plugin.myparser/tree/main/src/MyParser.Provider.BiliBili/Parsing): `src/MyParser.Provider.BiliBili/Parsing`

### Shared parsing

- [URL redirects](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Sharing/Parsing/UrlRedirectResolver.cs): `src/MyParser.Sharing/Parsing/UrlRedirectResolver.cs`
- [Safe HTTP transport](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Sharing/Parsing/SafeHttpTransport.cs): `src/MyParser.Sharing/Parsing/SafeHttpTransport.cs`
- [Runtime configuration](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Sharing/PluginConfig.cs): `src/MyParser.Sharing/PluginConfig.cs`

### Message delivery

- [Unified message handler](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/MessageHandling/UnifiedMediaMessageHandler.cs): `src/MyParser/MessageHandling/UnifiedMediaMessageHandler.cs`
- [Card rendering](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/MessageHandling/ProviderMediaCardRenderer.cs): `src/MyParser/MessageHandling/ProviderMediaCardRenderer.cs`
- [Host services](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/ProviderHostServices.cs): `src/MyParser/ProviderHostServices.cs`

### Media processing

- [Provider downloads](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser/Downloading/ProviderDownloadService.cs): `src/MyParser/Downloading/ProviderDownloadService.cs`
- [Runtime cache](https://github.com/shirokaproject/shirobot.plugin.myparser/blob/main/src/MyParser.Sharing/Runtime/MyParserRuntime.cs): `src/MyParser.Sharing/Runtime/MyParserRuntime.cs`

### Other components

- **Message sender**
- **External platforms**
- **ShiroBot host**

## Connections

- Message sender → Parse coordinator: submits links (evidence: `README.md`)
- Parse coordinator → Parse task manager: queues parsing
- Parse coordinator → Provider catalog: selects provider
- Bilibili parsing → Articles and formats: delegates articles (evidence: `src/MyParser.Provider.BiliBili/Parsing/BilibiliParser.cs`)
- Douyin parsing → Douyin comments: fetches comments (evidence: `src/MyParser.Provider.Douyin/Services/DouyinParseService.cs`)
- Bilibili parsing → External platforms: requests content
- Douyin parsing → External platforms: requests content
- Heybox parsing → External platforms: requests content
- Music parsing → External platforms: requests content
- Channels parsing → External platforms: requests content
- X parsing → External platforms: requests content
- YouTube parsing → External platforms: requests content
- Unified message handler → Card rendering: renders cards (evidence: `src/MyParser/MessageHandling/UnifiedMediaMessageHandler.cs`)
- Unified message handler → Provider downloads: downloads media
- Unified message handler → Host services: sends results
- Host services → ShiroBot host: delivers messages
- Provider downloads → Runtime cache: uses download cache (evidence: `src/MyParser/Downloading/ProviderDownloadService.cs`)
- Bilibili parsing → Safe HTTP transport: creates HTTP handler
- Safe HTTP transport → URL redirects: limits redirects (evidence: `src/MyParser.Sharing/Parsing/SafeHttpTransport.cs`)
- X parsing → Runtime configuration: reads proxy settings (evidence: `src/MyParser.Provider.X/Parsing/XParser.cs`)
- Parse coordinator → Unified message handler: passes parse results
- Runtime configuration → Bilibili parsing: configures parsing (evidence: `src/MyParser.Provider.BiliBili/Parsing/BilibiliParser.cs`)
- Runtime configuration → Douyin parsing: configures parsing (evidence: `src/MyParser.Provider.Douyin/Services/DouyinParseService.cs`)
