114 lines
3.7 KiB
Python
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
|