261 lines
5.2 KiB
Python
261 lines
5.2 KiB
Python
from typing import Optional
|
|
from pydantic import BaseModel
|
|
|
|
"""
|
|
Karma
|
|
"""
|
|
|
|
class ValidKarmaUpdateRequest(BaseModel):
|
|
"""
|
|
Requires authentication
|
|
- **granter**: who updated the karma
|
|
- **keyword**: keyword to update karma for
|
|
- **flag**: either 0 (decrement) for --, or 1 (increment) for ++
|
|
"""
|
|
|
|
granter: str
|
|
keyword: str
|
|
flag: int
|
|
|
|
|
|
class ValidKarmaRetrievalRequest(BaseModel):
|
|
"""
|
|
- **keyword**: keyword to retrieve karma value of
|
|
"""
|
|
|
|
keyword: str
|
|
|
|
class ValidTopKarmaRequest(BaseModel):
|
|
"""
|
|
- **n**: Number of top results to return (default: 10)
|
|
"""
|
|
n: Optional[int] = 10
|
|
|
|
"""
|
|
LastFM
|
|
"""
|
|
|
|
class LastFMException(Exception):
|
|
pass
|
|
|
|
class ValidArtistSearchRequest(BaseModel):
|
|
"""
|
|
- **a**: artist name
|
|
"""
|
|
|
|
a: str
|
|
|
|
class Config:
|
|
schema_extra = {
|
|
"example": {
|
|
"a": "eminem"
|
|
}
|
|
}
|
|
|
|
class ValidAlbumDetailRequest(BaseModel):
|
|
"""
|
|
- **a**: artist name
|
|
- **release**: album/release name (as sourced from here/LastFM)
|
|
"""
|
|
|
|
a: str
|
|
release: str
|
|
|
|
class Config:
|
|
schema_extra = {
|
|
"example": {
|
|
"a": "eminem",
|
|
"release": "houdini"
|
|
}
|
|
}
|
|
|
|
class ValidTrackInfoRequest(BaseModel):
|
|
"""
|
|
- **a**: artist name
|
|
- **t**: track
|
|
"""
|
|
|
|
a: str
|
|
t: str
|
|
|
|
class Config:
|
|
schema_extra = {
|
|
"example": {
|
|
"a": "eminem",
|
|
"t": "rap god"
|
|
}
|
|
}
|
|
|
|
"""
|
|
Rand Msg
|
|
"""
|
|
|
|
class RandMsgRequest(BaseModel):
|
|
"""
|
|
- **short**: Short randmsg?
|
|
"""
|
|
|
|
short: Optional[bool] = False
|
|
|
|
"""
|
|
YT
|
|
"""
|
|
|
|
class ValidYTSearchRequest(BaseModel):
|
|
"""
|
|
- **t**: title to search
|
|
"""
|
|
|
|
t: str = "rick astley - never gonna give you up"
|
|
|
|
"""
|
|
XC
|
|
"""
|
|
|
|
class ValidXCRequest(BaseModel):
|
|
"""
|
|
- **key**: valid XC API key
|
|
- **bid**: bot id
|
|
- **cmd**: bot command
|
|
- **data**: command data
|
|
"""
|
|
|
|
key: str
|
|
bid: int
|
|
cmd: str
|
|
data: Optional[dict]
|
|
|
|
"""
|
|
Transcriptions
|
|
"""
|
|
|
|
class ValidShowEpisodeListRequest(BaseModel):
|
|
"""
|
|
- **s**: show id
|
|
"""
|
|
|
|
s: int
|
|
|
|
class ValidShowEpisodeLineRequest(BaseModel):
|
|
"""
|
|
- **s**: show id
|
|
- **e**: episode id
|
|
"""
|
|
|
|
s: int
|
|
e: int
|
|
|
|
"""
|
|
Lyric Search
|
|
"""
|
|
|
|
class ValidLyricRequest(BaseModel):
|
|
"""
|
|
- **a**: artist
|
|
- **s**: song
|
|
- **t**: track (artist and song combined) [used only if a & s are not used]
|
|
- **extra**: include extra details in response [optional, default: false]
|
|
- **lrc**: Request LRCs?
|
|
- **sub**: text to search within lyrics, if found lyrics will begin at found verse [optional]
|
|
- **src**: the script/utility which initiated the request
|
|
- **excluded_sources**: sources to exclude (new only)
|
|
"""
|
|
|
|
a: Optional[str] = None
|
|
s: Optional[str] = None
|
|
t: Optional[str] = None
|
|
sub: Optional[str] = None
|
|
extra: Optional[bool] = False
|
|
lrc: Optional[bool] = False
|
|
src: str
|
|
excluded_sources: Optional[list] = None
|
|
|
|
model_config = {
|
|
"json_schema_extra": {
|
|
"examples": [
|
|
{
|
|
"a": "eminem",
|
|
"s": "rap god",
|
|
"src": "WEB",
|
|
"extra": True,
|
|
"lrc": False,
|
|
"excluded_sources": [],
|
|
}]
|
|
}
|
|
}
|
|
|
|
|
|
class ValidTypeAheadRequest(BaseModel):
|
|
"""
|
|
- **query**: query string
|
|
"""
|
|
pre_query: Optional[str] = None
|
|
query: str
|
|
|
|
"""
|
|
Radio
|
|
"""
|
|
|
|
class RadioException(Exception):
|
|
pass
|
|
|
|
class ValidRadioSongRequest(BaseModel):
|
|
"""
|
|
- **key**: API Key
|
|
- **artist**: artist to search
|
|
- **song**: song to search
|
|
- **artistsong**: may be used IN PLACE OF artist/song to perform a combined/string search in the format "artist - song"
|
|
- **alsoSkip**: Whether to skip immediately to this track [not implemented]
|
|
"""
|
|
key: str
|
|
artist: Optional[str] = None
|
|
song: Optional[str] = None
|
|
artistsong: Optional[str] = None
|
|
alsoSkip: Optional[bool] = False
|
|
|
|
class ValidRadioTypeaheadRequest(BaseModel):
|
|
"""
|
|
- **query**: Typeahead query
|
|
"""
|
|
query: str
|
|
|
|
|
|
class ValidRadioQueueGetRequest(BaseModel):
|
|
"""
|
|
- **key**: API key (optional, needed if specifying a non-default limit)
|
|
- **limit**: optional, default: 15k
|
|
"""
|
|
|
|
key: Optional[str] = None
|
|
limit: Optional[int] = 15_000
|
|
|
|
class ValidRadioNextRequest(BaseModel):
|
|
"""
|
|
- **key**: API Key
|
|
- **skipTo**: UUID to skip to [optional]
|
|
"""
|
|
key: str
|
|
skipTo: Optional[str] = None
|
|
|
|
class ValidRadioReshuffleRequest(ValidRadioNextRequest):
|
|
"""
|
|
- **key**: API Key
|
|
"""
|
|
|
|
class ValidRadioQueueShiftRequest(BaseModel):
|
|
"""
|
|
- **key**: API Key
|
|
- **uuid**: UUID to shift
|
|
- **next**: Play next if true, immediately if false, default False
|
|
"""
|
|
key: str
|
|
uuid: str
|
|
next: Optional[bool] = False
|
|
|
|
class ValidRadioQueueRemovalRequest(BaseModel):
|
|
"""
|
|
- **key**: API Key
|
|
- **uuid**: UUID to remove
|
|
"""
|
|
key: str
|
|
uuid: str |