Source code for discordSuperUtils.Economy

import discord
from typing import (
    List,
    Optional
)

from .Base import DatabaseChecker


[docs]class EconomyAccount: def __init__(self, guild: int, member: int, database, table): self.guild = guild self.member = member self.database = database self.table = table def __str__(self): return f"<Account MEMBER={self.member}, GUILD={self.guild}>" @property def __checks(self): return EconomyManager.generate_checks(self.guild, self.member)
[docs] async def currency(self): currency_data = await self.database.select(self.table, ['currency'], self.__checks) return currency_data["currency"]
[docs] async def bank(self): bank_data = await self.database.select(self.table, ['bank'], self.__checks) return bank_data["bank"]
[docs] async def net(self): return await self.bank() + await self.currency()
[docs] async def change_currency(self, amount: int): currency = await self.currency() await self.database.update(self.table, {'currency': currency + amount}, self.__checks)
[docs] async def change_bank(self, amount: int): bank_amount = await self.bank() await self.database.update(self.table, {'bank': bank_amount + amount}, self.__checks)
[docs]class EconomyManager(DatabaseChecker): def __init__(self, bot): super().__init__([{'guild': 'snowflake', 'member': 'snowflake', 'currency': 'snowflake', 'bank': 'snowflake'}], ['economy']) self.bot = bot
[docs] @staticmethod def generate_checks(guild: int, member: int): return {'guild': guild, 'member': member}
[docs] async def create_account(self, member: discord.Member) -> None: self._check_database() await self.database.insertifnotexists(self.tables['economy'], {"guild": member.guild.id, "member": member.id, "currency": 0, "bank": 0 }, self.generate_checks(member.guild.id, member.id))
[docs] async def get_account(self, member: discord.Member) -> Optional[EconomyAccount]: self._check_database() member_data = await self.database.select(self.tables['economy'], [], self.generate_checks(member.guild.id, member.id), True) if member_data: return EconomyAccount(member.guild.id, member.id, self.database, self.tables['economy']) return None
[docs] async def get_leaderboard(self, guild) -> List[EconomyAccount]: self._check_database() guild_info = await self.database.select(self.tables['economy'], [], {'guild': guild.id}, True) members = [EconomyAccount(member_info['guild'], member_info['member'], database=self.database, table=self.tables['economy']) for member_info in sorted(guild_info, key=lambda x: x["bank"] + x[ "currency"], reverse=True)] return members