Added !orglist cancel
fix for !whois <char_id> added logging for invalid ORG_MSG_EVENT's
This commit is contained in:
@@ -109,6 +109,23 @@ class BuddyService:
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def remove_buddy_type(self, chars: [], _type: str, force_remove=False):
|
||||||
|
removed = 0
|
||||||
|
if len(chars) < 1:
|
||||||
|
return removed
|
||||||
|
for bot, buddylist in self.buddy_list.items():
|
||||||
|
for x in buddylist.keys():
|
||||||
|
if x not in chars:
|
||||||
|
continue
|
||||||
|
if _type not in buddylist[x]['types']:
|
||||||
|
continue
|
||||||
|
buddylist[x]["types"].remove(_type)
|
||||||
|
if len(buddylist[x]["types"]) == 0 or force_remove:
|
||||||
|
conn = self.bot.conns[buddylist[x]["conn_id"]]
|
||||||
|
conn.send_packet(client_packets.BuddyRemove(x))
|
||||||
|
removed += 1
|
||||||
|
return removed
|
||||||
|
|
||||||
def get_buddy(self, char_id):
|
def get_buddy(self, char_id):
|
||||||
for conn_id, conn_buddy_list in self.buddy_list.items():
|
for conn_id, conn_buddy_list in self.buddy_list.items():
|
||||||
if char_id in conn_buddy_list:
|
if char_id in conn_buddy_list:
|
||||||
|
|||||||
+1
-1
@@ -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 = "2"
|
self.minor_version = "3"
|
||||||
self.incoming_queue = FifoQueue()
|
self.incoming_queue = FifoQueue()
|
||||||
self.mass_message_queue = None
|
self.mass_message_queue = None
|
||||||
self.conns = DictObject()
|
self.conns = DictObject()
|
||||||
|
|||||||
@@ -112,9 +112,9 @@ class DiscordCommandHandler(BaseModule):
|
|||||||
m = re.findall(r"<img src='tdb://id:GFX_GUI_ICON_PROFESSION_(\d+)'>", ctx)
|
m = re.findall(r"<img src='tdb://id:GFX_GUI_ICON_PROFESSION_(\d+)'>", ctx)
|
||||||
for match in m:
|
for match in m:
|
||||||
ctx = ctx.replace(f"<img src='tdb://id:GFX_GUI_ICON_PROFESSION_{match}'>",
|
ctx = ctx.replace(f"<img src='tdb://id:GFX_GUI_ICON_PROFESSION_{match}'>",
|
||||||
f"#_#{self.discord.util.get_profession(proficon.get(int(match)))}#_#")
|
f"<notice>{self.discord.util.get_profession(proficon.get(int(match)))}</notice>")
|
||||||
|
|
||||||
for x in ["`", ' *', ' _', ' |']:
|
for x in ["`", '*', '_', '|']:
|
||||||
ctx = ctx.replace(x, f' \\{x.strip()}')
|
ctx = ctx.replace(x, f' \\{x.strip()}')
|
||||||
for pattern, sub in [(r"(<br>|\n|</br>)", r"\n"),
|
for pattern, sub in [(r"(<br>|\n|</br>)", r"\n"),
|
||||||
(r"<highlight>(.*?)</highlight>", r"**\1**"),
|
(r"<highlight>(.*?)</highlight>", r"**\1**"),
|
||||||
@@ -138,7 +138,6 @@ class DiscordCommandHandler(BaseModule):
|
|||||||
(r"<tab>", "\t"),
|
(r"<tab>", "\t"),
|
||||||
(r"\n\n<img src=(.?)rdb://\d+\1>", ''),
|
(r"\n\n<img src=(.?)rdb://\d+\1>", ''),
|
||||||
(r"<a href=skillid://\d+>(.+?)</a>", r'\1'),
|
(r"<a href=skillid://\d+>(.+?)</a>", r'\1'),
|
||||||
('#(.+?)#', r'\1'),
|
|
||||||
('<', '<'),
|
('<', '<'),
|
||||||
('>', '>'),
|
('>', '>'),
|
||||||
(r"<font color=('*?).+?\1>", ''),
|
(r"<font color=('*?).+?\1>", ''),
|
||||||
@@ -156,7 +155,7 @@ class DiscordCommandHandler(BaseModule):
|
|||||||
@command(command="discord", params=[Const("invite")], access_level="member",
|
@command(command="discord", params=[Const("invite")], access_level="member",
|
||||||
description="Get a personal Discord invite", sub_command="invite")
|
description="Get a personal Discord invite", sub_command="invite")
|
||||||
def discord_invite_cmd(self, request, _):
|
def discord_invite_cmd(self, request, _):
|
||||||
if not self.discord.client:
|
if not self.discord.client or not self.discord.client.loop:
|
||||||
return "Discord module has not been initiated yet. Please try again later."
|
return "Discord module has not been initiated yet. Please try again later."
|
||||||
account = self.discord.account_service.get_account(request.sender.char_id)
|
account = self.discord.account_service.get_account(request.sender.char_id)
|
||||||
if account is None:
|
if account is None:
|
||||||
@@ -262,14 +261,14 @@ class DiscordCommandHandler(BaseModule):
|
|||||||
|
|
||||||
account = self.discord.data.get_account_discord_id(member.id)
|
account = self.discord.data.get_account_discord_id(member.id)
|
||||||
if not account:
|
if not account:
|
||||||
log = '**%s** has left discord (**%s**)' % (member.nick or member.name, handle)
|
log = '<highlight>%s</highlight> has left discord (<highlight>%s</highlight>)' % (member.nick or member.name, handle)
|
||||||
self.relay_hub_service.send_message("system_logger", 0, log, log)
|
self.relay_hub_service.send_message("system_logger", 0, log, log)
|
||||||
self.logger.info(log)
|
self.logger.info(log)
|
||||||
continue
|
continue
|
||||||
main = self.discord.account_service.get_main(account.char_id)
|
main = self.discord.account_service.get_main(account.char_id)
|
||||||
if account is None:
|
if account is None:
|
||||||
continue
|
continue
|
||||||
log = '**%s** has left discord (**%s**)' % (main.name, handle)
|
log = '<highlight>%s</highlight> has left discord (<highlight>%s</highlight>)' % (main.name, handle)
|
||||||
self.relay_hub_service.send_message("system_logger", 0, log, log)
|
self.relay_hub_service.send_message("system_logger", 0, log, log)
|
||||||
self.logger.info(log)
|
self.logger.info(log)
|
||||||
# self.bot.send_private_channel_message("%s has left Discord (%s)" % (main.name, handle))
|
# self.bot.send_private_channel_message("%s has left Discord (%s)" % (main.name, handle))
|
||||||
@@ -281,7 +280,7 @@ class DiscordCommandHandler(BaseModule):
|
|||||||
invite_used = obj.invite
|
invite_used = obj.invite
|
||||||
handle = member.name + "#" + member.discriminator
|
handle = member.name + "#" + member.discriminator
|
||||||
if invite_used is None:
|
if invite_used is None:
|
||||||
log = '**%s** joined discord with unknown invite' % handle
|
log = '<highlight>%s</highlight> joined discord with unknown invite' % handle
|
||||||
self.relay_hub_service. \
|
self.relay_hub_service. \
|
||||||
send_message("system_logger", 0,
|
send_message("system_logger", 0,
|
||||||
log + f" {self.get_role('Administrator', self.guild.roles).mention}'s, "
|
log + f" {self.get_role('Administrator', self.guild.roles).mention}'s, "
|
||||||
@@ -293,13 +292,13 @@ class DiscordCommandHandler(BaseModule):
|
|||||||
self.discord.guild = self.discord.client.get_guild(self.discord.client.guilds[0].id)
|
self.discord.guild = self.discord.client.get_guild(self.discord.client.guilds[0].id)
|
||||||
account = self.discord.data.get_discord_invite(invite_used.code)
|
account = self.discord.data.get_discord_invite(invite_used.code)
|
||||||
if account is None:
|
if account is None:
|
||||||
log = '**%s** joined discord with invite **%s** but couldnt find account!' % (
|
log = '<highlight>%s</highlight> joined discord with invite <highlight>%s</highlight> but couldnt find account!' % (
|
||||||
handle, invite_used.code)
|
handle, invite_used.code)
|
||||||
self.relay_hub_service. \
|
self.relay_hub_service. \
|
||||||
send_message("system_logger", 0,
|
send_message("system_logger", 0,
|
||||||
log + f" {self.get_role('Administrator', self.guild.roles).mention}'s, "
|
log + f" {self.discord.get_role('Administrator', self.discord.guild.roles).mention}'s, "
|
||||||
f"check that!",
|
f"check that!",
|
||||||
log + f" {self.get_role('Administrator', self.guild.roles).mention}'s, "
|
log + f" {self.discord.get_role('Administrator', self.discord.guild.roles).mention}'s, "
|
||||||
f"check that!")
|
f"check that!")
|
||||||
self.logger.info(log)
|
self.logger.info(log)
|
||||||
asyncio.run_coroutine_threadsafe(self.discord.discord_member_roles(member, None, None),
|
asyncio.run_coroutine_threadsafe(self.discord.discord_member_roles(member, None, None),
|
||||||
@@ -319,7 +318,7 @@ class DiscordCommandHandler(BaseModule):
|
|||||||
self.discord.discord_member_roles(member, account, access_level),
|
self.discord.discord_member_roles(member, account, access_level),
|
||||||
self.discord.loop)
|
self.discord.loop)
|
||||||
# noinspection LongLine
|
# noinspection LongLine
|
||||||
log = '**%s** joined discord with invite **%s** and matches account **%s**' \
|
log = '<highlight>%s</highlight> joined discord with invite <highlight>%s</highlight> and matches account <highlight>%s</highlight>' \
|
||||||
% (handle, invite_used.code,
|
% (handle, invite_used.code,
|
||||||
f"{f'[{self.discord.alias_controller.get_alias(main.org_id)}] ' if self.discord.setting_service.get_value('is_alliance_bot') == '1' else ''}{main.name}")
|
f"{f'[{self.discord.alias_controller.get_alias(main.org_id)}] ' if self.discord.setting_service.get_value('is_alliance_bot') == '1' else ''}{main.name}")
|
||||||
self.relay_hub_service.send_message("system_logger", account.main, log, log)
|
self.relay_hub_service.send_message("system_logger", account.main, log, log)
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
import typing
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from core.aochat import server_packets
|
from core.aochat import server_packets
|
||||||
from core.buddy_service import BuddyService
|
|
||||||
from core.cache_service import CacheService
|
from core.cache_service import CacheService
|
||||||
from core.chat_blob import ChatBlob
|
from core.chat_blob import ChatBlob
|
||||||
from core.command_param_types import Int
|
from core.command_param_types import Int
|
||||||
@@ -14,12 +14,15 @@ from core.dict_object import DictObject
|
|||||||
from core.event_service import EventService
|
from core.event_service import EventService
|
||||||
from core.igncore import IgnCore
|
from core.igncore import IgnCore
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
from core.lookup.character_service import CharacterService
|
|
||||||
from core.lookup.org_pork_service import OrgPorkService
|
|
||||||
from core.lookup.pork_service import PorkService
|
|
||||||
from core.public_channel_service import PublicChannelService
|
|
||||||
from core.util import Util
|
from core.util import Util
|
||||||
from modules.core.accounting.services.account_service import AccountService
|
from core.public_channel_service import PublicChannelService
|
||||||
|
|
||||||
|
if typing.TYPE_CHECKING:
|
||||||
|
from modules.core.accounting.services.account_service import AccountService
|
||||||
|
from core.lookup.character_service import CharacterService
|
||||||
|
from core.lookup.org_pork_service import OrgPorkService
|
||||||
|
from core.lookup.pork_service import PorkService
|
||||||
|
from core.buddy_service import BuddyService
|
||||||
|
|
||||||
|
|
||||||
@instance()
|
@instance()
|
||||||
@@ -129,6 +132,11 @@ class OrgRosterController:
|
|||||||
@timerevent("24h", "Update the orgroster on changes")
|
@timerevent("24h", "Update the orgroster on changes")
|
||||||
def update_roster(self, _, _1):
|
def update_roster(self, _, _1):
|
||||||
self.bot.send_org_message("Updating roster...")
|
self.bot.send_org_message("Updating roster...")
|
||||||
|
handlers = self.event_service.get_handlers("connect", "")
|
||||||
|
conn = False
|
||||||
|
for x in handlers:
|
||||||
|
if "orgbot" in x.handler and "connect" in x.handler:
|
||||||
|
conn = True
|
||||||
cache = self.cache.retrieve('org_roster', f"{self.public_channel_service.org_id}.5.json")
|
cache = self.cache.retrieve('org_roster', f"{self.public_channel_service.org_id}.5.json")
|
||||||
if cache:
|
if cache:
|
||||||
if cache.last_modified < time.time() - 16 * 60 * 60:
|
if cache.last_modified < time.time() - 16 * 60 * 60:
|
||||||
@@ -159,6 +167,7 @@ class OrgRosterController:
|
|||||||
if buddy := self.buddy_service.get_buddy(char_info['CHAR_INSTANCE']):
|
if buddy := self.buddy_service.get_buddy(char_info['CHAR_INSTANCE']):
|
||||||
if "org_member" in buddy['types']:
|
if "org_member" in buddy['types']:
|
||||||
continue
|
continue
|
||||||
|
if conn:
|
||||||
self.buddy_service.add_buddy(char_info['CHAR_INSTANCE'], "org_member")
|
self.buddy_service.add_buddy(char_info['CHAR_INSTANCE'], "org_member")
|
||||||
|
|
||||||
with self.db.lock:
|
with self.db.lock:
|
||||||
@@ -192,6 +201,9 @@ class OrgRosterController:
|
|||||||
def org_msg_event(self, _, event_data):
|
def org_msg_event(self, _, event_data):
|
||||||
ext_msg = event_data.extended_message
|
ext_msg = event_data.extended_message
|
||||||
log = False
|
log = False
|
||||||
|
if not ext_msg:
|
||||||
|
self.logger.error(f"--UKN-- {_} -- {event_data}")
|
||||||
|
return
|
||||||
if [ext_msg.category_id, ext_msg.instance_id] == self.LEFT_ORG:
|
if [ext_msg.category_id, ext_msg.instance_id] == self.LEFT_ORG:
|
||||||
log = True
|
log = True
|
||||||
self.process_org_msg(ext_msg.params[0], self.MODE_REM_MANUAL, ext_msg)
|
self.process_org_msg(ext_msg.params[0], self.MODE_REM_MANUAL, ext_msg)
|
||||||
|
|||||||
@@ -19,19 +19,19 @@ class OverequippedController:
|
|||||||
def oe_command(self, _, skill_level):
|
def oe_command(self, _, skill_level):
|
||||||
oe = self.get_oe_vals(skill_level)
|
oe = self.get_oe_vals(skill_level)
|
||||||
|
|
||||||
blob = "With a skill requirement of <highlight>%s</highlight>, you will be\n" % skill_level
|
blob = f"With a skill requirement of <highlight>{skill_level}</highlight>, you will be\n"
|
||||||
blob += "Out of OE: <highlight>%d</highlight> or higher\n" % oe.oe100low
|
blob += f"Out of OE: <highlight>{oe.oe100low}</highlight> or higher\n"
|
||||||
blob += "75%%: <highlight>%d</highlight> to <highlight>%d</highlight>\n" % (oe.oe75low, oe.oe100low - 1)
|
blob += f"75%: <highlight>{oe.oe75low}</highlight> to <highlight>{oe.oe100low - 1}</highlight>\n"
|
||||||
blob += "50%%: <highlight>%d</highlight> to <highlight>%d</highlight>\n" % (oe.oe50low, oe.oe75low - 1)
|
blob += f"50%: <highlight>{oe.oe50low}</highlight> to <highlight>{oe.oe75low - 1}</highlight>\n"
|
||||||
blob += "25%%: <highlight>%d</highlight> to <highlight>%d</highlight>\n" % (oe.oe25low, oe.oe50low - 1)
|
blob += f"25%: <highlight>{oe.oe25low}</highlight> to <highlight>{oe.oe50low - 1}</highlight>\n"
|
||||||
blob += "0%%: <highlight>%d</highlight> or lower\n\n" % (oe.oe25low - 1)
|
blob += f"0%: <highlight>{oe.oe25low - 1}</highlight> or lower\n\n"
|
||||||
|
|
||||||
blob += "With a personal skill of <highlight>%s</highlight>, you can use up to\n" % skill_level
|
blob += f"With a personal skill of <highlight>{skill_level}</highlight>, you can use up to\n"
|
||||||
blob += "Out of OE: <highlight>%d</highlight> or lower\n" % oe.oe100
|
blob += f"Out of OE: <highlight>{oe.oe100}</highlight> or lower\n"
|
||||||
blob += "75%%: <highlight>%d</highlight> to <highlight>%d</highlight>\n" % (oe.oe100 + 1, oe.oe75)
|
blob += f"75%: <highlight>{oe.oe100 + 1}</highlight> to <highlight>{oe.oe75}</highlight>\n"
|
||||||
blob += "50%%: <highlight>%d</highlight> to <highlight>%d</highlight>\n" % (oe.oe75 + 1, oe.oe50)
|
blob += f"50%: <highlight>{oe.oe75 + 1}</highlight> to <highlight>{oe.oe50}</highlight>\n"
|
||||||
blob += "25%%: <highlight>%d</highlight> to <highlight>%d</highlight>\n" % (oe.oe50 + 1, oe.oe25)
|
blob += f"25%: <highlight>{oe.oe50 + 1}</highlight> to <highlight>{oe.oe25}</highlight>\n"
|
||||||
blob += "0%%: <highlight>%d</highlight> or higher\n" % (oe.oe25 - 1)
|
blob += f"0%: <highlight>{oe.oe25 - 1}</highlight> or higher\n"
|
||||||
|
|
||||||
return ChatBlob("%d - %d - %d" % (oe.oe100low, skill_level, oe.oe100), blob)
|
return ChatBlob("%d - %d - %d" % (oe.oe100low, skill_level, oe.oe100), blob)
|
||||||
|
|
||||||
|
|||||||
@@ -217,6 +217,9 @@ class LandController:
|
|||||||
blob += f"<tab>Dist: <highlight>{cond}</highlight> Conductors and <highlight>{turret}</highlight> Turrets\n"
|
blob += f"<tab>Dist: <highlight>{cond}</highlight> Conductors and <highlight>{turret}</highlight> Turrets\n"
|
||||||
blob += "\n Towers:\n"
|
blob += "\n Towers:\n"
|
||||||
blob += towers
|
blob += towers
|
||||||
|
else:
|
||||||
|
blob += f"<tab>Dist: <highlight>{data.guards}</highlight> Conductors and <highlight>{data.turrets}</highlight> Turrets\n"
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if not row.enabled:
|
if not row.enabled:
|
||||||
blob += "<tab><red>Disabled</red>\n"
|
blob += "<tab><red>Disabled</red>\n"
|
||||||
@@ -264,16 +267,21 @@ class LandController:
|
|||||||
else:
|
else:
|
||||||
return self.db.query("""SELECT d.playfield_id AS pf_id, d.site_number, d.site_name, d.min_ql, d.max_ql,
|
return self.db.query("""SELECT d.playfield_id AS pf_id, d.site_number, d.site_name, d.min_ql, d.max_ql,
|
||||||
d.x_coord, d.y_coord, d.timing, d.enabled, a.tower_id, a.ql,
|
d.x_coord, d.y_coord, d.timing, d.enabled, a.tower_id, a.ql,
|
||||||
a.close_time, a.penalty_until, a.planted, b.*, c.*, e.*
|
a.close_time, a.penalty_until, a.planted, b.*, c.*, e.*, t2.turrets, t2.guards
|
||||||
FROM tower_sites d
|
FROM tower_sites d
|
||||||
LEFT JOIN towers a on a.pf_id = d.playfield_id and a.site_number = d.site_number AND a.close_time IS NOT NULL
|
LEFT JOIN towers a on a.pf_id = d.playfield_id and a.site_number = d.site_number AND a.close_time IS NOT NULL
|
||||||
LEFT JOIN aodb b ON a.high_id = b.highid
|
LEFT JOIN aodb b ON a.high_id = b.highid
|
||||||
LEFT JOIN playfields c on d.playfield_id = c.id
|
LEFT JOIN playfields c on d.playfield_id = c.id
|
||||||
LEFT JOIN all_orgs e on a.org_id = e.org_id
|
LEFT JOIN all_orgs e on a.org_id = e.org_id
|
||||||
|
LEFT JOIN (SELECT COUNT(CASE WHEN name LIKE '%Turret%' THEN 1 WHEN name LIKE '%SAM Battery%' THEN 1 END) turrets,
|
||||||
|
COUNT(CASE WHEN name LIKE '%Guard%' THEN 1 END) guards, site_number AS site
|
||||||
|
FROM towers a LEFT JOIN aodb b ON a.high_id = b.highid WHERE a.pf_id=? GROUP BY site_number) t2
|
||||||
|
|
||||||
|
ON d.site_number = t2.site
|
||||||
WHERE playfield_id=?
|
WHERE playfield_id=?
|
||||||
GROUP BY playfield_id, site_number
|
GROUP BY playfield_id, site_number
|
||||||
ORDER BY site_number, ql DESC
|
ORDER BY site_number, ql DESC
|
||||||
""", [pf])
|
""", [pf, pf])
|
||||||
|
|
||||||
def get_towers_by_org(self, org_id):
|
def get_towers_by_org(self, org_id):
|
||||||
return self.db.query("""SELECT * FROM (SELECT COUNT(CASE WHEN name LIKE '%Turret%' THEN 1 WHEN name LIKE '%SAM Battery%' THEN 1 END) turrets,
|
return self.db.query("""SELECT * FROM (SELECT COUNT(CASE WHEN name LIKE '%Turret%' THEN 1 WHEN name LIKE '%SAM Battery%' THEN 1 END) turrets,
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import time
|
import time
|
||||||
|
import typing
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
from core.aochat.server_packets import BuddyAdded, CharacterName
|
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.db import DB
|
||||||
from core.decorators import instance, command, timerevent
|
from core.decorators import instance, command, timerevent
|
||||||
from core.dict_object import DictObject
|
from core.dict_object import DictObject
|
||||||
from core.lookup.pork_service import PorkService
|
if typing.TYPE_CHECKING:
|
||||||
from core.text import Text
|
from core.job_scheduler import JobScheduler
|
||||||
from core.igncore import IgnCore
|
from core.lookup.pork_service import PorkService
|
||||||
|
from core.text import Text
|
||||||
|
from core.igncore import IgnCore
|
||||||
|
|
||||||
@instance()
|
@instance()
|
||||||
class CharacterInfoController:
|
class CharacterInfoController:
|
||||||
@@ -31,6 +33,7 @@ class CharacterInfoController:
|
|||||||
self.account_service = registry.get_instance("account_service")
|
self.account_service = registry.get_instance("account_service")
|
||||||
self.buddy_service = registry.get_instance("buddy_service")
|
self.buddy_service = registry.get_instance("buddy_service")
|
||||||
self.alts_controller = registry.get_instance("alts_controller")
|
self.alts_controller = registry.get_instance("alts_controller")
|
||||||
|
self.jobs: JobScheduler = registry.get_instance("job_scheduler")
|
||||||
|
|
||||||
def pre_start(self):
|
def pre_start(self):
|
||||||
self.bot.register_packet_handler(CharacterName.id, self.character_name_update)
|
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:
|
if dimension == self.bot.dimension and char.char_id:
|
||||||
online_status = self.buddy_service.is_online(char.char_id)
|
online_status = self.buddy_service.is_online(char.char_id)
|
||||||
if online_status is None:
|
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.bot.register_packet_handler(BuddyAdded.id, self.handle_buddy_status)
|
||||||
self.waiting_for_update[char.char_id] = \
|
self.waiting_for_update[char.char_id] = \
|
||||||
DictObject({"char_id": char.char_id, "name": char.name,
|
DictObject({"char_id": char.char_id, "name": char.name,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import requests
|
|||||||
|
|
||||||
from core.buddy_service import BuddyService
|
from core.buddy_service import BuddyService
|
||||||
from core.chat_blob import ChatBlob
|
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.decorators import instance, command, event
|
||||||
from core.dict_object import DictObject
|
from core.dict_object import DictObject
|
||||||
from core.registry import Registry
|
from core.registry import Registry
|
||||||
@@ -41,6 +41,16 @@ class OrgListController:
|
|||||||
def orglist_cmd(self, request, org_id):
|
def orglist_cmd(self, request, org_id):
|
||||||
self.start_orglist_lookup(request.reply, 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",
|
@command(command="orglist", params=[Any("character|org_name|org_id")], access_level="member",
|
||||||
description="Show online status of characters in an org")
|
description="Show online status of characters in an org")
|
||||||
def orglist_character_cmd(self, request, search):
|
def orglist_character_cmd(self, request, search):
|
||||||
@@ -124,7 +134,7 @@ class OrgListController:
|
|||||||
|
|
||||||
def start_orglist_lookup(self, reply, org_id):
|
def start_orglist_lookup(self, reply, org_id):
|
||||||
if self.orglist:
|
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
|
return
|
||||||
|
|
||||||
reply(f"Downloading org roster for org id {org_id:d}...")
|
reply(f"Downloading org roster for org id {org_id:d}...")
|
||||||
@@ -148,7 +158,10 @@ class OrgListController:
|
|||||||
while self.bot.iterate(1):
|
while self.bot.iterate(1):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
self.check_for_orglist_end()
|
self.check_for_orglist_end()
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
@event(event_type=BuddyService.BUDDY_LOGON_EVENT,
|
@event(event_type=BuddyService.BUDDY_LOGON_EVENT,
|
||||||
description="Detect online buddies for orglist command", is_hidden=True)
|
description="Detect online buddies for orglist command", is_hidden=True)
|
||||||
@@ -165,14 +178,17 @@ class OrgListController:
|
|||||||
self.check_for_orglist_end()
|
self.check_for_orglist_end()
|
||||||
|
|
||||||
def update_online_status(self, char_id, status):
|
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] = self.orglist.waiting_org_members[char_id]
|
||||||
self.orglist.finished_org_members[char_id].online = status
|
self.orglist.finished_org_members[char_id].online = status
|
||||||
del self.orglist.waiting_org_members[char_id]
|
del self.orglist.waiting_org_members[char_id]
|
||||||
|
|
||||||
def check_for_orglist_end(self):
|
def check_for_orglist_end(self):
|
||||||
|
if not self.orglist:
|
||||||
|
return
|
||||||
if self.orglist.org_members:
|
if self.orglist.org_members:
|
||||||
self.iterate_org_members()
|
self.iterate_org_members()
|
||||||
|
|
||||||
if not self.orglist.waiting_org_members:
|
if not self.orglist.waiting_org_members:
|
||||||
self.orglist.reply(self.format_result())
|
self.orglist.reply(self.format_result())
|
||||||
self.orglist = None
|
self.orglist = None
|
||||||
@@ -229,7 +245,7 @@ class OrgListController:
|
|||||||
|
|
||||||
def iterate_org_members(self):
|
def iterate_org_members(self):
|
||||||
# add org_members that we don't have online status for as buddies
|
# 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()
|
org_member = self.orglist.org_members.pop()
|
||||||
char_id = org_member.char_id
|
char_id = org_member.char_id
|
||||||
self.orglist.waiting_org_members[char_id] = org_member
|
self.orglist.waiting_org_members[char_id] = org_member
|
||||||
|
|||||||
Reference in New Issue
Block a user