mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2026-06-06 13:43:01 -04:00
Allow passing a voice channel to [p]summon (#5536)
Co-authored-by: Draper <27962761+Drapersniper@users.noreply.github.com> Co-authored-by: Jakub Kuczys <me@jacken.men> Co-authored-by: Kreusada <67752638+Kreusada@users.noreply.github.com>
This commit is contained in:
@@ -3199,12 +3199,15 @@ summon
|
|||||||
|
|
||||||
.. code-block:: none
|
.. code-block:: none
|
||||||
|
|
||||||
[p]summon
|
[p]summon [voice_channel]
|
||||||
|
|
||||||
**Description**
|
**Description**
|
||||||
|
|
||||||
Summon the bot to a voice channel.
|
Summon the bot to a voice channel.
|
||||||
|
|
||||||
|
If ``[voice_channel]`` is not specified, the bot will join the channel you are currently in.
|
||||||
|
``[voice_channel]`` can be a channel link ("Copy Link" option in channel's context menu) or ID.
|
||||||
|
|
||||||
.. _audio-command-volume:
|
.. _audio-command-volume:
|
||||||
|
|
||||||
^^^^^^
|
^^^^^^
|
||||||
|
|||||||
@@ -618,8 +618,14 @@ class PlayerControllerCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
@commands.cooldown(1, 15, commands.BucketType.guild)
|
@commands.cooldown(1, 15, commands.BucketType.guild)
|
||||||
@commands.bot_has_permissions(embed_links=True)
|
@commands.bot_has_permissions(embed_links=True)
|
||||||
async def command_summon(self, ctx: commands.Context):
|
async def command_summon(
|
||||||
"""Summon the bot to a voice channel."""
|
self, ctx: commands.Context, *, voice_channel: discord.VoiceChannel = None
|
||||||
|
):
|
||||||
|
"""Summon the bot to a voice channel.
|
||||||
|
|
||||||
|
If `[voice_channel]` is not specified, the bot will join the channel you are currently in.
|
||||||
|
`[voice_channel]` can be a channel link ("Copy Link" option in channel's context menu) or ID.
|
||||||
|
"""
|
||||||
dj_enabled = self._dj_status_cache.setdefault(
|
dj_enabled = self._dj_status_cache.setdefault(
|
||||||
ctx.guild.id, await self.config.guild(ctx.guild).dj_enabled()
|
ctx.guild.id, await self.config.guild(ctx.guild).dj_enabled()
|
||||||
)
|
)
|
||||||
@@ -643,10 +649,22 @@ class PlayerControllerCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
if voice_channel is not None:
|
||||||
|
current_perms = voice_channel.permissions_for(ctx.author)
|
||||||
|
if not current_perms.connect:
|
||||||
|
ctx.command.reset_cooldown(ctx)
|
||||||
|
return await self.send_embed_msg(
|
||||||
|
ctx,
|
||||||
|
title=_("Unable To Join Voice Channel"),
|
||||||
|
description=_(
|
||||||
|
"You don't have permission to connect to the specified channel."
|
||||||
|
),
|
||||||
|
)
|
||||||
|
channel = voice_channel or ctx.author.voice.channel
|
||||||
if (
|
if (
|
||||||
not self.can_join_and_speak(ctx.author.voice.channel)
|
not self.can_join_and_speak(channel)
|
||||||
or not ctx.author.voice.channel.permissions_for(ctx.me).move_members
|
or not channel.permissions_for(ctx.me).move_members
|
||||||
and self.is_vc_full(ctx.author.voice.channel)
|
and self.is_vc_full(channel)
|
||||||
):
|
):
|
||||||
ctx.command.reset_cooldown(ctx)
|
ctx.command.reset_cooldown(ctx)
|
||||||
return await self.send_embed_msg(
|
return await self.send_embed_msg(
|
||||||
@@ -656,17 +674,14 @@ class PlayerControllerCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
)
|
)
|
||||||
if not self._player_check(ctx):
|
if not self._player_check(ctx):
|
||||||
player = await lavalink.connect(
|
player = await lavalink.connect(
|
||||||
ctx.author.voice.channel,
|
channel,
|
||||||
self_deaf=await self.config.guild_from_id(ctx.guild.id).auto_deafen(),
|
self_deaf=await self.config.guild_from_id(ctx.guild.id).auto_deafen(),
|
||||||
)
|
)
|
||||||
player.store("notify_channel", ctx.channel.id)
|
player.store("notify_channel", ctx.channel.id)
|
||||||
else:
|
else:
|
||||||
player = lavalink.get_player(ctx.guild.id)
|
player = lavalink.get_player(ctx.guild.id)
|
||||||
player.store("notify_channel", ctx.channel.id)
|
player.store("notify_channel", ctx.channel.id)
|
||||||
if (
|
if channel == player.channel and ctx.guild.me in channel.members:
|
||||||
ctx.author.voice.channel == player.channel
|
|
||||||
and ctx.guild.me in ctx.author.voice.channel.members
|
|
||||||
):
|
|
||||||
ctx.command.reset_cooldown(ctx)
|
ctx.command.reset_cooldown(ctx)
|
||||||
return await self.send_embed_msg(
|
return await self.send_embed_msg(
|
||||||
ctx,
|
ctx,
|
||||||
@@ -674,7 +689,7 @@ class PlayerControllerCommands(MixinMeta, metaclass=CompositeMetaClass):
|
|||||||
description=_("I am already in your channel."),
|
description=_("I am already in your channel."),
|
||||||
)
|
)
|
||||||
await player.move_to(
|
await player.move_to(
|
||||||
ctx.author.voice.channel,
|
channel,
|
||||||
self_deaf=await self.config.guild_from_id(ctx.guild.id).auto_deafen(),
|
self_deaf=await self.config.guild_from_id(ctx.guild.id).auto_deafen(),
|
||||||
)
|
)
|
||||||
await ctx.tick()
|
await ctx.tick()
|
||||||
|
|||||||
Reference in New Issue
Block a user