Add a per guild max volume setting (#5165)

* Oh great... someone touched Audio again.

* How did that get in there?

* Style? Style.
This commit is contained in:
Kowlin 2021-07-16 23:45:54 +02:00 committed by GitHub
parent 2b67b9d06d
commit e154a630df
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 54 additions and 6 deletions

View File

@ -132,6 +132,7 @@ class Audio(
jukebox=False, jukebox=False,
jukebox_price=0, jukebox_price=0,
maxlength=0, maxlength=0,
max_volume=150,
notify=False, notify=False,
prefer_lyrics=False, prefer_lyrics=False,
repeat=False, repeat=False,

View File

@ -960,6 +960,8 @@ class AudioSetCommands(MixinMeta, metaclass=CompositeMetaClass):
is_owner = await self.bot.is_owner(ctx.author) is_owner = await self.bot.is_owner(ctx.author)
global_data = await self.config.all() global_data = await self.config.all()
data = await self.config.guild(ctx.guild).all() data = await self.config.guild(ctx.guild).all()
auto_deafen = _("Enabled") if data["auto_deafen"] else _("Disabled")
dj_role_obj = ctx.guild.get_role(data["dj_role"]) dj_role_obj = ctx.guild.get_role(data["dj_role"])
dj_enabled = data["dj_enabled"] dj_enabled = data["dj_enabled"]
emptydc_enabled = data["emptydc_enabled"] emptydc_enabled = data["emptydc_enabled"]
@ -972,6 +974,7 @@ class AudioSetCommands(MixinMeta, metaclass=CompositeMetaClass):
dc = data["disconnect"] dc = data["disconnect"]
autoplay = data["auto_play"] autoplay = data["auto_play"]
maxlength = data["maxlength"] maxlength = data["maxlength"]
maxvolume = data["max_volume"]
vote_percent = data["vote_percent"] vote_percent = data["vote_percent"]
current_level = CacheLevel(global_data["cache_level"]) current_level = CacheLevel(global_data["cache_level"])
song_repeat = _("Enabled") if data["repeat"] else _("Disabled") song_repeat = _("Enabled") if data["repeat"] else _("Disabled")
@ -980,7 +983,6 @@ class AudioSetCommands(MixinMeta, metaclass=CompositeMetaClass):
song_notify = _("Enabled") if data["notify"] else _("Disabled") song_notify = _("Enabled") if data["notify"] else _("Disabled")
song_status = _("Enabled") if global_data["status"] else _("Disabled") song_status = _("Enabled") if global_data["status"] else _("Disabled")
persist_queue = _("Enabled") if data["persist_queue"] else _("Disabled") persist_queue = _("Enabled") if data["persist_queue"] else _("Disabled")
auto_deafen = _("Enabled") if data["auto_deafen"] else _("Disabled")
countrycode = data["country_code"] countrycode = data["country_code"]
@ -994,6 +996,9 @@ class AudioSetCommands(MixinMeta, metaclass=CompositeMetaClass):
autoplaylist = data["autoplaylist"] autoplaylist = data["autoplaylist"]
vote_enabled = data["vote_enabled"] vote_enabled = data["vote_enabled"]
msg = "----" + _("Server Settings") + "---- \n" msg = "----" + _("Server Settings") + "---- \n"
msg += _("Auto-deafen: [{auto_deafen}]\n").format(
auto_deafen=auto_deafen,
)
msg += _("Auto-disconnect: [{dc}]\n").format(dc=_("Enabled") if dc else _("Disabled")) msg += _("Auto-disconnect: [{dc}]\n").format(dc=_("Enabled") if dc else _("Disabled"))
msg += _("Auto-play: [{autoplay}]\n").format( msg += _("Auto-play: [{autoplay}]\n").format(
autoplay=_("Enabled") if autoplay else _("Disabled") autoplay=_("Enabled") if autoplay else _("Disabled")
@ -1018,23 +1023,23 @@ class AudioSetCommands(MixinMeta, metaclass=CompositeMetaClass):
tracklength=self.get_time_string(maxlength) tracklength=self.get_time_string(maxlength)
) )
msg += _( msg += _(
"Max volume: [{max_volume}%]\n"
"Persist queue: [{persist_queue}]\n"
"Repeat: [{repeat}]\n" "Repeat: [{repeat}]\n"
"Shuffle: [{shuffle}]\n" "Shuffle: [{shuffle}]\n"
"Shuffle bumped: [{bumpped_shuffle}]\n" "Shuffle bumped: [{bumpped_shuffle}]\n"
"Song notify msgs: [{notify}]\n" "Song notify msgs: [{notify}]\n"
"Songs as status: [{status}]\n" "Songs as status: [{status}]\n"
"Persist queue: [{persist_queue}]\n"
"Spotify search: [{countrycode}]\n" "Spotify search: [{countrycode}]\n"
"Auto-Deafen: [{auto_deafen}]\n"
).format( ).format(
max_volume=maxvolume,
countrycode=countrycode, countrycode=countrycode,
persist_queue=persist_queue,
repeat=song_repeat, repeat=song_repeat,
shuffle=song_shuffle, shuffle=song_shuffle,
notify=song_notify, notify=song_notify,
status=song_status, status=song_status,
bumpped_shuffle=bumpped_shuffle, bumpped_shuffle=bumpped_shuffle,
persist_queue=persist_queue,
auto_deafen=auto_deafen,
) )
if thumbnail: if thumbnail:
msg += _("Thumbnails: [{0}]\n").format( msg += _("Thumbnails: [{0}]\n").format(
@ -1454,3 +1459,43 @@ class AudioSetCommands(MixinMeta, metaclass=CompositeMetaClass):
title=_("Restarting Lavalink"), title=_("Restarting Lavalink"),
description=_("It can take a couple of minutes for Lavalink to fully start up."), description=_("It can take a couple of minutes for Lavalink to fully start up."),
) )
@command_audioset.command(usage="<maximum volume>", name="maxvolume")
@commands.guild_only()
@commands.admin_or_permissions(manage_roles=True)
async def command_audioset_maxvolume(self, ctx: commands.Context, max_volume: int):
"""Set the maximum volume allowed in this server."""
if max_volume < 1:
return await self.send_embed_msg(
ctx,
title=_("Error"),
description=_(
"Music without sound isn't music at all. Try setting the volume higher then 0%."
),
)
elif max_volume > 150:
max_volume = 150
await self.send_embed_msg(
ctx,
title=_("Setting changed"),
description=_(
"The maximum volume has been limited to 150%, be easy on your ears."
),
)
else:
await self.send_embed_msg(
ctx,
title=_("Setting changed"),
description=_("The maximum volume has been limited to {max_volume}%.").format(
max_volume=max_volume
),
)
current_volume = await self.config.guild(ctx.guild).volume()
if current_volume > max_volume:
await self.config.guild(ctx.guild).volume.set(max_volume)
if self._player_check(ctx):
player = lavalink.get_player(ctx.guild.id)
await player.set_volume(max_volume)
player.store("notify_channel", ctx.channel.id)
await self.config.guild(ctx.guild).max_volume.set(max_volume)

View File

@ -701,6 +701,8 @@ class PlayerControllerCommands(MixinMeta, metaclass=CompositeMetaClass):
ctx.guild.id, await self.config.guild(ctx.guild).dj_enabled() ctx.guild.id, await self.config.guild(ctx.guild).dj_enabled()
) )
can_skip = await self._can_instaskip(ctx, ctx.author) can_skip = await self._can_instaskip(ctx, ctx.author)
max_volume = await self.config.guild(ctx.guild).max_volume()
if not vol: if not vol:
vol = await self.config.guild(ctx.guild).volume() vol = await self.config.guild(ctx.guild).volume()
embed = discord.Embed(title=_("Current Volume:"), description=f"{vol}%") embed = discord.Embed(title=_("Current Volume:"), description=f"{vol}%")
@ -725,7 +727,7 @@ class PlayerControllerCommands(MixinMeta, metaclass=CompositeMetaClass):
description=_("You need the DJ role to change the volume."), description=_("You need the DJ role to change the volume."),
) )
vol = max(0, min(vol, 150)) vol = max(0, min(vol, max_volume))
await self.config.guild(ctx.guild).volume.set(vol) await self.config.guild(ctx.guild).volume.set(vol)
if self._player_check(ctx): if self._player_check(ctx):
player = lavalink.get_player(ctx.guild.id) player = lavalink.get_player(ctx.guild.id)