Fix for long-running !whatbuffs commands

fixes for !wb
This commit is contained in:
2022-07-18 07:55:28 +02:00
parent b6b59ef740
commit c1196892ba
5 changed files with 34 additions and 20 deletions
+1 -1
View File
@@ -48,7 +48,7 @@ class IgnCore:
self.last_timer_event = 0 self.last_timer_event = 0
self.start_time = int(time.time()) self.start_time = int(time.time())
self.major_version = "IGNCore v2.9" self.major_version = "IGNCore v2.9"
self.minor_version = "6" self.minor_version = "7"
self.incoming_queue = FifoQueue() self.incoming_queue = FifoQueue()
self.mass_message_queue = None self.mass_message_queue = None
self.conns = DictObject() self.conns = DictObject()
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2
View File
@@ -149,6 +149,8 @@ hh:mm - DD.MM.YYYY
return BooleanSettingType() return BooleanSettingType()
def send_news(self, _, sender, alts, discord, prefs, auto=True): def send_news(self, _, sender, alts, discord, prefs, auto=True):
if not sender:
return
if auto: if auto:
if self.buddy_service.get_buddy(sender.char_id)["online"] == 0: if self.buddy_service.get_buddy(sender.char_id)["online"] == 0:
return return
+29 -17
View File
@@ -3,14 +3,14 @@ from typing import Union
from core.chat_blob import ChatBlob from core.chat_blob import ChatBlob
from core.command_alias_service import CommandAliasService from core.command_alias_service import CommandAliasService
from core.command_param_types import Any, Const from core.command_param_types import Any
from core.decorators import instance, command, event from core.decorators import instance, command, event
from core.igncore import IgnCore from core.igncore import IgnCore
from core.job_scheduler import JobScheduler from core.job_scheduler import JobScheduler
from core.logger import Logger from core.logger import Logger
from core.message_hub_service import MessageHubService from core.message_hub_service import MessageHubService
from core.setting_service import SettingService from core.setting_service import SettingService
from core.setting_types import BooleanSettingType, TextSettingType from core.setting_types import BooleanSettingType
from core.text import Text from core.text import Text
from core.util import Util from core.util import Util
from modules.standard.datanet.ws_controller import WebsocketRelayController from modules.standard.datanet.ws_controller import WebsocketRelayController
@@ -32,6 +32,7 @@ class TimerObj:
def update(self, obj): def update(self, obj):
self.spawn = obj.spawn self.spawn = obj.spawn
self.time = obj.time self.time = obj.time
self.mortal = obj.mortal
def __str__(self): def __str__(self):
return f"{self.name} " \ return f"{self.name} " \
@@ -67,7 +68,7 @@ class TimerObj:
return 6 * 60 * 60 return 6 * 60 * 60
# elif self.name in ["Abmouth Indomitus"]: # elif self.name in ["Abmouth Indomitus"]:
# return 0 # return 0
# No respawn timer? # No/unknown respawn timer?
return 0 return 0
@@ -99,10 +100,10 @@ class WorldBossController:
self.command_alias_service.add_alias("loren", "wb loren") self.command_alias_service.add_alias("loren", "wb loren")
self.command_alias_service.add_alias("reaper", "wb reaper") self.command_alias_service.add_alias("reaper", "wb reaper")
def spam_timer(self, time, mob, msg, next=None): def spam_timer(self, _, mob, msg, _next=None):
self.send_warn(msg) self.send_warn(msg)
self.jobs.pop(mob.name, 0) self.jobs.pop(mob.name, 0)
if next == "spawn": if _next == "spawn":
if mob.get_respawn_timer() != 0: if mob.get_respawn_timer() != 0:
i = self.job_scheduler.scheduled_job(self.spam_timer, mob.time + mob.get_respawn_timer(), mob=mob.name, i = self.job_scheduler.scheduled_job(self.spam_timer, mob.time + mob.get_respawn_timer(), mob=mob.name,
msg=f"<highlight>{mob.name}</highlight> should spawn soon.") msg=f"<highlight>{mob.name}</highlight> should spawn soon.")
@@ -110,7 +111,6 @@ class WorldBossController:
@event(WebsocketRelayController.WS_RELAY, "save most current local_timers") @event(WebsocketRelayController.WS_RELAY, "save most current local_timers")
def get_timer(self, _, data): def get_timer(self, _, data):
# print(data)
if data.type != "timer": if data.type != "timer":
return return
for x in data.payload: for x in data.payload:
@@ -129,7 +129,7 @@ class WorldBossController:
if job: if job:
self.job_scheduler.cancel_job(job) self.job_scheduler.cancel_job(job)
self.send_warn(f"<highlight>{x.name}</highlight> has spawned.") self.send_warn(f"<highlight>{x.name}</highlight> has spawned.")
i = self.job_scheduler.scheduled_job(self.spam_timer, x.time-1, mob=x, msg=f"<highlight>{x.name}</highlight> is now mortal.", next="spawn") i = self.job_scheduler.scheduled_job(self.spam_timer, x.time-1, mob=x, msg=f"<highlight>{x.name}</highlight> is now mortal.", _next="spawn")
self.jobs[x.name] = i self.jobs[x.name] = i
elif x.alive_mortal(True): elif x.alive_mortal(True):
x.spam = x.getTime() x.spam = x.getTime()
@@ -141,6 +141,9 @@ class WorldBossController:
i = self.job_scheduler.scheduled_job(self.spam_timer, x.time+x.get_respawn_timer(), mob=x, msg=f"<highlight>{x.name}</highlight> should spawn soon.") i = self.job_scheduler.scheduled_job(self.spam_timer, x.time+x.get_respawn_timer(), mob=x, msg=f"<highlight>{x.name}</highlight> should spawn soon.")
self.jobs[x.name] = i self.jobs[x.name] = i
elif (x.time + 60) < x.getTime() < (x.time + x.get_respawn_timer()): elif (x.time + 60) < x.getTime() < (x.time + x.get_respawn_timer()):
job = self.jobs.pop(x.name, None)
if job:
self.job_scheduler.cancel_job(job)
i = self.job_scheduler.scheduled_job(self.spam_timer, x.time + x.get_respawn_timer(), mob=x, i = self.job_scheduler.scheduled_job(self.spam_timer, x.time + x.get_respawn_timer(), mob=x,
msg=f"<highlight>{x.name}</highlight> should spawn soon.") msg=f"<highlight>{x.name}</highlight> should spawn soon.")
self.jobs[x.name] = i self.jobs[x.name] = i
@@ -162,20 +165,14 @@ class WorldBossController:
return x.name return x.name
return None return None
# if name in ["tara", "tarasque"]:
# return "Tarasque"
# elif name in ["lw", "loren", "warr", "loren warr"]:
# return "Loren Warr"
# elif name in ["thr", "reaper", "hollow reaper", "the hollow reaper"]:
# return "The Hollow Reaper"
@command(command="wb", params=[Any("worldboss", is_optional=True)], @command(command="wb", params=[Any("worldboss", is_optional=True)],
description="Displays the next worldboss spawns", access_level="member") description="Displays the next worldboss spawns", access_level="member")
def show_worldboss(self, request, boss: str): def show_worldboss(self, _, boss: str):
if boss: if boss:
boss = self.getWorldbossName(boss) boss = self.getWorldbossName(boss)
if boss: if boss:
return self.getWBTimer(boss) return self.getWBTimer(boss) or f"Could not find any data for the Worldboss <highlight>{boss}</highlight>."
return ChatBlob("Next Worldboss spawns", "<red></red>"+self.getWBTimer()) return ChatBlob("Next Worldboss spawns", "<red></red>"+self.getWBTimer())
def getWBTimer(self, name=None) -> Union[TimerObj, list[TimerObj]]: def getWBTimer(self, name=None) -> Union[TimerObj, list[TimerObj]]:
@@ -195,6 +192,21 @@ class WorldBossController:
else: else:
rt = x.get_respawn_timer() rt = x.get_respawn_timer()
if rt != 0: if rt != 0:
if (x.time + rt) < x.getTime() < (x.time + 2 * rt): if (x.time + rt) < x.getTime() < (x.time + 1.5*rt):
return f" <highlight>{x.name}</highlight> :: should have spawned {self.util.format_time(abs(x.getTime() - (x.time + rt)))} ago" return f" <highlight>{x.name}</highlight> :: should have spawned {self.util.format_time(abs(x.getTime() - (x.time + rt)))} ago"
return f" <highlight>{x.name}</highlight> :: spawn in {self.util.format_time(x.time + rt - x.getTime())}"
if x.time < x.getTime() < (x.time + 5 * rt):
skips = 0
time = x.time
while time < x.getTime():
time += x.get_respawn_timer()
skips += 1
if (x.time + rt) < x.getTime():
if skips >= 5:
return ""
return f" <highlight>{x.name}</highlight> :: spawn in {self.util.format_time(x.time + rt * skips - x.getTime())} [Skipped: {skips - 1}]"
return f" <highlight>{x.name}</highlight> :: spawn in {self.util.format_time(x.time + rt - x.getTime())}"
return ""