Initial Release of IGNCore version 2.5

This commit is contained in:
2021-08-09 13:18:56 +02:00
commit a83d98c47e
910 changed files with 224171 additions and 0 deletions
+134
View File
@@ -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)