diff --git a/musicbot/cogs/cogmanager.py b/musicbot/cogs/cogmanager.py index 1a7ece2..14825be 100644 --- a/musicbot/cogs/cogmanager.py +++ b/musicbot/cogs/cogmanager.py @@ -74,7 +74,8 @@ class CogManager(commands.Cog): @commands.is_owner() async def _shutdown(self, ctx): """Logs out and stops.""" - self.bot.lavalink.player_manager.players.clear() + if lavalink := self.bot.lavalink: + lavalink.player_manager.players.clear() await self.bot.close() diff --git a/musicbot/cogs/misc.py b/musicbot/cogs/misc.py index e942d02..7624f00 100644 --- a/musicbot/cogs/misc.py +++ b/musicbot/cogs/misc.py @@ -52,14 +52,14 @@ class Misc(commands.Cog): Info about the music player """ embed = discord.Embed(title='{music.title}', color=ctx.me.color) - lavalink = self.bot.lavalink listeners = 0 - for guild, player in lavalink.player_manager.players.items(): - listeners += len(player.listeners) + if lavalink := self.bot.lavalink: + for _, player in lavalink.player_manager.players.items(): + listeners += len(player.listeners) - embed.add_field(name='{music.players}', value=f'{len(lavalink.player_manager.players)}') - embed.add_field(name='{music.listeners}', value=f'{listeners}') + embed.add_field(name='{music.players}', value=f'{len(lavalink.player_manager.players)}') + embed.add_field(name='{music.listeners}', value=f'{listeners}') embed = ctx.localizer.format_embed(embed) await ctx.send(embed=embed) diff --git a/musicbot/cogs/nodemanager.py b/musicbot/cogs/nodemanager.py index 94ca743..5d7cd58 100644 --- a/musicbot/cogs/nodemanager.py +++ b/musicbot/cogs/nodemanager.py @@ -4,6 +4,7 @@ import lavalink from discord.ext import commands import codecs +from typing import Optional import yaml @@ -30,6 +31,7 @@ class NodeManager(commands.Cog): if self.bot.lavalink is None and self.bot.user: self.bot.lavalink = lavalink.Client(self.bot.user.id, player=MixPlayer) + self.lavalink = self.bot.lavalink self.load_nodes_from_file() @@ -52,10 +54,7 @@ class NodeManager(commands.Cog): name_cache = [] new_nodes = [] - if self.bot.lavalink is None: - return new_nodes - - for node in self.bot.lavalink.node_manager.nodes: + for node in self.lavalink.node_manager.nodes: name_cache.append(node.name) self.logger.debug("BEFORE") @@ -63,7 +62,7 @@ class NodeManager(commands.Cog): if node['name'] in name_cache: continue - self.bot.lavalink.add_node(**node) + self.lavalink.add_node(**node) self.logger.debug("Adding Lavalink node: %s on %s with the port %s in %s" % ( node['name'], node['host'], @@ -140,24 +139,24 @@ class NodeManager(commands.Cog): @_node.command(name='add') @commands.is_owner() - async def _add(self, ctx, host, port, password, region, name=None): - if name in [n.name for n in self.bot.lavalink.node_manager.nodes]: + async def _add(self, ctx, host: str, port: int, password: str, region, name: Optional[str] = None): + if name in [n.name for n in self.lavalink.node_manager.nodes]: return await ctx.send("A node with that name already exists") - self.bot.lavalink.add_node(host, port, password, region, name=name) + self.lavalink.add_node(host, port, password, region, name=name) self.logger.debug("Adding Lavalink node: %s on %s with the port %s in %s" % (host, port, region, name,)) embed = await self._node_presenter(ctx, {'host': host, 'port': port, 'password': password, 'region': region, 'name': name}) embed.title = 'Added new node!' self.settings.set('lavalink', 'nodes', [self.get_node_properties(n) for - n in self.bot.lavalink.node_manager.nodes]) + n in self.lavalink.node_manager.nodes]) await ctx.send(embed=embed) @_node.command(name='list') @commands.is_owner() async def list_nodes(self, ctx): - embed = await self._node_presenter(ctx, self.bot.lavalink.node_manager.nodes) + embed = await self._node_presenter(ctx, self.lavalink.node_manager.nodes) embed.title = 'Lavalink nodes attatched to this bot:' await ctx.send(embed=embed) @@ -165,8 +164,8 @@ class NodeManager(commands.Cog): @commands.is_owner() async def _remove(self, ctx, node): sent_feedback = False - for _node in self.bot.lavalink.node_manager.nodes: - if len(self.bot.lavalink.node_manager.nodes) <= 1: + for _node in self.lavalink.node_manager.nodes: + if len(self.lavalink.node_manager.nodes) <= 1: await ctx.send('Cannot remove the last node') sent_feedback = True break @@ -175,11 +174,11 @@ class NodeManager(commands.Cog): embed = await self._node_presenter(ctx, _node) embed.title = 'Removed node from bot' await ctx.send(embed=embed) - self.bot.lavalink.node_manager.remove_node(_node) + self.lavalink.node_manager.remove_node(_node) self.logger.info("Removed Lavalink node: %s, %s" % (_node.name, _node.host)) self.settings.set('lavalink', 'nodes', [self.get_node_properties(n) for - n in self.bot.lavalink.node_manager.nodes]) + n in self.lavalink.node_manager.nodes]) if not sent_feedback: await ctx.send('No node found') @@ -187,7 +186,7 @@ class NodeManager(commands.Cog): @_node.command(name='change') @commands.is_owner() async def _nodechange(self, ctx, node=None): - player = self.bot.lavalink.player_manager.get(ctx.guild.id) + player = self.lavalink.player_manager.get(ctx.guild.id) if not player: return @@ -198,7 +197,7 @@ class NodeManager(commands.Cog): else: newnode = None - for _node in self.bot.lavalink.node_manager.nodes: + for _node in self.lavalink.node_manager.nodes: if (_node.name or _node.host) == node: newnode = _node diff --git a/musicbot/cogs/settings.py b/musicbot/cogs/settings.py index 36ec231..ebc5031 100644 --- a/musicbot/cogs/settings.py +++ b/musicbot/cogs/settings.py @@ -2,9 +2,12 @@ import discord from discord.ext import commands +from typing import Optional + from bot import MusicBot from ..utils import checks +from ..utils.settingsmanager import Settings as SettingsManager from ..utils.userinteraction import ClearOn, Scroller from .helpformatter import commandhelper @@ -12,7 +15,7 @@ from .helpformatter import commandhelper class Settings(commands.Cog): def __init__(self, bot: MusicBot): self.bot: MusicBot = bot - self.settings = self.bot.settings + self.settings: SettingsManager = self.bot.settings def format_prefixes(self, prefixes): if prefixes is None: @@ -92,8 +95,8 @@ class Settings(commands.Cog): if textchannels := self.bot.settings.get(ctx.guild, 'channels.text'): embed = discord.Embed(title='Music command channels set', color=ctx.me.color) - channels = [ctx.guild.get_channel(channel) for channel in textchannels] - mentioned = [channel.mention for channel in channels if channel is not None] + configured_channels = [ctx.guild.get_channel(channel) for channel in textchannels] + mentioned = [channel.mention for channel in configured_channels if channel is not None] embed.description = ', '.join(mentioned) await ctx.send(embed=embed) else: @@ -112,8 +115,8 @@ class Settings(commands.Cog): if musicchannels := self.bot.settings.get(ctx.guild, 'channels.music'): embed = discord.Embed(title='Music channels set', color=ctx.me.color) - channels = [ctx.guild.get_channel(channel) for channel in musicchannels] - mentioned = [channel.name for channel in channels if channel is not None] + configured_channels = [ctx.guild.get_channel(channel) for channel in musicchannels] + mentioned = [channel.name for channel in configured_channels if channel is not None] embed.description = ', '.join(mentioned) await ctx.send(embed=embed) else: @@ -132,8 +135,8 @@ class Settings(commands.Cog): if listenchannels := self.bot.settings.get(ctx.guild, 'channels.listen_only'): embed = discord.Embed(title='Listen only channels set', color=ctx.me.color) - channels = [ctx.guild.get_channel(channel) for channel in listenchannels] - mentioned = [channel.name for channel in channels if channel is not None] + configured_channels = [ctx.guild.get_channel(channel) for channel in listenchannels] + mentioned = [channel.name for channel in configured_channels if channel is not None] embed.description = ', '.join(mentioned) await ctx.send(embed=embed) else: @@ -152,8 +155,8 @@ class Settings(commands.Cog): if djroles := self.bot.settings.get(ctx.guild, 'roles.dj'): embed = discord.Embed(title='DJ roles set to', color=ctx.me.color) - roles = [ctx.guild.get_role(role) for role in djroles] - mentioned = [role.name for role in roles if role is not None] + configured_roles = [ctx.guild.get_role(role) for role in djroles] + mentioned = [role.name for role in configured_roles if role is not None] embed.description = ', '.join(mentioned) await ctx.send(embed=embed) else: @@ -163,7 +166,7 @@ class Settings(commands.Cog): @checks.is_admin() @commands.guild_only() @_set.command(name='maxduration') - async def set_max_track_duration(self, ctx, duration: int = None): + async def set_max_track_duration(self, ctx, duration: Optional[int] = None): self.bot.settings.set(ctx.guild, 'duration.max', duration) if duration := self.bot.settings.get(ctx.guild, 'duration.max'):