Fix for callers, and auto-clear them if there's no inactivity for 60 minutes
This commit is contained in:
@@ -84,9 +84,11 @@ class DingController:
|
|||||||
# AXP 30
|
# AXP 30
|
||||||
if packet.id == 36:
|
if packet.id == 36:
|
||||||
info = re.findall(self.axp, packet.message)
|
info = re.findall(self.axp, packet.message)
|
||||||
if info:
|
if not info:
|
||||||
|
return
|
||||||
user = self.get_user(info[0])
|
user = self.get_user(info[0])
|
||||||
if user:
|
if not user:
|
||||||
|
return
|
||||||
self.bot.send_mass_message(user.char_id,
|
self.bot.send_mass_message(user.char_id,
|
||||||
f"<green>Game Over</green>! "
|
f"<green>Game Over</green>! "
|
||||||
f"{random.choice(self.text_options_axp).format(**user)} "
|
f"{random.choice(self.text_options_axp).format(**user)} "
|
||||||
@@ -96,9 +98,11 @@ class DingController:
|
|||||||
# XP 220
|
# XP 220
|
||||||
if packet.id == 35:
|
if packet.id == 35:
|
||||||
info = re.findall(self.xp, packet.message)
|
info = re.findall(self.xp, packet.message)
|
||||||
if info:
|
if not info:
|
||||||
|
return
|
||||||
user = self.get_user(info[0])
|
user = self.get_user(info[0])
|
||||||
if user:
|
if not user:
|
||||||
|
return
|
||||||
self.bot.send_mass_message(user.char_id,
|
self.bot.send_mass_message(user.char_id,
|
||||||
f"<font color=#FF1493>Game Over</font>! "
|
f"<font color=#FF1493>Game Over</font>! "
|
||||||
f"{random.choice(self.text_options_xp).format(**user)} "
|
f"{random.choice(self.text_options_xp).format(**user)} "
|
||||||
|
|||||||
@@ -309,6 +309,14 @@ class RaidbotController(BaseModule):
|
|||||||
else:
|
else:
|
||||||
return "You are not in the raid."
|
return "You are not in the raid."
|
||||||
|
|
||||||
|
@command(command="raid",
|
||||||
|
params=[Const("addpts")],
|
||||||
|
description="Show Presets for adding points",
|
||||||
|
access_level="leader",
|
||||||
|
sub_command="manage")
|
||||||
|
def points_presets_cmd(self, request, _):
|
||||||
|
return ChatBlob("PTS Presets", self.preset_controller.build_preset_list)
|
||||||
|
|
||||||
@command(command="raid",
|
@command(command="raid",
|
||||||
params=[Const("addpts"), Any("name")],
|
params=[Const("addpts"), Any("name")],
|
||||||
description="Add points to all active participants",
|
description="Add points to all active participants",
|
||||||
|
|||||||
@@ -332,9 +332,9 @@ class LootListsController:
|
|||||||
for raid in raids:
|
for raid in raids:
|
||||||
title = raid[0][1] if isinstance(raid[0], tuple) else raid[0]
|
title = raid[0][1] if isinstance(raid[0], tuple) else raid[0]
|
||||||
cmd = raid[1]
|
cmd = raid[1]
|
||||||
show_loot = self.text.make_chatcmd("Loot table", "/tell <myname> %s" % cmd)
|
show_loot = self.text.make_chatcmd("Loot table", f"/tell <myname> {cmd}")
|
||||||
blob += "<highlight>%s<end>\n" % title
|
blob += f"<highlight>{title}<end>\n"
|
||||||
blob += " └ [%s]\n\n" % show_loot
|
blob += f" └ [{show_loot}]\n\n"
|
||||||
blob += "<pagebreak>"
|
blob += "<pagebreak>"
|
||||||
return blob
|
return blob
|
||||||
|
|
||||||
@@ -348,7 +348,7 @@ class LootListsController:
|
|||||||
|
|
||||||
if add_all:
|
if add_all:
|
||||||
blob += "%s items to loot list\n\n" % self.text.make_chatcmd(
|
blob += "%s items to loot list\n\n" % self.text.make_chatcmd(
|
||||||
"Add all", "/tell <myname> loot addraid %s %s" % (raid, category))
|
"Add all", f"/tell <myname> loot addraid {raid} {category}")
|
||||||
|
|
||||||
blob += "<header2>%s<end>\n" % category if category is not None else ""
|
blob += "<header2>%s<end>\n" % category if category is not None else ""
|
||||||
|
|
||||||
@@ -357,26 +357,25 @@ class LootListsController:
|
|||||||
item.id = self.text.make_item(item.low_id, item.high_id, item.ql, item.name + comment)
|
item.id = self.text.make_item(item.low_id, item.high_id, item.ql, item.name + comment)
|
||||||
|
|
||||||
if item.multiloot > 1:
|
if item.multiloot > 1:
|
||||||
print(item)
|
|
||||||
single_link = self.text.make_chatcmd("Add to loot", f"/tell <myname> loot {item.id}")
|
single_link = self.text.make_chatcmd("Add to loot", f"/tell <myname> loot {item.id}")
|
||||||
single_link1 = self.text.make_chatcmd("Add to auction", f"/tell <myname> auction prepare {item.id} ")
|
single_link1 = self.text.make_chatcmd("Add to auction", f"/tell <myname> auction prepare {item.id} ")
|
||||||
multi_link = self.text.make_chatcmd(
|
multi_link = self.text.make_chatcmd(
|
||||||
f"Add x{item.multiloot:d} to loot", f"/tell <myname> loot {item.id} {item.multiloot}")
|
f"Add x{item.multiloot} to loot", f"/tell <myname> loot {item.id} {item.multiloot}")
|
||||||
multi_link2 = self.text.make_chatcmd(
|
multi_link2 = self.text.make_chatcmd(
|
||||||
f"Add x{item.multiloot:d} to auction", f"/tell <myname> auction prepare {item.id} (ALL)")
|
f"Add x{item.multiloot} to auction", f"/tell <myname> auction prepare {item.id} (ALL)")
|
||||||
add_links = f"└ [{single_link}] [{multi_link}]<br> └ [{single_link1}] [{multi_link2} (ALL) - One Winner]"
|
add_links = f"└ [{single_link}] [{multi_link}]<br> └ [{single_link1}] [{multi_link2} (ALL) - One Winner]"
|
||||||
else:
|
else:
|
||||||
add_links = f"└ [{self.text.make_chatcmd('Add to loot', f'/tell <myname> loot {item.id} {comment}')}]<br> " \
|
add_links = f"└ [{self.text.make_chatcmd('Add to loot', f'/tell <myname> loot {item.id}')}]<br> " \
|
||||||
f"└ [{self.text.make_chatcmd('Add to auction', f'/tell <myname> auction prepare {item.id}')}]"
|
f"└ [{self.text.make_chatcmd('Add to auction', f'/tell <myname> auction prepare {item.id}')}]"
|
||||||
|
|
||||||
# comment = f" ({item.comment})" if item.comment != "" else ""
|
# comment = f" ({item.comment})" if item.comment != "" else ""
|
||||||
|
|
||||||
if self.setting_service.get("use_item_icons").get_value():
|
if self.setting_service.get("use_item_icons").get_value():
|
||||||
item_link = self.text.make_item(item.low_id, item.high_id, item.ql, "<img src=rdb://%s>" % item.icon)
|
item_link = self.text.make_item(item.low_id, item.high_id, item.ql, f"<img src=rdb://{item.icon}>")
|
||||||
blob += "%s%s%s\n %s\n\n" % (item_link, item.name, comment, add_links)
|
blob += f"{item_link}{item.name}{comment}\n {add_links}\n\n"
|
||||||
else:
|
else:
|
||||||
item_link = self.text.make_item(item.low_id, item.high_id, item.ql, item.name)
|
item_link = self.text.make_item(item.low_id, item.high_id, item.ql, item.name)
|
||||||
blob += "%s%s\n %s\n\n" % (item_link, comment, add_links)
|
blob += f"{item_link}{comment}\n {add_links}\n\n"
|
||||||
blob += "<pagebreak>"
|
blob += "<pagebreak>"
|
||||||
return blob
|
return blob
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
|
import time
|
||||||
|
|
||||||
from core.chat_blob import ChatBlob
|
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.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
|
from modules.standard.raid.leader_controller import LeaderController
|
||||||
|
|
||||||
|
|
||||||
@@ -8,41 +14,48 @@ from modules.standard.raid.leader_controller import LeaderController
|
|||||||
class AssistController:
|
class AssistController:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.assist = []
|
self.assist = []
|
||||||
|
self.last_mod = 0
|
||||||
|
|
||||||
def inject(self, registry):
|
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",
|
@command(command="caller", params=[], access_level="member",
|
||||||
description="Show current assist targets")
|
description="Show current assist targets")
|
||||||
def assist_command(self, _):
|
def assist_command(self, _):
|
||||||
blob = ""
|
blob = ""
|
||||||
for caller in self.assist:
|
for caller in self.assist:
|
||||||
blob += caller + f" - [<a href='chatcmd:///assist {caller}'>assist</a>] " \
|
blob += caller
|
||||||
f"[<a href='chatcmd:///callers rem {caller}'>REM</a>]<br>"
|
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()
|
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",
|
@command(command="caller", params=[Const("clear")], access_level="leader",
|
||||||
description="Clear all assist targets", sub_command="modify")
|
description="Clear all assist targets", sub_command="modify")
|
||||||
def assist_clear_command(self, request, _):
|
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):
|
if not self.leader_controller.can_use_command(request.sender.char_id):
|
||||||
return LeaderController.NOT_LEADER_MSG
|
return LeaderController.NOT_LEADER_MSG
|
||||||
else:
|
if not self.assist:
|
||||||
|
return "No assist targets set."
|
||||||
self.assist = []
|
self.assist = []
|
||||||
return "Assist targets have been cleared."
|
return "Assist targets have been cleared."
|
||||||
|
|
||||||
@command(command="caller", params=[Options(["rem", "del"]), Character("char")], access_level="leader",
|
@command(command="caller", params=[Options(["rem", "del"]), Character("char")], access_level="leader",
|
||||||
description="Remove an assisting target", sub_command="modify")
|
description="Remove an assisting target", sub_command="modify")
|
||||||
def assist_remove_command(self, request, _, char):
|
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):
|
if not self.leader_controller.can_use_command(request.sender.char_id):
|
||||||
return LeaderController.NOT_LEADER_MSG
|
return LeaderController.NOT_LEADER_MSG
|
||||||
else:
|
if not self.assist:
|
||||||
|
return "No assist targets set."
|
||||||
|
self.last_mod = time.time()
|
||||||
try:
|
try:
|
||||||
self.assist.remove(char.name)
|
self.assist.remove(char.name)
|
||||||
return f"<highlight>{char.name}</highlight> is no longer a caller. " \
|
return f"<highlight>{char.name}</highlight> is no longer a caller. " \
|
||||||
@@ -59,9 +72,8 @@ class AssistController:
|
|||||||
|
|
||||||
if not self.leader_controller.can_use_command(request.sender.char_id):
|
if not self.leader_controller.can_use_command(request.sender.char_id):
|
||||||
return LeaderController.NOT_LEADER_MSG
|
return LeaderController.NOT_LEADER_MSG
|
||||||
else:
|
|
||||||
for caller in targets:
|
for caller in targets:
|
||||||
print(targets)
|
if caller not in self.assist:
|
||||||
self.assist.append(caller)
|
self.assist.append(caller)
|
||||||
return self.assist_command(request)
|
return self.assist_command(request)
|
||||||
|
|
||||||
@@ -75,3 +87,13 @@ class AssistController:
|
|||||||
def leader_remove_on_leave_private(self, _, event_data):
|
def leader_remove_on_leave_private(self, _, event_data):
|
||||||
if self.assist:
|
if self.assist:
|
||||||
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)
|
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")
|
@timerevent(budatime="15m", description="Remove raid leader if raid leader hasn't been active for more than 1 hour")
|
||||||
def leader_auto_remove(self, _1, _2):
|
def purge_leader_on_inactivity(self, _1, _2):
|
||||||
if self.last_activity:
|
if self.last_activity:
|
||||||
if self.last_activity - int(time.time()) > 3600:
|
if self.last_activity - int(time.time()) > 3600:
|
||||||
self.leader = None
|
self.leader = None
|
||||||
|
|||||||
Reference in New Issue
Block a user