Initial Release of IGNCore version 2.5
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
import os
|
||||
import pathlib
|
||||
|
||||
from core.chat_blob import ChatBlob
|
||||
from core.command_param_types import Any
|
||||
from core.decorators import instance, command
|
||||
|
||||
|
||||
@instance()
|
||||
class InfoController:
|
||||
FILE_EXT = ".txt"
|
||||
CUSTOM_DATA_DIRECTORY = "./data/info"
|
||||
|
||||
def __init__(self):
|
||||
self.paths = []
|
||||
self.paths.append(os.path.dirname(os.path.realpath(__file__)) + os.sep + "info")
|
||||
self.paths.append(self.CUSTOM_DATA_DIRECTORY)
|
||||
|
||||
def inject(self, registry):
|
||||
self.text = registry.get_instance("text")
|
||||
self.command_alias_service = registry.get_instance("command_alias_service")
|
||||
|
||||
def start(self):
|
||||
self.command_alias_service.add_alias("guides", "info")
|
||||
self.command_alias_service.add_alias("breed", "info breed")
|
||||
self.command_alias_service.add_alias("healdelta", "info healdelta")
|
||||
self.command_alias_service.add_alias("nanodelta", "info nanodelta")
|
||||
self.command_alias_service.add_alias("lag", "info lag")
|
||||
self.command_alias_service.add_alias("stats", "info stats")
|
||||
self.command_alias_service.add_alias("light", "info light")
|
||||
self.command_alias_service.add_alias("doja", "info doja")
|
||||
|
||||
pathlib.Path(self.CUSTOM_DATA_DIRECTORY).mkdir(parents=True, exist_ok=True)
|
||||
|
||||
@command(command="info", params=[], access_level="member",
|
||||
description="Show the list of info topics")
|
||||
def info_list_cmd(self, _):
|
||||
topics = self.get_all_topics()
|
||||
|
||||
blob = ""
|
||||
for topic in topics:
|
||||
blob += self.text.make_tellcmd(topic, "info " + topic) + "\n"
|
||||
|
||||
return ChatBlob("Info Topics (%d)" % len(topics), blob)
|
||||
|
||||
@command(command="info", params=[Any("topic")], access_level="member",
|
||||
description="Show the info topic details")
|
||||
def info_show_cmd(self, _, topic_name):
|
||||
topic = self.get_topic_info(topic_name)
|
||||
|
||||
if topic:
|
||||
return ChatBlob(topic_name.capitalize(), topic)
|
||||
else:
|
||||
return "Could not find info topic <highlight>%s</highlight>." % topic_name
|
||||
|
||||
def register_path(self, path):
|
||||
self.paths.append(path)
|
||||
|
||||
def get_topic_info(self, name):
|
||||
name = name.lower()
|
||||
for base in reversed(self.paths):
|
||||
file_path = base + os.sep + name + self.FILE_EXT
|
||||
try:
|
||||
with open(file_path, mode="r", encoding="UTF-8") as f:
|
||||
return f.read()
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
return None
|
||||
|
||||
def get_all_topics(self):
|
||||
topics = []
|
||||
for base in reversed(self.paths):
|
||||
topics += [f[:-len(self.FILE_EXT)] for f in os.listdir(base) if f.endswith(self.FILE_EXT)]
|
||||
return sorted(set(topics))
|
||||
Reference in New Issue
Block a user