Foreword¶
To view League of Legends esports in the DSH client, the common approach is to open the official website or a third-party data site. The schedule, scores, live stream links, and in-game data are scattered across several pages, requiring manual timezone conversion. dsh-lol-esports consolidates these into a panel in the DSH Web sidebar: the schedule and results are merged into a timeline, and ongoing matches come with real-time in-game data. Below is an introduction to the plugin’s positioning, features, installation methods, and known limitations.
What is it¶
neilny/dsh-lol-esports is a DSH client plugin maintained by NeilNy, forked from Rustyibe/dsh-lol. It updates at its own pace and does not follow upstream updates. The main incremental change compared to the upstream version is an in-game real-time data bar, along with local modifications for player name processing, BO end determination, and empty state rendering. The community directory classifies it under the “Client” category with 0 stars, making it a personal project.
It solves the problem: During the World Championship (Worlds), you can watch the schedule, scores, and viewing links in DSH without switching apps, and see the kills, gold, towers, dragons, barons, and the K/D/A and CS of all ten players in the ongoing match.
Core Features¶
-
A timeline grouped by local date. The schedule and results are merged; past matches are on top, today in the center, and future at the bottom. It auto-scrolls to the today group when the panel opens and performs a silent refresh every 60 seconds.
-
Match cards. Display the stage, BO number, status badge, start time, and score. Active cards are highlighted and include a real-time in-game data bar.
-
Stage filtering. Groups, Swiss round, Quarter-finals, Semi-finals, Finals. Only lists stages that actually exist for the current tournament.
-
Viewing links. Official broadcast page, Chinese VODs (YouTube jumps directly to the start of the game), English streams, Twitch streams.
-
Stream selection by language. If the interface is Chinese, prioritize Chinese streams and VODs; if English, prioritize English streams.
-
Single-match AI and Tournament AI. “Ask AI” on a match card brings the event, stage, matchup, BO, time, score, and viewing link into a new session. “Chat Tournament” at the top brings finished, upcoming, and current results into a new session based on “Today” or a specific stage.
-
In-game real-time data. Kills, gold, towers, dragons, barons, plus the K/D/A and CS of ten players. The data bar shows a delay reading (how many seconds behind live), changing to “Match Ended” after the game concludes. Values slide in; if the value doesn’t change, there is no flicker.
-
Local BO end determination. Ends when either side reaches the required wins; it does not wait for the API to flip the status (Riot’s status lags by minutes).
-
Player name prefix removal.
IG TheShydisplays asTheShy. It only strips the prefix if the first segment equals the team code;Hans Samais unaffected. -
Bilingual. Follows DSH language settings. Times are rendered in the local timezone.
Installation & Enablement¶
Requires DSH >= 0.2.1-rc.2 < 0.3.0 (declared in engines.dsh; installation/activation will be rejected if not met). No build is required for installation; client.js is the pre-packaged artifact in the repository.
# Desktop version
dsh plugin --profile desktop add github:NeilNy/dsh-lol-esports
# Or Web version
dsh plugin --profile web add github:NeilNy/dsh-lol-esports
Restart DSH after installation (reopen after ⌘Q for desktop), a trophy icon will appear in the left sidebar. Click to open the panel. Current version 1.2.0, MIT license, LICENSE included in the repository.
Typical Usage¶
-
Open the panel; it auto-locates to the match group for today. Scroll up to see historical schedules and results, scroll down to see upcoming schedules.
-
Click a match card to see the stage, score, and viewing links. During a match, a real-time data bar appears on the card, including kills, gold, towers, dragons, barons, and K/D/A and CS for both teams’ ten players.
-
When you need to ask questions based on this match, click “Ask AI” on the card; the event, stage, matchup, BO, time, score, and viewing link will be brought into a new session as context.
-
To chat about the entire tournament, click “Chat Tournament” at the top. You can select “Today” or a specific stage; finished, upcoming, and current results will all enter the session.
-
No need to convert timezones; the plugin renders based on the local timezone and switches between Chinese and English following DSH’s language settings.
Data & Privacy¶
Schedule and details go through https://esports-api.lolesports.com/persisted/gw/{getSchedule,getEventDetails}, with the public x-api-key used by the lolesports frontend. Live in-game data goes through https://feed.lolesports.com/livestats/v1/window/{gameId} (10-second window). All are public GET requests made directly by the browser: no proxy, no account, no local file read/write, no telemetry. The panel is a pure frontend plugin that only registers two slots: main and sidebar.panellist.
Applicability & Notes¶
Suitable for those who want to watch Worlds in DSH or bring tournament context into AI sessions. The plugin runs within the current DSH process, so permissions match that process. You should open the repository and review the source code and license before installing to confirm the interface call scope meets your expectations. This is a personal fork project with 0 stars, no upstream updates; if there are issues, you need to submit an issue or fix the code yourself.
Known Limitations:
-
Only supports Worlds (World Championship). To support other leagues, modify
WORLDS_IDinclient.js(Worlds =98767975604431411). -
Real-time data always lags by about a minute. Riot’s feed requires the window end time to be at least 50 seconds before the current time and aligned to 10 seconds. The plugin takes
now - 65sand polls every 20 seconds. -
Matches without Chinese or English VODs only show “Official Event Page” in the details.
-
The official site
lolesports.comforces a jump toen-US, so official site links cannot be localized. -
If the lolesports public key is rotated, you need to update
API_KEYat the top ofclient.js.
Development¶
Source code is TypeScript + JSX, built with esbuild into client.js (DSH client module format). The artifact is committed to the repository, so no build is run during installation:
npm install
npm run check # tsc --noEmit
npm test # run node:test after packing (module contract + data layer)
npm run build # src/main.ts -> client.js
The repository structure separates files by responsibility: src/main.ts is the entry point, registered to window.__ModuleLoader__; src/panel.ts handles inject/apply; src/ui.tsx is the React components; src/api.ts covers the three sets of interfaces for schedule, details, and in-game real-time data and does normalization; the rest is formatting, links, i18n, styles, constants, and types. React can only obtain require('react') from the host injection and cannot use static import; src/runtime.ts exists for this purpose.
Summary¶
The value of this plugin lies in consolidating the Worlds schedule, results, viewing links, and in-game real-time data into the DSH sidebar, and supporting the direct bringing of tournament context into AI sessions. Its boundaries are also clear: it only covers Worlds, real-time data naturally lags by a minute, and it relies on the lolesports public interface and key. It is worth spending a few minutes reviewing the source code before installing.
- Directory: https://www.skillhub.cn/plugins/NeilNy/dsh-lol-esports
- GitHub: https://github.com/NeilNy/dsh-lol-esports