diff --git a/src/modules/economy/data.py b/src/modules/economy/data.py index ff4c32c2..da4a62df 100644 --- a/src/modules/economy/data.py +++ b/src/modules/economy/data.py @@ -8,6 +8,7 @@ from core.data import CoreData from utils.data import TemporaryTable, SAFECOINS +# TODO: Add Rank transaction type and tables. class TransactionType(Enum): """ Schema diff --git a/src/modules/ranks/cog.py b/src/modules/ranks/cog.py index 7f3f84dc..74ef64b7 100644 --- a/src/modules/ranks/cog.py +++ b/src/modules/ranks/cog.py @@ -16,6 +16,8 @@ from utils.ui import ChoicedEnum, Transformed from utils.lib import utc_now, replace_multiple from utils.ratelimits import Bucket, limit_concurrency from utils.data import TemporaryTable +from modules.economy.cog import Economy +from modules.economy.data import TransactionType from . import babel, logger @@ -299,6 +301,7 @@ class RankCog(LionCog): if new_last_roleid != last_roleid: await session_rank.rankrow.update(last_roleid=new_last_roleid) + @log_wrap(action="Update Rank") async def update_rank(self, session_rank): # Identify target rank guildid = session_rank.guildid @@ -341,6 +344,7 @@ class RankCog(LionCog): await member.add_roles(new_role) last_roleid = new_role.id except discord.HTTPException: + # TODO: Event log either way pass # Update MemberRank row @@ -357,6 +361,18 @@ class RankCog(LionCog): session_rank.current_rank = new_rank session_rank.next_rank = next((rank for rank in ranks if rank.required > new_rank.required), None) + # Provide economy reward if required + if new_rank.reward: + economy: Economy = self.bot.get_cog('Economy') + await economy.data.Transaction.execute_transaction( + TransactionType.OTHER, + guildid=guildid, + actorid=guild.me.id, + from_account=None, + to_account=userid, + amount=new_rank.reward + ) + # Send notification await self._notify_rank_update(guildid, userid, new_rank) @@ -427,6 +443,7 @@ class RankCog(LionCog): } return key_map + @log_wrap(action="Voice Rank Hook") async def on_voice_session_complete(self, *session_data): tasks = [] # TODO: Thread safety