feat(menus): Implement event logging.
This commit is contained in:
@@ -57,6 +57,11 @@ event_fields = {
|
||||
"{coin} {{value}}".format(coin=conf.emojis.coin),
|
||||
True,
|
||||
),
|
||||
'refund' : (
|
||||
_p('eventlog|field:refund|name', "Coins Refunded"),
|
||||
"{coin} {{value}}".format(coin=conf.emojis.coin),
|
||||
True,
|
||||
),
|
||||
'memberid': (
|
||||
_p('eventlog|field:memberid|name', "Member"),
|
||||
"<@{value}>",
|
||||
|
||||
@@ -15,10 +15,11 @@ from meta.logger import log_wrap
|
||||
from meta.errors import ResponseTimedOut, UserInputError, UserCancelled, SafeCancellation
|
||||
from meta.sharding import THIS_SHARD
|
||||
from meta.monitor import ComponentMonitor, ComponentStatus, StatusLevel
|
||||
from utils.lib import utc_now, error_embed
|
||||
from utils.lib import utc_now, error_embed, jumpto
|
||||
from utils.ui import Confirm, ChoicedEnum, Transformed, AButton, AsComponents
|
||||
from utils.transformers import DurationTransformer
|
||||
from utils.monitor import TaskMonitor
|
||||
from babel.translator import ctx_locale
|
||||
from constants import MAX_COINS
|
||||
from data import NULL
|
||||
|
||||
@@ -315,6 +316,11 @@ class RoleMenuCog(LionCog):
|
||||
menu = await self.data.RoleMenu.fetch(equip_row.menuid)
|
||||
guild = self.bot.get_guild(menu.guildid)
|
||||
if guild is not None:
|
||||
log_errors = []
|
||||
lguild = await self.bot.core.lions.fetch_guild(menu.guildid)
|
||||
t = self.bot.translator.t
|
||||
ctx_locale.set(lguild.locale)
|
||||
|
||||
role = guild.get_role(equip_row.roleid)
|
||||
if role is not None:
|
||||
lion = await self.bot.core.lions.fetch_member(guild.id, equip_row.userid)
|
||||
@@ -322,6 +328,10 @@ class RoleMenuCog(LionCog):
|
||||
if (member := lion.member):
|
||||
if role in member.roles:
|
||||
logger.error(f"Expired {equipid}, but the member still has the role!")
|
||||
log_errors.append(t(_p(
|
||||
'eventlog|event:rolemenu_role_expire|error:remove_failed',
|
||||
"Removed the role, but the member still has the role!!"
|
||||
)))
|
||||
else:
|
||||
logger.info(f"Expired {equipid}, and successfully removed the role from the member!")
|
||||
else:
|
||||
@@ -329,9 +339,56 @@ class RoleMenuCog(LionCog):
|
||||
f"Expired {equipid} for non-existent member {equip_row.userid}. "
|
||||
"Removed from persistent roles."
|
||||
)
|
||||
log_errors.append(t(_p(
|
||||
'eventlog|event:rolemenu_role_expire|error:member_gone',
|
||||
"Member could not be found.. role has been removed from saved roles."
|
||||
)))
|
||||
else:
|
||||
logger.info(f"Could not expire {equipid} because the role was not found.")
|
||||
log_errors.append(t(_p(
|
||||
'eventlog|event:rolemenu_role_expire|error:no_role',
|
||||
"Role {role} no longer exists."
|
||||
)).format(role=f"`{equip_row.roleid}`"))
|
||||
now = utc_now()
|
||||
lguild.log_event(
|
||||
title=t(_p(
|
||||
'eventlog|event:rolemenu_role_expire|title',
|
||||
"Equipped role has expired"
|
||||
)),
|
||||
description=t(_p(
|
||||
'eventlog|event:rolemenu_role_expire|desc',
|
||||
"{member}'s role {role} has now expired."
|
||||
)).format(
|
||||
member=f"<@{equip_row.userid}>",
|
||||
role=f"<@&{equip_row.roleid}>",
|
||||
),
|
||||
fields={
|
||||
t(_p(
|
||||
'eventlog|event:rolemenu_role_expire|field:menu',
|
||||
"Obtained From"
|
||||
)): (
|
||||
jumpto(
|
||||
menu.guildid, menu.channelid, menu.messageid
|
||||
) if menu and menu.messageid else f"**{menu.name}**",
|
||||
True
|
||||
),
|
||||
t(_p(
|
||||
'eventlog|event:rolemenu_role_expire|field:menu',
|
||||
"Obtained At"
|
||||
)): (
|
||||
discord.utils.format_dt(equip_row.obtained_at),
|
||||
True
|
||||
),
|
||||
t(_p(
|
||||
'eventlog|event:rolemenu_role_expire|field:expiry',
|
||||
"Expiry"
|
||||
)): (
|
||||
discord.utils.format_dt(equip_row.expires_at),
|
||||
True
|
||||
),
|
||||
},
|
||||
errors=log_errors
|
||||
)
|
||||
await equip_row.update(removed_at=now)
|
||||
else:
|
||||
logger.info(f"Could not expire {equipid} because the guild was not found.")
|
||||
|
||||
@@ -609,7 +609,24 @@ class RoleMenu:
|
||||
if remove_line:
|
||||
embed.description = '\n'.join((remove_line, embed.description))
|
||||
|
||||
# TODO Event logging
|
||||
lguild = await self.bot.core.lions.fetch_guild(self.data.guildid)
|
||||
lguild.log_event(
|
||||
title=t(_p(
|
||||
'rolemenu|eventlog|event:role_equipped|title',
|
||||
"Member equipped role from role menu"
|
||||
)),
|
||||
description=t(_p(
|
||||
'rolemenu|eventlog|event:role_equipped|desc',
|
||||
"{member} equipped {role} from {menu}"
|
||||
)).format(
|
||||
member=member.mention,
|
||||
role=role.mention,
|
||||
menu=self.jump_link
|
||||
),
|
||||
roles_given=role.mention,
|
||||
price=price,
|
||||
expiry=discord.utils.format_dt(expiry) if expiry is not None else None,
|
||||
)
|
||||
return embed
|
||||
|
||||
async def _handle_negative(self, lion, member: discord.Member, mrole: RoleMenuRole) -> discord.Embed:
|
||||
@@ -690,12 +707,29 @@ class RoleMenu:
|
||||
'rolemenu|deselect|success:norefund|desc',
|
||||
"You have unequipped **{role}**."
|
||||
)).format(role=role.name)
|
||||
|
||||
lguild = await self.bot.core.lions.fetch_guild(self.data.guildid)
|
||||
lguild.log_event(
|
||||
title=t(_p(
|
||||
'rolemenu|eventlog|event:role_unequipped|title',
|
||||
"Member unequipped role from role menu"
|
||||
)),
|
||||
description=t(_p(
|
||||
'rolemenu|eventlog|event:role_unequipped|desc',
|
||||
"{member} unequipped {role} from {menu}"
|
||||
)).format(
|
||||
member=member.mention,
|
||||
role=role.mention,
|
||||
menu=self.jump_link,
|
||||
),
|
||||
roles_given=role.mention,
|
||||
refund=total_refund,
|
||||
)
|
||||
return embed
|
||||
|
||||
async def _handle_selection(self, lion, member: discord.Member, menuroleid: int):
|
||||
lock_key = ('rmenu', member.id, member.guild.id)
|
||||
async with self.bot.idlock(lock_key):
|
||||
# TODO: Selection locking
|
||||
mrole = self.rolemap.get(menuroleid, None)
|
||||
if mrole is None:
|
||||
raise ValueError(
|
||||
|
||||
Reference in New Issue
Block a user