diff --git a/README.md b/README.md index bd8860f..6c43f88 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ # IRC-DEFENDER +![Static Badge](https://img.shields.io/badge/UnrealIRCd-6.2.2%20or%20later-green) +![Static Badge](https://img.shields.io/badge/Python3-3.10%20or%20later-green) +![Dynamic JSON Badge](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fraw.githubusercontent.com%2Fadator85%2FIRC_DEFENDER_MODULES%2Fmain%2Fversion.json&query=version&label=Current%20Version) +![Static Badge](https://img.shields.io/badge/Maintained-Yes-green) + Defender est un service IRC basé sur la sécurité des réseaux IRC ( UnrealIRCD ) Il permet d'ajouter une sécurité supplémentaire pour vérifier les users connectés au réseau en demandant aux user un code de validation. @@ -9,9 +14,9 @@ Il permet aux opérateurs de gérer efficacement un canal, tout en offrant aux u Kick: Expulser un utilisateur du canal. Ban: Interdire définitivement l'accès au canal. Unban: Lever une interdiction. - Op/Deop: Attribuer ou retirer les droits d'opérateur. + Op/Deop/Opall/Deopall: Attribuer ou retirer les droits d'opérateur. Halfop/Dehalfop: Attribuer ou retirer les droits - Voice/Devoice: Attribuer ou retirer les droits de voix. + Voice/Devoice/VoiceAll/DevoiceAll: Attribuer ou retirer les droits de voix. Système de quarantaine: Mise en quarantaine: Isoler temporairement un utilisateur dans un canal privé. @@ -25,6 +30,7 @@ Il permet aux opérateurs de gérer efficacement un canal, tout en offrant aux u Prérequis: - Système d'exploitation Linux (Windows non supporté) + - Un server UnrealIRCD corréctement configuré - Python version 3.10 ou supérieure Bash: diff --git a/core/connection.py b/core/connection.py index e411019..db4ff57 100644 --- a/core/connection.py +++ b/core/connection.py @@ -1,4 +1,4 @@ -import socket, ssl, time +import socket, ssl from ssl import SSLSocket from core.loadConf import Config from core.Model import Clones @@ -186,15 +186,17 @@ class Connection: nickname = fullname.split('!')[0].replace(':','') if nickname == self.Config.SERVICE_NICKNAME: command = str(response[3]).replace(':','') + if command == 'KILL': self.send2socket(f'QUIT :Thanks and goodbye') self.signal = self.currentCloneObject.alive + if command == 'JOIN': channel_to_join = str(response[4]) self.send2socket(f"JOIN {channel_to_join}") + if command == 'SAY': clone_channel = str(response[4]) - message = [] for i in range(5, len(response)): message.append(response[i]) diff --git a/mods/mod_command.py b/mods/mod_command.py index 38a3dae..d86720e 100644 --- a/mods/mod_command.py +++ b/mods/mod_command.py @@ -35,7 +35,9 @@ class Command(): # Create module commands (Mandatory) self.commands_level = { 1: ['join', 'part'], - 2: ['owner', 'deowner', 'op', 'deop', 'halfop', 'dehalfop', 'voice', 'devoice', 'opall', 'deopall', 'devoiceall', 'voiceall', 'ban', 'unban','kick', 'kickban', 'umode'] + 2: ['owner', 'deowner', 'op', 'deop', 'halfop', 'dehalfop', 'voice', + 'devoice', 'opall', 'deopall', 'devoiceall', 'voiceall', 'ban', + 'unban','kick', 'kickban', 'umode', 'svsjoin', 'svspart', 'svsnick'] } # Init the module @@ -581,8 +583,62 @@ class Command(): nickname = str(cmd[1]) umode = str(cmd[2]) - self.send2socket(f':{dnickname} SVSMODE {nickname} {umode}') + self.Irc.send2socket(f':{dnickname} SVSMODE {nickname} {umode}') except KeyError as ke: self.Base.logs.error(ke) except Exception as err: - self.Logs.warning(f'Unknown Error: {str(err)}') \ No newline at end of file + self.Logs.warning(f'Unknown Error: {str(err)}') + + case 'svsjoin': + try: + # .svsjoin nickname #channel + nickname = str(cmd[1]) + channel = str(cmd[2]) + if len(cmd) != 3: + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : /msg {dnickname} SVSJOIN nickname #channel') + return None + + self.Irc.send2socket(f':{self.Config.SERVEUR_ID} SVSJOIN {nickname} {channel}') + except KeyError as ke: + self.Base.logs.error(ke) + except Exception as err: + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : /msg {dnickname} SVSJOIN nickname #channel') + self.Logs.warning(f'Unknown Error: {str(err)}') + + case 'svspart': + try: + # .svspart nickname #channel + nickname = str(cmd[1]) + channel = str(cmd[2]) + if len(cmd) != 3: + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : /msg {dnickname} SVSPART nickname #channel') + return None + + self.Irc.send2socket(f':{self.Config.SERVEUR_ID} SVSPART {nickname} {channel}') + except KeyError as ke: + self.Base.logs.error(ke) + except Exception as err: + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : /msg {dnickname} SVSPART nickname #channel') + self.Logs.warning(f'Unknown Error: {str(err)}') + + case 'svsnick': + try: + # .svsnick nickname newnickname + nickname = str(cmd[1]) + newnickname = str(cmd[2]) + unixtime = self.Base.get_unixtime() + + if self.User.get_nickname(nickname) is None: + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : This nickname do not exist') + return None + + if len(cmd) != 3: + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : /msg {dnickname} SVSNICK nickname newnickname') + return None + + self.Irc.send2socket(f':{self.Config.SERVEUR_ID} SVSNICK {nickname} {newnickname} {unixtime}') + except KeyError as ke: + self.Base.logs.error(ke) + except Exception as err: + self.Irc.send2socket(f':{dnickname} NOTICE {fromuser} : /msg {dnickname} SVSNICK nickname newnickname') + self.Logs.warning(f'Unknown Error: {str(err)}') diff --git a/version.json b/version.json index c5baee8..fbf0de9 100644 --- a/version.json +++ b/version.json @@ -1,3 +1,3 @@ { - "version": "5.1.6" + "version": "5.1.7" } \ No newline at end of file