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