A NoneBot2-based bot for Link! Like! LoveLive! (Hasu no sora Jogakuin School Idol Club). This bot provides features for searching and displaying various game-related information using high-quality image generation.
- Card Search: Detailed statistics, skills, evolution materials, and high-quality card illustrations.
- Member Information: Comprehensive profiles including birthdays, hobbies, favorite foods, and available costumes.
- Music Database: Information on songs, stage effects, mastery levels, and chart details.
- Comic Viewer: Access to in-game 4-koma comics with character-based filtering.
- Data Management: Tools for maintaining and updating the local game database.
- Python 3.9 or higher.
- A self-hosted AstrBot Text2Image Service for high-quality HTML rendering (optional but recommended). For more information, see this page.
- Clone the repository.
uv sync- Create a
.envfile and configure your NoneBot2 and game API environment variables. - Ensure the required directories are populated with the game data files.
- Set up the asset directories (e.g., exports, assets) for images and icons.
- Set the
T2I_SERVICE_URLin your environment variables. - Run the bot using
uv run python bot.py.
- Fast tests (no real masterdata required):
uv run python scripts/run_fast_tests.py - Realdata tests (uses sampled real masterdata):
uv run python scripts/run_realdata_tests.py - Realdata tests with custom path:
uv run python scripts/run_realdata_tests.py <masterdata_path>
/list: Display a list of characters./card [ID]: Search for specific card details./find [Name/ID]: Show all cards of a specific character./search [Query]: Search for cards by keywords./chara [Name/ID]: Display member profile and information./music [Title/ID]: Search for song and stage details./comic [Query]: Browse and search for in-game comics./live: Generate the current With×MEETS/Fes×LIVE info image./live_detail [Index] [--spoiler]: Generate a detail image for the indexed live entry./dbrebuild: Rebuild the local game database (Superuser only)./update with_live: Refresh archive home snapshot and cache the latest archive detail (Superuser only).
Required environment variables:
GAME_API_BASE_URL: API base URL, ends with/v1GAME_API_X_API_KEY: API key
Optional environment variables:
GAME_API_HOST: Host header overrideGAME_API_UA_PREFIX: UA prefixGAME_API_DEVICE_TYPE: Device typeGAME_API_USER_API_VERSION: API version header
Credential file lookup order:
LINKURA_CONFIG_PATHcache/game_api/config.jsonlinkura-cli_config.json%USERPROFILE%/.config/linkura-cli/config.json
The service validates the current session_token before requests. If expired, it will call /user/login, update the token, and then continue.
/update with_live writes to cache/game_api/with_live.json and keeps a backup at cache/game_api/with_live.prev.json.
Key fields in the snapshot:
updated_at/previous_updated_at: latest and previous refresh timestampswith_live_archive_live_home: With Live records fromlive_archive_list(live_type == 2)with_live_archive_trailer_home: With Live records fromtrailer_archive_list(live_type == 2)latest_archive: latest candidate archive entrylatest_archive_detail: detail payload fromarchive/get_with_archive_data(falls back tolatest_archiveon failure)latest_archive_detail_meta: detail source, stale flag, and fetch errors
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
- This repository is an unofficial project and is not affiliated with the game operator or related rights holders.
- The repository contents are primarily intended for personal study, research, and tooling development.
- The author provides no warranty regarding correctness, completeness, long-term compatibility, or fitness for any particular purpose.
- Users are responsible for ensuring that their usage complies with local laws, platform rules, and third-party rights requirements.
- This software is provided "as is" without any warranty. Use at your own risk.