from core.chat_blob import ChatBlob from core.command_param_types import Any, Int from core.decorators import instance, command @instance() class PerksController: def __init__(self): self.grades = ["shiny", "bright", "faded"] def inject(self, registry): self.db = registry.get_instance("db") self.util = registry.get_instance("util") def pre_start(self): self.db.load_sql_file(self.module_dir + "/" + "perks.sql", pre_optimized=True) self.db.create_view("perk") self.db.create_view("perk_prof") self.db.create_view("perk_level") self.db.create_view("perk_level_buffs") @command(command="perks", params=[Int("level"), Any("profession")], access_level="member", description="Show what perks are available for specified level and profession") def perks_cmd(self, _, level, profession): if level < 1 or level > 220: return "Level must be between 1 and 220." prof = self.util.get_profession(profession) if not prof: return f"Could not find profession {profession}" sql = """ SELECT p.name AS perk_name, MAX(pl.number) AS max_perk_level, SUM(plb.amount) AS buff_amount, plb.skill FROM perk p JOIN perk_prof pp ON p.id = pp.perk_id JOIN perk_level pl ON p.id = pl.perk_id JOIN perk_level_buffs plb ON pl.id = plb.perk_level_id WHERE pp.profession = ? AND pl.min_level <= ? GROUP BY p.name, plb.skill ORDER BY p.name""" data = self.db.query(sql, [prof, level]) blob = "" current_perk = "" for row in data: if row.perk_name != current_perk: blob += f"\n{row.perk_name} {row.max_perk_level}\n" current_perk = row.perk_name blob += f"{row.skill} {row.buff_amount:d}\n" return ChatBlob(f"Buff Perks for {level:d} {prof}", blob)