diff --git a/core/classes/protocols/inspircd.py b/core/classes/protocols/inspircd.py index e628a14..09d4bf1 100644 --- a/core/classes/protocols/inspircd.py +++ b/core/classes/protocols/inspircd.py @@ -8,7 +8,7 @@ from core.classes.protocols.interface import IProtocol from core.utils import tr if TYPE_CHECKING: - from core.definition import MSasl, MClient + from core.definition import MSasl, MClient, MUser, MChannel class Inspircd(IProtocol): @@ -1257,7 +1257,7 @@ class Inspircd(IProtocol): } return response - def parse_privmsg(self, server_msg: list[str]) -> dict[str, str]: + def parse_privmsg(self, server_msg: list[str]) -> tuple[Optional['MUser'], Optional['MUser'], Optional['MChannel'], str]: """Parse PRIVMSG message. >>> [':97KAAAAAE', 'PRIVMSG', '#welcome', ':This', 'is', 'my', 'public', 'message'] >>> [':97KAAAAAF', 'PRIVMSG', '98KAAAAAB', ':My','Message','...'] @@ -1272,13 +1272,15 @@ class Inspircd(IProtocol): if scopy[0].startswith('@'): scopy.pop(0) - response = { - "uid_sender": scopy[0].replace(':', ''), - "uid_reciever": self._Irc.User.get_uid(scopy[2]), - "channel": scopy[2] if self._Irc.Channel.is_valid_channel(scopy[2]) else None, - "message": " ".join(scopy[3:]) - } - return response + sender = self._User.get_user(self._Utils.clean_uid(scopy[0])) + reciever = self._User.get_user(self._Utils.clean_uid(scopy[2])) + channel = self._Channel.get_channel(scopy[2]) if self._Channel.is_valid_channel(scopy[2]) else None + + tmp_message = scopy[3:] + tmp_message = tmp_message[0].replace(':', '') + message = ' '.join(tmp_message) + + return sender, reciever, channel, message # ------------------------------------------------------------------------ diff --git a/core/classes/protocols/interface.py b/core/classes/protocols/interface.py index e5ab6b6..9de8f54 100644 --- a/core/classes/protocols/interface.py +++ b/core/classes/protocols/interface.py @@ -3,7 +3,7 @@ from typing import Optional, TYPE_CHECKING from core.classes.protocols.command_handler import CommandHandler if TYPE_CHECKING: - from core.definition import MClient, MSasl + from core.definition import MClient, MSasl, MUser, MChannel from core.irc import Irc class IProtocol(ABC): @@ -21,6 +21,8 @@ class IProtocol(ABC): self._Settings = uplink.Base.Settings self._Utils = uplink.Loader.Utils self._Logs = uplink.Loader.Logs + self._User = uplink.User + self._Channel = uplink.Channel self.Handler = CommandHandler(uplink.Loader) @@ -348,7 +350,7 @@ class IProtocol(ABC): """ @abstractmethod - def parse_privmsg(self, serverMsg: list[str]) -> dict[str, str]: + def parse_privmsg(self, serverMsg: list[str]) -> tuple[Optional['MUser'], Optional['MUser'], Optional['MChannel'], str]: """Parse PRIVMSG message. >>> [':97KAAAAAE', 'PRIVMSG', '#welcome', ':This', 'is', 'my', 'public', 'message'] @@ -356,14 +358,7 @@ class IProtocol(ABC): serverMsg (list[str]): The server message to parse Returns: - dict[str, str]: The response as dictionary. - ```python - response = { - "uid": '97KAAAAAE', - "channel": '#welcome', - "message": 'This is my public message' - } - ``` + tuple[MUser(Sender), MUser(Reciever), MChannel, str]: Sender user model, reciever user model, Channel model, messgae. """ # ------------------------------------------------------------------------ diff --git a/core/classes/protocols/unreal6.py b/core/classes/protocols/unreal6.py index f68a817..3658188 100644 --- a/core/classes/protocols/unreal6.py +++ b/core/classes/protocols/unreal6.py @@ -8,7 +8,8 @@ from core.utils import tr if TYPE_CHECKING: from core.classes.sasl import Sasl - from core.definition import MClient, MSasl + from core.definition import MClient, MSasl, MUser, MChannel + from core.loader import Loader class Unrealircd6(IProtocol): @@ -701,7 +702,7 @@ class Unrealircd6(IProtocol): } return response - def parse_privmsg(self, serverMsg: list[str]) -> dict[str, str]: + def parse_privmsg(self, serverMsg: list[str]) -> tuple[Optional['MUser'], Optional['MUser'], Optional['MChannel'], str]: """Parse PRIVMSG message. >>> ['@....', ':97KAAAAAE', 'PRIVMSG', '#welcome', ':This', 'is', 'my', 'public', 'message'] >>> [':97KAAAAAF', 'PRIVMSG', '98KAAAAAB', ':sasa'] @@ -710,19 +711,21 @@ class Unrealircd6(IProtocol): serverMsg (list[str]): The server message to parse Returns: - dict[str, str]: The response as dictionary. + tuple[MUser(Sender), MUser(Reciever), MChannel, str]: Sender user model, reciever user model, Channel model, messgae . """ scopy = serverMsg.copy() if scopy[0].startswith('@'): scopy.pop(0) - response = { - "uid_sender": scopy[0].replace(':', ''), - "uid_reciever": self._Irc.User.get_uid(scopy[2]), - "channel": scopy[2] if self._Irc.Channel.is_valid_channel(scopy[2]) else None, - "message": " ".join(scopy[3:]) - } - return response + sender = self._User.get_user(self._Utils.clean_uid(scopy[0])) + reciever = self._User.get_user(self._Utils.clean_uid(scopy[2])) + channel = self._Channel.get_channel(scopy[2]) if self._Channel.is_valid_channel(scopy[2]) else None + + tmp_message = scopy[3:] + tmp_message = tmp_message[0].replace(':', '') + message = ' '.join(tmp_message) + + return sender, reciever, channel, message ##################### # HANDLE EVENTS # diff --git a/mods/clone/utils.py b/mods/clone/utils.py index 495252e..b371ea1 100644 --- a/mods/clone/utils.py +++ b/mods/clone/utils.py @@ -176,15 +176,13 @@ def create_new_clone(uplink: 'Clone', faker_instance: 'Faker', group: str = 'Def def handle_on_privmsg(uplink: 'Clone', srvmsg: list[str]) -> None: - parser = uplink.Protocol.parse_privmsg(srvmsg) - uid_sender = uplink.Irc.Utils.clean_uid(parser.get('uid_sender', None)) - senderObj = uplink.User.get_user(uid_sender) + senderObj, recieverObj, channel, message = uplink.Protocol.parse_privmsg(srvmsg) if senderObj is not None: if senderObj.hostname in uplink.Config.CLONE_LOG_HOST_EXEMPT: return - senderMsg = parser.get('message', None) - clone_obj = uplink.Clone.get_clone(parser.get('uid_reciever', None)) + senderMsg = message + clone_obj = recieverObj if clone_obj is None: return diff --git a/mods/defender/utils.py b/mods/defender/utils.py index 826e636..d9e9be4 100644 --- a/mods/defender/utils.py +++ b/mods/defender/utils.py @@ -62,13 +62,10 @@ def handle_on_mode(uplink: 'Defender', srvmsg: list[str]): def handle_on_privmsg(uplink: 'Defender', srvmsg: list[str]): # ['@mtag....',':python', 'PRIVMSG', '#defender', ':zefzefzregreg', 'regg', 'aerg'] - sender = srvmsg[1].replace(':','') - channel = srvmsg[3] - message = srvmsg[4:] - message[0] = message[0].replace(':', '') - if uplink.ModConfig.sentinel == 1 and srvmsg[3] != uplink.Config.SERVICE_CHANLOG: - uplink.Protocol.send_priv_msg(uplink.Config.SERVICE_NICKNAME, f"{sender} say on {channel}: {' '.join(message)}", uplink.Config.SERVICE_CHANLOG) + sender, reciever, channel, message = uplink.Protocol.parse_privmsg(srvmsg) + if uplink.ModConfig.sentinel == 1 and channel.name != uplink.Config.SERVICE_CHANLOG: + uplink.Protocol.send_priv_msg(uplink.Config.SERVICE_NICKNAME, f"{sender.nickname} say on {channel.name}: {' '.join(message)}", uplink.Config.SERVICE_CHANLOG) action_on_flood(uplink, srvmsg) return None