Merge branch 'main' into dev

This commit is contained in:
Parker M. 2024-12-03 06:05:04 +00:00 committed by GitHub
commit ce18cd2748
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 64 additions and 8 deletions

View File

@ -113,10 +113,12 @@ class Music(commands.Cog):
try:
await node.get_version()
except lavalink.errors.ClientError:
self.bot.lavalink = None
LOG.error(
"Authentication to lavalink node failed. Check your login"
" credentials."
)
return
else:
await node.connect()
@ -135,6 +137,10 @@ class Music(commands.Cog):
async def create_player(interaction: discord.Interaction):
"""Create a player for the guild associated with the interaction, or raise an error"""
if not interaction.client.lavalink:
LOG.error("Lavalink is not connected.")
return
try:
player = interaction.client.lavalink.player_manager.create(
interaction.guild.id

View File

@ -3,7 +3,7 @@ import sqlite3
import discord
import os
from utils.config import BOT_COLOR
from utils.config import BOT_COLOR, LOG
class Stats(commands.Cog):
@ -14,6 +14,10 @@ class Stats(commands.Cog):
if not os.path.exists("data"):
os.makedirs("data")
if not os.access("data/count.db", os.W_OK):
LOG.error("Cannot write to data/count.db - check permissions")
return
connection = sqlite3.connect("data/count.db")
cursor = connection.cursor()
cursor.execute(
@ -25,6 +29,16 @@ class Stats(commands.Cog):
self.dump_count.start()
def millis_to_readable(self, ms):
hours = ms // 3600000
ms %= 3600000
minutes = ms // 60000
ms %= 60000
seconds = ms // 1000
milliseconds = ms % 1000
return f"{hours:02}:{minutes:02}:{seconds:02}.{milliseconds:03}"
@tasks.loop(seconds=30)
async def dump_count(self):
connection = sqlite3.connect("data/count.db")
@ -54,10 +68,19 @@ class Stats(commands.Cog):
except KeyError:
self.bot.temp_command_count[interaction.command.name] = 1
@commands.command()
@commands.group(invoke_without_command=True)
@commands.dm_only()
@commands.is_owner()
async def stats(self, ctx: commands.Context):
await ctx.author.send(
f"This is a group command. Use `{self.bot.command_prefix}stats"
" bot/lavalink` to get specific statistics."
)
@stats.command()
@commands.dm_only()
@commands.is_owner()
async def bot(self, ctx: commands.Context):
connection = sqlite3.connect("data/count.db")
cursor = connection.cursor()
@ -74,10 +97,8 @@ class Stats(commands.Cog):
embed = discord.Embed(
title="Statistics",
description=(
f"Total Guilds: `{len(self.bot.guilds):,}`\nTotal Commands:"
f" `{total_commands:,}`\n\nTotal Players:"
f" `{self.bot.lavalink.nodes[0].stats.playing_players}`\nLoad:"
f" `{round(self.bot.lavalink.nodes[0].stats.lavalink_load * 100, 2)}%`"
f"Total Guilds: `{len(self.bot.guilds):,}`\n"
f"Total Commands: `{total_commands:,}`\n\n"
),
color=BOT_COLOR,
)
@ -90,8 +111,37 @@ class Stats(commands.Cog):
connection.close()
await ctx.send(embed=embed)
@stats.error
async def stats_error(self, ctx, error):
@bot.error
async def bot_error(self, ctx, error):
return
@stats.command()
@commands.dm_only()
@commands.is_owner()
async def lavalink(self, ctx: commands.Context):
if not self.bot.lavalink:
return await ctx.send("No connection with Lavalink.")
embed = discord.Embed(
title="Lavalink Statistics",
color=BOT_COLOR,
)
for node in self.bot.lavalink.nodes:
embed.add_field(
name=node.name,
value=(
f"\tPlayers: `{node.stats.players}`\n\tUptime:"
f" `{self.millis_to_readable(node.stats.uptime)}`\n\tMemory"
f" Used: `{node.stats.memory_used / 1024 / 1024:.2f}MB`\n"
),
inline=True,
)
await ctx.send(embed=embed)
@lavalink.error
async def lavalink_error(self, ctx, error):
return