Moved org finder to the core
Allowed viewing the most recent account logs by using !account log recent Allowed removing of chatbots Moved the so far hardcoded org prefixing into the DB, which allows dynamically changing them. Fix for orgrosters; org leaves are being detected now.
This commit is contained in:
@@ -1,6 +1,3 @@
|
||||
from threading import Thread
|
||||
|
||||
from core import command_request, sender_obj
|
||||
from core.aochat.BaseModule import BaseModule
|
||||
from core.buddy_service import BuddyService
|
||||
from core.chat_blob import ChatBlob
|
||||
@@ -31,6 +28,7 @@ class BotController(BaseModule):
|
||||
self.org_pork: PorkService = registry.get_instance("org_pork_service")
|
||||
self.command_alias_service: CommandAliasService = registry.get_instance("command_alias_service")
|
||||
self.buddy_service: BuddyService = registry.get_instance("buddy_service")
|
||||
self.online = registry.get_instance("buddy_service")
|
||||
|
||||
def pre_start(self):
|
||||
self.db.exec("CREATE TABLE IF NOT EXISTS org_bots(char_id int primary key not null, org_id int not null)")
|
||||
@@ -38,24 +36,31 @@ class BotController(BaseModule):
|
||||
def start(self):
|
||||
pass
|
||||
|
||||
@command(command="bots", params=[Const("add"), Character("botname")], access_level="admin",
|
||||
description="Add an bot to the bot list")
|
||||
def bots_add_any(self, sender, _, bot):
|
||||
Thread(target=self.bots_add, args=(bot, sender)).start()
|
||||
|
||||
def bots_add(self, bot: sender_obj, request: command_request):
|
||||
@command(command="orgs", params=[Const("bots"), Const("add"), Character("botname")], access_level="admin",
|
||||
description="Add an bot to the bot list", sub_command="bots_mng")
|
||||
def cmd_orgs_bots_add(self, request, _, _1, bot):
|
||||
player = self.pork.request_char_info(bot.name, 5)
|
||||
if self.db.exec("INSERT IGNORE INTO org_bots(char_id, org_id) VALUES(?, ?)", [bot.char_id, player.org_id]) == 0:
|
||||
request.reply("The bot <highlight>%s<end> is already marked as an chatbot." % bot.name)
|
||||
request.reply(f"The bot <highlight>{bot.name}<end> is already marked as a chatbot.")
|
||||
else:
|
||||
request.reply("Successfully marked <highlight>%s<end> as an chatbot." % bot.name)
|
||||
self.db.exec("DELETE FROM online where char_id=?", [bot.char_id])
|
||||
request.reply(f"Successfully marked <highlight>{bot.name}<end> as a chatbot.")
|
||||
|
||||
@command(command="bots",
|
||||
params=[],
|
||||
@command(command="orgs", params=[Const("bots"), Const("rem"), Character("botname")], access_level="admin",
|
||||
description="Add an bot to the bot list", sub_command="bots_mng")
|
||||
def cmd_orgs_bots_rem(self, request, _, _1, bot):
|
||||
|
||||
if self.db.exec("DELETE FROM org_bots WHERE char_id=?", [bot.char_id]) == 0:
|
||||
request.reply(f"<highlight>{bot.name}<end> is not a chatbot.")
|
||||
else:
|
||||
request.reply(f"Successfully removed <highlight>{bot.name}<end> as a chatbot. The character will show up in !online again after its next login.")
|
||||
|
||||
@command(command="orgs",
|
||||
params=[Const("bots")],
|
||||
access_level="moderator",
|
||||
description="show all orgbots",
|
||||
sub_command="show")
|
||||
def bots_show_all(self, _):
|
||||
sub_command="bots_show")
|
||||
def cmd_orgs_bots_show(self, _, _1):
|
||||
def format_row(query):
|
||||
bud = self.buddy_service.is_online(query["char_id"])
|
||||
buddy = "<green>O<end>" if bud == 1 else "<red>O<end>" if bud == 0 else "<grey>U<end>"
|
||||
|
||||
@@ -1,23 +1,21 @@
|
||||
from core.buddy_service import BuddyService
|
||||
from core.chat_blob import ChatBlob
|
||||
from core.command_alias_service import CommandAliasService
|
||||
from core.db import DB
|
||||
from core.decorators import instance
|
||||
from core.decorators import instance, command
|
||||
from core.logger import Logger
|
||||
from core.lookup.pork_service import PorkService
|
||||
from core.text import Text
|
||||
from core.igncore import IgnCore
|
||||
from core.util import Util
|
||||
from modules.core.accounting.services.access_service import AccessService
|
||||
from core.command_param_types import Const, Any
|
||||
|
||||
|
||||
# noinspection DuplicatedCode
|
||||
@instance()
|
||||
class OrgAliasController:
|
||||
org_prefix = {4736: "AP", 9632: "AP", 9622: "AC", 9831: "AC", 581633: "BST", 9707: "CoH", 9990: "CoH", 4637: "HAV",
|
||||
10197: "IMP", 6093: "LCG", 4789: "MJ", 4687: "NA", 4800: "PR", 4993: "REGS", 813067: "SOTL",
|
||||
4851: "SP", 9611: "SP", 4614: "TA", 4831: "TGNF", 6183: "TRE", 9822: "TS", 4611: "UHS",
|
||||
5571: "UOTR", 520210: "WO", 1349649: "VR", 4826: "42", 1349647: "VR", 6332: "DRA", 848: "DRA",
|
||||
4675: "VA", 1558530: "EoS"}
|
||||
prefix_cache = {}
|
||||
|
||||
def inject(self, registry):
|
||||
self.logger = Logger(__name__)
|
||||
@@ -33,6 +31,75 @@ class OrgAliasController:
|
||||
|
||||
def start(self):
|
||||
self.db.exec("CREATE TABLE IF NOT EXISTS org_alias(org_id int primary key not null, org_alias VARCHAR(255))")
|
||||
for entry in self.db.query("SELECT * from org_alias"):
|
||||
self.prefix_cache[entry.org_id] = entry.org_alias
|
||||
|
||||
def get_alias(self, org_id):
|
||||
return self.org_prefix.get(org_id, "-UKN-")
|
||||
return self.prefix_cache.get(org_id, "-UKN-")
|
||||
|
||||
@command(command="orgs", params=[Const("alias"), Const("list", is_optional=True)], access_level="member",
|
||||
description="View the currently registered org aliases", sub_command="alias_info")
|
||||
def cmd_alias_list(self, request, _, _1):
|
||||
alias_list = self.db.query("SELECT ao.org_id, ao.org_name, a.org_alias, (!ISNULL(o.org_id)) as member FROM org_alias a LEFT JOIN all_orgs ao on a.org_id = ao.org_id "
|
||||
"LEFT JOIN orgs o on a.org_id = o.org_id "
|
||||
"ORDER BY ISNULL(o.org_id), LOWER(ao.org_name)")
|
||||
blob = []
|
||||
last = -1
|
||||
for alias in alias_list:
|
||||
if last != alias.member:
|
||||
if alias.member == 1:
|
||||
blob.append("<header>Members:</header>")
|
||||
elif alias.member == 0:
|
||||
blob.append("\n<header>Other Aliases:</header>")
|
||||
last = alias.member
|
||||
blob.append(f" [<highlight>{alias.org_alias}</highlight>] - <highlight>{alias.org_name}</highlight> ({alias.org_id})")
|
||||
return ChatBlob("Aliases currently in use", "\n".join(blob))
|
||||
|
||||
@command(command="orgs", params=[Const("alias"), Const("set"), Any("alias"), Any("org")], access_level="moderator",
|
||||
description="View the currently registered org aliases",
|
||||
sub_command="alias_moderate")
|
||||
def cmd_alias_add(self, sender, _, _1, alias, search):
|
||||
orgs = self.org_pork.find_org(search)
|
||||
if len(orgs) == 1:
|
||||
orgs = orgs[0]
|
||||
if self.db.exec("REPLACE INTO org_alias(org_id, org_alias) VALUES (?, ?)", [orgs.org_id, alias]):
|
||||
self.prefix_cache[orgs.org_id] = alias
|
||||
return f"Alias for <highlight>{orgs.org_name}<end> has been set to [<highlight>{alias}</highlight>]."
|
||||
|
||||
else:
|
||||
return f"There's already an alias for <highlight>{orgs.org_name}<end>.. its [<highlight>{self.get_alias(orgs.org_id)}</highlight>]"
|
||||
elif len(orgs) == 0:
|
||||
return f"No org with the name <highlight>{search}<end> was found on PoRK."
|
||||
else:
|
||||
blob = "Your search had multiple results; please pick an org:<br>"
|
||||
for org in orgs:
|
||||
blob += f'[{self.text.make_chatcmd("Set Alias", f"/tell <myname> orgs alias set {alias} {org.org_id}")}]' \
|
||||
f'[{self.text.make_chatcmd("More", f"/tell <myname> orgs info {org.org_id}")}]' \
|
||||
f' <highlight>{org.org_name}<end> (<highlight>{org.org_id}<end>) ' \
|
||||
f'<{org.faction.lower()}>{org.faction}<end> [<highlight>{org.member_count}<end> members]' \
|
||||
f'<br><pagebreak>'
|
||||
return ChatBlob("Pick an Org", blob)
|
||||
|
||||
@command(command="orgs", params=[Const("alias"), Const("rem"), Any("org")], access_level="moderator",
|
||||
description="View the currently registered org aliases",
|
||||
sub_command="alias_moderate")
|
||||
def cmd_alias_del(self, sender, _, _1, search):
|
||||
orgs = self.org_pork.find_org(search)
|
||||
if len(orgs) == 1:
|
||||
orgs = orgs[0]
|
||||
if self.db.exec("DELETE FROM org_alias where org_id=?", [orgs.org_id]) == 1:
|
||||
self.prefix_cache.pop(orgs.org_id)
|
||||
return f"Alias for <highlight>{orgs.org_name}<end> has been removed."
|
||||
else:
|
||||
return f"There's no alias for <highlight>{orgs.org_name}<end>.."
|
||||
elif len(orgs) == 0:
|
||||
return f"No org with the name <highlight>{search}<end> was found on PoRK."
|
||||
else:
|
||||
blob = "Your search had multiple results; please pick an org:<br>"
|
||||
for org in orgs:
|
||||
blob += f'[{self.text.make_chatcmd("Set Alias", f"/tell <myname> orgs alias rem {org.org_id}")}]' \
|
||||
f'[{self.text.make_chatcmd("More", f"/tell <myname> orgs info {org.org_id}")}]' \
|
||||
f' <highlight>{org.org_name}<end> (<highlight>{org.org_id}<end>) ' \
|
||||
f'<{org.faction.lower()}>{org.faction}<end> [<highlight>{org.member_count}<end> members]' \
|
||||
f'<br><pagebreak>'
|
||||
return ChatBlob("Pick an Org", blob)
|
||||
|
||||
@@ -51,6 +51,7 @@ class OrgController:
|
||||
self.alias_controller: OrgAliasController = registry.get_instance("org_alias_controller")
|
||||
self.account_service: AccountService = registry.get_instance("account_service")
|
||||
self.cache: CacheService = registry.get_instance("cache_service")
|
||||
self.org_alias: OrgAliasController = registry.get_instance("org_alias_controller")
|
||||
|
||||
def start(self):
|
||||
self.db.exec("CREATE TABLE IF NOT EXISTS orgs(org_id int primary key not null)")
|
||||
@@ -65,12 +66,12 @@ class OrgController:
|
||||
self.buddy_service.add_buddy(player.char_id, "member")
|
||||
|
||||
@command(command="orgs", params=[Const("add"), Any("Organisation")], access_level="admin",
|
||||
description="Add an org to the online list")
|
||||
description="Add an org to the online list", sub_command="moderate")
|
||||
def orgs_add_any(self, sender, _, org):
|
||||
return self.orgs_add(org, sender)
|
||||
|
||||
def orgs_add(self, search, sender):
|
||||
orgs = self.find_org(search)
|
||||
orgs = self.org_pork.find_org(search)
|
||||
if len(orgs) == 1:
|
||||
orgs = orgs[0]
|
||||
if self.db.exec("REPLACE INTO orgs(org_id) VALUES(?)",
|
||||
@@ -95,12 +96,12 @@ class OrgController:
|
||||
return ChatBlob("Pick an Org", blob)
|
||||
|
||||
@command(command="orgs", params=[Const("rem"), Any("Organisation")], access_level="admin",
|
||||
description="Remove an org from the online list")
|
||||
description="Remove an org from the online list", sub_command="moderate")
|
||||
def orgs_rem_any(self, _, _1, org):
|
||||
return self.orgs_rem(org)
|
||||
|
||||
def orgs_rem(self, search):
|
||||
orgs = self.find_org(search)
|
||||
orgs = self.org_pork.find_org(search)
|
||||
|
||||
if len(orgs) == 1:
|
||||
orgs = orgs[0]
|
||||
@@ -124,19 +125,21 @@ class OrgController:
|
||||
return ChatBlob("Pick an Org", blob)
|
||||
|
||||
@command(command="orgs", params=[Const("list", is_optional=True)], access_level="member",
|
||||
description="View all orgs on the online list", sub_command="list")
|
||||
description="View all orgs on the online list", sub_command="online_info")
|
||||
def orgs_list(self, sender: CommandRequest, _):
|
||||
head = "<header>Organisations in our Alliance<end>"
|
||||
head = "<header>Organisations registered as Members<end>"
|
||||
blob = ""
|
||||
for org in self.db.query("SELECT * from orgs o "
|
||||
"left join all_orgs a on o.org_id = a.org_id order by a.org_name"):
|
||||
for org in self.db.query("SELECT o.*, a.*, oa.org_alias from orgs o "
|
||||
"left join all_orgs a on o.org_id = a.org_id "
|
||||
"left join org_alias oa on o.org_id = oa.org_id order by a.org_name"):
|
||||
org = DictObject(org)
|
||||
blob += "- %s%s<highlight>%s<end> (%d) with <highlight>%d<end> members\n" % (
|
||||
blob += "- %s%s%s<highlight>%s<end> (%d) with <highlight>%d<end> members\n" % (
|
||||
"[<highlight>" + self.text.make_chatcmd("Info", "/tell <myname> orgs info %d" % org.org_id,
|
||||
style="style='text-decoration:none'") + "</highlight>] ",
|
||||
"[<red>" + self.text.make_chatcmd("Remove", "/tell <myname> orgs rem %d" % org.org_id,
|
||||
style="style='text-decoration:none'") + "</red>] " if
|
||||
sender.sender.access_level["level"] <= 10 else "",
|
||||
f"[<highlight>{self.org_alias.get_alias(org.org_id)}</highlight>] ",
|
||||
org.org_name, org.org_id,
|
||||
self.db.query_single("SELECT member_count from all_orgs where org_id=?", [org.org_id]).member_count)
|
||||
|
||||
@@ -291,12 +294,6 @@ class OrgController:
|
||||
self.threads["roster"] = thread
|
||||
thread.start()
|
||||
|
||||
def find_org(self, search, table="all_orgs"):
|
||||
if search.isdigit():
|
||||
return self.db.query("SELECT * FROM " + table + " where org_id = ?", [search])
|
||||
elif isinstance(search, str):
|
||||
return self.db.query("SELECT * FROM " + table + " where org_name LIKE ?", ["%" + search + "%"])
|
||||
|
||||
def fetch_single(self, org_id, org_name, sender: object):
|
||||
start = time.time()
|
||||
data = []
|
||||
|
||||
Reference in New Issue
Block a user