Added !orglist cancel
fix for !whois <char_id> added logging for invalid ORG_MSG_EVENT's
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import time
|
||||
import typing
|
||||
from functools import partial
|
||||
|
||||
from core.aochat.server_packets import BuddyAdded, CharacterName
|
||||
@@ -8,10 +9,11 @@ from core.command_request import CommandRequest
|
||||
from core.db import DB
|
||||
from core.decorators import instance, command, timerevent
|
||||
from core.dict_object import DictObject
|
||||
from core.lookup.pork_service import PorkService
|
||||
from core.text import Text
|
||||
from core.igncore import IgnCore
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from core.job_scheduler import JobScheduler
|
||||
from core.lookup.pork_service import PorkService
|
||||
from core.text import Text
|
||||
from core.igncore import IgnCore
|
||||
|
||||
@instance()
|
||||
class CharacterInfoController:
|
||||
@@ -31,6 +33,7 @@ class CharacterInfoController:
|
||||
self.account_service = registry.get_instance("account_service")
|
||||
self.buddy_service = registry.get_instance("buddy_service")
|
||||
self.alts_controller = registry.get_instance("alts_controller")
|
||||
self.jobs: JobScheduler = registry.get_instance("job_scheduler")
|
||||
|
||||
def pre_start(self):
|
||||
self.bot.register_packet_handler(CharacterName.id, self.character_name_update)
|
||||
@@ -60,6 +63,16 @@ class CharacterInfoController:
|
||||
if dimension == self.bot.dimension and char.char_id:
|
||||
online_status = self.buddy_service.is_online(char.char_id)
|
||||
if online_status is None:
|
||||
if str(char.char_id) == char.name:
|
||||
def a(_):
|
||||
if char.char_id in self.waiting_for_update.keys():
|
||||
del self.waiting_for_update[char.char_id]
|
||||
if not self.waiting_for_update:
|
||||
self.bot.remove_packet_handler(BuddyAdded.id, self.handle_buddy_status)
|
||||
self.buddy_service.remove_buddy(char.char_id, self.BUDDY_IS_ONLINE_TYPE)
|
||||
request.reply(f"Could not find character <highlight>{char.name}</highlight> on RK{dimension}. Lookup failed.")
|
||||
|
||||
self.jobs.delayed_job(a, 5)
|
||||
self.bot.register_packet_handler(BuddyAdded.id, self.handle_buddy_status)
|
||||
self.waiting_for_update[char.char_id] = \
|
||||
DictObject({"char_id": char.char_id, "name": char.name,
|
||||
|
||||
@@ -2,7 +2,7 @@ import requests
|
||||
|
||||
from core.buddy_service import BuddyService
|
||||
from core.chat_blob import ChatBlob
|
||||
from core.command_param_types import Int, Any, Options
|
||||
from core.command_param_types import Int, Any, Options, Const
|
||||
from core.decorators import instance, command, event
|
||||
from core.dict_object import DictObject
|
||||
from core.registry import Registry
|
||||
@@ -41,6 +41,16 @@ class OrgListController:
|
||||
def orglist_cmd(self, request, org_id):
|
||||
self.start_orglist_lookup(request.reply, org_id)
|
||||
|
||||
@command(command="orglist", params=[Const("cancel")], access_level="member",
|
||||
description="Cancel a running orgroster")
|
||||
def orglist_cancel_cmd(self, request, _):
|
||||
if not self.orglist:
|
||||
return "There's currently no orglist running, or the download of the orgroster has not been finished yes."
|
||||
org = self.orglist
|
||||
self.orglist = None
|
||||
self.buddy_service.remove_buddy_type(org.finished_org_members, self.ORGLIST_BUDDY_TYPE)
|
||||
request.reply(f"Running orglist has been aborted.")
|
||||
|
||||
@command(command="orglist", params=[Any("character|org_name|org_id")], access_level="member",
|
||||
description="Show online status of characters in an org")
|
||||
def orglist_character_cmd(self, request, search):
|
||||
@@ -124,7 +134,7 @@ class OrgListController:
|
||||
|
||||
def start_orglist_lookup(self, reply, org_id):
|
||||
if self.orglist:
|
||||
reply("There is an orglist already in progress.")
|
||||
reply("There is an orglist already in progress. You can abort the running one like this: <highlight><symbol>orglist cancel</highlight>.")
|
||||
return
|
||||
|
||||
reply(f"Downloading org roster for org id {org_id:d}...")
|
||||
@@ -148,7 +158,10 @@ class OrgListController:
|
||||
while self.bot.iterate(1):
|
||||
pass
|
||||
|
||||
self.check_for_orglist_end()
|
||||
try:
|
||||
self.check_for_orglist_end()
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
@event(event_type=BuddyService.BUDDY_LOGON_EVENT,
|
||||
description="Detect online buddies for orglist command", is_hidden=True)
|
||||
@@ -165,14 +178,17 @@ class OrgListController:
|
||||
self.check_for_orglist_end()
|
||||
|
||||
def update_online_status(self, char_id, status):
|
||||
if not self.orglist:
|
||||
return
|
||||
self.orglist.finished_org_members[char_id] = self.orglist.waiting_org_members[char_id]
|
||||
self.orglist.finished_org_members[char_id].online = status
|
||||
del self.orglist.waiting_org_members[char_id]
|
||||
|
||||
def check_for_orglist_end(self):
|
||||
if not self.orglist:
|
||||
return
|
||||
if self.orglist.org_members:
|
||||
self.iterate_org_members()
|
||||
|
||||
if not self.orglist.waiting_org_members:
|
||||
self.orglist.reply(self.format_result())
|
||||
self.orglist = None
|
||||
@@ -229,7 +245,7 @@ class OrgListController:
|
||||
|
||||
def iterate_org_members(self):
|
||||
# add org_members that we don't have online status for as buddies
|
||||
while self.orglist.org_members and self.buddy_list_has_available_slots():
|
||||
while self.orglist and self.orglist.org_members and self.buddy_list_has_available_slots():
|
||||
org_member = self.orglist.org_members.pop()
|
||||
char_id = org_member.char_id
|
||||
self.orglist.waiting_org_members[char_id] = org_member
|
||||
|
||||
Reference in New Issue
Block a user