mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 19:28:54 -05:00
[Mod] Added voice kicking. (#2639)
* Added voice kicking.
* Reversed exceptions.
* Lets use a check that works for this task 👀
* Update abc.py
* Black formatting
This commit is contained in:
parent
16990071cb
commit
9414de24d4
@ -20,6 +20,13 @@ class MixinMeta(ABC):
|
|||||||
self.ban_queue: List[Tuple[int, int]]
|
self.ban_queue: List[Tuple[int, int]]
|
||||||
self.unban_queue: List[Tuple[int, int]]
|
self.unban_queue: List[Tuple[int, int]]
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
@abstractmethod
|
||||||
|
async def _voice_perm_check(
|
||||||
|
ctx: commands.Context, user_voice_state: Optional[discord.VoiceState], **perms: bool
|
||||||
|
) -> bool:
|
||||||
|
raise NotImplementedError()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
async def get_audit_entry_info(
|
async def get_audit_entry_info(
|
||||||
|
|||||||
@ -97,4 +97,10 @@ CASETYPES = [
|
|||||||
"case_str": "Server Unmute",
|
"case_str": "Server Unmute",
|
||||||
"audit_type": "overwrite_update",
|
"audit_type": "overwrite_update",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "vkick",
|
||||||
|
"default_setting": False,
|
||||||
|
"image": "\N{SPEAKER WITH CANCELLATION STROKE}",
|
||||||
|
"case_str": "Voice Kick",
|
||||||
|
},
|
||||||
]
|
]
|
||||||
|
|||||||
@ -495,6 +495,56 @@ class KickBanMixin(MixinMeta):
|
|||||||
await ctx.send(e)
|
await ctx.send(e)
|
||||||
await ctx.send(_("Done. Enough chaos."))
|
await ctx.send(_("Done. Enough chaos."))
|
||||||
|
|
||||||
|
@commands.command()
|
||||||
|
@commands.guild_only()
|
||||||
|
@commands.mod_or_permissions(move_members=True)
|
||||||
|
async def voicekick(
|
||||||
|
self, ctx: commands.Context, member: discord.Member, *, reason: str = None
|
||||||
|
):
|
||||||
|
"""Kick a member from a voice channel."""
|
||||||
|
author = ctx.author
|
||||||
|
guild = ctx.guild
|
||||||
|
user_voice_state: discord.VoiceState = member.voice
|
||||||
|
|
||||||
|
if await self._voice_perm_check(ctx, user_voice_state, move_members=True) is False:
|
||||||
|
return
|
||||||
|
elif not await is_allowed_by_hierarchy(self.bot, self.settings, guild, author, member):
|
||||||
|
await ctx.send(
|
||||||
|
_(
|
||||||
|
"I cannot let you do that. You are "
|
||||||
|
"not higher than the user in the role "
|
||||||
|
"hierarchy."
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return
|
||||||
|
case_channel = member.voice.channel
|
||||||
|
# Store this channel for the case channel.
|
||||||
|
|
||||||
|
try:
|
||||||
|
await member.move_to(discord.Object(id=None))
|
||||||
|
# Work around till we get D.py 1.1.0, whereby we can directly do None.
|
||||||
|
except discord.Forbidden: # Very unlikely that this will ever occur
|
||||||
|
await ctx.send(_("I am unable to kick this member from the voice channel."))
|
||||||
|
return
|
||||||
|
except discord.HTTPException:
|
||||||
|
await ctx.send(_("Something went wrong while attempting to kick that member"))
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
await modlog.create_case(
|
||||||
|
self.bot,
|
||||||
|
guild,
|
||||||
|
ctx.message.created_at,
|
||||||
|
"vkick",
|
||||||
|
member,
|
||||||
|
author,
|
||||||
|
reason,
|
||||||
|
until=None,
|
||||||
|
channel=case_channel,
|
||||||
|
)
|
||||||
|
except RuntimeError as e:
|
||||||
|
await ctx.send(e)
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
@commands.guild_only()
|
@commands.guild_only()
|
||||||
@commands.bot_has_permissions(ban_members=True)
|
@commands.bot_has_permissions(ban_members=True)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user