211 lines
7.2 KiB
Python
211 lines
7.2 KiB
Python
from settings import ModelData
|
|
from settings.groups import SettingGroup
|
|
from settings.setting_types import ChannelSetting, IntegerSetting, BoolSetting
|
|
|
|
from meta import conf
|
|
from core.data import CoreData
|
|
from babel.translator import ctx_translator
|
|
from wards import low_management_iward, high_management_iward
|
|
|
|
from . import babel
|
|
|
|
_p = babel._p
|
|
|
|
|
|
class RoomSettings(SettingGroup):
|
|
class Category(ModelData, ChannelSetting):
|
|
setting_id = 'rooms_category'
|
|
_event = 'guildset_rooms_category'
|
|
_set_cmd = 'admin config rooms'
|
|
_write_ward = high_management_iward
|
|
|
|
_display_name = _p(
|
|
'guildset:room_category', "rooms_category"
|
|
)
|
|
_desc = _p(
|
|
'guildset:rooms_category|desc',
|
|
"Category in which to create private voice channels."
|
|
)
|
|
_long_desc = _p(
|
|
'guildset:room_category|long_desc',
|
|
"When a member uses {cmds[room rent]} to rent a new private room, "
|
|
"a private voice channel will be created under this category, "
|
|
"manageable by the member. "
|
|
"I must have permission to create new channels in this category, "
|
|
"as well as to manage permissions."
|
|
)
|
|
_accepts = _p(
|
|
'guildset:room_category|accepts',
|
|
"Private room category name or id."
|
|
)
|
|
|
|
_model = CoreData.Guild
|
|
_column = CoreData.Guild.renting_category.name
|
|
|
|
@property
|
|
def update_message(self) -> str:
|
|
t = ctx_translator.get().t
|
|
value = self.value
|
|
if value is None:
|
|
# Shut down renting system
|
|
resp = t(_p(
|
|
'guildset:rooms_category|set_response:unset',
|
|
"The private room category has been unset. Existing private rooms will not be affected. "
|
|
"Delete the channels manually to remove the private rooms."
|
|
))
|
|
else:
|
|
resp = t(_p(
|
|
'guildset:rooms_category|set_response:set',
|
|
"Private room category has been set to {channel}. Existing private rooms will be moved."
|
|
)).format(channel=self.value.mention)
|
|
return resp
|
|
|
|
@property
|
|
def set_str(self) -> str:
|
|
cmdstr = super().set_str
|
|
t = ctx_translator.get().t
|
|
return t(_p(
|
|
'guildset:room_category|set_using',
|
|
"{cmd} or category selector below."
|
|
)).format(cmd=cmdstr)
|
|
|
|
class Rent(ModelData, IntegerSetting):
|
|
setting_id = 'rooms_price'
|
|
_event = 'guildset_rooms_price'
|
|
_set_cmd = 'admin config rooms'
|
|
_write_ward = low_management_iward
|
|
|
|
_display_name = _p(
|
|
'guildset:rooms_price', "room_rent"
|
|
)
|
|
_desc = _p(
|
|
'guildset:rooms_rent|desc',
|
|
"Daily rent price for a private room."
|
|
)
|
|
_long_desc = _p(
|
|
'guildset:rooms_rent|long_desc',
|
|
"Members will be charged this many LionCoins for each day they rent a private room."
|
|
)
|
|
_accepts = _p(
|
|
'guildset:rooms_rent|accepts',
|
|
"Number of LionCoins charged per day for a private room."
|
|
)
|
|
_default = 1000
|
|
|
|
_model = CoreData.Guild
|
|
_column = CoreData.Guild.renting_price.name
|
|
|
|
@property
|
|
def update_message(self) -> str:
|
|
t = ctx_translator.get().t
|
|
resp = t(_p(
|
|
'guildset:rooms_price|set_response',
|
|
"Private rooms will now cost {coin}**{amount}** per 24 hours."
|
|
)).format(
|
|
coin=conf.emojis.coin,
|
|
amount=self.value
|
|
)
|
|
return resp
|
|
|
|
class MemberLimit(ModelData, IntegerSetting):
|
|
setting_id = 'rooms_slots'
|
|
_event = 'guildset_rooms_slots'
|
|
_set_cmd = 'admin config rooms'
|
|
_write_ward = low_management_iward
|
|
|
|
_display_name = _p('guildset:rooms_slots', "room_member_cap")
|
|
_desc = _p(
|
|
'guildset:rooms_slots|desc',
|
|
"Maximum number of members in each private room."
|
|
)
|
|
_long_desc = _p(
|
|
'guildset:rooms_slots|long_desc',
|
|
"Private room owners may invite other members to their private room via the UI, "
|
|
"or through the {cmds[room invite]} command. "
|
|
"This setting limits the maximum number of members a private room may hold."
|
|
)
|
|
_accepts = _p(
|
|
'guildset:rooms_slots|accepts',
|
|
"Maximum number of members allowed per private room."
|
|
)
|
|
_default = 25
|
|
|
|
_model = CoreData.Guild
|
|
_column = CoreData.Guild.renting_cap.name
|
|
|
|
@property
|
|
def update_message(self) -> str:
|
|
t = ctx_translator.get().t
|
|
resp = t(_p(
|
|
'guildset:rooms_slots|set_response',
|
|
"Private rooms are now capped to **{amount}** members."
|
|
)).format(amount=self.value)
|
|
return resp
|
|
|
|
class Visible(ModelData, BoolSetting):
|
|
setting_id = 'rooms_visible'
|
|
_event = 'guildset_rooms_visible'
|
|
_set_cmd = 'admin config rooms'
|
|
_write_ward = high_management_iward
|
|
|
|
_display_name = _p('guildset:rooms_visible', "room_visibility")
|
|
_desc = _p(
|
|
'guildset:rooms_visible|desc',
|
|
"Whether private rented rooms are visible to non-members."
|
|
)
|
|
_long_desc = _p(
|
|
'guildset:rooms_visible|long_desc',
|
|
"If enabled, new private rooms will be created with the `VIEW_CHANNEL` permission "
|
|
"enabled for the `@everyone` role."
|
|
)
|
|
_default = False
|
|
_accepts = _p('guildset:rooms_visible|accepts', "Visible/Invisible")
|
|
_outputs = {
|
|
True: _p('guildset:rooms_visible|output:true', "Visible"),
|
|
False: _p('guildset:rooms_visible|output:false', "Invisible"),
|
|
}
|
|
_outputs[None] = _outputs[_default]
|
|
|
|
_truthy = _p(
|
|
'guildset:rooms_visible|parse:truthy_values',
|
|
"visible|enabled|yes|true|on|enable|1"
|
|
)
|
|
_falsey = _p(
|
|
'guildset:rooms_visible|parse:falsey_values',
|
|
'invisible|disabled|no|false|off|disable|0'
|
|
)
|
|
|
|
_model = CoreData.Guild
|
|
_column = CoreData.Guild.renting_visible.name
|
|
|
|
@property
|
|
def update_message(self) -> str:
|
|
t = ctx_translator.get().t
|
|
if self.value:
|
|
resp = t(_p(
|
|
'guildset:rooms_visible|set_response:enabled',
|
|
"Private rooms will now be visible to everyone."
|
|
))
|
|
else:
|
|
resp = t(_p(
|
|
'guildset:rooms_visible|set_response:disabled',
|
|
"Private rooms will now only be visible to their members (and admins)."
|
|
))
|
|
return resp
|
|
|
|
@property
|
|
def set_str(self) -> str:
|
|
cmdstr = super().set_str
|
|
t = ctx_translator.get().t
|
|
return t(_p(
|
|
'guildset:rooms_visible|set_using',
|
|
"{cmd} or toggle below."
|
|
)).format(cmd=cmdstr)
|
|
|
|
model_settings = (
|
|
Category,
|
|
Rent,
|
|
MemberLimit,
|
|
Visible,
|
|
)
|