get rid of the MessageDistributor module... & update discord, to work with API v10

Added discord commands (issue: as they're running over the event hub, they're processed on the same track as other events. => activity ingame triggers the next run; otherwise there's some delay for responses)
relay is a standard module now.
This commit is contained in:
2022-04-15 17:05:30 +02:00
parent fd84d82af2
commit a3a26f2ba4
32 changed files with 1036 additions and 729 deletions
+2 -1
View File
@@ -1,9 +1,10 @@
class ChatBlob:
def __init__(self, title, msg, prefix="", suffix=""):
def __init__(self, title, msg, prefix="", suffix="", embed=True):
self.title = title
self.msg = msg.strip("\n")
self.page_prefix = prefix
self.page_postfix = suffix
self.embed = embed
def __str__(self):
return f"ChatBlob('{self.title}', '{self.msg}')"
+26 -16
View File
@@ -66,6 +66,10 @@ class CommandService:
self.register_command_channel("Private Message", self.PRIVATE_MESSAGE_CHANNEL)
self.register_command_channel("Org Channel", self.ORG_CHANNEL)
self.register_command_channel("Private Channel", self.PRIVATE_CHANNEL)
self.relay_hub_service.register_message_source("tell_logger")
self.relay_hub_service.register_message_source("system_logger")
self.relay_hub_service.register_message_source("access_denied_logger")
self.relay_hub_service.register_message_source("member_logger")
def start(self):
access_levels = {}
@@ -205,16 +209,10 @@ class CommandService:
if not followup:
if channel == "msg":
if message.lower().startswith("mail"):
self.relay_hub_service.send_message("tell_logger", char_id, "mail |usage hidden|",
"mail |usage hidden|")
self.relay_hub_service.send_message("tell_logger", DictObject({'char_id': char_id, 'name': self.character_service.resolve_char_to_name(char_id)}), f"[FROM] {self.character_service.resolve_char_to_name(char_id)}: mail |usage hidden|",
f"[FROM] {self.character_service.resolve_char_to_name(char_id)}: mail |usage hidden|")
else:
self.relay_hub_service.send_message("tell_logger", char_id, message, message)
else:
if message.lower().startswith("mail"):
self.relay_hub_service.send_message("dc_relay_log", char_id, "mail |usage hidden|",
"mail |usage hidden|")
else:
self.relay_hub_service.send_message("dc_relay_log", char_id, message, message)
self.relay_hub_service.send_message("tell_logger", DictObject({'char_id': char_id, 'name': self.character_service.resolve_char_to_name(char_id)}), f"[FROM] {self.character_service.resolve_char_to_name(char_id)}: {message}", f"[FROM] {self.character_service.resolve_char_to_name(char_id)}: {message}")
# message = html.unescape(message)
command_str, command_args = self.get_command_parts(message)
@@ -253,12 +251,15 @@ class CommandService:
self.relay_hub_service.send_message("access_denied_logger", sender,
f"[ERROR] {sender.name}: {message}",
f"[ERROR] {sender.name}: {message}")
self.bot.send_mass_message(char_id, self.getresp("global", "error_processing"))
if channel == "discord":
reply(self.getresp("global", "error_processing"))
else:
self.bot.send_mass_message(char_id, self.getresp("global", "error_processing"))
# record command usage
self.usage_service.add_usage(command_str, handler["callback"].__qualname__, char_id, channel)
else:
self.access_denied_response(message, sender, cmd_config, reply)
self.access_denied_response(message, sender, cmd_config, reply, channel)
else:
# handlers were found, but no handler regex matched
help_text = self.get_help_text(char_id, command_str, channel)
@@ -266,7 +267,7 @@ class CommandService:
reply(self.format_help_text(command_str, help_text))
else:
# the command is known, but no help is returned, therefore user does not have access to command
self.access_denied_response(message, sender, cmd_config, reply)
self.access_denied_response(message, sender, cmd_config, reply, channel)
# if access_level['label'] != "all":
# self.relay_hub_service.send_message("access_denied_logger", sender,
# f"[DENIED] {sender.name}: {message}",
@@ -280,20 +281,29 @@ class CommandService:
0)
self.relay_hub_service.send_message("access_denied_logger", sender, f"[ERROR] {sender.name}: {message}",
f"[ERROR] {sender.name}: {message}")
self.bot.send_mass_message(char_id, self.getresp("global", "error_processing"))
if channel == "discord":
reply(self.getresp("global", "error_processing"))
else:
self.bot.send_mass_message(char_id, self.getresp("global", "error_processing"))
def handle_unknown_command(self, command_str, command_args, channel, sender, reply):
self.relay_hub_service.send_message("access_denied_logger", sender,
f"[UNKNOWN] {sender.name}: {command_str} {command_args}",
f"[UNKNOWN] {sender.name}: {command_str} {command_args}")
if sender.access_level["label"] != "all":
self.bot.send_mass_message(sender.char_id, self.getresp("global", "unknown_command", {"cmd": command_str}))
if channel == "discord":
self.getresp("global", "unknown_command", {"cmd": command_str})
else:
self.bot.send_mass_message(sender.char_id, self.getresp("global", "unknown_command", {"cmd": command_str}))
def access_denied_response(self, message, sender, cmd_config, reply):
def access_denied_response(self, message, sender, cmd_config, reply, channel):
self.relay_hub_service.send_message("access_denied_logger", sender, f"[DENIED] {sender.name}: {message}",
f"[DENIED] {sender.name}: {message}")
if sender.access_level["label"] != "all":
self.bot.send_mass_message(sender.char_id, self.getresp("global", "access_denied"))
if channel == "discord":
reply(self.getresp("global", "access_denied"))
else:
self.bot.send_mass_message(sender.char_id, self.getresp("global", "access_denied"))
def get_command_parts(self, message):
parts = message.split(" ", 1)
+2 -2
View File
@@ -53,8 +53,8 @@ class Conn(Bot):
if num_messages > 30:
self.logger.warning("automatically clearing outgoing message queue (%d messages)" % num_messages)
self.packet_queue.clear()
elif num_messages > 10:
self.logger.warning("%d messages in outgoing message queue" % num_messages)
# elif num_messages > 10:
# self.logger.warning("%d messages in outgoing message queue" % num_messages)
def __str__(self):
return self.id
+17 -9
View File
@@ -1,6 +1,7 @@
import inspect
import threading
import time
import typing
from conf.config import BotConfig
from core.aochat import server_packets, client_packets
@@ -11,15 +12,19 @@ from core.conn import Conn
from core.db import DB
from core.decorators import instance
from core.dict_object import DictObject
from core.fifo_queue import FifoQueue
from core.job_scheduler import JobScheduler
from core.logger import Logger
from core.lookup.character_service import CharacterService
from core.public_channel_service import PublicChannelService
from core.setting_service import SettingService
from core.setting_types import BooleanSettingType
from core.text import Text
from modules.core.accounting.services.access_service import AccessService
from core.setting_types import BooleanSettingType
if typing.TYPE_CHECKING:
from core.lookup.character_service import CharacterService
from core.public_channel_service import PublicChannelService
from core.setting_service import SettingService
from modules.core.accounting.services.access_service import AccessService
from core.event_service import EventService
@instance("bot")
@@ -42,8 +47,8 @@ class IgnCore:
self.dimension = None
self.last_timer_event = 0
self.start_time = int(time.time())
self.major_version = "IGNCore v2.8"
self.minor_version = "4"
self.major_version = "IGNCore v2.9"
self.minor_version = "0"
self.incoming_queue = FifoQueue()
self.mass_message_queue = None
self.conns = DictObject()
@@ -55,7 +60,7 @@ class IgnCore:
self.text: Text = registry.get_instance("text")
self.setting_service: SettingService = registry.get_instance("setting_service")
self.access_service: AccessService = registry.get_instance("access_service")
self.event_service = registry.get_instance("event_service")
self.event_service: EventService = registry.get_instance("event_service")
self.job_scheduler: JobScheduler = registry.get_instance("job_scheduler")
self.command_service = registry.get_instance("command_service")
@@ -113,7 +118,7 @@ class IgnCore:
"created_at INT NOT NULL, "
"INDEX `command` (`command`) USING BTREE, "
"INDEX `char_id` (`char_id`) USING BTREE, "
"INDEX `channel` (`channel`) USING BTREE) ENGINE MEMORY")
"INDEX `channel` (`channel`) USING BTREE)")
# self.db.exec("UPDATE db_version SET verified = 0")
self.db.exec("UPDATE db_version SET verified = 1 WHERE file = 'db_version'")
@@ -440,5 +445,8 @@ class IgnCore:
def get_char_name(self):
return self.conns["main"].char_name
def get_conn(self):
return self.conns["main"]
def get_char_id(self):
return self.conns["main"].char_id
+2
View File
@@ -32,6 +32,8 @@ class Logger:
def format_chat_message(self, msg):
msg = re.sub(r"<a\s+href=\".+?[^\\]\">", "[link]", msg, flags=re.UNICODE | re.DOTALL)
msg = re.sub(r"<a\s+href='.+?'>", "[link]", msg, flags=re.UNICODE | re.DOTALL)
msg = re.sub(r"<a\s+href=user://\w+?>(\w+?)</a>", "\1", msg, flags=re.UNICODE | re.DOTALL)
msg = re.sub(r"<font\s+.+?>", "", msg, flags=re.UNICODE)
msg = re.sub("</font>", "", msg, flags=re.UNICODE)
msg = re.sub("</a>", "[/link]", msg, flags=re.UNICODE)
+3 -1
View File
@@ -50,7 +50,9 @@ class MessageHubService:
f"Incorrect number of arguments for handler '{callback.__module__}.{callback.__name__}()'")
if destination in self.hub:
raise Exception(f"Message hub destination '{destination}' already subscribed")
self.logger.error(f"Message hub destination '{destination}' already subscribed")
return
# raise Exception(f"Message hub destination '{destination}' already subscribed")
for source in default_sources:
if source not in self.sources:
+1
View File
@@ -39,6 +39,7 @@ class SettingService:
if module.split(".")[0] not in self.bot.modules:
return
setting.set_name(name)
setting.module = module
setting.set_description(description)
setting.set_extended_description(extended_description)
+1
View File
@@ -9,6 +9,7 @@ class SettingType:
def __init__(self):
self.setting_service = Registry.get_instance("setting_service")
self.name = None
self.module = ""
def set_name(self, name):
self.name = name