Files
igncore/modules/standard/helpbot/dyna_controller.py
T

74 lines
3.4 KiB
Python

from core.chat_blob import ChatBlob
from core.command_param_types import Int, Any
from core.db import DB
from core.decorators import instance, command
from core.text import Text
@instance()
class DynaController:
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 + "/sql/" + "dyna.sql", pre_optimized=True)
self.db.create_view("dynadb")
@command(command="dyna", params=[], access_level="member",
description="Show a list of dyna mob types")
def dyna_mob_types_command(self, _):
data = self.db.query("SELECT mob, MIN(minQl) AS minQl, MAX(maxQl) AS maxQl "
"FROM dynadb GROUP BY mob ORDER BY mob")
blob = ""
for row in data:
blob += "%s (%d - %d)\n" % (self.text.make_tellcmd(row.mob, "dyna %s" % row.mob), row.minQl, row.maxQl)
return ChatBlob("Dyna Mobs (%d)" % len(data), blob)
@command(command="dyna", params=[Int("level")], access_level="member",
description="Show a list of dyna camps +/- 25 of QL")
def dyna_level_command(self, _, level):
min_level = level - 25
max_level = level + 25
data = self.db.query("SELECT * FROM dynadb d "
"JOIN playfields p ON d.playfield_id = p.id "
"WHERE d.minQl >= ? AND d.maxQl <= ? "
"ORDER BY minQl", [min_level, max_level])
blob = f"Results of dyna camps between QL <highlight>{min_level:d}</highlight> " \
f"and <highlight>{max_level:d}</highlight>\n\n"
blob += self.format_results(data)
# noinspection HttpUrlsUsage
url = "http://creativestudent.com/ao/files-helpfiles.html"
blob += "Dyna camp information taken from CSP help files: " + self.text.make_chatcmd(url, "/start " + url)
return ChatBlob("Dyna Camps (%d)" % len(data), blob)
@command(command="dyna", params=[Any("search")], access_level="member",
description="Search for dyna camps based on playfield or mob type")
def dyna_search_command(self, _, search):
search_param = "%" + search + "%"
data = self.db.query("SELECT * FROM dynadb d JOIN playfields p ON d.playfield_id = p.id "
"WHERE p.long_name LIKE ? OR p.short_name LIKE ? OR d.mob LIKE ? ORDER BY d.minQl",
[search_param, search_param, search_param])
blob = f"Results of dyna camps search for <highlight>{search}</highlight>\n\n"
blob += self.format_results(data)
# noinspection HttpUrlsUsage
url = "http://creativestudent.com/ao/files-helpfiles.html"
blob += "Dyna camp information taken from CSP help files: " + self.text.make_chatcmd(url, "/start " + url)
return ChatBlob(f"Dyna Camps ({len(data):d})", blob)
def format_results(self, data):
blob = ""
for row in data:
coordinates = self.text.make_chatcmd(f"{row.long_name} {row.cX:d}x{row.cY:d}",
f"/waypoint {row.cX:d} {row.cY:d} {row.playfield_id:d}")
blob += "<pagebreak>" + coordinates + "\n"
blob += f"{row.mob} - Level <highlight>{row.minQl:d}-{row.maxQl:d}</highlight>\n\n"
return blob