Fix for callers, and auto-clear them if there's no inactivity for 60 minutes
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
import time
|
||||
|
||||
from core.chat_blob import ChatBlob
|
||||
from core.command_alias_service import CommandAliasService
|
||||
from core.command_param_types import Any, Const, Character, Options
|
||||
from core.decorators import instance, command, event
|
||||
from core.decorators import instance, command, event, timerevent
|
||||
from core.igncore import IgnCore
|
||||
from core.text import Text
|
||||
from modules.core.config.alias_controller import AliasController
|
||||
from modules.standard.raid.leader_controller import LeaderController
|
||||
|
||||
|
||||
@@ -8,47 +14,54 @@ from modules.standard.raid.leader_controller import LeaderController
|
||||
class AssistController:
|
||||
def __init__(self):
|
||||
self.assist = []
|
||||
self.last_mod = 0
|
||||
|
||||
def inject(self, registry):
|
||||
self.leader_controller = registry.get_instance("leader_controller")
|
||||
self.leader_controller: LeaderController = registry.get_instance("leader_controller")
|
||||
self.command_alias_service: CommandAliasService = registry.get_instance("command_alias_service")
|
||||
self.bot: IgnCore = registry.get_instance("bot")
|
||||
self.text: Text = registry.get_instance("text")
|
||||
|
||||
def start(self):
|
||||
self.command_alias_service.add_alias("callers", "caller")
|
||||
self.command_alias_service.add_alias("assist", "caller")
|
||||
|
||||
@command(command="caller", params=[], access_level="member",
|
||||
description="Show current assist targets")
|
||||
def assist_command(self, _):
|
||||
blob = ""
|
||||
for caller in self.assist:
|
||||
blob += caller + f" - [<a href='chatcmd:///assist {caller}'>assist</a>] " \
|
||||
f"[<a href='chatcmd:///callers rem {caller}'>REM</a>]<br>"
|
||||
blob += caller
|
||||
blob += f" - [{self.text.make_chatcmd('assist', f'assist {caller}')}]"
|
||||
blob += f"[{self.text.make_tellcmd('REM', f'assist del {caller}')}]<br>"
|
||||
blob += self.get_assist_output()
|
||||
return ChatBlob(f"Callers ({len(self.assist):d})", blob)
|
||||
self.last_mod = time.time()
|
||||
return ChatBlob(f"Callers ({len(self.assist)})", blob)
|
||||
|
||||
@command(command="caller", params=[Const("clear")], access_level="leader",
|
||||
description="Clear all assist targets", sub_command="modify")
|
||||
def assist_clear_command(self, request, _):
|
||||
if not self.assist:
|
||||
return "No assist targets set."
|
||||
|
||||
if not self.leader_controller.can_use_command(request.sender.char_id):
|
||||
return LeaderController.NOT_LEADER_MSG
|
||||
else:
|
||||
self.assist = []
|
||||
return "Assist targets have been cleared."
|
||||
if not self.assist:
|
||||
return "No assist targets set."
|
||||
self.assist = []
|
||||
return "Assist targets have been cleared."
|
||||
|
||||
@command(command="caller", params=[Options(["rem", "del"]), Character("char")], access_level="leader",
|
||||
description="Remove an assisting target", sub_command="modify")
|
||||
def assist_remove_command(self, request, _, char):
|
||||
if not self.assist:
|
||||
return "No assist targets set."
|
||||
|
||||
if not self.leader_controller.can_use_command(request.sender.char_id):
|
||||
return LeaderController.NOT_LEADER_MSG
|
||||
else:
|
||||
try:
|
||||
self.assist.remove(char.name)
|
||||
return f"<highlight>{char.name}</highlight> is no longer a caller. " \
|
||||
f"Use: <highlight>{self.get_assist_output()}</highlight>"
|
||||
except ValueError:
|
||||
return f"<highlight>{char.name}</highlight> is not on the caller list."
|
||||
if not self.assist:
|
||||
return "No assist targets set."
|
||||
self.last_mod = time.time()
|
||||
try:
|
||||
self.assist.remove(char.name)
|
||||
return f"<highlight>{char.name}</highlight> is no longer a caller. " \
|
||||
f"Use: <highlight>{self.get_assist_output()}</highlight>"
|
||||
except ValueError:
|
||||
return f"<highlight>{char.name}</highlight> is not on the caller list."
|
||||
|
||||
@command(command="caller", params=[Any("assist_targets")], access_level="leader",
|
||||
description="Set one or more assist targets",
|
||||
@@ -59,11 +72,10 @@ class AssistController:
|
||||
|
||||
if not self.leader_controller.can_use_command(request.sender.char_id):
|
||||
return LeaderController.NOT_LEADER_MSG
|
||||
else:
|
||||
for caller in targets:
|
||||
print(targets)
|
||||
for caller in targets:
|
||||
if caller not in self.assist:
|
||||
self.assist.append(caller)
|
||||
return self.assist_command(request)
|
||||
return self.assist_command(request)
|
||||
|
||||
def get_assist_output(self):
|
||||
if not self.assist:
|
||||
@@ -75,3 +87,13 @@ class AssistController:
|
||||
def leader_remove_on_leave_private(self, _, event_data):
|
||||
if self.assist:
|
||||
self.assist = []
|
||||
|
||||
@timerevent("15m", "Purge callers if there's no raid interaction within 60 minutes")
|
||||
def callers_purge(self, event_type, event_data):
|
||||
if not self.assist:
|
||||
return
|
||||
if self.last_mod < (time.time()-3600):
|
||||
self.assist = []
|
||||
self.bot.send_private_channel_message("Callers have been cleared, "
|
||||
"as there was no interaction with them for more than 60 minutes.")
|
||||
|
||||
|
||||
@@ -91,8 +91,8 @@ class LeaderController:
|
||||
|
||||
return self.set_raid_leader(request.sender, char)
|
||||
|
||||
@timerevent(budatime="1h", description="Remove raid leader if raid leader hasn't been active for more than 1 hour")
|
||||
def leader_auto_remove(self, _1, _2):
|
||||
@timerevent(budatime="15m", description="Remove raid leader if raid leader hasn't been active for more than 1 hour")
|
||||
def purge_leader_on_inactivity(self, _1, _2):
|
||||
if self.last_activity:
|
||||
if self.last_activity - int(time.time()) > 3600:
|
||||
self.leader = None
|
||||
|
||||
Reference in New Issue
Block a user