rewrite: New private Room system.
This commit is contained in:
156
src/modules/rooms/settings.py
Normal file
156
src/modules/rooms/settings.py
Normal file
@@ -0,0 +1,156 @@
|
||||
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 . import babel
|
||||
|
||||
_p = babel._p
|
||||
|
||||
|
||||
class RoomSettings(SettingGroup):
|
||||
class Category(ModelData, ChannelSetting):
|
||||
setting_id = 'rooms_category'
|
||||
_event = 'guildset_rooms_category'
|
||||
|
||||
_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 `/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."
|
||||
)
|
||||
|
||||
_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
|
||||
|
||||
class Rent(ModelData, IntegerSetting):
|
||||
setting_id = 'rooms_price'
|
||||
_event = 'guildset_rooms_price'
|
||||
|
||||
_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."
|
||||
)
|
||||
_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'
|
||||
|
||||
_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 `/room invite` command. "
|
||||
"This setting limits the maximum number of members a private room may hold."
|
||||
)
|
||||
_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'
|
||||
|
||||
_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
|
||||
|
||||
_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
|
||||
|
||||
model_settings = (
|
||||
Category,
|
||||
Rent,
|
||||
MemberLimit,
|
||||
Visible,
|
||||
)
|
||||
Reference in New Issue
Block a user