[V3 Economy] Add per-role payouts (#1488)

This commit is contained in:
Sebass13 2018-04-15 17:40:32 -05:00 committed by palmtree5
parent 5be967e8c5
commit d75881e1a3

View File

@ -125,6 +125,10 @@ class Economy:
"last_slot": 0 "last_slot": 0
} }
default_role_settings = {
"PAYDAY_CREDITS": 0
}
default_user_settings = default_member_settings default_user_settings = default_member_settings
def __init__(self, bot: Red): def __init__(self, bot: Red):
@ -135,6 +139,7 @@ class Economy:
self.config.register_global(**self.default_global_settings) self.config.register_global(**self.default_global_settings)
self.config.register_member(**self.default_member_settings) self.config.register_member(**self.default_member_settings)
self.config.register_user(**self.default_user_settings) self.config.register_user(**self.default_user_settings)
self.config.register_role(**self.default_role_settings)
self.slot_register = defaultdict(dict) self.slot_register = defaultdict(dict)
@commands.group(name="bank") @commands.group(name="bank")
@ -229,7 +234,7 @@ class Economy:
cur_time = calendar.timegm(ctx.message.created_at.utctimetuple()) cur_time = calendar.timegm(ctx.message.created_at.utctimetuple())
credits_name = await bank.get_currency_name(ctx.guild) credits_name = await bank.get_currency_name(ctx.guild)
if await bank.is_global(): if await bank.is_global(): # Role payouts will not be used
next_payday = await self.config.user(author).next_payday() next_payday = await self.config.user(author).next_payday()
if cur_time >= next_payday: if cur_time >= next_payday:
await bank.deposit_credits(author, await self.config.PAYDAY_CREDITS()) await bank.deposit_credits(author, await self.config.PAYDAY_CREDITS())
@ -255,7 +260,12 @@ class Economy:
else: else:
next_payday = await self.config.member(author).next_payday() next_payday = await self.config.member(author).next_payday()
if cur_time >= next_payday: if cur_time >= next_payday:
await bank.deposit_credits(author, await self.config.guild(guild).PAYDAY_CREDITS()) credit_amount = await self.config.guild(guild).PAYDAY_CREDITS()
for role in author.roles:
role_credits = await self.config.role(role).PAYDAY_CREDITS() # Nice variable name
if role_credits > credit_amount:
credit_amount = role_credits
await bank.deposit_credits(author, credit_amount)
next_payday = cur_time + await self.config.guild(guild).PAYDAY_TIME() next_payday = cur_time + await self.config.guild(guild).PAYDAY_TIME()
await self.config.member(author).next_payday.set(next_payday) await self.config.member(author).next_payday.set(next_payday)
pos = await bank.get_leaderboard_position(author) pos = await bank.get_leaderboard_position(author)
@ -264,7 +274,7 @@ class Economy:
"You currently have {3} {1}.\n\n" "You currently have {3} {1}.\n\n"
"You are currently #{4} on the leaderboard!" "You are currently #{4} on the leaderboard!"
).format( ).format(
author, credits_name, str(await self.config.PAYDAY_CREDITS()), author, credits_name, credit_amount,
str(await bank.get_balance(author)), pos str(await bank.get_balance(author)), pos
)) ))
else: else:
@ -494,6 +504,18 @@ class Economy:
await ctx.send(_("Every payday will now give {} {}." await ctx.send(_("Every payday will now give {} {}."
"").format(creds, credits_name)) "").format(creds, credits_name))
@economyset.command()
async def rolepaydayamount(self, ctx: commands.Context, role: discord.Role, creds: int):
"""Amount earned each payday for a role"""
guild = ctx.guild
credits_name = await bank.get_currency_name(guild)
if await bank.is_global():
await ctx.send("The bank must be per-guild for per-role paydays to work.")
else:
await self.config.role(role).PAYDAY_CREDITS.set(creds)
await ctx.send(_("Every payday will now give {} {} to people with the role {}."
"").format(creds, credits_name, role.name))
@economyset.command() @economyset.command()
async def registeramount(self, ctx: commands.Context, creds: int): async def registeramount(self, ctx: commands.Context, creds: int):
"""Amount given on registering an account""" """Amount given on registering an account"""