feat(economy): Implement starting_funds setting.
This commit is contained in:
@@ -150,7 +150,10 @@ class Lions(LionCog):
|
|||||||
if (lmember := self.lion_members.get(key, None)) is None:
|
if (lmember := self.lion_members.get(key, None)) is None:
|
||||||
lguild = await self.fetch_guild(guildid, member.guild if member is not None else None)
|
lguild = await self.fetch_guild(guildid, member.guild if member is not None else None)
|
||||||
luser = await self.fetch_user(userid, member)
|
luser = await self.fetch_user(userid, member)
|
||||||
data = await self.data.Member.fetch_or_create(guildid, userid)
|
data = await self.data.Member.fetch_or_create(
|
||||||
|
guildid, userid,
|
||||||
|
coins=lguild.config.get('starting_funds').value
|
||||||
|
)
|
||||||
lmember = LionMember(self.bot, data, lguild, luser, member)
|
lmember = LionMember(self.bot, data, lguild, luser, member)
|
||||||
self.lion_members[key] = lmember
|
self.lion_members[key] = lmember
|
||||||
return lmember
|
return lmember
|
||||||
@@ -182,8 +185,8 @@ class Lions(LionCog):
|
|||||||
# Create any member rows that are still missing
|
# Create any member rows that are still missing
|
||||||
if missing:
|
if missing:
|
||||||
new_rows = await self.data.Member.table.insert_many(
|
new_rows = await self.data.Member.table.insert_many(
|
||||||
('guildid', 'userid'),
|
('guildid', 'userid', 'coins'),
|
||||||
*missing
|
*((gid, uid, lguilds[gid].config.get('starting_funds').value) for gid, uid in missing)
|
||||||
).with_adapter(self.data.Member._make_rows)
|
).with_adapter(self.data.Member._make_rows)
|
||||||
rows = itertools.chain(rows, new_rows)
|
rows = itertools.chain(rows, new_rows)
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ class Economy(LionCog):
|
|||||||
|
|
||||||
self.bot.core.guild_config.register_model_setting(self.settings.AllowTransfers)
|
self.bot.core.guild_config.register_model_setting(self.settings.AllowTransfers)
|
||||||
self.bot.core.guild_config.register_model_setting(self.settings.CoinsPerXP)
|
self.bot.core.guild_config.register_model_setting(self.settings.CoinsPerXP)
|
||||||
|
self.bot.core.guild_config.register_model_setting(self.settings.StartingFunds)
|
||||||
|
|
||||||
configcog = self.bot.get_cog('ConfigCog')
|
configcog = self.bot.get_cog('ConfigCog')
|
||||||
if configcog is None:
|
if configcog is None:
|
||||||
@@ -847,11 +848,13 @@ class Economy(LionCog):
|
|||||||
)
|
)
|
||||||
@appcmds.rename(
|
@appcmds.rename(
|
||||||
allow_transfers=EconomySettings.AllowTransfers._display_name,
|
allow_transfers=EconomySettings.AllowTransfers._display_name,
|
||||||
coins_per_xp=EconomySettings.CoinsPerXP._display_name
|
coins_per_xp=EconomySettings.CoinsPerXP._display_name,
|
||||||
|
starting_funds=EconomySettings.StartingFunds._display_name,
|
||||||
)
|
)
|
||||||
@appcmds.describe(
|
@appcmds.describe(
|
||||||
allow_transfers=EconomySettings.AllowTransfers._desc,
|
allow_transfers=EconomySettings.AllowTransfers._desc,
|
||||||
coins_per_xp=EconomySettings.CoinsPerXP._desc
|
coins_per_xp=EconomySettings.CoinsPerXP._desc,
|
||||||
|
starting_funds=EconomySettings.StartingFunds._desc,
|
||||||
)
|
)
|
||||||
@appcmds.choices(
|
@appcmds.choices(
|
||||||
allow_transfers=[
|
allow_transfers=[
|
||||||
@@ -863,7 +866,9 @@ class Economy(LionCog):
|
|||||||
@moderator_ward
|
@moderator_ward
|
||||||
async def configure_economy(self, ctx: LionContext,
|
async def configure_economy(self, ctx: LionContext,
|
||||||
allow_transfers: Optional[appcmds.Choice[int]] = None,
|
allow_transfers: Optional[appcmds.Choice[int]] = None,
|
||||||
coins_per_xp: Optional[appcmds.Range[int, 0, 2**15]] = None):
|
coins_per_xp: Optional[appcmds.Range[int, 0, MAX_COINS]] = None,
|
||||||
|
starting_funds: Optional[appcmds.Range[int, 0, MAX_COINS]] = None,
|
||||||
|
):
|
||||||
t = self.bot.translator.t
|
t = self.bot.translator.t
|
||||||
if not ctx.interaction:
|
if not ctx.interaction:
|
||||||
return
|
return
|
||||||
@@ -872,6 +877,7 @@ class Economy(LionCog):
|
|||||||
|
|
||||||
setting_allow_transfers = ctx.lguild.config.get('allow_transfers')
|
setting_allow_transfers = ctx.lguild.config.get('allow_transfers')
|
||||||
setting_coins_per_xp = ctx.lguild.config.get('coins_per_xp')
|
setting_coins_per_xp = ctx.lguild.config.get('coins_per_xp')
|
||||||
|
setting_starting_funds = ctx.lguild.config.get('starting_funds')
|
||||||
|
|
||||||
modified = []
|
modified = []
|
||||||
if allow_transfers is not None:
|
if allow_transfers is not None:
|
||||||
@@ -882,6 +888,10 @@ class Economy(LionCog):
|
|||||||
setting_coins_per_xp.data = coins_per_xp
|
setting_coins_per_xp.data = coins_per_xp
|
||||||
await setting_coins_per_xp.write()
|
await setting_coins_per_xp.write()
|
||||||
modified.append(setting_coins_per_xp)
|
modified.append(setting_coins_per_xp)
|
||||||
|
if starting_funds is not None:
|
||||||
|
setting_starting_funds.data = starting_funds
|
||||||
|
await setting_starting_funds.write()
|
||||||
|
modified.append(setting_starting_funds)
|
||||||
|
|
||||||
if modified:
|
if modified:
|
||||||
desc = '\n'.join(f"{conf.emojis.tick} {setting.update_message}" for setting in modified)
|
desc = '\n'.join(f"{conf.emojis.tick} {setting.update_message}" for setting in modified)
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ from meta.config import conf
|
|||||||
from meta.sharding import THIS_SHARD
|
from meta.sharding import THIS_SHARD
|
||||||
from meta.logger import log_wrap
|
from meta.logger import log_wrap
|
||||||
from core.data import CoreData
|
from core.data import CoreData
|
||||||
|
from core.setting_types import CoinSetting
|
||||||
from babel.translator import ctx_translator
|
from babel.translator import ctx_translator
|
||||||
|
|
||||||
from . import babel, logger
|
from . import babel, logger
|
||||||
@@ -29,7 +30,7 @@ class EconomySettings(SettingGroup):
|
|||||||
coins_per_100xp
|
coins_per_100xp
|
||||||
allow_transfers
|
allow_transfers
|
||||||
"""
|
"""
|
||||||
class CoinsPerXP(ModelData, IntegerSetting):
|
class CoinsPerXP(ModelData, CoinSetting):
|
||||||
setting_id = 'coins_per_xp'
|
setting_id = 'coins_per_xp'
|
||||||
|
|
||||||
_display_name = _p('guildset:coins_per_xp', "coins_per_100xp")
|
_display_name = _p('guildset:coins_per_xp', "coins_per_100xp")
|
||||||
@@ -111,3 +112,32 @@ class EconomySettings(SettingGroup):
|
|||||||
coin=conf.emojis.coin
|
coin=conf.emojis.coin
|
||||||
)
|
)
|
||||||
return formatted
|
return formatted
|
||||||
|
|
||||||
|
class StartingFunds(ModelData, CoinSetting):
|
||||||
|
setting_id = 'starting_funds'
|
||||||
|
|
||||||
|
_display_name = _p('guildset:starting_funds', "starting_funds")
|
||||||
|
_desc = _p(
|
||||||
|
'guildset:starting_funds|desc',
|
||||||
|
"How many LionCoins should a member start with."
|
||||||
|
)
|
||||||
|
_long_desc = _p(
|
||||||
|
'guildset:starting_funds|long_desc',
|
||||||
|
"Members will be given this number of coins when they first interact with me, or first join the server."
|
||||||
|
)
|
||||||
|
_accepts = _p(
|
||||||
|
'guildset:starting_funds|accepts',
|
||||||
|
"Number of coins to give to new members."
|
||||||
|
)
|
||||||
|
_default = 0
|
||||||
|
|
||||||
|
_model = CoreData.Guild
|
||||||
|
_column = CoreData.Guild.starting_funds.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def update_message(self):
|
||||||
|
t = ctx_translator.get().t
|
||||||
|
return t(_p(
|
||||||
|
'guildset:starting_funds|set_response',
|
||||||
|
"New members will now start with {amount}"
|
||||||
|
)).format(amount=self.formatted)
|
||||||
|
|||||||
@@ -17,8 +17,9 @@ _p = babel._p
|
|||||||
|
|
||||||
class EconomyConfigUI(ConfigUI):
|
class EconomyConfigUI(ConfigUI):
|
||||||
setting_classes = (
|
setting_classes = (
|
||||||
|
EconomySettings.StartingFunds,
|
||||||
EconomySettings.CoinsPerXP,
|
EconomySettings.CoinsPerXP,
|
||||||
EconomySettings.AllowTransfers
|
EconomySettings.AllowTransfers,
|
||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, bot: LionBot,
|
def __init__(self, bot: LionBot,
|
||||||
@@ -44,11 +45,9 @@ class EconomyConfigUI(ConfigUI):
|
|||||||
|
|
||||||
async def reload(self):
|
async def reload(self):
|
||||||
lguild = await self.bot.core.lions.fetch_guild(self.guildid)
|
lguild = await self.bot.core.lions.fetch_guild(self.guildid)
|
||||||
coins_per_xp = lguild.config.get(self.settings.CoinsPerXP.setting_id)
|
self.instances = tuple(
|
||||||
allow_transfers = lguild.config.get(self.settings.AllowTransfers.setting_id)
|
lguild.config.get(cls.setting_id)
|
||||||
self.instances = (
|
for cls in self.setting_classes
|
||||||
coins_per_xp,
|
|
||||||
allow_transfers
|
|
||||||
)
|
)
|
||||||
|
|
||||||
async def refresh_components(self):
|
async def refresh_components(self):
|
||||||
@@ -57,9 +56,9 @@ class EconomyConfigUI(ConfigUI):
|
|||||||
self.close_button_refresh(),
|
self.close_button_refresh(),
|
||||||
self.reset_button_refresh(),
|
self.reset_button_refresh(),
|
||||||
)
|
)
|
||||||
self._layout = [
|
self.set_layout(
|
||||||
(self.edit_button, self.reset_button, self.close_button),
|
(self.edit_button, self.reset_button, self.close_button),
|
||||||
]
|
)
|
||||||
|
|
||||||
|
|
||||||
class EconomyDashboard(DashboardSection):
|
class EconomyDashboard(DashboardSection):
|
||||||
|
|||||||
@@ -108,6 +108,9 @@ class ConfigUI(LeoUI):
|
|||||||
# Filter out settings which don't have input fields
|
# Filter out settings which don't have input fields
|
||||||
items = [item for item in items if item][:5]
|
items = [item for item in items if item][:5]
|
||||||
strings = [item.value for item in items]
|
strings = [item.value for item in items]
|
||||||
|
if not items:
|
||||||
|
raise ValueError("Cannot make Config edit modal with no editable instances.")
|
||||||
|
|
||||||
modal = ConfigEditor(*items, title=t(self.edit_modal_title))
|
modal = ConfigEditor(*items, title=t(self.edit_modal_title))
|
||||||
|
|
||||||
@modal.submit_callback()
|
@modal.submit_callback()
|
||||||
|
|||||||
Reference in New Issue
Block a user