diff --git a/kdb-bot/src/bot/config b/kdb-bot/src/bot/config index 52d19fab..e7e9d85f 160000 --- a/kdb-bot/src/bot/config +++ b/kdb-bot/src/bot/config @@ -1 +1 @@ -Subproject commit 52d19fab6dcfd2e7bce068f01d0e15ddf7d43212 +Subproject commit e7e9d85f7d0054ba95ae1ff87d91b4e218ef510f diff --git a/kdb-bot/src/bot/translation/de.json b/kdb-bot/src/bot/translation/de.json index 3ab63d0b..8005bb12 100644 --- a/kdb-bot/src/bot/translation/de.json +++ b/kdb-bot/src/bot/translation/de.json @@ -151,6 +151,10 @@ }, "footer": "" }, + "mass_move": { + "moved": "Alle Personen aus {} wurden nach {} verschoben.", + "channel_from_error": "Du musst dich in einem Voicechannel befinden oder die Option \"channel_from\" mit angeben." + }, "presence": { "changed": "Presence wurde geƤndert.", "removed": "Presence wurde entfernt.", diff --git a/kdb-bot/src/modules/base/base_module.py b/kdb-bot/src/modules/base/base_module.py index f2dadd90..7477d701 100644 --- a/kdb-bot/src/modules/base/base_module.py +++ b/kdb-bot/src/modules/base/base_module.py @@ -10,6 +10,7 @@ from modules.base.abc.base_helper_abc import BaseHelperABC from modules.base.command.afk_command import AFKCommand from modules.base.command.help_command import HelpCommand from modules.base.command.info_command import InfoCommand +from modules.base.command.mass_move_command import MassMoveCommand from modules.base.command.ping_command import PingCommand from modules.base.command.presence_command import PresenceCommand from modules.base.command.purge_command import PurgeCommand @@ -42,6 +43,7 @@ class BaseModule(ModuleABC): self._dc.add_command(AFKCommand) self._dc.add_command(HelpCommand) self._dc.add_command(InfoCommand) + self._dc.add_command(MassMoveCommand) self._dc.add_command(PingCommand) self._dc.add_command(PresenceCommand) diff --git a/kdb-bot/src/modules/base/command/mass_move_command.py b/kdb-bot/src/modules/base/command/mass_move_command.py new file mode 100644 index 00000000..4d72ecb9 --- /dev/null +++ b/kdb-bot/src/modules/base/command/mass_move_command.py @@ -0,0 +1,49 @@ +import asyncio + +import discord +from cpl_discord.command import DiscordCommandABC +from cpl_discord.service import DiscordBotServiceABC +from cpl_translation import TranslatePipe +from discord.ext import commands +from discord.ext.commands import Context + +from bot_core.abc.message_service_abc import MessageServiceABC +from bot_core.helper.command_checks import CommandChecks +from bot_core.logging.command_logger import CommandLogger + + +class MassMoveCommand(DiscordCommandABC): + + def __init__( + self, + logger: CommandLogger, + message_service: MessageServiceABC, + bot: DiscordBotServiceABC, + translate: TranslatePipe, + ): + DiscordCommandABC.__init__(self) + self._logger = logger + self._message_service = message_service + self._bot = bot + self._t = translate + + @commands.hybrid_command(name='mass-move') + @CommandChecks.check_is_ready() + @CommandChecks.check_is_member_moderator() + async def mass_move(self, ctx: Context, channel_to: discord.VoiceChannel, + channel_from: discord.VoiceChannel = None): + self._logger.debug(__name__, f'Received command mass-move {ctx}') + + if channel_from is None and ctx.author.voice is None: + await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.base.mass_move.channel_from_error')) + return + + if channel_from is None: + channel_from = ctx.author.voice.channel + + moves = [member.move_to(channel_to) for member in channel_from.members] + await asyncio.gather(*moves) + + await self._message_service.send_ctx_msg(ctx, self._t.transform('modules.base.mass_move.moved').format(channel_from.mention, channel_to.mention)) + + self._logger.trace(__name__, f'Finished mass-move command') diff --git a/kdb-bot/src/modules/base/thread/__init__.py b/kdb-bot/src/modules/base/thread/__init__.py new file mode 100644 index 00000000..425ab6c1 --- /dev/null +++ b/kdb-bot/src/modules/base/thread/__init__.py @@ -0,0 +1 @@ +# imports