mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 03:08:55 -05:00
check both connect and speak permissions before performing audio actions (#5012)
This commit is contained in:
parent
f3231682b0
commit
994137426f
@ -549,5 +549,10 @@ class MixinMeta(ABC):
|
|||||||
async def icyparser(self, url: str) -> Optional[str]:
|
async def icyparser(self, url: str) -> Optional[str]:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
async def self_deafen(self, player: lavalink.Player) -> None:
|
async def self_deafen(self, player: lavalink.Player) -> None:
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def can_join_and_speak(self, channel: discord.VoiceChannel) -> bool:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|||||||
@ -643,7 +643,7 @@ class PlayerControllerCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
if (
|
if (
|
||||||
not ctx.author.voice.channel.permissions_for(ctx.me).connect
|
not self.can_join_and_speak(ctx.author.voice.channel)
|
||||||
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
||||||
and self.is_vc_full(ctx.author.voice.channel)
|
and self.is_vc_full(ctx.author.voice.channel)
|
||||||
):
|
):
|
||||||
@ -651,7 +651,7 @@ class PlayerControllerCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
return await self.send_embed_msg(
|
return await self.send_embed_msg(
|
||||||
ctx,
|
ctx,
|
||||||
title=_("Unable To Join Voice Channel"),
|
title=_("Unable To Join Voice Channel"),
|
||||||
description=_("I don't have permission to connect to your channel."),
|
description=_("I don't have permission to connect and speak in your channel."),
|
||||||
)
|
)
|
||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
player = await lavalink.connect(
|
player = await lavalink.connect(
|
||||||
|
|||||||
@ -73,14 +73,16 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
return await self.send_embed_msg(ctx, title=msg, description=desc)
|
return await self.send_embed_msg(ctx, title=msg, description=desc)
|
||||||
try:
|
try:
|
||||||
if (
|
if (
|
||||||
not ctx.author.voice.channel.permissions_for(ctx.me).connect
|
not self.can_join_and_speak(ctx.author.voice.channel)
|
||||||
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
||||||
and self.is_vc_full(ctx.author.voice.channel)
|
and self.is_vc_full(ctx.author.voice.channel)
|
||||||
):
|
):
|
||||||
return await self.send_embed_msg(
|
return await self.send_embed_msg(
|
||||||
ctx,
|
ctx,
|
||||||
title=_("Unable To Play Tracks"),
|
title=_("Unable To Play Tracks"),
|
||||||
description=_("I don't have permission to connect to your channel."),
|
description=_(
|
||||||
|
"I don't have permission to connect and speak in your channel."
|
||||||
|
),
|
||||||
)
|
)
|
||||||
await lavalink.connect(
|
await lavalink.connect(
|
||||||
ctx.author.voice.channel,
|
ctx.author.voice.channel,
|
||||||
@ -179,14 +181,16 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
return await self.send_embed_msg(ctx, title=msg, description=desc)
|
return await self.send_embed_msg(ctx, title=msg, description=desc)
|
||||||
try:
|
try:
|
||||||
if (
|
if (
|
||||||
not ctx.author.voice.channel.permissions_for(ctx.me).connect
|
not self.can_join_and_speak(ctx.author.voice.channel)
|
||||||
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
||||||
and self.is_vc_full(ctx.author.voice.channel)
|
and self.is_vc_full(ctx.author.voice.channel)
|
||||||
):
|
):
|
||||||
return await self.send_embed_msg(
|
return await self.send_embed_msg(
|
||||||
ctx,
|
ctx,
|
||||||
title=_("Unable To Play Tracks"),
|
title=_("Unable To Play Tracks"),
|
||||||
description=_("I don't have permission to connect to your channel."),
|
description=_(
|
||||||
|
"I don't have permission to connect and speak in your channel."
|
||||||
|
),
|
||||||
)
|
)
|
||||||
await lavalink.connect(
|
await lavalink.connect(
|
||||||
ctx.author.voice.channel,
|
ctx.author.voice.channel,
|
||||||
@ -441,14 +445,16 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
return await self.send_embed_msg(ctx, title=msg, description=desc)
|
return await self.send_embed_msg(ctx, title=msg, description=desc)
|
||||||
try:
|
try:
|
||||||
if (
|
if (
|
||||||
not ctx.author.voice.channel.permissions_for(ctx.me).connect
|
not self.can_join_and_speak(ctx.author.voice.channel)
|
||||||
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
||||||
and self.is_vc_full(ctx.author.voice.channel)
|
and self.is_vc_full(ctx.author.voice.channel)
|
||||||
):
|
):
|
||||||
return await self.send_embed_msg(
|
return await self.send_embed_msg(
|
||||||
ctx,
|
ctx,
|
||||||
title=_("Unable To Play Tracks"),
|
title=_("Unable To Play Tracks"),
|
||||||
description=_("I don't have permission to connect to your channel."),
|
description=_(
|
||||||
|
"I don't have permission to connect and speak in your channel."
|
||||||
|
),
|
||||||
)
|
)
|
||||||
await lavalink.connect(
|
await lavalink.connect(
|
||||||
ctx.author.voice.channel,
|
ctx.author.voice.channel,
|
||||||
@ -555,14 +561,16 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
return await self.send_embed_msg(ctx, title=msg, description=desc)
|
return await self.send_embed_msg(ctx, title=msg, description=desc)
|
||||||
try:
|
try:
|
||||||
if (
|
if (
|
||||||
not ctx.author.voice.channel.permissions_for(ctx.me).connect
|
not self.can_join_and_speak(ctx.author.voice.channel)
|
||||||
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
||||||
and self.is_vc_full(ctx.author.voice.channel)
|
and self.is_vc_full(ctx.author.voice.channel)
|
||||||
):
|
):
|
||||||
return await self.send_embed_msg(
|
return await self.send_embed_msg(
|
||||||
ctx,
|
ctx,
|
||||||
title=_("Unable To Play Tracks"),
|
title=_("Unable To Play Tracks"),
|
||||||
description=_("I don't have permission to connect to your channel."),
|
description=_(
|
||||||
|
"I don't have permission to connect and speak in your channel."
|
||||||
|
),
|
||||||
)
|
)
|
||||||
await lavalink.connect(
|
await lavalink.connect(
|
||||||
ctx.author.voice.channel,
|
ctx.author.voice.channel,
|
||||||
@ -677,14 +685,16 @@ class PlayerCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
return await self.send_embed_msg(ctx, title=msg, description=desc)
|
return await self.send_embed_msg(ctx, title=msg, description=desc)
|
||||||
try:
|
try:
|
||||||
if (
|
if (
|
||||||
not ctx.author.voice.channel.permissions_for(ctx.me).connect
|
not self.can_join_and_speak(ctx.author.voice.channel)
|
||||||
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
||||||
and self.is_vc_full(ctx.author.voice.channel)
|
and self.is_vc_full(ctx.author.voice.channel)
|
||||||
):
|
):
|
||||||
return await self.send_embed_msg(
|
return await self.send_embed_msg(
|
||||||
ctx,
|
ctx,
|
||||||
title=_("Unable To Search For Tracks"),
|
title=_("Unable To Search For Tracks"),
|
||||||
description=_("I don't have permission to connect to your channel."),
|
description=_(
|
||||||
|
"I don't have permission to connect and speak in your channel."
|
||||||
|
),
|
||||||
)
|
)
|
||||||
await lavalink.connect(
|
await lavalink.connect(
|
||||||
ctx.author.voice.channel,
|
ctx.author.voice.channel,
|
||||||
|
|||||||
@ -328,7 +328,7 @@ class QueueCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
if (
|
if (
|
||||||
not ctx.author.voice.channel.permissions_for(ctx.me).connect
|
not self.can_join_and_speak(ctx.author.voice.channel)
|
||||||
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
||||||
and self.is_vc_full(ctx.author.voice.channel)
|
and self.is_vc_full(ctx.author.voice.channel)
|
||||||
):
|
):
|
||||||
@ -336,7 +336,7 @@ class QueueCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
return await self.send_embed_msg(
|
return await self.send_embed_msg(
|
||||||
ctx,
|
ctx,
|
||||||
title=_("Unable To Shuffle Queue"),
|
title=_("Unable To Shuffle Queue"),
|
||||||
description=_("I don't have permission to connect to your channel."),
|
description=_("I don't have permission to connect and speak in your channel."),
|
||||||
)
|
)
|
||||||
player = await lavalink.connect(
|
player = await lavalink.connect(
|
||||||
ctx.author.voice.channel,
|
ctx.author.voice.channel,
|
||||||
|
|||||||
@ -338,8 +338,7 @@ class LavalinkEvents(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
self._ws_op_codes[guild_id]._init(self._ws_op_codes[guild_id]._maxsize)
|
self._ws_op_codes[guild_id]._init(self._ws_op_codes[guild_id]._maxsize)
|
||||||
return
|
return
|
||||||
if player.channel:
|
if player.channel:
|
||||||
current_perms = player.channel.permissions_for(player.guild.me)
|
has_perm = self.can_join_and_speak(player.channel)
|
||||||
has_perm = current_perms.speak and current_perms.connect
|
|
||||||
else:
|
else:
|
||||||
has_perm = False
|
has_perm = False
|
||||||
if code in (1000,) and has_perm and player.current and player.is_playing:
|
if code in (1000,) and has_perm and player.current and player.is_playing:
|
||||||
|
|||||||
@ -532,14 +532,16 @@ class PlaylistUtilities(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
return False
|
return False
|
||||||
try:
|
try:
|
||||||
if (
|
if (
|
||||||
not ctx.author.voice.channel.permissions_for(ctx.me).connect
|
not self.can_join_and_speak(ctx.author.voice.channel)
|
||||||
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
||||||
and self.is_vc_full(ctx.author.voice.channel)
|
and self.is_vc_full(ctx.author.voice.channel)
|
||||||
):
|
):
|
||||||
await self.send_embed_msg(
|
await self.send_embed_msg(
|
||||||
ctx,
|
ctx,
|
||||||
title=_("Unable To Get Playlists"),
|
title=_("Unable To Get Playlists"),
|
||||||
description=_("I don't have permission to connect to your channel."),
|
description=_(
|
||||||
|
"I don't have permission to connect and speak in your channel."
|
||||||
|
),
|
||||||
)
|
)
|
||||||
return False
|
return False
|
||||||
await lavalink.connect(
|
await lavalink.connect(
|
||||||
|
|||||||
@ -53,6 +53,10 @@ class ValidationUtilities(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
def is_vc_full(self, channel: discord.VoiceChannel) -> bool:
|
def is_vc_full(self, channel: discord.VoiceChannel) -> bool:
|
||||||
return not (channel.user_limit == 0 or channel.user_limit > len(channel.members))
|
return not (channel.user_limit == 0 or channel.user_limit > len(channel.members))
|
||||||
|
|
||||||
|
def can_join_and_speak(self, channel: discord.VoiceChannel) -> bool:
|
||||||
|
current_perms = channel.permissions_for(channel.guild.me)
|
||||||
|
return current_perms.speak and current_perms.connect
|
||||||
|
|
||||||
async def is_query_allowed(
|
async def is_query_allowed(
|
||||||
self,
|
self,
|
||||||
config: Config,
|
config: Config,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user