Initial Release of IGNCore version 2.5
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
import html
|
||||
import os
|
||||
import platform
|
||||
import sys
|
||||
import time
|
||||
|
||||
import psutil
|
||||
|
||||
from core.chat_blob import ChatBlob
|
||||
from core.command_param_types import Any, Character
|
||||
from core.decorators import instance, command
|
||||
from core.util import Util
|
||||
|
||||
|
||||
@instance()
|
||||
class UtilController:
|
||||
def inject(self, registry):
|
||||
self.bot = registry.get_instance("bot")
|
||||
self.db = registry.get_instance("db")
|
||||
self.util: Util = registry.get_instance("util")
|
||||
self.command_service = registry.get_instance("command_service")
|
||||
self.buddy_service = registry.get_instance("buddy_service")
|
||||
self.access_service = registry.get_instance("access_service")
|
||||
self.event_service = registry.get_instance("event_service")
|
||||
self.public_channel_service = registry.get_instance("public_channel_service")
|
||||
self.getresp = registry.get_instance("translation_service").get_response
|
||||
|
||||
@command(command="checkaccess", params=[Character("character")], access_level="moderator",
|
||||
description="Check access level for a character", sub_command="other")
|
||||
def checkaccess_other_cmd(self, _, char):
|
||||
if not char.char_id:
|
||||
return self.getresp("global", "char_not_found", {"char": char.name})
|
||||
|
||||
return self.getresp("module/system", "check_access",
|
||||
{"char": char.name,
|
||||
"rank_main": char.access_level["label"]})
|
||||
|
||||
@command(command="checkaccess", params=[], access_level="member",
|
||||
description="Check your access level")
|
||||
def checkaccess_cmd(self, request):
|
||||
char = request.sender
|
||||
|
||||
return self.getresp("module/system", "check_access",
|
||||
{"char": char.name,
|
||||
"rank_main": char.access_level["label"]})
|
||||
|
||||
@command(command="macro", params=[Any("command1|command2|command3...")], access_level="member",
|
||||
description="Execute multiple commands at once")
|
||||
def macro_cmd(self, request, commands):
|
||||
commands = commands.split("|")
|
||||
for command_str in commands:
|
||||
self.command_service.process_command(
|
||||
self.command_service.trim_command_symbol(command_str),
|
||||
request.channel,
|
||||
request.sender.char_id,
|
||||
request.reply,
|
||||
request.conn)
|
||||
|
||||
@command(command="echo", params=[Any("message")], access_level="member",
|
||||
description="Echo back a message")
|
||||
def echo_cmd(self, _, message):
|
||||
return html.escape(message)
|
||||
|
||||
@command(command="showcommand", params=[Character("character"), Any("message")], access_level="admin",
|
||||
description="Show command output to another character")
|
||||
def showcommand_cmd(self, request, char, command_str):
|
||||
if not char.char_id:
|
||||
return self.getresp("global", "char_not_found", {"char": char.name})
|
||||
|
||||
self.bot.send_private_message(char.char_id, self.getresp("module/system", "show_output_target",
|
||||
{"sender": request.sender.name,
|
||||
"cmd": command_str}))
|
||||
|
||||
self.command_service.process_command(
|
||||
self.command_service.trim_command_symbol(command_str),
|
||||
request.channel,
|
||||
request.sender.char_id,
|
||||
lambda msg: self.bot.send_private_message(char.char_id, msg),
|
||||
request.conn)
|
||||
|
||||
return self.getresp("module/system", "show_output_self",
|
||||
{"target": char.name,
|
||||
"cmd": command_str})
|
||||
|
||||
@command(command="system", params=[], access_level="admin",
|
||||
description="Show system information")
|
||||
def system_cmd(self, _):
|
||||
pub_channels = ""
|
||||
event_types = ""
|
||||
access_levels = ""
|
||||
bots_connected = ""
|
||||
|
||||
for _id, conn in self.bot.conns.items():
|
||||
bots_connected += f"{_id} - {conn.char_name} ({conn.char_id})\n"
|
||||
|
||||
for channel_id, name in self.public_channel_service.get_all_public_channels().items():
|
||||
pub_channels += "%s - <highlight>%d</highlight>\n" % (name, channel_id)
|
||||
|
||||
for event_type in self.event_service.get_event_types():
|
||||
event_types += "%s\n" % event_type
|
||||
|
||||
for access_level in self.access_service.get_access_levels():
|
||||
access_levels += "%s (%d)\n" % (access_level["label"], access_level["level"])
|
||||
|
||||
blob = self.getresp("module/system", "status_blob", {
|
||||
"bot_ver": f"{self.bot.major_version}.{self.bot.minor_version}",
|
||||
"os_ver": platform.system() + " " + platform.release(),
|
||||
"python_ver": str(sys.version_info.major)
|
||||
+ "." + str(sys.version_info.minor)
|
||||
+ "." + str(sys.version_info.micro)
|
||||
+ "." + sys.version_info.releaselevel,
|
||||
"db_type": self.db.type if not self.db.MARIADB else f"{self.db.MARIADB} with "
|
||||
f"{self.db.pool_size} active connections",
|
||||
"mem_usage": self.util.format_number(psutil.Process(os.getpid()).memory_info().rss / 1024),
|
||||
"superadmin": "Not Set",
|
||||
"bl_used": self.buddy_service.get_buddy_list_size(),
|
||||
"bl_size": self.buddy_service.buddy_list_size,
|
||||
"uptime": self.util.time_to_readable(int(time.time()) - self.bot.start_time, max_levels=None),
|
||||
"dim": self.bot.dimension,
|
||||
"org_id": self.public_channel_service.org_id,
|
||||
"org_name": self.public_channel_service.org_name,
|
||||
"bots_connected": bots_connected,
|
||||
"pub_channels": pub_channels,
|
||||
"event_types": event_types,
|
||||
"access_levels": access_levels
|
||||
})
|
||||
|
||||
return ChatBlob(self.getresp("module/system", "status_title"), blob)
|
||||
|
||||
@command(command="htmldecode", params=[Any("command")], access_level="member",
|
||||
description="Decode html entities from a command before passing to the bot for execution")
|
||||
def htmldecode_cmd(self, request, command_str):
|
||||
self.command_service.process_command(html.unescape(command_str), request.channel, request.sender.char_id,
|
||||
request.reply, request.conn)
|
||||
Reference in New Issue
Block a user