diff --git a/modules/onlinebot/ding/ding_controller.py b/modules/onlinebot/ding/ding_controller.py index eecacac..22ed0d8 100644 --- a/modules/onlinebot/ding/ding_controller.py +++ b/modules/onlinebot/ding/ding_controller.py @@ -84,26 +84,30 @@ class DingController: # AXP 30 if packet.id == 36: info = re.findall(self.axp, packet.message) - if info: - user = self.get_user(info[0]) - if user: - self.bot.send_mass_message(user.char_id, - f"Game Over! " - f"{random.choice(self.text_options_axp).format(**user)} " - f"[{self.generate_output('AI 30')}]", - log_message=True) + if not info: + return + user = self.get_user(info[0]) + if not user: + return + self.bot.send_mass_message(user.char_id, + f"Game Over! " + f"{random.choice(self.text_options_axp).format(**user)} " + f"[{self.generate_output('AI 30')}]", + log_message=True) # XP 220 if packet.id == 35: info = re.findall(self.xp, packet.message) - if info: - user = self.get_user(info[0]) - if user: - self.bot.send_mass_message(user.char_id, - f"Game Over! " - f"{random.choice(self.text_options_xp).format(**user)} " - f"[{self.generate_output('Level 220')}]", - log_message=True) + if not info: + return + user = self.get_user(info[0]) + if not user: + return + self.bot.send_mass_message(user.char_id, + f"Game Over! " + f"{random.choice(self.text_options_xp).format(**user)} " + f"[{self.generate_output('Level 220')}]", + log_message=True) def generate_output(self, level): invite = self.text.make_chatcmd("click here", "/tell discord invite", diff --git a/modules/raidbot/raid/raidbot_controller.py b/modules/raidbot/raid/raidbot_controller.py index c420789..d1e6c96 100644 --- a/modules/raidbot/raid/raidbot_controller.py +++ b/modules/raidbot/raid/raidbot_controller.py @@ -309,6 +309,14 @@ class RaidbotController(BaseModule): else: 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", params=[Const("addpts"), Any("name")], description="Add points to all active participants", diff --git a/modules/standard/loot/loot_lists_controller.py b/modules/standard/loot/loot_lists_controller.py index c14b11c..951ef75 100644 --- a/modules/standard/loot/loot_lists_controller.py +++ b/modules/standard/loot/loot_lists_controller.py @@ -332,9 +332,9 @@ class LootListsController: for raid in raids: title = raid[0][1] if isinstance(raid[0], tuple) else raid[0] cmd = raid[1] - show_loot = self.text.make_chatcmd("Loot table", "/tell %s" % cmd) - blob += "%s\n" % title - blob += " └ [%s]\n\n" % show_loot + show_loot = self.text.make_chatcmd("Loot table", f"/tell {cmd}") + blob += f"{title}\n" + blob += f" └ [{show_loot}]\n\n" blob += "" return blob @@ -348,7 +348,7 @@ class LootListsController: if add_all: blob += "%s items to loot list\n\n" % self.text.make_chatcmd( - "Add all", "/tell loot addraid %s %s" % (raid, category)) + "Add all", f"/tell loot addraid {raid} {category}") blob += "%s\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) if item.multiloot > 1: - print(item) single_link = self.text.make_chatcmd("Add to loot", f"/tell loot {item.id}") single_link1 = self.text.make_chatcmd("Add to auction", f"/tell auction prepare {item.id} ") multi_link = self.text.make_chatcmd( - f"Add x{item.multiloot:d} to loot", f"/tell loot {item.id} {item.multiloot}") + f"Add x{item.multiloot} to loot", f"/tell loot {item.id} {item.multiloot}") multi_link2 = self.text.make_chatcmd( - f"Add x{item.multiloot:d} to auction", f"/tell auction prepare {item.id} (ALL)") + f"Add x{item.multiloot} to auction", f"/tell auction prepare {item.id} (ALL)") add_links = f"└ [{single_link}] [{multi_link}]
└ [{single_link1}] [{multi_link2} (ALL) - One Winner]" else: - add_links = f"└ [{self.text.make_chatcmd('Add to loot', f'/tell loot {item.id} {comment}')}]
" \ + add_links = f"└ [{self.text.make_chatcmd('Add to loot', f'/tell loot {item.id}')}]
" \ f"└ [{self.text.make_chatcmd('Add to auction', f'/tell auction prepare {item.id}')}]" # comment = f" ({item.comment})" if item.comment != "" else "" if self.setting_service.get("use_item_icons").get_value(): - item_link = self.text.make_item(item.low_id, item.high_id, item.ql, "" % item.icon) - blob += "%s%s%s\n %s\n\n" % (item_link, item.name, comment, add_links) + item_link = self.text.make_item(item.low_id, item.high_id, item.ql, f"") + blob += f"{item_link}{item.name}{comment}\n {add_links}\n\n" else: 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 += "" return blob diff --git a/modules/standard/raid/assist_controller.py b/modules/standard/raid/assist_controller.py index 13caefe..1aa72c0 100644 --- a/modules/standard/raid/assist_controller.py +++ b/modules/standard/raid/assist_controller.py @@ -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" - [assist] " \ - f"[REM]
" + blob += caller + blob += f" - [{self.text.make_chatcmd('assist', f'assist {caller}')}]" + blob += f"[{self.text.make_tellcmd('REM', f'assist del {caller}')}]
" 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"{char.name} is no longer a caller. " \ - f"Use: {self.get_assist_output()}" - except ValueError: - return f"{char.name} 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"{char.name} is no longer a caller. " \ + f"Use: {self.get_assist_output()}" + except ValueError: + return f"{char.name} 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.") + diff --git a/modules/standard/raid/leader_controller.py b/modules/standard/raid/leader_controller.py index 9bff385..6b9c9c1 100644 --- a/modules/standard/raid/leader_controller.py +++ b/modules/standard/raid/leader_controller.py @@ -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