-> !wants
-> !orgs info
-> special cmd's
-> !assist
-> "afk" for players without active account
-> !loot add <item_ref> <count> => nolonger breaks !account
Changes:
-> grouped !tara, !gaunt, .. into !wb
-> Display the most recent news entry on logon (default: enabled)
-> improved grouping of !items
-> Added the option to authentificate WS connections (Datanet module). This is used in special cases, where the Websocket Server requires the clien tto authentificate itself. (Server sends "#auth", client responds with the auth string)
-> Add main name to relaying (priv <-> org) [default: disabled]
-> Added logon/logoff messages back
-> restricted default access to "dangerous" commands to moderator
-> Added optional logging (Private Channel, Org Channel, Tells, ... disabled by default)

Rewrite of the Tower Module.
-> More verbosity, if enabled in config. by default, GAS and Hot timer only.
-> !hot displays currently hot (and in penalty) sites, and these which go hot in < 60 minutes
-> !attacks filterable by PF and Site
-> display current contract QL's grouped by org: !contracts (requires managed cache)
This commit is contained in:
2021-11-25 14:09:43 +01:00
parent 2d7ecf4883
commit 17c776faec
44 changed files with 1669 additions and 1249 deletions
+30 -7
View File
@@ -17,6 +17,7 @@ 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
@@ -41,8 +42,8 @@ class IgnCore:
self.dimension = None
self.last_timer_event = 0
self.start_time = int(time.time())
self.major_version = "IGNCore v2.7"
self.minor_version = "2"
self.major_version = "IGNCore v2.8"
self.minor_version = "0"
self.incoming_queue = FifoQueue()
self.mass_message_queue = None
self.conns = DictObject()
@@ -151,6 +152,15 @@ class IgnCore:
def start(self):
self.register_packet_handler(server_packets.PrivateMessage.id, self.handle_private_message, priority=40)
self.setting_service.register("core.logging", "log_tells", "false",
BooleanSettingType(),
"Should tells get logged to file")
self.setting_service.register("core.logging", "log_priv", "false",
BooleanSettingType(),
"Should the private channel get logged to file")
self.setting_service.register("core.logging", "log_org", "false",
BooleanSettingType(),
"Should the org channel get logged to file")
def connect(self, config):
conn = self.create_conn("main")
@@ -352,6 +362,13 @@ class IgnCore:
else:
color = self.setting_service.get("private_message_color").get_font_color() if add_color else ""
pages = self.get_text_pages(msg, self.setting_service.get("private_message_max_page_length").get_value())
if self.setting_service.get_value("log_tells") == "1":
if type(msg) == ChatBlob:
self.logger.log_tell('spam', '->', self.character_service.get_char_name(char_id),
f"[link]{msg.title}[/link]")
else:
self.logger.log_tell('spam', '->', self.character_service.get_char_name(char_id), msg)
for page in pages:
# self.logger.log_tell(conn_id, "To", self.character_service.get_char_name(char_id), page)
packet = client_packets.PrivateMessage(char_id, color + page, "\0")
@@ -376,18 +393,23 @@ class IgnCore:
DictObject({"private_channel_id": private_channel_id, "message": msg}))
def send_mass_message(self, char_id, msg, add_color=True, log_message=False):
# self.logger.log_tell('spam', 'To', self.character_service.get_char_name(char_id), msg)
if not char_id:
self.logger.warning("Could not send message to empty char_id")
if len(self.conns.items()) == 1:
self.send_private_message(char_id, msg, add_color, log_message)
else:
if self.setting_service.get_value("log_tells") == "1":
if type(msg) == ChatBlob:
self.logger.log_tell('spam', '->', self.character_service.get_char_name(char_id),
f"[link]{msg.title}[/link]")
else:
self.logger.log_tell('spam', '->', self.character_service.get_char_name(char_id), msg)
color = self.setting_service.get("private_message_color").get_font_color() if add_color else ""
pages = self.get_text_pages(msg, self.setting_service.get("private_message_max_page_length").get_value())
for page in pages:
if log_message:
self.logger.log_tell("spam", "To", self.character_service.get_char_name(char_id), page)
# if self.log_mass_tell().get_value():
# self.logger.log_tell("spam", "->", self.character_service.get_char_name(char_id), page)
if self.mass_message_queue:
packet = client_packets.PrivateMessage(char_id, color + page, "\0")
self.mass_message_queue.put(packet)
@@ -396,7 +418,8 @@ class IgnCore:
self.conns["main"].send_packet(packet)
def handle_private_message(self, conn: Conn, packet: server_packets.PrivateMessage):
# self.logger.log_tell(conn.id, "From", self.character_service.get_char_name(packet.char_id), packet.message)
if self.setting_service.get_value("log_tells") == "1":
self.logger.log_tell(conn.id, "<-", self.character_service.get_char_name(packet.char_id), packet.message)
self.event_service.fire_event(self.PRIVATE_MSG_EVENT, packet)
def get_text_pages(self, msg, max_page_length):