{"id":20419611,"url":"https://github.com/interactions-py/lavalink","last_synced_at":"2025-10-25T13:43:56.940Z","repository":{"id":260546134,"uuid":"520380696","full_name":"interactions-py/lavalink","owner":"interactions-py","description":"A lavalink.py wrapper for interactions.py","archived":false,"fork":false,"pushed_at":"2024-05-23T10:20:10.000Z","size":148,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-21T19:40:08.879Z","etag":null,"topics":["discord","interactions","lavalink","python","voice"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/interactions-py.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-02T06:35:47.000Z","updated_at":"2025-04-09T16:53:21.000Z","dependencies_parsed_at":"2024-11-01T00:16:25.511Z","dependency_job_id":"ad63236f-a4ae-40e0-8a87-c90393d8d2e9","html_url":"https://github.com/interactions-py/lavalink","commit_stats":{"total_commits":107,"total_committers":3,"mean_commits":"35.666666666666664","dds":"0.10280373831775702","last_synced_commit":"577c086fd353a2eccedf90771cd6746779c87e07"},"previous_names":["interactions-py/lavalink"],"tags_count":8,"template":false,"template_full_name":"Damego/python-pypi-project-template","purl":"pkg:github/interactions-py/lavalink","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interactions-py%2Flavalink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interactions-py%2Flavalink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interactions-py%2Flavalink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interactions-py%2Flavalink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/interactions-py","download_url":"https://codeload.github.com/interactions-py/lavalink/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interactions-py%2Flavalink/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274302243,"owners_count":25260158,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-09T02:00:10.223Z","response_time":80,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["discord","interactions","lavalink","python","voice"],"created_at":"2024-11-15T06:37:48.881Z","updated_at":"2025-10-25T13:43:51.916Z","avatar_url":"https://github.com/interactions-py.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# interactions-lavalink\n\n## Installation\n\nDownload ext via `pip install --upgrade interactions-lavalink`\n\n## Configuring own lavalink server\n\n1. Download Java SE if you don't have it\n2. Download lavalink from [this repo](https://github.com/freyacodes/Lavalink)\n3. Configure `application.yml` file like [here](https://github.com/freyacodes/Lavalink/blob/master/LavalinkServer/application.yml.example)\n4. Run lavalink server via `java -jar Lavalink.jar` in same folder with `application.yml` file.\n\n## Usage\n\nCreate bot like example and run it.\n\nMain file:\n```python\nfrom interactions import Client\n\n\n# Creating bot variable\nclient = Client()\n\n# Loading your extension\nclient.load(\"exts.music\")\n\n# Starting bot\nclient.start(\"TOKEN\")\n```\n\nExtension file: `exts/music.py`\n```python\nfrom interactions import Extension, SlashContext, listen, slash_command, slash_option\n\nfrom interactions_lavalink import Lavalink\nfrom interactions_lavalink.events import TrackStart\n\n\nclass Music(Extension):\n    def __init__(self, client):\n        self.client = client\n        self.lavalink: Lavalink | None = None\n\n    @listen()\n    async def on_startup(self):\n        # Initializing lavalink instance on bot startup\n        self.lavalink: Lavalink = Lavalink(self.client)\n\n        # Connecting to local lavalink server\n        self.lavalink.add_node(\"127.0.0.1\", 43421, \"your_password\", \"eu\")\n\n    @listen()\n    async def on_track_start(self, event: TrackStart):\n        print(\"Track started\", event.track.title)\n\n    @slash_command()\n    @slash_option(\"query\", \"The search query or url\", opt_type=3, required=True)\n    async def play(self, ctx: SlashContext, query: str):\n        await ctx.defer()\n\n        # Getting user's voice state\n        voice_state = ctx.author.voice\n        if not voice_state or not voice_state.channel:\n            return await ctx.send(\"You're not connected to the voice channel!\")\n\n        # Connecting to voice channel and getting player instance\n        player = await self.lavalink.connect(voice_state.guild.id, voice_state.channel.id)\n        # Getting tracks from youtube\n        tracks = await player.search_youtube(query)\n        track = tracks[0]\n        # Adding track to the queue\n        player.add(requester=int(ctx.author.id), track=track)\n\n        # Check if player is already playing\n        if player.is_playing:\n            return await ctx.send(f\"Added to queue: `{track.title}`\")\n\n        # Starting playing track\n        await player.play()\n        await ctx.send(f\"Now playing: `{track.title}`\")\n\n    @slash_command()\n    async def leave(self, ctx: SlashContext):\n        # Disconnecting from voice channel\n        await self.lavalink.disconnect(ctx.guild.id)\n\n        await ctx.send(\"Disconnected\", ephemeral=True)\n```\n\n## Events\nTo listen lavalink event you have to use `@listen` decorator.\n\n```python\nfrom interactions import Extension, listen\nfrom interactions_lavalink import TrackStart, TrackEnd, QueueEnd\n\nclass MusicExt(Extension):\n    ... # Some your cool music commands\n\n    # There are many useful events for you. You can use other events if you want it.\n    @listen()\n    async def on_track_start(self, event: TrackStart):\n        \"\"\"Fires when track starts\"\"\"\n        print(f\"Track {event.track.title} started\")\n\n    @listen()\n    async def on_track_end(self, event: TrackEnd):\n        \"\"\"Fires when track ends\"\"\"\n\n    @listen()\n    async def on_queue_end(self, event: QueueEnd):\n        \"\"\"Fires when queue ends\"\"\"\n\n```\n\nMore events you could find in the `lavalink.py` documentation\n\n## Documentation\n\n[lavalink.py documentation](https://lavalink.readthedocs.io/en/master/) \\\n[lavalink.py repository](https://github.com/Devoxin/Lavalink.py)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finteractions-py%2Flavalink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finteractions-py%2Flavalink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finteractions-py%2Flavalink/lists"}