Files
croccybot/src/modules/economy/settings.py

114 lines
3.7 KiB
Python

"""
Settings for the Economy Cog.
"""
from typing import Optional
import asyncio
from collections import defaultdict
from settings.groups import SettingGroup
from settings.data import ModelData, ListData
from settings.setting_types import ChannelListSetting, IntegerSetting, BoolSetting
from meta.context import ctx_bot
from meta.config import conf
from meta.sharding import THIS_SHARD
from meta.logger import log_wrap
from core.data import CoreData
from babel.translator import ctx_translator
from . import babel, logger
from .data import EconomyData
_p = babel._p
class EconomySettings(SettingGroup):
"""
Economy Settings:
coins_per_100xp
allow_transfers
"""
class CoinsPerXP(ModelData, IntegerSetting):
setting_id = 'coins_per_xp'
_display_name = _p('guildset:coins_per_xp', "coins_per_100xp")
_desc = _p(
'guildset:coins_per_xp|desc',
"How many LionCoins to reward members per 100 XP they earn."
)
_long_desc = _p(
'guildset:coins_per_xp|long_desc',
"Members will be rewarded with this many LionCoins for every 100 XP they earn."
)
_accepts = _p(
'guildset:coins_per_xp|long_desc',
"The number of coins to reward per 100 XP."
)
# This default needs to dynamically depend on the guild mode!
_default = 50
_model = CoreData.Guild
_column = CoreData.Guild.coins_per_centixp.name
@property
def update_message(self):
t = ctx_translator.get().t
return t(_p(
'guildset:coins_per_xp|set_response',
"For every **100** XP they earn, members will now be given {coin}**{amount}**."
)).format(amount=self.value, coin=conf.emojis.coin)
@property
def set_str(self):
bot = ctx_bot.get()
return bot.core.mention_cmd('configure economy') if bot else None
class AllowTransfers(ModelData, BoolSetting):
setting_id = 'allow_transfers'
_display_name = _p('guildset:allow_transfers', "allow_transfers")
_desc = _p(
'guildset:allow_transfers|desc',
"Whether to allow members to transfer LionCoins to each other."
)
_long_desc = _p(
'guildset:allow_transfers|long_desc',
"If disabled, members will not be able to transfer LionCoins to each other."
)
_default = True
_model = CoreData.Guild
_column = CoreData.Guild.allow_transfers.name
_outputs = {
True: _p('guildset:allow_transfers|outputs:true', "Enabled (Coin transfers allowed.)"),
False: _p('guildset:allow_transfers|outputs:false', "Disabled (Coin transfers not allowed.)"),
}
_outputs[None] = _outputs[_default]
@property
def set_str(self):
bot = ctx_bot.get()
return bot.core.mention_cmd('configure economy') if bot else None
@property
def update_message(self):
t = ctx_translator.get().t
bot = ctx_bot.get()
if self.value:
formatted = t(_p(
'guildset:allow_transfers|set_response|set:true',
"Members will now be able to use {send_cmd} to transfer {coin}"
))
else:
formatted = t(_p(
'guildset:allow_transfers|set_response|set:false',
"Members will not be able to use {send_cmd} to transfer {coin}"
))
formatted = formatted.format(
send_cmd=bot.core.mention_cmd('send'),
coin=conf.emojis.coin
)
return formatted