diff --git a/wavelink/events.py b/wavelink/events.py index 9bfb16ee..c7ba371d 100644 --- a/wavelink/events.py +++ b/wavelink/events.py @@ -20,11 +20,14 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ -from .player import Player -from .player import Track +from __future__ import annotations +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from .player import Player + from .player import Track -__all__ = ('WavelinkEvent', 'TrackEnd', 'TrackException', 'TrackStuck') +__all__ = ('WavelinkEvent', 'TrackEnd', 'TrackException', 'TrackStuck', 'TrackStart') class WavelinkEvent: @@ -89,3 +92,19 @@ def __init__(self, player: Player, track: Track, threshold: int): def __str__(self): return 'TrackStuck' + + +class TrackStart(WavelinkEvent): + """Event dispatched on TrackStart. + + :ivar player: The :class:`wavelink.player.Player` associated with the event. + :ivar track: The :class:`wavelink.player.Track` associated with the event. + """ + + __slots__ = () + + def __init__(self, player: Player, track: Track): + super().__init__(player, track) + + def __str__(self): + return 'TrackStart' diff --git a/wavelink/player.py b/wavelink/player.py index 70916c08..deda5446 100644 --- a/wavelink/player.py +++ b/wavelink/player.py @@ -28,6 +28,7 @@ from .errors import * from .eqs import * +from .events import TrackStart __log__ = logging.getLogger(__name__) @@ -243,6 +244,8 @@ async def play(self, track: Track, *, replace: bool = True, start: int = 0, end: payload['endTime'] = str(end) await self.node._send(**payload) + self.bot.loop.create_task(self.node.on_event(TrackStart(player=self, track=track))) + __log__.debug(f'PLAYER | Started playing track:: {str(track)} ({self.channel_id})') async def stop(self):