Merge branch 'beta' into pr/82
This commit is contained in:
@@ -127,7 +127,7 @@ class Basic(commands.Cog):
|
||||
@app_commands.autocomplete(query=play_autocomplete)
|
||||
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
|
||||
async def play(self, ctx: commands.Context, *, query: str, start: str = "0", end: str = "0") -> None:
|
||||
"Loads your input and added it to the queue."
|
||||
"Loads your input into the queue"
|
||||
player: voicelink.Player = ctx.guild.voice_client
|
||||
if not player:
|
||||
player = await voicelink.connect_channel(ctx)
|
||||
@@ -222,7 +222,7 @@ class Basic(commands.Cog):
|
||||
])
|
||||
@commands.dynamic_cooldown(cooldown_check, commands.BucketType.guild)
|
||||
async def search(self, ctx: commands.Context, *, query: str, platform: str = SearchType.YOUTUBE.name):
|
||||
"Loads your input and added it to the queue."
|
||||
"Loads your search query and shows the results."
|
||||
player: voicelink.Player = ctx.guild.voice_client
|
||||
if not player:
|
||||
player = await voicelink.connect_channel(ctx)
|
||||
|
||||
@@ -1,106 +0,0 @@
|
||||
# ------------------------------------------------------------------------------------------------------------ #
|
||||
|
||||
# For installation instructions please visit - https://docs.vocard.xyz/latest/bot/setup/docker-linux/
|
||||
# or for Windows Docker - https://docs.vocard.xyz/latest/bot/setup/docker-windows/
|
||||
|
||||
# ------------------------------------------ THANK YOU FOR READING! ------------------------------------------ #
|
||||
name: vocard
|
||||
services:
|
||||
lavalink:
|
||||
container_name: lavalink
|
||||
# image: ghcr.io/lavalink-devs/lavalink:latest
|
||||
# Use build to run Lavalink on the latest JRE 23 version (for better performance)
|
||||
build:
|
||||
context: ./lavalink
|
||||
dockerfile: ./Dockerfile-lavalink
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- _JAVA_OPTIONS=-Xmx1G
|
||||
- SERVER_PORT=2333
|
||||
# there is no point in changing the password here, since the container is available only in docker network
|
||||
- LAVALINK_SERVER_PASSWORD=youshallnotpass # Change password if needed (don't forget to change it in healthcheck below and settings.json)
|
||||
volumes:
|
||||
- ./lavalink/application.yml:/opt/Lavalink/application.yml
|
||||
networks:
|
||||
- vocard
|
||||
expose:
|
||||
- "2333"
|
||||
healthcheck:
|
||||
test: nc -z -v localhost 2333
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
spotify-tokener:
|
||||
image: ghcr.io/topi314/spotify-tokener:master
|
||||
container_name: spotify-tokener
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- SPOTIFY_TOKENER_ADDR=0.0.0.0:49152
|
||||
networks:
|
||||
- vocard
|
||||
ports:
|
||||
- 49152:49152
|
||||
healthcheck:
|
||||
test: nc -z -v localhost 49152
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
vocard-db:
|
||||
container_name: vocard-db
|
||||
image: mongo:8
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./data/mongo/db:/data/db
|
||||
- ./data/mongo/conf:/data/configdb
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=admin # For your MongoDB URL use "mongodb://admin:admin@vocard-db:27017"
|
||||
- MONGO_INITDB_ROOT_PASSWORD=admin
|
||||
expose:
|
||||
- "27017"
|
||||
networks:
|
||||
- vocard
|
||||
command: ["mongod", "--oplogSize=1024", "--wiredTigerCacheSizeGB=1", "--auth", "--noscripting"]
|
||||
healthcheck:
|
||||
test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 10s
|
||||
|
||||
# vocard-dashboard:
|
||||
# container_name: vocard-dashboard
|
||||
# image: ghcr.io/chocomeow/vocard-dashboard:latest
|
||||
# restart: unless-stopped
|
||||
# # If you want to build the image from the Dockerfile, uncomment the "build" lines and comment the "image" line.
|
||||
# # build:
|
||||
# # context: ./dashboard
|
||||
# # dockerfile: ./Dockerfile
|
||||
# volumes:
|
||||
# - ./dashboard/settings.json:/app/settings.json
|
||||
# ports:
|
||||
# - 8000:8000
|
||||
# networks:
|
||||
# - vocard
|
||||
|
||||
vocard:
|
||||
container_name: vocard
|
||||
restart: unless-stopped
|
||||
# If you want to build the image from the Dockerfile, uncomment the "build" lines and comment the "image" line.
|
||||
image: ghcr.io/chocomeow/vocard:latest
|
||||
# build:
|
||||
# dockerfile: ./Dockerfile
|
||||
volumes:
|
||||
- ./settings.json:/app/settings.json
|
||||
networks:
|
||||
- vocard
|
||||
depends_on:
|
||||
lavalink:
|
||||
condition: service_healthy
|
||||
vocard-db:
|
||||
condition: service_healthy
|
||||
|
||||
networks:
|
||||
vocard:
|
||||
name: vocard
|
||||
@@ -1,16 +0,0 @@
|
||||
FROM eclipse-temurin:24-jre-noble
|
||||
|
||||
RUN groupadd -g 322 lavalink && \
|
||||
useradd -u 322 -g lavalink -m -d /opt/Lavalink lavalink
|
||||
|
||||
WORKDIR /opt/Lavalink
|
||||
|
||||
ADD --chown=lavalink:lavalink https://github.com/lavalink-devs/Lavalink/releases/latest/download/Lavalink.jar .
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends netcat-openbsd && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
USER lavalink
|
||||
|
||||
ENTRYPOINT ["java", "-Djdk.tls.client.protocols=TLSv1.1,TLSv1.2", "-jar", "Lavalink.jar"]
|
||||
@@ -1,197 +0,0 @@
|
||||
server: # REST and WS server
|
||||
port: 2333
|
||||
address: 0.0.0.0
|
||||
http2:
|
||||
enabled: true # Whether to enable HTTP/2 support
|
||||
plugins:
|
||||
youtube:
|
||||
enabled: true # Whether this source can be used.
|
||||
allowSearch: true # Whether "ytsearch:" and "ytmsearch:" can be used.
|
||||
allowDirectVideoIds: true # Whether just video IDs can match. If false, only complete URLs will be loaded.
|
||||
allowDirectPlaylistIds: true # Whether just playlist IDs can match. If false, only complete URLs will be loaded.
|
||||
# The clients to use for track loading. See below for a list of valid clients.
|
||||
# Clients are queried in the order they are given (so the first client is queried first and so on...)
|
||||
clients:
|
||||
- MUSIC
|
||||
- ANDROID_VR
|
||||
- ANDROID_MUSIC
|
||||
- WEB
|
||||
- WEBEMBEDDED
|
||||
- TVHTML5EMBEDDED
|
||||
# The below section of the config allows setting specific options for each client, such as the requests they will handle.
|
||||
# If an option, or client, is unspecified, then the default option value/client values will be used instead.
|
||||
# If a client is configured, but is not registered above, the options for that client will be ignored.
|
||||
# WARNING!: THE BELOW CONFIG IS FOR ILLUSTRATION PURPOSES. DO NOT COPY OR USE THIS WITHOUT
|
||||
# WARNING!: UNDERSTANDING WHAT IT DOES. MISCONFIGURATION WILL HINDER YOUTUBE-SOURCE'S ABILITY TO WORK PROPERLY.
|
||||
|
||||
# Write the names of clients as they are specified under the heading "Available Clients".
|
||||
clientOptions:
|
||||
WEB:
|
||||
# Example: Disabling a client's playback capabilities.
|
||||
playback: false
|
||||
videoLoading: false # Disables loading of videos for this client. A client may still be used for playback even if this is set to 'false'.
|
||||
WEBEMBEDDED:
|
||||
# Example: Configuring a client to exclusively be used for video loading and playback.
|
||||
playlistLoading: false # Disables loading of playlists and mixes.
|
||||
searching: false # Disables the ability to search for videos.
|
||||
lavasrc:
|
||||
providers: # Custom providers for track loading. This is the default
|
||||
# - "dzisrc:%ISRC%" # Deezer ISRC provider
|
||||
# - "dzsearch:%QUERY%" # Deezer search provider
|
||||
- "ytsearch:\"%ISRC%\"" # Will be ignored if track does not have an ISRC. See https://en.wikipedia.org/wiki/International_Standard_Recording_Code
|
||||
- "ytsearch:%QUERY%" # Will be used if track has no ISRC or no track could be found for the ISRC
|
||||
# you can add multiple other fallback sources here
|
||||
sources:
|
||||
spotify: true # Enable Spotify source
|
||||
applemusic: false # Enable Apple Music source
|
||||
deezer: false # Enable Deezer source
|
||||
yandexmusic: false # Enable Yandex Music source
|
||||
flowerytts: false # Enable Flowery TTS source
|
||||
youtube: false # Enable YouTube search source (https://github.com/topi314/LavaSearch)
|
||||
vkmusic: false # Enable Vk Music source
|
||||
lyrics-sources:
|
||||
spotify: false # Enable Spotify lyrics source
|
||||
deezer: false # Enable Deezer lyrics source
|
||||
youtube: false # Enable YouTube lyrics source
|
||||
yandexmusic: false # Enable Yandex Music lyrics source
|
||||
vkmusic: false # Enable Vk Music lyrics source
|
||||
spotify:
|
||||
clientId: ""
|
||||
clientSecret: ""
|
||||
# spDc: "your sp dc cookie" # the sp dc cookie used for accessing the spotify lyrics api
|
||||
countryCode: "US" # the country code you want to use for filtering the artists top tracks. See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
|
||||
playlistLoadLimit: 6 # The number of pages at 100 tracks each
|
||||
albumLoadLimit: 6 # The number of pages at 50 tracks each
|
||||
resolveArtistsInSearch: true # Whether to resolve artists in track search results (can be slow)
|
||||
localFiles: false # Enable local files support with Spotify playlists. Please note `uri` & `isrc` will be `null` & `identifier` will be `"local"`
|
||||
preferAnonymousToken: true # Whether to use the anonymous token for resolving tracks, artists and albums. Spotify generated playlists are always resolved with the anonymous tokens since they do not work otherwise. This requires the customTokenEndpoint to be set.
|
||||
customTokenEndpoint: "http://spotify-tokener:49152/api/token" # Optional custom endpoint for getting the anonymous token. If not set, spotify's default endpoint will be used which might not work. The response must match spotify's anonymous token response format.
|
||||
applemusic:
|
||||
countryCode: "US" # the country code you want to use for filtering the artists top tracks and language. See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
|
||||
mediaAPIToken: "your apple music api token" # apple music api token
|
||||
# or specify an apple music key
|
||||
keyID: "your key id"
|
||||
teamID: "your team id"
|
||||
musicKitKey: |
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
your key
|
||||
-----END PRIVATE KEY-----
|
||||
playlistLoadLimit: 6 # The number of pages at 300 tracks each
|
||||
albumLoadLimit: 6 # The number of pages at 300 tracks each
|
||||
deezer:
|
||||
masterDecryptionKey: "your master decryption key" # the master key used for decrypting the deezer tracks. (yes this is not here you need to get it from somewhere else)
|
||||
# arl: "your deezer arl" # the arl cookie used for accessing the deezer api this is optional but required for formats above MP3_128
|
||||
formats: [ "FLAC", "MP3_320", "MP3_256", "MP3_128", "MP3_64", "AAC_64" ] # the formats you want to use for the deezer tracks. "FLAC", "MP3_320", "MP3_256" & "AAC_64" are only available for premium users and require a valid arl
|
||||
yandexmusic:
|
||||
accessToken: "your access token" # the token used for accessing the yandex music api. See https://github.com/TopiSenpai/LavaSrc#yandex-music
|
||||
playlistLoadLimit: 1 # The number of pages at 100 tracks each
|
||||
albumLoadLimit: 1 # The number of pages at 50 tracks each
|
||||
artistLoadLimit: 1 # The number of pages at 10 tracks each
|
||||
flowerytts:
|
||||
voice: "default voice" # (case-sensitive) get default voice from here https://api.flowery.pw/v1/tts/voices
|
||||
translate: false # whether to translate the text to the native language of voice
|
||||
silence: 0 # the silence parameter is in milliseconds. Range is 0 to 10000. The default is 0.
|
||||
speed: 1.0 # the speed parameter is a float between 0.5 and 10. The default is 1.0. (0.5 is half speed, 2.0 is double speed, etc.)
|
||||
audioFormat: "mp3" # supported formats are: mp3, ogg_opus, ogg_vorbis, aac, wav, and flac. Default format is mp3
|
||||
youtube:
|
||||
countryCode: "US" # the country code you want to use for searching lyrics via ISRC. See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
|
||||
vkmusic:
|
||||
userToken: "your user token" # This token is needed for authorization in the api. Guide: https://github.com/topi314/LavaSrc#vk-music
|
||||
playlistLoadLimit: 1 # The number of pages at 50 tracks each
|
||||
artistLoadLimit: 1 # The number of pages at 10 tracks each
|
||||
recommendationsLoadLimit: 10 # Number of tracks
|
||||
lavalink:
|
||||
plugins:
|
||||
- dependency: "dev.lavalink.youtube:youtube-plugin:1.13.5" # Please check the latest version at https://github.com/lavalink-devs/youtube-source/releases
|
||||
snapshot: false
|
||||
- dependency: "com.github.topi314.lavasrc:lavasrc-plugin:4.7.3" # Please check the latest version at https://github.com/topi314/LavaSrc/releases
|
||||
snapshot: false
|
||||
# - dependency: "com.github.example:example-plugin:1.0.0" # required, the coordinates of your plugin
|
||||
# repository: "https://maven.example.com/releases" # optional, defaults to the Lavalink releases repository by default
|
||||
# snapshot: false # optional, defaults to false, used to tell Lavalink to use the snapshot repository instead of the release repository
|
||||
# pluginsDir: "./plugins" # optional, defaults to "./plugins"
|
||||
# defaultPluginRepository: "https://maven.lavalink.dev/releases" # optional, defaults to the Lavalink release repository
|
||||
# defaultPluginSnapshotRepository: "https://maven.lavalink.dev/snapshots" # optional, defaults to the Lavalink snapshot repository
|
||||
server:
|
||||
password: "youshallnotpass"
|
||||
sources:
|
||||
# The default Youtube source is now deprecated and won't receive further updates. Please use https://github.com/lavalink-devs/youtube-source#plugin instead.
|
||||
youtube: false
|
||||
bandcamp: true
|
||||
soundcloud: true
|
||||
twitch: true
|
||||
vimeo: true
|
||||
nico: true
|
||||
http: true # warning: keeping HTTP enabled without a proxy configured could expose your server's IP address.
|
||||
local: false
|
||||
filters: # All filters are enabled by default
|
||||
volume: true
|
||||
equalizer: true
|
||||
karaoke: true
|
||||
timescale: true
|
||||
tremolo: true
|
||||
vibrato: true
|
||||
distortion: true
|
||||
rotation: true
|
||||
channelMix: true
|
||||
lowPass: true
|
||||
nonAllocatingFrameBuffer: false # Setting to true reduces the number of allocations made by each player at the expense of frame rebuilding (e.g. non-instantaneous volume changes)
|
||||
bufferDurationMs: 400 # The duration of the NAS buffer. Higher values fare better against longer GC pauses. Duration <= 0 to disable JDA-NAS. Minimum of 40ms, lower values may introduce pauses.
|
||||
frameBufferDurationMs: 5000 # How many milliseconds of audio to keep buffered
|
||||
opusEncodingQuality: 10 # Opus encoder quality. Valid values range from 0 to 10, where 10 is best quality but is the most expensive on the CPU.
|
||||
resamplingQuality: LOW # Quality of resampling operations. Valid values are LOW, MEDIUM and HIGH, where HIGH uses the most CPU.
|
||||
trackStuckThresholdMs: 10000 # The threshold for how long a track can be stuck. A track is stuck if does not return any audio data.
|
||||
useSeekGhosting: true # Seek ghosting is the effect where whilst a seek is in progress, the audio buffer is read from until empty, or until seek is ready.
|
||||
youtubePlaylistLoadLimit: 6 # Number of pages at 100 each
|
||||
playerUpdateInterval: 5 # How frequently to send player updates to clients, in seconds
|
||||
youtubeSearchEnabled: true
|
||||
soundcloudSearchEnabled: true
|
||||
gc-warnings: true
|
||||
#ratelimit:
|
||||
#ipBlocks: ["1.0.0.0/8", "..."] # list of ip blocks
|
||||
#excludedIps: ["...", "..."] # ips which should be explicit excluded from usage by lavalink
|
||||
#strategy: "RotateOnBan" # RotateOnBan | LoadBalance | NanoSwitch | RotatingNanoSwitch
|
||||
#searchTriggersFail: true # Whether a search 429 should trigger marking the ip as failing
|
||||
#retryLimit: -1 # -1 = use default lavaplayer value | 0 = infinity | >0 = retry will happen this numbers times
|
||||
#youtubeConfig: # Required for avoiding all age restrictions by YouTube, some restricted videos still can be played without.
|
||||
#email: "" # Email of Google account
|
||||
#password: "" # Password of Google account
|
||||
#httpConfig: # Useful for blocking bad-actors from ip-grabbing your music node and attacking it, this way only the http proxy will be attacked
|
||||
#proxyHost: "localhost" # Hostname of the proxy, (ip or domain)
|
||||
#proxyPort: 3128 # Proxy port, 3128 is the default for squidProxy
|
||||
#proxyUser: "" # Optional user for basic authentication fields, leave blank if you don't use basic auth
|
||||
#proxyPassword: "" # Password for basic authentication
|
||||
|
||||
metrics:
|
||||
prometheus:
|
||||
enabled: false
|
||||
endpoint: /metrics
|
||||
|
||||
sentry:
|
||||
dsn: ""
|
||||
environment: ""
|
||||
# tags:
|
||||
# some_key: some_value
|
||||
# another_key: another_value
|
||||
|
||||
logging:
|
||||
file:
|
||||
path: ./logs/
|
||||
|
||||
level:
|
||||
root: INFO
|
||||
lavalink: INFO
|
||||
|
||||
request:
|
||||
enabled: true
|
||||
includeClientInfo: true
|
||||
includeHeaders: false
|
||||
includeQueryString: true
|
||||
includePayload: true
|
||||
maxPayloadLength: 10000
|
||||
|
||||
|
||||
logback:
|
||||
rollingpolicy:
|
||||
max-file-size: 1GB
|
||||
max-history: 30
|
||||
@@ -4,7 +4,8 @@
|
||||
"channel": "canal",
|
||||
"Provide a channel to connect.": "Proporciona un canal para conectar.",
|
||||
"play": "reproducir",
|
||||
"Loads your input and added it to the queue.": "Carga tu entrada y la agrega a la cola.",
|
||||
"Loads your input into the queue": "Carga tu entrada en la cola.",
|
||||
"Searches your query and displays the results.": "Busca tu consulta y muestra los resultados.",
|
||||
"query": "consulta",
|
||||
"Input a query or a searchable link.": "Ingresa una consulta o un enlace de búsqueda.",
|
||||
"search": "buscar",
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
"channel": "canal",
|
||||
"Provide a channel to connect.": "Proporciona un canal para conectar.",
|
||||
"play": "reproducir",
|
||||
"Loads your input and added it to the queue.": "Carga tu entrada y la añade a la cola.",
|
||||
"Loads your input into the queue.": "Carga tu entrada en la cola.",
|
||||
"Searches your query and displays the results.": "Busca tu consulta y muestra los resultados.",
|
||||
"query": "consulta",
|
||||
"Input a query or a searchable link.": "Introduce una consulta o un enlace de búsqueda.",
|
||||
"search": "buscar",
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
"channel": "頻道",
|
||||
"Provide a channel to connect.": "提供要連線的頻道。",
|
||||
"play": "播放",
|
||||
"Loads your input and added it to the queue.": "載入您的輸入並將其加入排隊。",
|
||||
"Loads your input into the queue.": "將您的輸入加載到隊列中。",
|
||||
"Searches your query and displays the results.": "搜尋您的查詢並顯示結果。",
|
||||
"query": "查詢",
|
||||
"Input a query or a searchable link.": "輸入查詢或可搜尋的連結。",
|
||||
"search": "搜尋",
|
||||
|
||||
@@ -399,7 +399,7 @@ class Node:
|
||||
return []
|
||||
|
||||
tracks = await self.get_tracks(query=query, requester=self.bot.user)
|
||||
if not track:
|
||||
if not tracks:
|
||||
return []
|
||||
|
||||
if isinstance(tracks, Playlist):
|
||||
|
||||
Reference in New Issue
Block a user