- deps: drop requirements.txt
- uv: set it up
- pyproject: update version provider to uv
- pyproject: define project
- system: drop status plugin
- deps: update dependencies
- commitizen: remove the old config
- commitizen: update configurations
- pyproject: set up commitizen
- license: update year
- settings -> bot.settings
- lastfm: await set_up_lastfm in on_data_change
- lastfm: use tuples for timeframes
- lastfm: handle tracks without an album
- deezer: use self in check_token method
- qobuz,deezer: add force_download and force_update
- deezer: add album genre field
- music: add resume support for downloads
- misc: add start plugin
- qobuz: add track preview
- qobuz,deezer: add a download button to the search results
- date: add jalali date command
- helper: rename it to misc
- deezer: update a comment
- group-manager: log unhandled exceptions
- group-manager: add
kickme - group-manager: add
delban,delkickanddelmute - lastfm: include album name in the status text
- weather: mention weather data source
- lastfm: cleanup time frames
- lastfm: simplify track and artist names for recent tracks
- change
__all__from list to tuple
- translate: support inline text translation
- date: add date plugin
- music: resolve unmatched f-string issues for python 3.10
- deezer: answer with an empty message for preview
- trasnlate: improve response text
- translate: improve error message
ConfigtoSettings- helper: Improve code and grammar
- status: simplify bot detection
- music: improve grammar
- weather: improve error message
- weather: add weather plugin
- throw: add
dice,dart,basketball,bowling, andslotcommands - throw: add throw plugin
- translate: add translate plugin
- qrcode: add qrcode plugin
- throw: put all commands in one function
- qobuz,deezer: download tracks as a tmp file at first
- deezer: add track preview
- qobuz,deezer: improve download is complete text
- qobuz,deezer: handle edge case during message deletion
- qobuz,deezer: ensure correct message deletion
- qobuz,deezer: respond to empty command call
- qobuz,deezer: delete download messages after 5 seconds
- deezer: add
check_token - music: add logging.debug for exceptions
- qobuz: resolve download issues
- qobuz,deezer: handle case where no track was found in search
- music: prevent double callback answers
- qobuz: remove the useless check in
check_token
- lastfm: add proxy support
- music: add retry to downloads
- music: fetch track lyrics from deezer
- music: add proxy support for downloads
- music: improve error handling
- qobuz: add proxy support
- music: add version to the track title
- deezer: add support for track URLs
- qobuz: only download the original cover art
- deezer: announce when the downloads are done
- qobuz,deezer: add try-except to the downloads
- lastfm: make
set_up_lastfmandon_data_changeasync - lastfm: initialize lastfm when it is in use
- music: use artists instead of artist
- qobuz,deezer: answer to the trackinfo callback
- deezer: handle empty song contributors
- deezer: use
deezer_album_pathfor album path
- music: answer with an empty message instead of wait
- status: use the bot uptime instead of local uptime
- lastfm: replace
lastfm_chosenvariable with a lambda function
- group-manager: support cli
- status: support cli
- define
__bot_only__ - status: add battery percentage
- status: add ping latency
- status: clean up inline keyboard
- status: prioritize bot class uptime source
- status: add os
- status: add python version
- status: add system uptime
- status: add disk usage
- status: add memory usage
- status: add uptime
- group-manager: improve the pin/unpin mechanism
- group-manager: disable the pin notification
- group-manager: announce after pining/unpining a message
- group-manager: add
unpincommand - group-manager: add
pincommand
- group-manager: improve unpinning pinned message
- group-manager: clean up code
- group-manager: improve insufficient permission error message
- group-manager: improve the pin/unpin text
- note: rewrite return early logic
- whisper: handle user resolve failure
- group-manager: restrict/unrestrict commands should only work in groups
- note: send help text correctly
- note: handle flag in
savenotecorrectly
- reformat code manually
- Client -> Bot
- deezer: implement pagination for search results
- deezer: add
offsetto thesearch_trackmethod - qobuz: implement pagination for search results
- qobuz: add
offsetto thesearchmethod
- deezer,qobuz: handle client initialization failure
- note:
getnotecommand reply consistently even with -d flag
- note: allow auto-deletion of /getnote command message
- group-manager: use settings timezone
- deezer: use async for requests
- deezer: add support for MP3 tracks
- deezer: add support for downloading an album
- deezer: use defined proxy for requests
- deezer: add download track feature
- deezer: implement
get_albummethod - deezer: add
trackinfocallback query - deezer: implement
get_track_covermethod - deezer: implement my own
get_trackmethod - deezer: add search command
- deezer: add my own deezer class
- deezer: implement
on_data_changehook - deezer: add basics
- deezer: add proxy support
- deezer: add Deezer API
- deezer: stop execution after handling search query
- deezer: improve failure handling during Deezer setup
- deezer: fix
get_albumon a track inside an album - deezer: improve track taging
- deezer: pycryptodome -> cryptography
- qobuz: improve missing data error message
- lastfm: improve missing data error message
- deezer: improve songs fetch for albums
- deezer: improve
get_track_covermethod
- group-manager: add support for reason in ban, mute, and kick
- group-manager: add year duration support
- group-manager: add week duration support
- group-manager: add unban/unmute buttons to ban/mute messages
- group-manager: strip leading whitespace from reason string
- group-manager: handle duration overflows
- group-manager: avoid showing duration hint for non-duration commands
- group-manager: improve user experience
- group-manager: move unban and unmute logic to dedicated functions
- Adds a new column
- note: add support for private notes
- LastFM: only use
get_recent_tracks
- note: reply with note if command is reply
- whisper: disable parse mode in whisper notification message
- note: update the parameter types of
serialize_entitiesanddeserialize_entities
- whisper: improve chosen inline handler filter
- config: add pyproject.toml support for flake8
- note: return None when entities is None in
serialize_entities
- whisper: add filter to handle only chosen inlines for whisper
- LastFM: add filter to handle only chosen inlines for LastFM
- note: don't parse empty entity
- note: save media caption
- note: save media file_id
- note: don't save entity parameters with None value
- LastFM: move inline query handler to group 1
- whisper: update username regex to allow numbers
- whisper: expand exception handling for usernames
- whisper: move it to the helper folder
- LastFM: use LastFM direct track URL instead of search URL
- LastFM: handle if
get_now_playingis None
- group-manager: add ban and mute durations to the message
- group-manager: add support for duration in ban and mute command
- group-manager: add unmute command
- group-manager: add mute command
- group-manager: add kick command
- group-manager: add unban command
- group-manager: add ban command
- group-manager: handle case when user is not a member of the chat
- group-manager: move around privilege if-statements
- config: configure pre commit
- config: configure black and flake8
- note: simplify note extraction logic
- LastFM: show a notification to the user to wait
- LastFM: add user's top artists/albums/tracks
- LastFM: add LastFM expanded status result query
- LastFM: use the recent / playing now track cover
- LastFM: add user play count to tracks
- LastFM: fully utilize
get_recent_tracks - LastFM: append relative time
- LastFM: add expanded mode
- LastFM: handle LastFM errors in
lastfm_status - LastFM: add refresh button
- LastFM: add show cover button
- LastFM: save login password in md5
- LastFM: hyperlink track title to search page
- LastFM: add LastFM prefix to texts and id
- LastFM: add LastFM status
- LastFM: add status to inline query
- LastFM: add basics
- LastFM: add
lastfm_callbackto__all__
- LastFM: improve text for user's top artists, albums, and tracks
- LastFM: [TMP] use
get_now_playingalongsideget_recent_tracks
- LastFM: optimize play timestamp handling
- whisper: display receiver's full name in whisper message
- note: replace hardcoded cmd with
actionvar
- get_playlist and get_artist are not used anywhere. If I want to use them, I'll bring them back.
- music: state source of tracks in track's comment
- Qobuz: remove unused methods
- Qobuz: use async for requests
- Qobuz: use
orgsize cover for tracks
- note: prioritize saving replied message
- note: don't parse
bot_commandentity
- note: return early when saving note if args < 2
- requirements: add
sqlalchemy - whisper: switch to SQL
- whisper: switch to SQL
- whisper: change callback data separator
- whisper: encrypt whispers
- whisper: display the whisper
- whisper: save the whisper
- whisper: add the inline query regex
- whisper: add basics
- whisper: correct user validation logic
- note: support
TEXT_MENTIONin entities - note: support media
- note: support
entities - note: allow non-admin users use
getnoteandnotes - note: support saving from replied text
- note: add type to notes
- note: add
notes - note: add
delnote - note: add
getnote - note: change
addnotetosavenote - note: add
addnote - note: define commands
- note: add basics
- note: skip parsing
userinentitieswhenNone - note:
returnwhen argument count is incorrect
- Qobuz: make album path and track name configurable
- music: mention track's duration in keyboards
- Qobuz: add search track command
- Qobuz: check the auth token before downloading
- qobuz: implement
on_data_changehook - music: split qobuz plugin into two main and util plugin
- add dummy buttons before and after the tracks button
- rename qobuz folder to music
- add
__all__to Qobuz - add installation section to the README
- add
requirements.txt - remove a leftover test
- switch to
httpxfromrequestsin Qobuz plugin - don't embed the album cover when it's over 4MB
- add
copyrighttag - add
totaltracksandtotaldiscstag - append several tags to the tracks
- embed the album cover into FLAC tracks
- download the album cover
- include the
download_pathinsidealbum_path - add Qobuz downloader
- ignore pycache folder
- Add a description for this repo
- initialize readme
- Add license
- don't embed the album cover when it's over 4MB
- save the track tag
- convert exception to str