Files

65 lines
2.5 KiB
Python

from core.chat_blob import ChatBlob
from core.command_param_types import Any
from core.db import DB
from core.decorators import instance, command
from core.text import Text
@instance()
class BosslootController:
def inject(self, registry):
self.db: DB = registry.get_instance("db")
self.text: Text = registry.get_instance("text")
def pre_start(self):
self.db.load_sql_file(self.module_dir + "/" + "boss.sql", pre_optimized=True)
self.db.load_sql_file(self.module_dir + "/" + "boss_loot.sql", pre_optimized=True)
self.db.load_sql_file(self.module_dir + "/" + "whereis.sql", pre_optimized=True)
self.db.create_view("whereis")
self.db.create_view("boss")
self.db.create_view("boss_loot")
@command(command="boss", params=[Any("search")], access_level="member",
description="Show loot for a boss")
def boss_cmd(self, _, search):
sql = "SELECT b.id, b.name, w.answer FROM boss b " \
"LEFT JOIN whereis w ON b.name = w.name " \
"WHERE b.name <EXTENDED_LIKE=0> ?"
data = self.db.query(sql, [search], extended_like=True)
cnt = len(data)
blob = ""
for row in data:
blob += self.format_boss(row)
blob += "\n\n"
return ChatBlob("Boss Search Results for '%s' (%d)" % (search, cnt), blob)
@command(command="bossloot", params=[Any("search")], access_level="member",
description="Show loot for a boss")
def bossloot_cmd(self, _, search):
sql = "SELECT DISTINCT b2.id, b2.name, w.answer " \
"FROM boss_loot b1 JOIN boss b2 ON b2.id = b1.boss_id LEFT JOIN whereis w ON w.name = b2.name " \
"WHERE b1.item_name <EXTENDED_LIKE=0> ?"
data = self.db.query(sql, [search], extended_like=True)
cnt = len(data)
blob = ""
for row in data:
blob += self.format_boss(row)
blob += "\n\n"
return ChatBlob("Bossloot Search Results for '%s' (%d)" % (search, cnt), blob)
def format_boss(self, row):
data = self.db.query("SELECT * FROM boss_loot b "
"LEFT JOIN aodb a ON b.item_name = a.name "
"WHERE b.boss_id = ? ORDER BY b.item_name", [row.id])
blob = "<pagebreak>"
blob += "<header2>%s</header2>\n" % row.name
blob += "Location: <highlight>%s</highlight>\n" % row.answer
blob += "Loot: " + ", ".join(map(lambda x: self.text.make_item(x.lowid, x.highid, x.highql, x.name), data))
return blob