From 3522aeacb6090123361e3ee90648d0019966ef65 Mon Sep 17 00:00:00 2001 From: Choco <94597336+ChocoMeow@users.noreply.github.com> Date: Tue, 21 Feb 2023 10:04:53 +0800 Subject: [PATCH] Add VolumeUp, VolumeDown and VolumeMute control buttons --- langs/CH.json | 4 +++ langs/DE.json | 4 +++ langs/EN.json | 4 +++ langs/JP.json | 4 +++ langs/KO.json | 4 +++ view/controller.py | 63 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 83 insertions(+) diff --git a/langs/CH.json b/langs/CH.json index 06b84f2..c48302a 100644 --- a/langs/CH.json +++ b/langs/CH.json @@ -117,6 +117,10 @@ "buttonSkip": "跳過", "buttonLeave": "離開", "buttonLoop": "重複", + "buttonVolumeUp": "提高音量", + "buttonVolumeDown": "減小音量", + "buttonVolumeMute": "靜音", + "buttonVolumeUnmute": "取消靜音", "nowplayingDesc": "**現在播放:**\n```{0}```", "nowplayingField": "接下來:", diff --git a/langs/DE.json b/langs/DE.json index 5cbc339..dabf09f 100644 --- a/langs/DE.json +++ b/langs/DE.json @@ -117,6 +117,10 @@ "buttonSkip": "Überspringen", "buttonLeave": "Verlassen", "buttonLoop": "wiederholen", + "buttonVolumeUp": "Lauter", + "buttonVolumeDown": "Lautstärke runter", + "buttonVolumeMute": "Stumm", + "buttonVolumeUnmute": "Stummschaltung aufheben", "nowplayingDesc": "**Läuft gerade:**\n```{0}```", "nowplayingField": "Als nächstes:", diff --git a/langs/EN.json b/langs/EN.json index eb6a7b6..4520b59 100644 --- a/langs/EN.json +++ b/langs/EN.json @@ -117,6 +117,10 @@ "buttonSkip": "Skip", "buttonLeave": "Leave", "buttonLoop": "Loop", + "buttonVolumeUp": "Volume Up", + "buttonVolumeDown": "Volume Down", + "buttonVolumeMute": "Mute", + "buttonVolumeUnmute": "Unmute", "nowplayingDesc": "**Now Playing:**\n```{0}```", "nowplayingField": "Up Next:", diff --git a/langs/JP.json b/langs/JP.json index 9687048..ba094b4 100644 --- a/langs/JP.json +++ b/langs/JP.json @@ -117,6 +117,10 @@ "buttonSkip": "スキップ", "buttonLeave": "離れる", "buttonLoop": "繰り返す", + "buttonVolumeUp": "ボリュームアップ", + "buttonVolumeDown": "ボリュームダウン", + "buttonVolumeMute": "無音", + "buttonVolumeUnmute": "ミュート解除", "nowplayingDesc": "**再生中:**\n```{0}```", "nowplayingField": "次に:", diff --git a/langs/KO.json b/langs/KO.json index ebaf1bf..0699637 100644 --- a/langs/KO.json +++ b/langs/KO.json @@ -117,6 +117,10 @@ "buttonSkip": "거르다", "buttonLeave": "떠나다", "buttonLoop": "반복하다", + "buttonVolumeUp": "볼륨 업", + "buttonVolumeDown": "볼륨 낮추기", + "buttonVolumeMute": "무음", + "buttonVolumeUnmute": "음소거 해제", "nowplayingDesc": "**지금 재생 중:**\n```{0}```", "nowplayingField": "다음으로:", diff --git a/view/controller.py b/view/controller.py index ff26d83..e54039e 100644 --- a/view/controller.py +++ b/view/controller.py @@ -204,6 +204,64 @@ class Loop(discord.ui.Button): self.player.queue.set_repeat(mode) await interaction.response.send_message(self.player.get_msg('repeat').format(mode.capitalize())) +class VolumeUp(discord.ui.Button): + def __init__(self, player, style, row): + self.player = player + super().__init__(emoji="🔊", label=player.get_msg('buttonVolumeUp'), style=style, row=row) + + async def callback(self, interaction: discord.Interaction): + if not await self.player.is_privileged(interaction.user): + return interaction.response.send_message(self.player.get_msg("missingPerms_function")) + if not self.player.node._available: + return await interaction.response.send_message(self.player.get_msg("nodeReconnect")) + + value = value if (value := self.player.volume + 20) <= 150 else 150 + await self.player.set_volume(value) + + await interaction.response.send_message(self.player.get_msg('setVolume').format(value), ephemeral=True) + +class VolumeDown(discord.ui.Button): + def __init__(self, player, style, row): + self.player = player + super().__init__(emoji="🔉", label=player.get_msg('buttonVolumeDown'), style=style, row=row) + + async def callback(self, interaction: discord.Interaction): + if not await self.player.is_privileged(interaction.user): + return interaction.response.send_message(self.player.get_msg("missingPerms_function")) + if not self.player.node._available: + return await interaction.response.send_message(self.player.get_msg("nodeReconnect")) + + value = value if (value := self.player.volume - 20) >= 0 else 150 + await self.player.set_volume(value) + + await interaction.response.send_message(self.player.get_msg('setVolume').format(value), ephemeral=True) + +class VolumeMute(discord.ui.Button): + def __init__(self, player, style, row): + self.player = player + super().__init__(emoji="🔇" if player.volume else "🔈", + label=player.get_msg('buttonVolumeMute' if player.volume else "buttonVolumeUnmute"), + style=style, row=row) + + async def callback(self, interaction: discord.Interaction): + if not await self.player.is_privileged(interaction.user): + return interaction.response.send_message(self.player.get_msg("missingPerms_function")) + if not self.player.node._available: + return await interaction.response.send_message(self.player.get_msg("nodeReconnect")) + + if self.player.volume != 0: + value = 0 + self.emoji = "🔈" + self.label = self.player.get_msg("buttonVolumeUnmute") + else: + value = self.player.settings.get("volume", 100) + self.emoji = "🔇" + self.label = self.player.get_msg("buttonVolumeMute") + + await self.player.set_volume(value) + + await interaction.response.edit_message(view=self.view) + class Tracks(discord.ui.Select): def __init__(self, player, style, row): @@ -237,6 +295,9 @@ btnType = { "stop": Stop, "add": Add, "loop": Loop, + "volumeup": VolumeUp, + "volumedown": VolumeDown, + "volumemute": VolumeMute, "tracks": Tracks } @@ -267,6 +328,8 @@ class InteractiveController(discord.ui.View): self.cooldown = commands.CooldownMapping.from_cooldown(2.0, 10.0, key) async def interaction_check(self, interaction): + if interaction.user.id in func.bot_access_user: + return True if self.player.channel and interaction.user in self.player.channel.members: retry_after = self.cooldown.update_rate_limit(interaction) if retry_after: