Your personal Telegram bot for discovering artists, setlists, and lyrics. Perfect for music enthusiasts and concert-goers! π΅
Are you planning to go to a concert? This Telegram bot will be your companion, like a good buddy! π
With ConcertBuddy, you can:
- Explore artist and band biographies.
- Check out setlists from recent concerts.
- Listen to tracks and read their lyrics.
Just write the artist/band name to the ConcertBuddy bot and enjoy!
A few of the things you can do with ConcertBuddy:
- β
Search artist / band by name
MusicBrainz
- β
Read artist / band biography
Last.fm
- β
View setlists from recent concerts
Setlist.fm
- β
Listen to tracks
- Directly from:
Yandex
- External link:
Spotify
- Directly from:
- β
Read the lyrics of the tracks
- Different lyric providers:
AZLyrics
,Genius
,SongLyrics
,MusixMatch
,LyricFind
- Different lyric providers:
For bug reports, suggestions, or feature requests, please use the issue tracker.
For direct feedback, reach out on Telegram.
Feature requests are always welcome.
Project is created with:
.NET: 6.0
Microsoft Visual Studio Community 2022
docker
- Telegram.Bot - the most popular .NET Client for π€ Telegram Bot API
- LyricsScraperNET - πΌ a library for .NET that provides an API to search for lyrics of a song from the web
- SpotifyAPI-NET - a client for Spotify's Web API, written in .NET
- MusicBrainzAPI - Implementation of the MuzicBrainz API v2
- Inflatable.Lastfm - Last.fm SDK for modern .NET platforms
- Genius.NET - C# library to access the Genius REST API in .NET
- HtmlAgilityPack - agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT (you actually don't HAVE to understand XPATH nor XSLT to use it, don't worry...)
- Serilog - simple .NET logging with fully-structured events
- Yandex.Music API - unofficial wrapper for the Yandex.Music API
The bot is hosted on an Ubuntu 22.10 64-bit server using a DigitalOcean droplet and runs in a Docker container from docker hub repository. Hosting costs $6/month.
- Create and configure
ConcertBuddy/ConcertBuddy.ConsoleApp/appsettings.json
file with settings Configuration.cs from template appsettings.template.json. - Build and publish docker image usingn the Dockerfile to docker hub registry.
- Use docker-compose.yml to run the container.
Name | Link |
---|---|
Development | TestConcertBuddy |
Production | ConcertBuddy |
Event logging is managed by Serilog, with logs written to console, debug, and file. Log rotation is configured. Logging settings can be found in appsettings.json
. Example: appsettings.template.json
See the full roadmap on the Github project page or Issue board
- Migration from .NET 6 to .NET 8
- Use FakeItEasy instead of Moq
- Optimize docker image size by using alpine in dockerfile
- Updated external libraries to the latest version
- Fixed a problem with lyric searching (Issue 33)
- Use LyricsScraperNET library instead of LyricsScraper project.
- Updated external libraries to the latest version (Spotify, Telegram, Yandex)
BreakingChanges:
- Refactoring. MusicSearcherClient has many responsibilities and bottleneck (Issue 30)
- Use nuget package of Yandex api instead of project reference (Issue 21)
Bugfixes:
- Map properly MusicBrainz to Spotify track while searching (Issue 29)
- Track searching will return nothing if track not found in spotify (Issue 27)
- Can't find Wu tang artist's information and tracks (Issue 28)
- Can't initialize Yandex client! System.Net.WebException: The remote server returned an error: (400) Bad Request. (Issue 31)
Bugfixes:
- Track searching will return nothing if track not found in spotify (Issue 27)
- Disable page navigation if nothing found (Issue 26)
- Added receiving artist's top 10 tracks from Spotify (Issue 9)
- Catch unhandled exceptions and log them. (Issue 24)
- Configure write logs to file with rotation with docker volume. (Issue 25)
- Listening to the track directly in the telegram. Use Yandex track storage. (Issue 8)
Bugfixes:
- Made SearchLyric async. (Issue 16)
- Remove async from telegram messages validation. Move callback messages in MessageHelper. (Issue 18)
- Migrate app.config to appsettings.json with DI.
- Fixed async task order in SearchArtistByMBID method.
- Rename methods with Async.
- Added some TODO comments.
- Added MemoryCache when searching for artists by mbid to reduce API calls.
- Fixed logs format with date and scope.
- Publish docker version 0.0.1 and deploy on server. π
If you want to support this project or my work in general, you can donate via the link below.
This is always optional! Thank you! π