mirror of
https://github.com/RafaelSolVargas/Vulkan.git
synced 2025-10-29 16:57:23 +00:00
Creating Player View
This commit is contained in:
parent
beb0bc085d
commit
4f11506c2b
@ -1,7 +1,7 @@
|
||||
from Config.Singleton import Singleton
|
||||
|
||||
|
||||
class Colors(Singleton):
|
||||
class VColors(Singleton):
|
||||
def __init__(self) -> None:
|
||||
self.__red = 0xDC143C
|
||||
self.__green = 0x1F8B4C
|
||||
|
||||
@ -2,7 +2,7 @@ from decouple import config
|
||||
from Config.Singleton import Singleton
|
||||
|
||||
|
||||
class Configs(Singleton):
|
||||
class VConfigs(Singleton):
|
||||
def __init__(self) -> None:
|
||||
if not super().created:
|
||||
self.BOT_PREFIX = '!'
|
||||
|
||||
@ -1,16 +1,16 @@
|
||||
from Config.Messages import Messages
|
||||
from Config.Exceptions import VulkanError
|
||||
from discord import Embed
|
||||
from Config.Configs import Configs
|
||||
from Config.Colors import Colors
|
||||
from Config.Configs import VConfigs
|
||||
from Config.Colors import VColors
|
||||
from datetime import timedelta
|
||||
|
||||
|
||||
class Embeds:
|
||||
class VEmbeds:
|
||||
def __init__(self) -> None:
|
||||
self.__config = Configs()
|
||||
self.__config = VConfigs()
|
||||
self.__messages = Messages()
|
||||
self.__colors = Colors()
|
||||
self.__colors = VColors()
|
||||
|
||||
def ONE_SONG_LOOPING(self, info: dict) -> Embed:
|
||||
title = self.__messages.ONE_SONG_LOOPING
|
||||
20
Config/Emojis.py
Normal file
20
Config/Emojis.py
Normal file
@ -0,0 +1,20 @@
|
||||
from Config.Singleton import Singleton
|
||||
|
||||
|
||||
class VEmojis(Singleton):
|
||||
def __init__(self) -> None:
|
||||
if not super().created:
|
||||
self.SKIP = "⏩"
|
||||
self.BACK = "⏪"
|
||||
self.PAUSE = "⏸️"
|
||||
self.PLAY = "▶️"
|
||||
self.STOP = "⏹️"
|
||||
self.LOOP_ONE = "🔂"
|
||||
self.LOOP_OFF = "➡️"
|
||||
self.LOOP_ALL = "🔁"
|
||||
self.SHUFFLE = "🔀"
|
||||
self.QUEUE = "📜"
|
||||
self.MUSIC = "🎧"
|
||||
self.ERROR = "❌"
|
||||
self.DOWNLOADING = "📥"
|
||||
self.SUCCESS = "✅"
|
||||
@ -1,11 +1,11 @@
|
||||
from Config.Singleton import Singleton
|
||||
from Config.Configs import Configs
|
||||
from Config.Configs import VConfigs
|
||||
|
||||
|
||||
class Helper(Singleton):
|
||||
def __init__(self) -> None:
|
||||
if not super().created:
|
||||
config = Configs()
|
||||
config = VConfigs()
|
||||
self.HELP_SKIP = 'Skip the current playing song.'
|
||||
self.HELP_SKIP_LONG = 'Skip the playing of the current song, does not work if loop one is activated. \n\nArguments: None.'
|
||||
self.HELP_RESUME = 'Resumes the song player.'
|
||||
|
||||
@ -1,11 +1,13 @@
|
||||
from Config.Singleton import Singleton
|
||||
from Config.Configs import Configs
|
||||
from Config.Configs import VConfigs
|
||||
from Config.Emojis import VEmojis
|
||||
|
||||
|
||||
class Messages(Singleton):
|
||||
def __init__(self) -> None:
|
||||
if not super().created:
|
||||
configs = Configs()
|
||||
self.__emojis = VEmojis()
|
||||
configs = VConfigs()
|
||||
self.STARTUP_MESSAGE = 'Starting Vulkan...'
|
||||
self.STARTUP_COMPLETE_MESSAGE = 'Vulkan is now operating.'
|
||||
|
||||
@ -16,67 +18,67 @@ class Messages(Singleton):
|
||||
|
||||
self.SONGS_ADDED = 'Downloading `{}` songs to add to the queue'
|
||||
self.SONG_ADDED = 'Downloading the song `{}` to add to the queue'
|
||||
self.SONG_ADDED_TWO = '🎧 Song added to the queue'
|
||||
self.SONG_PLAYING = '🎧 Song playing now'
|
||||
self.SONG_PLAYER = '🎧 Song Player'
|
||||
self.QUEUE_TITLE = '🎧 Songs in Queue'
|
||||
self.ONE_SONG_LOOPING = '🎧 Looping One Song'
|
||||
self.ALL_SONGS_LOOPING = '🎧 Looping All Songs'
|
||||
self.SONG_PAUSED = '⏸️ Song paused'
|
||||
self.SONG_RESUMED = '▶️ Song playing'
|
||||
self.EMPTY_QUEUE = f'📜 Song queue is empty, use {configs.BOT_PREFIX}play to add new songs'
|
||||
self.SONG_DOWNLOADING = '📥 Downloading...'
|
||||
self.SONG_ADDED_TWO = f'{self.__emojis.MUSIC} Song added to the queue'
|
||||
self.SONG_PLAYING = f'{self.__emojis.MUSIC} Song playing now'
|
||||
self.SONG_PLAYER = f'{self.__emojis.MUSIC} Song Player'
|
||||
self.QUEUE_TITLE = f'{self.__emojis.MUSIC} Songs in Queue'
|
||||
self.ONE_SONG_LOOPING = f'{self.__emojis.MUSIC} Looping One Song'
|
||||
self.ALL_SONGS_LOOPING = f'{self.__emojis.MUSIC} Looping All Songs'
|
||||
self.SONG_PAUSED = f'{self.__emojis.PAUSE} Song paused'
|
||||
self.SONG_RESUMED = f'{self.__emojis.PLAY} Song playing'
|
||||
self.EMPTY_QUEUE = f'{self.__emojis.QUEUE} Song queue is empty, use {configs.BOT_PREFIX}play to add new songs'
|
||||
self.SONG_DOWNLOADING = f'{self.__emojis.DOWNLOADING} Downloading...'
|
||||
|
||||
self.HISTORY_TITLE = '🎧 Played Songs'
|
||||
self.HISTORY_EMPTY = '📜 There is no musics in history'
|
||||
self.HISTORY_TITLE = f'{self.__emojis.MUSIC} Played Songs'
|
||||
self.HISTORY_EMPTY = f'{self.__emojis.QUEUE} There is no musics in history'
|
||||
|
||||
self.SONG_MOVED_SUCCESSFULLY = 'Song `{}` in position `{}` moved to the position `{}` successfully'
|
||||
self.SONG_REMOVED_SUCCESSFULLY = 'Song `{}` removed successfully'
|
||||
|
||||
self.LOOP_ALL_ON = f'❌ Vulkan is looping all songs, use {configs.BOT_PREFIX}loop off to disable this loop first'
|
||||
self.LOOP_ONE_ON = f'❌ Vulkan is looping one song, use {configs.BOT_PREFIX}loop off to disable this loop first'
|
||||
self.LOOP_ALL_ALREADY_ON = '🔁 Vulkan is already looping all songs'
|
||||
self.LOOP_ONE_ALREADY_ON = '🔂 Vulkan is already looping the current song'
|
||||
self.LOOP_ALL_ACTIVATE = '🔁 Looping all songs'
|
||||
self.LOOP_ONE_ACTIVATE = '🔂 Looping the current song'
|
||||
self.LOOP_DISABLE = '➡️ Loop disabled'
|
||||
self.LOOP_ALREADY_DISABLE = '❌ Loop is already disabled'
|
||||
self.LOOP_ON = f'❌ This command cannot be invoked with any loop activated. Use {configs.BOT_PREFIX}loop off to disable loop'
|
||||
self.BAD_USE_OF_LOOP = f"""❌ Invalid arguments of Loop command. Use {configs.BOT_PREFIX}help loop to more information.
|
||||
-> Available Arguments: ["all", "off", "one", ""]"""
|
||||
self.LOOP_ALL_ON = f'{self.__emojis.ERROR} Vulkan is looping all songs, use {configs.BOT_PREFIX}loop off to disable this loop first'
|
||||
self.LOOP_ONE_ON = f'{self.__emojis.ERROR} Vulkan is looping one song, use {configs.BOT_PREFIX}loop off to disable this loop first'
|
||||
self.LOOP_ALL_ALREADY_ON = f'{self.__emojis.LOOP_ALL} Vulkan is already looping all songs'
|
||||
self.LOOP_ONE_ALREADY_ON = f'{self.__emojis.LOOP_ONE} Vulkan is already looping the current song'
|
||||
self.LOOP_ALL_ACTIVATE = f'{self.__emojis.LOOP_ALL} Looping all songs'
|
||||
self.LOOP_ONE_ACTIVATE = f'{self.__emojis.LOOP_ONE} Looping the current song'
|
||||
self.LOOP_DISABLE = f'{self.__emojis.LOOP_OFF} Loop disabled'
|
||||
self.LOOP_ALREADY_DISABLE = f'{self.__emojis.ERROR} Loop is already disabled'
|
||||
self.LOOP_ON = f'{self.__emojis.ERROR} This command cannot be invoked with any loop activated. Use {configs.BOT_PREFIX}loop off to disable loop'
|
||||
self.BAD_USE_OF_LOOP = f"""{self.__emojis.ERROR} Invalid arguments of Loop command. Use {configs.BOT_PREFIX}help loop to more information.
|
||||
-> Available Arguments: ["all", "off", "one", ""]"""
|
||||
|
||||
self.SONGS_SHUFFLED = '🔀 Songs shuffled successfully'
|
||||
self.ERROR_SHUFFLING = '❌ Error while shuffling the songs'
|
||||
self.ERROR_MOVING = '❌ Error while moving the songs'
|
||||
self.LENGTH_ERROR = '❌ Numbers must be between 1 and queue length, use -1 for the last song'
|
||||
self.ERROR_NUMBER = '❌ This command require a number'
|
||||
self.ERROR_PLAYING = '❌ Error while playing songs'
|
||||
self.COMMAND_NOT_FOUND = f'❌ Command not found, type {configs.BOT_PREFIX}help to see all commands'
|
||||
self.UNKNOWN_ERROR = f'❌ Unknown Error, if needed, use {configs.BOT_PREFIX}reset to reset the player of your server'
|
||||
self.ERROR_MISSING_ARGUMENTS = f'❌ Missing arguments in this command. Type {configs.BOT_PREFIX}help "command" to see more info about this command'
|
||||
self.NOT_PREVIOUS = '❌ There is none previous song to play'
|
||||
self.PLAYER_NOT_PLAYING = f'❌ No song playing. Use {configs.BOT_PREFIX}play to start the player'
|
||||
self.SONGS_SHUFFLED = f'{self.__emojis.SHUFFLE} Songs shuffled successfully'
|
||||
self.ERROR_SHUFFLING = f'{self.__emojis.ERROR} Error while shuffling the songs'
|
||||
self.ERROR_MOVING = f'{self.__emojis.ERROR} Error while moving the songs'
|
||||
self.LENGTH_ERROR = f'{self.__emojis.ERROR} Numbers must be between 1 and queue length, use -1 for the last song'
|
||||
self.ERROR_NUMBER = f'{self.__emojis.ERROR} This command require a number'
|
||||
self.ERROR_PLAYING = f'{self.__emojis.ERROR} Error while playing songs'
|
||||
self.COMMAND_NOT_FOUND = f'{self.__emojis.ERROR} Command not found, type {configs.BOT_PREFIX}help to see all commands'
|
||||
self.UNKNOWN_ERROR = f'{self.__emojis.ERROR} Unknown Error, if needed, use {configs.BOT_PREFIX}reset to reset the player of your server'
|
||||
self.ERROR_MISSING_ARGUMENTS = f'{self.__emojis.ERROR} Missing arguments in this command. Type {configs.BOT_PREFIX}help "command" to see more info about this command'
|
||||
self.NOT_PREVIOUS = f'{self.__emojis.ERROR} There is none previous song to play'
|
||||
self.PLAYER_NOT_PLAYING = f'{self.__emojis.ERROR} No song playing. Use {configs.BOT_PREFIX}play to start the player'
|
||||
self.IMPOSSIBLE_MOVE = 'That is impossible :('
|
||||
self.ERROR_TITLE = 'Error :-('
|
||||
self.COMMAND_NOT_FOUND_TITLE = 'This is strange :-('
|
||||
self.NO_CHANNEL = 'To play some music, connect to any voice channel first.'
|
||||
self.NO_GUILD = f'This server does not has a Player, try {configs.BOT_PREFIX}reset'
|
||||
self.INVALID_INPUT = f'This URL was too strange, try something better or type {configs.BOT_PREFIX}help play'
|
||||
self.DOWNLOADING_ERROR = "❌ It's impossible to download and play this video"
|
||||
self.EXTRACTING_ERROR = '❌ An error ocurred while searching for the songs'
|
||||
self.DOWNLOADING_ERROR = f"{self.__emojis.ERROR} It's impossible to download and play this video"
|
||||
self.EXTRACTING_ERROR = f'{self.__emojis.ERROR} An error ocurred while searching for the songs'
|
||||
|
||||
self.ERROR_IN_PROCESS = "❌ Due to a internal error your player was restarted, skipping the song."
|
||||
self.ERROR_IN_PROCESS = f"{self.__emojis.ERROR} Due to a internal error your player was restarted, skipping the song."
|
||||
self.MY_ERROR_BAD_COMMAND = 'This string serves to verify if some error was raised by myself on purpose'
|
||||
self.BAD_COMMAND_TITLE = 'Misuse of command'
|
||||
self.BAD_COMMAND = f'❌ Bad usage of this command, type {configs.BOT_PREFIX}help "command" to understand the command better'
|
||||
self.VIDEO_UNAVAILABLE = '❌ Sorry. This video is unavailable for download.'
|
||||
self.ERROR_DUE_LOOP_ONE_ON = f'❌ This command cannot be executed with loop one activated. Use {configs.BOT_PREFIX}loop off to disable loop.'
|
||||
self.BAD_COMMAND = f'{self.__emojis.ERROR} Bad usage of this command, type {configs.BOT_PREFIX}help "command" to understand the command better'
|
||||
self.VIDEO_UNAVAILABLE = f'{self.__emojis.ERROR} Sorry. This video is unavailable for download.'
|
||||
self.ERROR_DUE_LOOP_ONE_ON = f'{self.__emojis.ERROR} This command cannot be executed with loop one activated. Use {configs.BOT_PREFIX}loop off to disable loop.'
|
||||
|
||||
|
||||
class SearchMessages(Singleton):
|
||||
def __init__(self) -> None:
|
||||
if not super().created:
|
||||
config = Configs()
|
||||
config = VConfigs()
|
||||
self.UNKNOWN_INPUT = f'This type of input was too strange, try something else or type {config.BOT_PREFIX}help play'
|
||||
self.UNKNOWN_INPUT_TITLE = 'Nothing Found'
|
||||
self.GENERIC_TITLE = 'URL could not be processed'
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
from discord import Embed
|
||||
from discord.ext.commands import Cog, command
|
||||
from Config.Configs import Configs
|
||||
from Config.Configs import VConfigs
|
||||
from Config.Helper import Helper
|
||||
from Config.Colors import Colors
|
||||
from Config.Colors import VColors
|
||||
from Music.VulkanBot import VulkanBot
|
||||
from Views.Embeds import Embeds
|
||||
from Config.Embeds import VEmbeds
|
||||
|
||||
helper = Helper()
|
||||
|
||||
@ -14,9 +14,9 @@ class ControlCog(Cog):
|
||||
|
||||
def __init__(self, bot: VulkanBot):
|
||||
self.__bot = bot
|
||||
self.__config = Configs()
|
||||
self.__colors = Colors()
|
||||
self.__embeds = Embeds()
|
||||
self.__config = VConfigs()
|
||||
self.__colors = VColors()
|
||||
self.__embeds = VEmbeds()
|
||||
self.__commands = {
|
||||
'MUSIC': ['resume', 'pause', 'loop', 'stop',
|
||||
'skip', 'play', 'queue', 'clear',
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
from discord import Guild, Client
|
||||
from discord.ext.commands import Context, command, Cog
|
||||
from Config.Helper import Helper
|
||||
from Handlers.ClearHandler import ClearHandler
|
||||
@ -16,8 +15,10 @@ from Handlers.ResumeHandler import ResumeHandler
|
||||
from Handlers.HistoryHandler import HistoryHandler
|
||||
from Handlers.QueueHandler import QueueHandler
|
||||
from Handlers.LoopHandler import LoopHandler
|
||||
from Views.EmoteView import EmoteView
|
||||
from Views.EmbedView import EmbedView
|
||||
from Views.EmoteCogResponse import EmoteCommandResponse
|
||||
from Views.EmbedCogResponse import EmbedCommandResponse
|
||||
from Views.PlayerView import PlayerView
|
||||
from Music.VulkanBot import VulkanBot
|
||||
|
||||
helper = Helper()
|
||||
|
||||
@ -29,8 +30,8 @@ class MusicCog(Cog):
|
||||
Execute the handler and then create a specific View to be showed in Discord
|
||||
"""
|
||||
|
||||
def __init__(self, bot) -> None:
|
||||
self.__bot: Client = bot
|
||||
def __init__(self, bot: VulkanBot) -> None:
|
||||
self.__bot: VulkanBot = bot
|
||||
|
||||
@command(name="play", help=helper.HELP_PLAY, description=helper.HELP_PLAY_LONG, aliases=['p', 'tocar'])
|
||||
async def play(self, ctx: Context, *args) -> None:
|
||||
@ -39,8 +40,8 @@ class MusicCog(Cog):
|
||||
|
||||
response = await controller.run(args)
|
||||
if response is not None:
|
||||
view1 = EmbedView(response)
|
||||
view2 = EmoteView(response)
|
||||
view1 = EmbedCommandResponse(response)
|
||||
view2 = EmoteCommandResponse(response)
|
||||
await view1.run()
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
@ -52,7 +53,7 @@ class MusicCog(Cog):
|
||||
controller = QueueHandler(ctx, self.__bot)
|
||||
|
||||
response = await controller.run()
|
||||
view2 = EmbedView(response)
|
||||
view2 = EmbedCommandResponse(response)
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
print(f'[ERROR IN COG] -> {e}')
|
||||
@ -64,9 +65,9 @@ class MusicCog(Cog):
|
||||
|
||||
response = await controller.run()
|
||||
if response.success:
|
||||
view = EmoteView(response)
|
||||
view = EmoteCommandResponse(response)
|
||||
else:
|
||||
view = EmbedView(response)
|
||||
view = EmbedCommandResponse(response)
|
||||
|
||||
await view.run()
|
||||
except Exception as e:
|
||||
@ -79,9 +80,9 @@ class MusicCog(Cog):
|
||||
|
||||
response = await controller.run()
|
||||
if response.success:
|
||||
view = EmoteView(response)
|
||||
view = EmoteCommandResponse(response)
|
||||
else:
|
||||
view = EmbedView(response)
|
||||
view = EmbedCommandResponse(response)
|
||||
|
||||
await view.run()
|
||||
except Exception as e:
|
||||
@ -93,8 +94,8 @@ class MusicCog(Cog):
|
||||
controller = PauseHandler(ctx, self.__bot)
|
||||
|
||||
response = await controller.run()
|
||||
view1 = EmoteView(response)
|
||||
view2 = EmbedView(response)
|
||||
view1 = EmoteCommandResponse(response)
|
||||
view2 = EmbedCommandResponse(response)
|
||||
await view1.run()
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
@ -106,8 +107,8 @@ class MusicCog(Cog):
|
||||
controller = ResumeHandler(ctx, self.__bot)
|
||||
|
||||
response = await controller.run()
|
||||
view1 = EmoteView(response)
|
||||
view2 = EmbedView(response)
|
||||
view1 = EmoteCommandResponse(response)
|
||||
view2 = EmbedCommandResponse(response)
|
||||
await view1.run()
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
@ -120,8 +121,8 @@ class MusicCog(Cog):
|
||||
|
||||
response = await controller.run()
|
||||
if response is not None:
|
||||
view1 = EmbedView(response)
|
||||
view2 = EmoteView(response)
|
||||
view1 = EmbedCommandResponse(response)
|
||||
view2 = EmoteCommandResponse(response)
|
||||
await view1.run()
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
@ -133,8 +134,8 @@ class MusicCog(Cog):
|
||||
controller = HistoryHandler(ctx, self.__bot)
|
||||
|
||||
response = await controller.run()
|
||||
view1 = EmbedView(response)
|
||||
view2 = EmoteView(response)
|
||||
view1 = EmbedCommandResponse(response)
|
||||
view2 = EmoteCommandResponse(response)
|
||||
await view1.run()
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
@ -146,8 +147,8 @@ class MusicCog(Cog):
|
||||
controller = LoopHandler(ctx, self.__bot)
|
||||
|
||||
response = await controller.run(args)
|
||||
view1 = EmoteView(response)
|
||||
view2 = EmbedView(response)
|
||||
view1 = EmoteCommandResponse(response)
|
||||
view2 = EmbedCommandResponse(response)
|
||||
await view1.run()
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
@ -159,7 +160,7 @@ class MusicCog(Cog):
|
||||
controller = ClearHandler(ctx, self.__bot)
|
||||
|
||||
response = await controller.run()
|
||||
view = EmoteView(response)
|
||||
view = EmoteCommandResponse(response)
|
||||
await view.run()
|
||||
except Exception as e:
|
||||
print(f'[ERROR IN COG] -> {e}')
|
||||
@ -170,8 +171,8 @@ class MusicCog(Cog):
|
||||
controller = NowPlayingHandler(ctx, self.__bot)
|
||||
|
||||
response = await controller.run()
|
||||
view1 = EmbedView(response)
|
||||
view2 = EmoteView(response)
|
||||
view1 = EmbedCommandResponse(response)
|
||||
view2 = EmoteCommandResponse(response)
|
||||
await view1.run()
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
@ -183,8 +184,8 @@ class MusicCog(Cog):
|
||||
controller = ShuffleHandler(ctx, self.__bot)
|
||||
|
||||
response = await controller.run()
|
||||
view1 = EmbedView(response)
|
||||
view2 = EmoteView(response)
|
||||
view1 = EmbedCommandResponse(response)
|
||||
view2 = EmoteCommandResponse(response)
|
||||
await view1.run()
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
@ -196,8 +197,8 @@ class MusicCog(Cog):
|
||||
controller = MoveHandler(ctx, self.__bot)
|
||||
|
||||
response = await controller.run(pos1, pos2)
|
||||
view1 = EmbedView(response)
|
||||
view2 = EmoteView(response)
|
||||
view1 = EmbedCommandResponse(response)
|
||||
view2 = EmoteCommandResponse(response)
|
||||
await view1.run()
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
@ -209,8 +210,8 @@ class MusicCog(Cog):
|
||||
controller = RemoveHandler(ctx, self.__bot)
|
||||
|
||||
response = await controller.run(position)
|
||||
view1 = EmbedView(response)
|
||||
view2 = EmoteView(response)
|
||||
view1 = EmbedCommandResponse(response)
|
||||
view2 = EmoteCommandResponse(response)
|
||||
await view1.run()
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
@ -222,13 +223,18 @@ class MusicCog(Cog):
|
||||
controller = ResetHandler(ctx, self.__bot)
|
||||
|
||||
response = await controller.run()
|
||||
view1 = EmbedView(response)
|
||||
view2 = EmoteView(response)
|
||||
view1 = EmbedCommandResponse(response)
|
||||
view2 = EmoteCommandResponse(response)
|
||||
await view1.run()
|
||||
await view2.run()
|
||||
except Exception as e:
|
||||
print(f'[ERROR IN COG] -> {e}')
|
||||
|
||||
@command(name='rafael')
|
||||
async def rafael(self, ctx: Context) -> None:
|
||||
view = PlayerView()
|
||||
await ctx.send(view=view)
|
||||
|
||||
|
||||
def setup(bot):
|
||||
bot.add_cog(MusicCog(bot))
|
||||
|
||||
@ -2,7 +2,7 @@ from random import randint, random
|
||||
from Music.VulkanBot import VulkanBot
|
||||
from discord.ext.commands import Context, command, Cog
|
||||
from Config.Helper import Helper
|
||||
from Views.Embeds import Embeds
|
||||
from Config.Embeds import VEmbeds
|
||||
|
||||
helper = Helper()
|
||||
|
||||
@ -11,7 +11,7 @@ class RandomCog(Cog):
|
||||
"""Class to listen to commands of type Random"""
|
||||
|
||||
def __init__(self, bot: VulkanBot):
|
||||
self.__embeds = Embeds()
|
||||
self.__embeds = VEmbeds()
|
||||
|
||||
@command(name='random', help=helper.HELP_RANDOM, description=helper.HELP_RANDOM_LONG, aliases=['rand'])
|
||||
async def random(self, ctx: Context, arg: str) -> None:
|
||||
|
||||
@ -5,9 +5,9 @@ from discord import Client, Guild, ClientUser, Member
|
||||
from Config.Messages import Messages
|
||||
from Music.VulkanBot import VulkanBot
|
||||
from Handlers.HandlerResponse import HandlerResponse
|
||||
from Config.Configs import Configs
|
||||
from Config.Configs import VConfigs
|
||||
from Config.Helper import Helper
|
||||
from Views.Embeds import Embeds
|
||||
from Config.Embeds import VEmbeds
|
||||
|
||||
|
||||
class AbstractHandler(ABC):
|
||||
@ -18,9 +18,9 @@ class AbstractHandler(ABC):
|
||||
self.__bot_user: ClientUser = self.__bot.user
|
||||
self.__id = self.__bot_user.id
|
||||
self.__messages = Messages()
|
||||
self.__config = Configs()
|
||||
self.__config = VConfigs()
|
||||
self.__helper = Helper()
|
||||
self.__embeds = Embeds()
|
||||
self.__embeds = VEmbeds()
|
||||
self.__bot_member: Member = self.__get_member()
|
||||
|
||||
@abstractmethod
|
||||
@ -48,7 +48,7 @@ class AbstractHandler(ABC):
|
||||
return self.__bot
|
||||
|
||||
@property
|
||||
def config(self) -> Configs:
|
||||
def config(self) -> VConfigs:
|
||||
return self.__config
|
||||
|
||||
@property
|
||||
@ -64,7 +64,7 @@ class AbstractHandler(ABC):
|
||||
return self.__ctx
|
||||
|
||||
@property
|
||||
def embeds(self) -> Embeds:
|
||||
def embeds(self) -> VEmbeds:
|
||||
return self.__embeds
|
||||
|
||||
def __get_member(self) -> Member:
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import asyncio
|
||||
from typing import List
|
||||
from Config.Configs import Configs
|
||||
from Config.Configs import VConfigs
|
||||
from yt_dlp import YoutubeDL, DownloadError
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from Music.Song import Song
|
||||
@ -9,7 +9,7 @@ from Config.Exceptions import DownloadingError
|
||||
|
||||
|
||||
class Downloader:
|
||||
config = Configs()
|
||||
config = VConfigs()
|
||||
__YDL_OPTIONS = {'format': 'bestaudio/best',
|
||||
'default_search': 'auto',
|
||||
'playliststart': 0,
|
||||
@ -34,7 +34,7 @@ class Downloader:
|
||||
__BASE_URL = 'https://www.youtube.com/watch?v={}'
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.__config = Configs()
|
||||
self.__config = VConfigs()
|
||||
self.__music_keys_only = ['resolution', 'fps', 'quality']
|
||||
self.__not_extracted_keys_only = ['ie_key']
|
||||
self.__not_extracted_not_keys = ['entries']
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
from collections import deque
|
||||
from typing import List
|
||||
from Config.Configs import Configs
|
||||
from Config.Configs import VConfigs
|
||||
from Music.Song import Song
|
||||
import random
|
||||
|
||||
@ -8,7 +8,7 @@ import random
|
||||
class Playlist:
|
||||
|
||||
def __init__(self) -> None:
|
||||
self.__configs = Configs()
|
||||
self.__configs = VConfigs()
|
||||
self.__queue = deque() # Store the musics to play
|
||||
self.__songs_history = deque() # Store the musics played
|
||||
|
||||
@ -62,7 +62,7 @@ class Playlist:
|
||||
# Att played song info
|
||||
if played_song != None:
|
||||
if not self.__looping_one and not self.__looping_all:
|
||||
if played_song.problematic == False:
|
||||
if not played_song.problematic:
|
||||
self.__songs_history.appendleft(played_song)
|
||||
|
||||
if len(self.__songs_history) > self.__configs.MAX_SONGS_HISTORY:
|
||||
@ -90,6 +90,7 @@ class Playlist:
|
||||
self.__queue.appendleft(self.__current)
|
||||
|
||||
last_song = self.__songs_history.popleft() # Get the last song
|
||||
print(f'Setando como {last_song} 2')
|
||||
self.__current = last_song
|
||||
return self.__current # return the song
|
||||
|
||||
|
||||
@ -2,14 +2,14 @@ from spotipy import Spotify
|
||||
from spotipy.oauth2 import SpotifyClientCredentials
|
||||
from spotipy.exceptions import SpotifyException
|
||||
from Config.Exceptions import SpotifyError
|
||||
from Config.Configs import Configs
|
||||
from Config.Configs import VConfigs
|
||||
from Config.Messages import SpotifyMessages
|
||||
|
||||
|
||||
class SpotifySearch():
|
||||
def __init__(self) -> None:
|
||||
self.__messages = SpotifyMessages()
|
||||
self.__config = Configs()
|
||||
self.__config = VConfigs()
|
||||
self.__connected = False
|
||||
self.__connect()
|
||||
|
||||
|
||||
@ -1,18 +1,18 @@
|
||||
from asyncio import AbstractEventLoop
|
||||
from discord import Guild, Status, Game, Message
|
||||
from discord.ext.commands.errors import CommandNotFound, MissingRequiredArgument
|
||||
from Config.Configs import Configs
|
||||
from Config.Configs import VConfigs
|
||||
from discord.ext.commands import Bot, Context
|
||||
from Config.Messages import Messages
|
||||
from Views.Embeds import Embeds
|
||||
from Config.Embeds import VEmbeds
|
||||
|
||||
|
||||
class VulkanBot(Bot):
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.__configs = Configs()
|
||||
self.__configs = VConfigs()
|
||||
self.__messages = Messages()
|
||||
self.__embeds = Embeds()
|
||||
self.__embeds = VEmbeds()
|
||||
self.remove_command("help")
|
||||
|
||||
def startBot(self) -> None:
|
||||
|
||||
@ -4,13 +4,13 @@ from discord.bot import Bot
|
||||
from discord import Intents
|
||||
from Music.VulkanBot import VulkanBot
|
||||
from os import listdir
|
||||
from Config.Configs import Configs
|
||||
from Config.Configs import VConfigs
|
||||
from Config.Exceptions import VulkanError
|
||||
|
||||
|
||||
class VulkanInitializer:
|
||||
def __init__(self, willListen: bool) -> None:
|
||||
self.__config = Configs()
|
||||
self.__config = VConfigs()
|
||||
self.__intents = Intents.default()
|
||||
self.__intents.message_content = True
|
||||
self.__intents.members = True
|
||||
|
||||
@ -5,13 +5,13 @@ from asyncio import AbstractEventLoop, Semaphore
|
||||
from multiprocessing import Process, Queue, RLock
|
||||
from threading import Lock, Thread
|
||||
from typing import Callable, List
|
||||
from discord import Client, Guild, FFmpegPCMAudio, VoiceChannel, TextChannel
|
||||
from discord import Guild, FFmpegPCMAudio, VoiceChannel, TextChannel
|
||||
from Music.Playlist import Playlist
|
||||
from Music.Song import Song
|
||||
from Config.Configs import Configs
|
||||
from Config.Configs import VConfigs
|
||||
from Config.Messages import Messages
|
||||
from Music.VulkanBot import VulkanBot
|
||||
from Views.Embeds import Embeds
|
||||
from Config.Embeds import VEmbeds
|
||||
from Parallelism.Commands import VCommands, VCommandsType
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@ class TimeoutClock:
|
||||
self.__task = loop.create_task(self.__executor())
|
||||
|
||||
async def __executor(self):
|
||||
await asyncio.sleep(Configs().VC_TIMEOUT)
|
||||
await asyncio.sleep(VConfigs().VC_TIMEOUT)
|
||||
await self.__callback()
|
||||
|
||||
def cancel(self):
|
||||
@ -56,8 +56,8 @@ class PlayerProcess(Process):
|
||||
self.__author: User = None
|
||||
self.__botMember: Member = None
|
||||
|
||||
self.__configs: Configs = None
|
||||
self.__embeds: Embeds = None
|
||||
self.__configs: VConfigs = None
|
||||
self.__embeds: VEmbeds = None
|
||||
self.__messages: Messages = None
|
||||
self.__messagesToDelete: List[Message] = []
|
||||
self.__playing = False
|
||||
@ -73,9 +73,9 @@ class PlayerProcess(Process):
|
||||
self.__loop = asyncio.get_event_loop_policy().new_event_loop()
|
||||
asyncio.set_event_loop(self.__loop)
|
||||
|
||||
self.__configs = Configs()
|
||||
self.__configs = VConfigs()
|
||||
self.__messages = Messages()
|
||||
self.__embeds = Embeds()
|
||||
self.__embeds = VEmbeds()
|
||||
|
||||
self.__semStopPlaying = Semaphore(0)
|
||||
self.__loop.run_until_complete(self._run())
|
||||
@ -108,9 +108,13 @@ class PlayerProcess(Process):
|
||||
self.__timer.cancel()
|
||||
|
||||
async def __playPlaylistSongs(self) -> None:
|
||||
"""If the player is not running trigger to play a new song"""
|
||||
if not self.__playing:
|
||||
song = None
|
||||
with self.__playlistLock:
|
||||
song = self.__playlist.next_song()
|
||||
with self.__playerLock:
|
||||
if not (self.__guild.voice_client.is_playing() or self.__guild.voice_client.is_paused()):
|
||||
song = self.__playlist.next_song()
|
||||
|
||||
if song is not None:
|
||||
self.__loop.create_task(self.__playSong(song), name=f'Song {song.identifier}')
|
||||
@ -151,40 +155,40 @@ class PlayerProcess(Process):
|
||||
self.__playerLock.release()
|
||||
|
||||
def __playNext(self, error) -> None:
|
||||
with self.__playerLock:
|
||||
if self.__forceStop: # If it's forced to stop player
|
||||
self.__forceStop = False
|
||||
return None
|
||||
with self.__playlistLock:
|
||||
with self.__playerLock:
|
||||
if self.__forceStop: # If it's forced to stop player
|
||||
self.__forceStop = False
|
||||
return None
|
||||
|
||||
with self.__playlistLock:
|
||||
song = self.__playlist.next_song()
|
||||
|
||||
if song is not None:
|
||||
self.__loop.create_task(self.__playSong(song), name=f'Song {song.identifier}')
|
||||
else:
|
||||
with self.__playlistLock:
|
||||
if song is not None:
|
||||
self.__loop.create_task(self.__playSong(song), name=f'Song {song.identifier}')
|
||||
else:
|
||||
self.__playlist.loop_off()
|
||||
self.__playingSong = None
|
||||
self.__playing = False
|
||||
self.__playingSong = None
|
||||
self.__playing = False
|
||||
|
||||
async def __playPrev(self, voiceChannelID: int) -> None:
|
||||
with self.__playlistLock:
|
||||
song = self.__playlist.prev_song()
|
||||
|
||||
if song is not None:
|
||||
if self.__guild.voice_client is None: # If not connect, connect to the user voice channel
|
||||
self.__voiceChannelID = voiceChannelID
|
||||
self.__voiceChannel = self.__guild.get_channel(self.__voiceChannelID)
|
||||
await self.__connectToVoiceChannel()
|
||||
with self.__playerLock:
|
||||
if song is not None:
|
||||
if self.__guild.voice_client is None: # If not connect, connect to the user voice channel
|
||||
self.__voiceChannelID = voiceChannelID
|
||||
self.__voiceChannel = self.__guild.get_channel(self.__voiceChannelID)
|
||||
await self.__connectToVoiceChannel()
|
||||
|
||||
# If already playing, stop the current play
|
||||
if self.__guild.voice_client.is_playing() or self.__guild.voice_client.is_paused():
|
||||
# Will forbidden next_song to execute after stopping current player
|
||||
self.__forceStop = True
|
||||
self.__guild.voice_client.stop()
|
||||
self.__playing = False
|
||||
# If already playing, stop the current play
|
||||
if self.__guild.voice_client.is_playing() or self.__guild.voice_client.is_paused():
|
||||
# Will forbidden next_song to execute after stopping current player
|
||||
self.__forceStop = True
|
||||
self.__guild.voice_client.stop()
|
||||
self.__playing = False
|
||||
|
||||
self.__loop.create_task(self.__playSong(song), name=f'Song {song.identifier}')
|
||||
self.__loop.create_task(self.__playSong(song), name=f'Song {song.identifier}')
|
||||
|
||||
def __commandsReceiver(self) -> None:
|
||||
while True:
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
import re
|
||||
import asyncio
|
||||
from Config.Configs import Configs
|
||||
from Config.Configs import VConfigs
|
||||
from functools import wraps, partial
|
||||
config = Configs()
|
||||
config = VConfigs()
|
||||
|
||||
|
||||
class Utils:
|
||||
|
||||
@ -5,7 +5,7 @@ from discord import Message
|
||||
from Music.VulkanBot import VulkanBot
|
||||
|
||||
|
||||
class AbstractView(ABC):
|
||||
class AbstractCommandResponse(ABC):
|
||||
def __init__(self, response: HandlerResponse) -> None:
|
||||
self.__response: HandlerResponse = response
|
||||
self.__context: Context = response.ctx
|
||||
@ -1,8 +1,8 @@
|
||||
from Views.AbstractView import AbstractView
|
||||
from Views.AbstractCogResponse import AbstractCommandResponse
|
||||
from Handlers.HandlerResponse import HandlerResponse
|
||||
|
||||
|
||||
class EmbedView(AbstractView):
|
||||
class EmbedCommandResponse(AbstractCommandResponse):
|
||||
def __init__(self, response: HandlerResponse) -> None:
|
||||
super().__init__(response)
|
||||
|
||||
16
Views/EmoteCogResponse.py
Normal file
16
Views/EmoteCogResponse.py
Normal file
@ -0,0 +1,16 @@
|
||||
from Config.Emojis import VEmojis
|
||||
from Views.AbstractCogResponse import AbstractCommandResponse
|
||||
from Handlers.HandlerResponse import HandlerResponse
|
||||
|
||||
|
||||
class EmoteCommandResponse(AbstractCommandResponse):
|
||||
|
||||
def __init__(self, response: HandlerResponse) -> None:
|
||||
super().__init__(response)
|
||||
self.__emojis = VEmojis()
|
||||
|
||||
async def run(self) -> None:
|
||||
if self.response.success:
|
||||
await self.message.add_reaction(self.__emojis.SUCCESS)
|
||||
else:
|
||||
await self.message.add_reaction(self.__emojis.ERROR)
|
||||
@ -1,14 +0,0 @@
|
||||
from Views.AbstractView import AbstractView
|
||||
from Handlers.HandlerResponse import HandlerResponse
|
||||
|
||||
|
||||
class EmoteView(AbstractView):
|
||||
|
||||
def __init__(self, response: HandlerResponse) -> None:
|
||||
super().__init__(response)
|
||||
|
||||
async def run(self) -> None:
|
||||
if self.response.success:
|
||||
await self.message.add_reaction('✅')
|
||||
else:
|
||||
await self.message.add_reaction('❌')
|
||||
47
Views/PlayerView.py
Normal file
47
Views/PlayerView.py
Normal file
@ -0,0 +1,47 @@
|
||||
from typing import Optional
|
||||
from discord.ui import View, Button, button
|
||||
from Config.Emojis import VEmojis
|
||||
from discord import Interaction, ButtonStyle
|
||||
|
||||
emojis = VEmojis()
|
||||
|
||||
|
||||
class PlayerView(View):
|
||||
def __init__(self, timeout: Optional[float] = 180):
|
||||
super().__init__(timeout=timeout)
|
||||
|
||||
@button(label="Back", style=ButtonStyle.secondary, emoji=emojis.BACK)
|
||||
async def prevCallback(self, button: Button, interaction: Interaction) -> None:
|
||||
await interaction.response.send_message("Hello")
|
||||
|
||||
@button(label="Pause", style=ButtonStyle.secondary, emoji=emojis.PAUSE)
|
||||
async def pauseCallback(self, button: Button, interaction: Interaction) -> None:
|
||||
await interaction.response.send_message("Hello")
|
||||
|
||||
@button(label="Play", style=ButtonStyle.secondary, emoji=emojis.PLAY)
|
||||
async def playCallback(self, button: Button, interaction: Interaction) -> None:
|
||||
await interaction.response.send_message("Hello")
|
||||
|
||||
@button(label="Stop", style=ButtonStyle.secondary, emoji=emojis.STOP)
|
||||
async def stopCallback(self, button: Button, interaction: Interaction) -> None:
|
||||
await interaction.response.send_message("Hello")
|
||||
|
||||
@button(label="Skip", style=ButtonStyle.secondary, emoji=emojis.SKIP)
|
||||
async def skipCallback(self, button: Button, interaction: Interaction) -> None:
|
||||
await interaction.response.send_message("Hello")
|
||||
|
||||
@button(label="Songs", style=ButtonStyle.secondary, emoji=emojis.QUEUE)
|
||||
async def songsCallback(self, button: Button, interaction: Interaction) -> None:
|
||||
await interaction.response.send_message("Hello")
|
||||
|
||||
@button(label="Loop Off", style=ButtonStyle.grey, emoji=emojis.LOOP_OFF)
|
||||
async def loopOffCallback(self, button: Button, interaction: Interaction) -> None:
|
||||
await interaction.response.send_message("Hello")
|
||||
|
||||
@button(label="Loop All", style=ButtonStyle.secondary, emoji=emojis.LOOP_ALL)
|
||||
async def loopAllCallback(self, button: Button, interaction: Interaction) -> None:
|
||||
await interaction.response.send_message("Hello")
|
||||
|
||||
@button(label="Loop One", style=ButtonStyle.secondary, emoji=emojis.LOOP_ONE)
|
||||
async def loopOneCallback(self, button: Button, interaction: Interaction) -> None:
|
||||
await interaction.response.send_message("Hello")
|
||||
Loading…
x
Reference in New Issue
Block a user