Fix a few macro and logfilereader issues (#43)
* Try to improve exception logging * Fix KeyError for new aliases * List aliases and macros together * Fix AttributeError when reading logs
This commit is contained in:
parent
994438d3fa
commit
e937abb41c
4 changed files with 38 additions and 16 deletions
|
@ -6,6 +6,7 @@ import sys
|
||||||
import aiohttp
|
import aiohttp
|
||||||
import discord
|
import discord
|
||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
|
from discord.ext.commands import CommandError, Context
|
||||||
|
|
||||||
if len(sys.argv[1:]) != 1:
|
if len(sys.argv[1:]) != 1:
|
||||||
sys.stderr.write("usage: <state_dir>")
|
sys.stderr.write("usage: <state_dir>")
|
||||||
|
@ -133,12 +134,12 @@ async def on_command(ctx):
|
||||||
|
|
||||||
|
|
||||||
@bot.event
|
@bot.event
|
||||||
async def on_error(event_method, *args, **kwargs):
|
async def on_error(event: str, *args, **kwargs):
|
||||||
log.exception(f"Error on {event_method}:")
|
log.exception(f"Error on {event}:")
|
||||||
|
|
||||||
|
|
||||||
@bot.event
|
@bot.event
|
||||||
async def on_command_error(ctx, error):
|
async def on_command_error(ctx: Context, error: CommandError):
|
||||||
error_text = str(error)
|
error_text = str(error)
|
||||||
|
|
||||||
err_msg = (
|
err_msg = (
|
||||||
|
@ -147,7 +148,7 @@ async def on_command_error(ctx, error):
|
||||||
f"of type {type(error)}: {error_text}"
|
f"of type {type(error)}: {error_text}"
|
||||||
)
|
)
|
||||||
|
|
||||||
log.error(err_msg)
|
log.exception(err_msg, error)
|
||||||
|
|
||||||
if not isinstance(error, commands.CommandNotFound):
|
if not isinstance(error, commands.CommandNotFound):
|
||||||
err_msg = bot.escape_message(err_msg)
|
err_msg = bot.escape_message(err_msg)
|
||||||
|
@ -259,8 +260,8 @@ async def main():
|
||||||
for cog in config.initial_cogs:
|
for cog in config.initial_cogs:
|
||||||
try:
|
try:
|
||||||
await bot.load_extension(cog)
|
await bot.load_extension(cog)
|
||||||
except:
|
except Exception as e:
|
||||||
log.exception(f"Failed to load cog {cog}.")
|
log.exception(f"Failed to load cog {cog}:", e)
|
||||||
await bot.start(config.token)
|
await bot.start(config.token)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ logging.basicConfig(
|
||||||
|
|
||||||
class LogFileReader(Cog):
|
class LogFileReader(Cog):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def is_valid_log(attachment: Attachment) -> tuple[bool, bool]:
|
def is_valid_log_name(attachment: Attachment) -> tuple[bool, bool]:
|
||||||
filename = attachment.filename
|
filename = attachment.filename
|
||||||
# Any message over 2000 chars is uploaded as message.txt, so this is accounted for
|
# Any message over 2000 chars is uploaded as message.txt, so this is accounted for
|
||||||
ryujinx_log_file_regex = re.compile(r"^Ryujinx_.*\.log|message\.txt$")
|
ryujinx_log_file_regex = re.compile(r"^Ryujinx_.*\.log|message\.txt$")
|
||||||
|
@ -94,7 +94,15 @@ class LogFileReader(Cog):
|
||||||
# Large files show a header value when not downloaded completely
|
# Large files show a header value when not downloaded completely
|
||||||
# this regex makes sure that the log text to read starts from the first timestamp, ignoring headers
|
# this regex makes sure that the log text to read starts from the first timestamp, ignoring headers
|
||||||
log_file_header_regex = re.compile(r"\d{2}:\d{2}:\d{2}\.\d{3}.*", re.DOTALL)
|
log_file_header_regex = re.compile(r"\d{2}:\d{2}:\d{2}\.\d{3}.*", re.DOTALL)
|
||||||
log_file = re.search(log_file_header_regex, log_file).group(0)
|
log_file_match = re.search(log_file_header_regex, log_file)
|
||||||
|
|
||||||
|
if log_file_match:
|
||||||
|
log_file = log_file_match.group(0)
|
||||||
|
else:
|
||||||
|
return Embed(
|
||||||
|
colour=self.ryujinx_blue,
|
||||||
|
description="This log file appears to be invalid. Please make sure to upload a Ryujinx log file.",
|
||||||
|
)
|
||||||
|
|
||||||
def is_tid_blocked(log_file=log_file):
|
def is_tid_blocked(log_file=log_file):
|
||||||
game_name = re.search(
|
game_name = re.search(
|
||||||
|
@ -828,7 +836,7 @@ class LogFileReader(Cog):
|
||||||
return await message.channel.send(
|
return await message.channel.send(
|
||||||
content=author_mention,
|
content=author_mention,
|
||||||
embed=Embed(
|
embed=Embed(
|
||||||
description=f"This log file appears to be invalid. Please re-check and re-upload your log file.",
|
description="This log file appears to be invalid. Please re-check and re-upload your log file.",
|
||||||
colour=self.ryujinx_blue,
|
colour=self.ryujinx_blue,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -866,7 +874,7 @@ class LogFileReader(Cog):
|
||||||
message = await ctx.fetch_message(ctx.message.reference.message_id)
|
message = await ctx.fetch_message(ctx.message.reference.message_id)
|
||||||
if len(message.attachments) >= attachment_number:
|
if len(message.attachments) >= attachment_number:
|
||||||
attachment = message.attachments[attachment_number - 1]
|
attachment = message.attachments[attachment_number - 1]
|
||||||
is_log_file, _ = self.is_valid_log(attachment)
|
is_log_file, _ = self.is_valid_log_name(attachment)
|
||||||
|
|
||||||
if is_log_file:
|
if is_log_file:
|
||||||
return await self.analyse_log_message(
|
return await self.analyse_log_message(
|
||||||
|
@ -888,7 +896,7 @@ class LogFileReader(Cog):
|
||||||
if message.author.bot:
|
if message.author.bot:
|
||||||
return
|
return
|
||||||
for attachment in message.attachments:
|
for attachment in message.attachments:
|
||||||
is_log_file, is_ryujinx_log_file = self.is_valid_log(attachment)
|
is_log_file, is_ryujinx_log_file = self.is_valid_log_name(attachment)
|
||||||
|
|
||||||
if message.channel.id in self.bot_log_allowed_channels.values():
|
if message.channel.id in self.bot_log_allowed_channels.values():
|
||||||
return await self.analyse_log_message(
|
return await self.analyse_log_message(
|
||||||
|
@ -904,7 +912,7 @@ class LogFileReader(Cog):
|
||||||
)
|
)
|
||||||
elif (
|
elif (
|
||||||
is_log_file
|
is_log_file
|
||||||
and not message.channel.id in self.bot_log_allowed_channels.values()
|
and message.channel.id not in self.bot_log_allowed_channels.values()
|
||||||
):
|
):
|
||||||
return await message.author.send(
|
return await message.author.send(
|
||||||
content=message.author.mention,
|
content=message.author.mention,
|
||||||
|
|
|
@ -127,13 +127,24 @@ class Macro(Cog):
|
||||||
|
|
||||||
@commands.cooldown(3, 30, BucketType.channel)
|
@commands.cooldown(3, 30, BucketType.channel)
|
||||||
@commands.command(name="macros", aliases=["ml", "listmacros", "list_macros"])
|
@commands.command(name="macros", aliases=["ml", "listmacros", "list_macros"])
|
||||||
async def list_macros(self, ctx: Context):
|
async def list_macros(self, ctx: Context, macros_only=False):
|
||||||
macros = get_macros_dict(self.bot)
|
macros = get_macros_dict(self.bot)
|
||||||
if len(macros["macros"]) > 0:
|
if len(macros["macros"]) > 0:
|
||||||
macros = [f"- {key}\n" for key in sorted(macros["macros"].keys())]
|
|
||||||
message = "📝 **Macros**:\n"
|
message = "📝 **Macros**:\n"
|
||||||
for macro_key in macros:
|
|
||||||
message += macro_key
|
for key in sorted(macros["macros"].keys()):
|
||||||
|
message += f"- {key}\n"
|
||||||
|
if not macros_only and key in macros["aliases"].keys():
|
||||||
|
message += " - __aliases__: "
|
||||||
|
first_alias = True
|
||||||
|
for alias in macros["aliases"][key]:
|
||||||
|
if first_alias:
|
||||||
|
message += alias
|
||||||
|
first_alias = False
|
||||||
|
continue
|
||||||
|
message += f", {alias}"
|
||||||
|
message += "\n"
|
||||||
|
|
||||||
await ctx.send(message)
|
await ctx.send(message)
|
||||||
else:
|
else:
|
||||||
await ctx.send("Couldn't find any macros.")
|
await ctx.send("Couldn't find any macros.")
|
||||||
|
|
|
@ -85,6 +85,8 @@ def add_aliases(bot, key: str, aliases: list[str]) -> bool:
|
||||||
for alias in aliases:
|
for alias in aliases:
|
||||||
alias = alias.lower()
|
alias = alias.lower()
|
||||||
if is_macro_key_available(bot, alias, macros):
|
if is_macro_key_available(bot, alias, macros):
|
||||||
|
if key not in macros["aliases"].keys():
|
||||||
|
macros["aliases"][key] = []
|
||||||
macros["aliases"][key].append(alias)
|
macros["aliases"][key].append(alias)
|
||||||
success = True
|
success = True
|
||||||
if success:
|
if success:
|
||||||
|
|
Loading…
Reference in a new issue