mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-27 21:44:21 +00:00
49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
|
import typing
|
||
|
import discord
|
||
|
from royalnet.commands import *
|
||
|
from royalnet.bots import DiscordBot
|
||
|
|
||
|
|
||
|
class SkipCommand(Command):
|
||
|
name: str = "skip"
|
||
|
|
||
|
aliases = ["s", "next", "n"]
|
||
|
|
||
|
description: str = "Salta la canzone attualmente in riproduzione in chat vocale."
|
||
|
|
||
|
syntax: str = "[ [guild] ]"
|
||
|
|
||
|
@staticmethod
|
||
|
async def _legacy_skip_handler(bot: "DiscordBot", guild_name: typing.Optional[str]):
|
||
|
# 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]
|
||
|
# Set the currently playing source as ended
|
||
|
voice_client: discord.VoiceClient = bot.client.find_voice_client_by_guild(guild)
|
||
|
if voice_client and not (voice_client.is_playing() or voice_client.is_paused()):
|
||
|
raise CommandError("Nothing to skip")
|
||
|
# noinspection PyProtectedMember
|
||
|
voice_client._player.stop()
|
||
|
return {}
|
||
|
|
||
|
_event_name = "_legacy_skip"
|
||
|
|
||
|
def __init__(self, interface: CommandInterface):
|
||
|
super().__init__(interface)
|
||
|
if interface.name == "discord":
|
||
|
interface.register_herald_action(self._event_name, self._legacy_skip_handler)
|
||
|
|
||
|
async def run(self, args: CommandArgs, data: CommandData) -> None:
|
||
|
guild_name, = args.match(r"(?:\[(.+)])?")
|
||
|
await self.interface.call_herald_action("discord", self._event_name, {
|
||
|
"guild_name": guild_name
|
||
|
})
|
||
|
await data.reply(f"⏩ Richiesto lo skip della canzone attuale.")
|