39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import discord
|
|
from discord.ext import commands
|
|
|
|
from zyrarbot.ui.bot.cogs.common import MusicCogBase
|
|
|
|
|
|
class VoiceCog(MusicCogBase, name="Voice"):
|
|
"""Obsługa zdarzeń i rozłączania z kanałów głosowych."""
|
|
|
|
@commands.Cog.listener()
|
|
async def on_voice_state_update(
|
|
self,
|
|
member: discord.Member,
|
|
before: discord.VoiceState,
|
|
after: discord.VoiceState,
|
|
) -> None:
|
|
is_bot_leaving = (
|
|
self.bot.user
|
|
and member.id == self.bot.user.id
|
|
and before.channel is not None
|
|
and after.channel is None
|
|
)
|
|
if is_bot_leaving:
|
|
self.player.clear(before.channel.guild.id)
|
|
await self.player.trigger_state_change()
|
|
|
|
@discord.app_commands.command(name="leave", description="Odłącz bota od kanału głosowego")
|
|
async def leave(self, interaction: discord.Interaction) -> None:
|
|
if interaction.guild.voice_client is None:
|
|
await interaction.response.send_message(
|
|
"Nie jestem na kanale głosowym.", ephemeral=True
|
|
)
|
|
return
|
|
await interaction.guild.voice_client.disconnect()
|
|
self.player.clear(interaction.guild.id)
|
|
await interaction.response.send_message("Rozłączono z kanału głosowego.")
|