rewrite: Update voice tracker config.
This commit is contained in:
@@ -47,8 +47,8 @@ class VoiceTrackerCog(LionCog):
|
||||
|
||||
self.bot.core.guild_config.register_model_setting(self.settings.HourlyReward)
|
||||
self.bot.core.guild_config.register_model_setting(self.settings.HourlyLiveBonus)
|
||||
self.bot.core.guild_config.register_model_setting(self.settings.UntrackedChannels)
|
||||
self.bot.core.guild_config.register_model_setting(self.settings.DailyVoiceCap)
|
||||
self.bot.core.guild_config.register_setting(self.settings.UntrackedChannels)
|
||||
|
||||
# Update the tracked voice channel cache
|
||||
await self.settings.UntrackedChannels.setup(self.bot)
|
||||
@@ -607,10 +607,10 @@ class VoiceTrackerCog(LionCog):
|
||||
pass
|
||||
|
||||
@configure_group.command(
|
||||
name=_p('cmd:configure_voice_tracking', "voice_tracking"),
|
||||
name=_p('cmd:configure_voice_rates', "voice_rewards"),
|
||||
description=_p(
|
||||
'cmd:configure_voice_tracking|desc',
|
||||
"Voice tracking configuration panel"
|
||||
'cmd:configure_voice_rates|desc',
|
||||
"Configure Voice tracking rewards and experience"
|
||||
)
|
||||
)
|
||||
@appcmds.rename(
|
||||
@@ -695,6 +695,6 @@ class VoiceTrackerCog(LionCog):
|
||||
|
||||
if ctx.channel.id not in VoiceTrackerConfigUI._listening or not modified:
|
||||
# Launch setting group UI
|
||||
configui = VoiceTrackerConfigUI(self.bot, self.settings, ctx.guild.id, ctx.channel.id)
|
||||
configui = VoiceTrackerConfigUI(self.bot, ctx.guild.id, ctx.channel.id)
|
||||
await configui.run(ctx.interaction)
|
||||
await configui.wait()
|
||||
|
||||
@@ -232,6 +232,14 @@ class VoiceSession:
|
||||
# End the ongoing session
|
||||
await self.data.close_study_session_at(self.guildid, self.userid, utc_now())
|
||||
|
||||
# Rank update
|
||||
# TODO: Change to broadcasted event?
|
||||
rank_cog = self.bot.get_cog('RankCog')
|
||||
if rank_cog is not None:
|
||||
asyncio.create_task(rank_cog.on_voice_session_complete(
|
||||
(self.guildid, self.userid, int((utc_now() - self.data.start_time).total_seconds()), 0)
|
||||
))
|
||||
|
||||
if self.start_task is not None:
|
||||
self.start_task.cancel()
|
||||
self.start_task = None
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
from typing import Optional
|
||||
import asyncio
|
||||
from collections import defaultdict
|
||||
import discord
|
||||
from discord.ui.select import select, Select, ChannelSelect
|
||||
@@ -11,7 +12,8 @@ from settings.setting_types import ChannelListSetting, IntegerSetting, DurationS
|
||||
from meta import conf, LionBot
|
||||
from meta.sharding import THIS_SHARD
|
||||
from meta.logger import log_wrap
|
||||
from utils.ui import LeoUI
|
||||
from utils.lib import MessageArgs
|
||||
from utils.ui import LeoUI, ConfigUI, DashboardSection
|
||||
|
||||
from core.data import CoreData
|
||||
from core.lion_guild import VoiceMode
|
||||
@@ -101,6 +103,10 @@ class VoiceTrackerSettings(SettingGroup):
|
||||
'guildset:hourly_reward|mode:voice|desc',
|
||||
"LionCoins given per hour in a voice channel."
|
||||
)
|
||||
_long_desc = _p(
|
||||
'guildset:hourly_reward|mode:voice|long_desc',
|
||||
"Number of LionCoins to each member per hour that they stay in a tracked voice channel."
|
||||
)
|
||||
|
||||
_default = 50
|
||||
_min = 0
|
||||
@@ -136,7 +142,7 @@ class VoiceTrackerSettings(SettingGroup):
|
||||
)
|
||||
_long_desc = _p(
|
||||
'guildset:hourly_reward|mode:voice|long_desc',
|
||||
"Number of LionCoins to each member per hour that they stay in a tracked voice channel."
|
||||
"Number of LionCoins rewarded to each member per hour that they stay in a tracked voice channel."
|
||||
)
|
||||
|
||||
@property
|
||||
@@ -274,7 +280,7 @@ class VoiceTrackerSettings(SettingGroup):
|
||||
)
|
||||
|
||||
|
||||
class VoiceTrackerConfigUI(LeoUI):
|
||||
class VoiceTrackerConfigUIALT(LeoUI):
|
||||
# TODO: Bulk edit
|
||||
# TODO: Cohesive exit
|
||||
# TODO: Back to main configuration panel
|
||||
@@ -303,6 +309,7 @@ class VoiceTrackerConfigUI(LeoUI):
|
||||
return (self.hourly_reward, self.hourly_live_bonus, self.daily_voice_cap, self.untracked_channels)
|
||||
|
||||
async def cleanup(self):
|
||||
# TODO: Swap cleanup and close..
|
||||
self._listening.pop(self.channelid, None)
|
||||
for instance in self.instances:
|
||||
instance.deregister_callback(self.id)
|
||||
@@ -362,7 +369,7 @@ class VoiceTrackerConfigUI(LeoUI):
|
||||
|
||||
if interaction.response.is_done():
|
||||
# Use followup to respond
|
||||
self._mesage = await interaction.followup.send(embed=self.embed, view=self)
|
||||
self._message = await interaction.followup.send(embed=self.embed, view=self)
|
||||
else:
|
||||
# Use interaction response to respond
|
||||
self._original = interaction
|
||||
@@ -431,3 +438,93 @@ class VoiceTrackerConfigUI(LeoUI):
|
||||
for setting in self.instances:
|
||||
embed.add_field(**setting.embed_field, inline=False)
|
||||
return embed
|
||||
|
||||
|
||||
class VoiceTrackerConfigUI(ConfigUI):
|
||||
setting_classes = (
|
||||
VoiceTrackerSettings.HourlyReward,
|
||||
VoiceTrackerSettings.HourlyLiveBonus,
|
||||
VoiceTrackerSettings.DailyVoiceCap,
|
||||
VoiceTrackerSettings.UntrackedChannels,
|
||||
)
|
||||
|
||||
def __init__(self, bot: LionBot,
|
||||
guildid: int, channelid: int, **kwargs):
|
||||
self.settings = bot.get_cog('VoiceTrackerCog').settings
|
||||
super().__init__(bot, guildid, channelid, **kwargs)
|
||||
|
||||
@select(
|
||||
cls=ChannelSelect,
|
||||
placeholder="UNTRACKED_CHANNELS_PLACEHOLDER",
|
||||
min_values=0, max_values=25
|
||||
)
|
||||
async def untracked_channels_menu(self, selection: discord.Interaction, selected):
|
||||
await selection.response.defer()
|
||||
setting = self.instances[3]
|
||||
setting.value = selected.values
|
||||
await setting.write()
|
||||
|
||||
async def untracked_channels_menu_refresh(self):
|
||||
t = self.bot.translator.t
|
||||
self.untracked_channels_menu.placeholder = t(_p(
|
||||
'ui:voice_tracker_config|menu:untracked_channels|placeholder',
|
||||
"Select Untracked Channels"
|
||||
))
|
||||
|
||||
async def make_message(self):
|
||||
t = self.bot.translator.t
|
||||
lguild = await self.bot.core.lions.fetch_guild(self.guildid)
|
||||
mode = lguild.guild_mode
|
||||
if mode.voice is VoiceMode.VOICE:
|
||||
title = t(_p(
|
||||
'ui:voice_tracker_config|mode:voice|embed|title',
|
||||
"Voice Tracker Configuration Panel"
|
||||
))
|
||||
else:
|
||||
title = t(_p(
|
||||
'ui:voice_tracker_config|mode:study|embed|title',
|
||||
"Study Tracker Configuration Panel"
|
||||
))
|
||||
embed = discord.Embed(
|
||||
colour=discord.Colour.orange(),
|
||||
title=title
|
||||
)
|
||||
for setting in self.instances:
|
||||
embed.add_field(**setting.embed_field, inline=False)
|
||||
|
||||
args = MessageArgs(embed=embed)
|
||||
return args
|
||||
|
||||
async def reload(self):
|
||||
lguild = await self.bot.core.lions.fetch_guild(self.guildid)
|
||||
if lguild.guild_mode.voice is VoiceMode.VOICE:
|
||||
hourly_reward = await self.settings.HourlyReward_Voice.get(self.guildid)
|
||||
else:
|
||||
hourly_reward = await self.settings.HourlyReward_Study.get(self.guildid)
|
||||
hourly_live_bonus = lguild.config.get('hourly_live_bonus')
|
||||
daily_voice_cap = lguild.config.get('daily_voice_cap')
|
||||
untracked_channels = await self.settings.UntrackedChannels.get(self.guildid)
|
||||
self.instances = (
|
||||
hourly_reward, hourly_live_bonus, daily_voice_cap, untracked_channels
|
||||
)
|
||||
|
||||
async def refresh_components(self):
|
||||
await asyncio.gather(
|
||||
self.edit_button_refresh(),
|
||||
self.close_button_refresh(),
|
||||
self.reset_button_refresh(),
|
||||
self.untracked_channels_menu_refresh(),
|
||||
)
|
||||
self._layout = [
|
||||
(self.untracked_channels_menu,),
|
||||
(self.edit_button, self.reset_button, self.close_button)
|
||||
]
|
||||
|
||||
|
||||
class VoiceTrackerDashboard(DashboardSection):
|
||||
section_name = _p(
|
||||
'dash:voice_tracker|title',
|
||||
"Voice Tracker Configuration"
|
||||
)
|
||||
configui = VoiceTrackerConfigUI
|
||||
setting_classes = configui.setting_classes
|
||||
|
||||
Reference in New Issue
Block a user