Здравствуйте, нужно получить ID канала из которого была выполнена команда, как можно передать его?
Функция "on_wavelink_track_end" по окончании воспроизведение трека должна отправить сообщение в канал, из которого была выполнена команда /play, но вместо этого отправляет в канал, в котором воспроизводится аудио.
Код (библиотеки Wavelink и Nextcord):
@commands.Cog.listener()
async def on_wavelink_track_end(self, payload: wavelink.TrackEventPayload):
player = payload.player
vc: wavelink.Player = player.guild.voice_client
channel = player.guild.id
if vc is None:
return
if vc.is_playing() is True:
return
if vc.queue.loop:
return await vc.play(payload.track)
if vc.queue.is_empty:
await last_channel.send(embed=MusicInfo.player_waiting())
await asyncio.sleep(30)
if not vc.queue.is_empty or vc.is_playing() is not False:
return
await last_channel.send(embed=MusicInfo.player_destroyed())
return await vc.disconnect()
next_song = vc.queue.get()
await vc.play(next_song)
await channel.send(embed=MusicInfo.music_player_event(next_song, last_channel))
return await channel.send(embed=MusicInfo.panel_msg(), view=Buttons())
@nextcord.slash_command(name='play', description='Воспроизвести трек по названию или ссылке')
async def play(
self, interaction: nextcord.Interaction,
sound: str = SlashOption(description='Ссылка/название трека', required=True)
):
await interaction.response.defer()
if not interaction.user.voice:
return await interaction.send(embed=MusicInfo.join_vc())
elif not interaction.guild.voice_client:
vc: wavelink.Player = await interaction.user.voice.channel.connect(cls=wavelink.Player)
else:
vc: wavelink.Player = interaction.guild.voice_client
await vc.play(song)
await interaction.guild.change_voice_state(
channel=interaction.user.voice.channel,
self_deaf=True,
self_mute=False
)
await interaction.send(embed=MusicInfo.music_player_connected(song, interaction))
return await last_channel.send(embed=MusicInfo.panel_msg(), view=Buttons())