mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-27 21:44:21 +00:00
57 lines
2.3 KiB
Python
57 lines
2.3 KiB
Python
import typing
|
|
import discord
|
|
from royalnet.commands import *
|
|
from royalnet.audio.playmodes import Playlist, Pool, Layers
|
|
from royalnet.bots import DiscordBot
|
|
|
|
|
|
class PlaymodeCommand(Command):
|
|
name: str = "playmode"
|
|
|
|
aliases = ["pm", "mode"]
|
|
|
|
description: str = "Cambia modalità di riproduzione per la chat vocale."
|
|
|
|
syntax = "[ [guild] ] {mode}"
|
|
|
|
@staticmethod
|
|
async def _legacy_playmode_handler(bot: "DiscordBot", guild_name: typing.Optional[str], mode_name: str):
|
|
"""Handle a playmode Royalnet request. That is, change current PlayMode."""
|
|
# Find the matching guild
|
|
if guild_name:
|
|
guilds: typing.List[discord.Guild] = bot.client.find_guild_by_name(guild_name)
|
|
else:
|
|
guilds = bot.client.guilds
|
|
if len(guilds) == 0:
|
|
raise CommandError("No guilds with the specified name found.")
|
|
if len(guilds) > 1:
|
|
raise CommandError("Multiple guilds with the specified name found.")
|
|
guild = list(bot.client.guilds)[0]
|
|
# Delete the previous PlayMode, if it exists
|
|
if bot.music_data[guild] is not None:
|
|
bot.music_data[guild].playmode.delete()
|
|
# Create the new PlayMode
|
|
if mode_name == "playlist":
|
|
bot.music_data[guild].playmode = Playlist()
|
|
elif mode_name == "pool":
|
|
bot.music_data[guild].playmode = Pool()
|
|
elif mode_name == "layers":
|
|
bot.music_data[guild].playmode = Layers()
|
|
else:
|
|
raise CommandError("Unknown PlayMode specified.")
|
|
return {}
|
|
|
|
_event_name = "_legacy_playmode"
|
|
|
|
def __init__(self, interface: CommandInterface):
|
|
super().__init__(interface)
|
|
if interface.name == "discord":
|
|
interface.register_herald_action(self._event_name, self._legacy_playmode_handler)
|
|
|
|
async def run(self, args: CommandArgs, data: CommandData) -> None:
|
|
guild_name, mode_name = args.match(r"(?:\[(.+)])?\s*(\S+)\s*")
|
|
await self.interface.call_herald_action("discord", self._event_name, {
|
|
"guild_name": guild_name,
|
|
"mode_name": mode_name
|
|
})
|
|
await data.reply(f"🔃 Impostata la modalità di riproduzione a: [c]{mode_name}[/c].")
|