mirror of
https://github.com/iio612/DEFENDER.git
synced 2026-02-14 11:44:23 +00:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
36e3835e6c | ||
|
|
9bfe5925f8 | ||
|
|
2c78025bfb | ||
|
|
c3187e81dd | ||
|
|
979ba40c05 | ||
|
|
f0c0a2d06a | ||
|
|
2be6ece27f | ||
|
|
6801c981ab | ||
|
|
fd88df1017 | ||
|
|
ad5b7ffbf2 | ||
|
|
2b7f1d8bf3 | ||
|
|
cea69c1580 | ||
|
|
f5ff9259e8 |
24
core/base.py
24
core/base.py
@@ -48,7 +48,6 @@ class Base:
|
|||||||
with open(version_filename, 'r') as version_data:
|
with open(version_filename, 'r') as version_data:
|
||||||
current_version:dict[str, str] = json.load(version_data)
|
current_version:dict[str, str] = json.load(version_data)
|
||||||
|
|
||||||
# self.DEFENDER_VERSION = current_version["version"]
|
|
||||||
self.Config.current_version = current_version['version']
|
self.Config.current_version = current_version['version']
|
||||||
|
|
||||||
return None
|
return None
|
||||||
@@ -81,6 +80,14 @@ class Base:
|
|||||||
self.logs.warning(f'Github not available to fetch latest version')
|
self.logs.warning(f'Github not available to fetch latest version')
|
||||||
|
|
||||||
def check_for_new_version(self, online:bool) -> bool:
|
def check_for_new_version(self, online:bool) -> bool:
|
||||||
|
"""Check if there is a new version available
|
||||||
|
|
||||||
|
Args:
|
||||||
|
online (bool): True if you want to get the version from github (main branch)
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True if there is a new version available
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
self.logs.debug(f'Checking for a new service version')
|
self.logs.debug(f'Checking for a new service version')
|
||||||
|
|
||||||
@@ -229,6 +236,19 @@ class Base:
|
|||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def db_update_module(self, user_cmd: str, module_name: str) -> None:
|
||||||
|
"""Modifie la date et le user qui a rechargé le module
|
||||||
|
|
||||||
|
Args:
|
||||||
|
user_cmd (str): le user qui a rechargé le module
|
||||||
|
module_name (str): le module a rechargé
|
||||||
|
"""
|
||||||
|
update_cmd_query = f"UPDATE {self.Config.table_module} SET datetime = :datetime, user = :user WHERE module_name = :module_name"
|
||||||
|
mes_donnees = {'datetime': self.get_datetime(), 'user': user_cmd, 'module_name': module_name}
|
||||||
|
self.db_execute_query(update_cmd_query, mes_donnees)
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
def db_delete_module(self, module_name:str) -> None:
|
def db_delete_module(self, module_name:str) -> None:
|
||||||
"""Supprime les modules de la base de données
|
"""Supprime les modules de la base de données
|
||||||
|
|
||||||
@@ -591,7 +611,7 @@ class Base:
|
|||||||
)
|
)
|
||||||
'''
|
'''
|
||||||
|
|
||||||
table_core_channel = '''CREATE TABLE IF NOT EXISTS core_channel (
|
table_core_channel = f'''CREATE TABLE IF NOT EXISTS {self.Config.table_channel} (
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
datetime TEXT,
|
datetime TEXT,
|
||||||
module_name TEXT,
|
module_name TEXT,
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import os
|
import os
|
||||||
from sys import exit
|
import json
|
||||||
|
from sys import exit, prefix
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from subprocess import check_call, run, CalledProcessError, PIPE
|
from subprocess import check_call, run, CalledProcessError, PIPE, check_output
|
||||||
from platform import python_version, python_version_tuple
|
from platform import python_version, python_version_tuple
|
||||||
|
|
||||||
class Install:
|
class Install:
|
||||||
@@ -24,6 +25,13 @@ class Install:
|
|||||||
venv_pip_executable: str
|
venv_pip_executable: str
|
||||||
venv_python_executable: str
|
venv_python_executable: str
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Package:
|
||||||
|
name: str = None
|
||||||
|
version: str = None
|
||||||
|
|
||||||
|
DB_PACKAGES: list[Package] = []
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
|
||||||
self.set_configuration()
|
self.set_configuration()
|
||||||
@@ -31,6 +39,8 @@ class Install:
|
|||||||
if self.skip_install:
|
if self.skip_install:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
self.check_packages_version()
|
||||||
|
|
||||||
# Sinon tester les dependances python et les installer avec pip
|
# Sinon tester les dependances python et les installer avec pip
|
||||||
if self.do_install():
|
if self.do_install():
|
||||||
|
|
||||||
@@ -75,7 +85,7 @@ class Install:
|
|||||||
|
|
||||||
if not os.path.exists(os.path.join(self.config.defender_install_folder, 'core', 'configuration.json')):
|
if not os.path.exists(os.path.join(self.config.defender_install_folder, 'core', 'configuration.json')):
|
||||||
# If configuration file do not exist
|
# If configuration file do not exist
|
||||||
exit("/!\\ Configuration file (configuration.json) doesn't exist /!\\")
|
exit("/!\\ Configuration file (core/configuration.json) doesn't exist /!\\")
|
||||||
|
|
||||||
# Exclude Windows OS from the installation
|
# Exclude Windows OS from the installation
|
||||||
if os.name == 'nt':
|
if os.name == 'nt':
|
||||||
@@ -91,7 +101,7 @@ class Install:
|
|||||||
def is_root(self) -> bool:
|
def is_root(self) -> bool:
|
||||||
|
|
||||||
if os.geteuid() != 0:
|
if os.geteuid() != 0:
|
||||||
print('User without privileges ==> PASS')
|
print('> User without privileges ==> OK')
|
||||||
return False
|
return False
|
||||||
elif os.geteuid() == 0:
|
elif os.geteuid() == 0:
|
||||||
print('/!\\ Do not use root to install Defender /!\\')
|
print('/!\\ Do not use root to install Defender /!\\')
|
||||||
@@ -123,6 +133,75 @@ class Install:
|
|||||||
print(f"Try to install dependencies ...")
|
print(f"Try to install dependencies ...")
|
||||||
exit(5)
|
exit(5)
|
||||||
|
|
||||||
|
def get_packages_version_from_json(self) -> None:
|
||||||
|
"""This will create Package model with package names and required version
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
|
||||||
|
version_filename = f'.{os.sep}version.json'
|
||||||
|
with open(version_filename, 'r') as version_data:
|
||||||
|
package_info:dict[str, str] = json.load(version_data)
|
||||||
|
|
||||||
|
for name, version in package_info.items():
|
||||||
|
if name == 'version':
|
||||||
|
continue
|
||||||
|
|
||||||
|
self.DB_PACKAGES.append(
|
||||||
|
self.Package(name=name, version=version)
|
||||||
|
)
|
||||||
|
|
||||||
|
return None
|
||||||
|
except FileNotFoundError as fe:
|
||||||
|
print(f"File not found: {fe}")
|
||||||
|
except Exception as err:
|
||||||
|
print(f"General Error: {err}")
|
||||||
|
|
||||||
|
def check_packages_version(self) -> bool:
|
||||||
|
|
||||||
|
try:
|
||||||
|
newVersion = False
|
||||||
|
self.get_packages_version_from_json()
|
||||||
|
|
||||||
|
if not self.config.venv_folder in prefix:
|
||||||
|
print(f"You are probably running a new installation or you are not using your virtual env {self.config.venv_folder}")
|
||||||
|
return newVersion
|
||||||
|
|
||||||
|
print(f"> Checking for dependencies versions ==> WAIT")
|
||||||
|
for package in self.DB_PACKAGES:
|
||||||
|
newVersion = False
|
||||||
|
required_version = package.version
|
||||||
|
installed_version = None
|
||||||
|
|
||||||
|
output = check_output([self.config.venv_pip_executable, 'show', package.name])
|
||||||
|
for line in output.decode().splitlines():
|
||||||
|
if line.startswith('Version:'):
|
||||||
|
installed_version = line.split(':')[1].strip()
|
||||||
|
break
|
||||||
|
|
||||||
|
required_major, required_minor, required_patch = required_version.split('.')
|
||||||
|
installed_major, installed_minor, installed_patch = installed_version.split('.')
|
||||||
|
|
||||||
|
if required_major > installed_major:
|
||||||
|
print(f'> New version of {package.name} is available {installed_version} ==> {required_version}')
|
||||||
|
newVersion = True
|
||||||
|
elif required_major == installed_major and required_minor > installed_minor:
|
||||||
|
print(f'> New version of {package.name} is available {installed_version} ==> {required_version}')
|
||||||
|
newVersion = True
|
||||||
|
elif required_major == installed_major and required_minor == installed_minor and required_patch > installed_patch:
|
||||||
|
print(f'> New version of {package.name} is available {installed_version} ==> {required_version}')
|
||||||
|
newVersion = True
|
||||||
|
|
||||||
|
if newVersion:
|
||||||
|
self.run_subprocess([self.config.venv_pip_executable, 'install', '--upgrade', package.name])
|
||||||
|
|
||||||
|
print(f"> Dependencies versions ==> OK")
|
||||||
|
return newVersion
|
||||||
|
|
||||||
|
except CalledProcessError:
|
||||||
|
print(f"/!\\ Package {package.name} not installed /!\\")
|
||||||
|
except Exception as err:
|
||||||
|
print(f"General Error: {err}")
|
||||||
|
|
||||||
def check_python_version(self) -> bool:
|
def check_python_version(self) -> bool:
|
||||||
"""Test si la version de python est autorisée ou non
|
"""Test si la version de python est autorisée ou non
|
||||||
|
|
||||||
|
|||||||
138
core/irc.py
138
core/irc.py
@@ -95,13 +95,15 @@ class Irc:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
except ssl.SSLEOFError as soe:
|
except ssl.SSLEOFError as soe:
|
||||||
self.Base.logs.critical(f"SSLEOFError __create_socket: {soe} - {soc.fileno()}")
|
self.Base.logs.critical(f"SSLEOFError: {soe} - {soc.fileno()}")
|
||||||
except ssl.SSLError as se:
|
except ssl.SSLError as se:
|
||||||
self.Base.logs.critical(f"SSLError __create_socket: {se} - {soc.fileno()}")
|
self.Base.logs.critical(f"SSLError: {se} - {soc.fileno()}")
|
||||||
except OSError as oe:
|
except OSError as oe:
|
||||||
self.Base.logs.critical(f"OSError __create_socket: {oe} - {soc.fileno()}")
|
self.Base.logs.critical(f"OSError: {oe} - {soc.fileno()}")
|
||||||
|
if 'connection refused' in str(oe).lower():
|
||||||
|
sys.exit(oe)
|
||||||
except AttributeError as ae:
|
except AttributeError as ae:
|
||||||
self.Base.logs.critical(f"AttributeError __create_socket: {ae} - {soc.fileno()}")
|
self.Base.logs.critical(f"AttributeError: {ae} - {soc.fileno()}")
|
||||||
|
|
||||||
def __ssl_context(self) -> ssl.SSLContext:
|
def __ssl_context(self) -> ssl.SSLContext:
|
||||||
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
||||||
@@ -532,11 +534,61 @@ class Irc:
|
|||||||
self.Base.logs.error(f"General Error: {err}")
|
self.Base.logs.error(f"General Error: {err}")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def reload_module(self, from_user: str, mod_name: str) -> bool:
|
||||||
|
try:
|
||||||
|
module_name = mod_name.lower() # ==> mod_defender
|
||||||
|
class_name = module_name.split('_')[1].capitalize() # ==> Defender
|
||||||
|
|
||||||
|
if 'mods.' + module_name in sys.modules:
|
||||||
|
self.Base.logs.info('Unload the module ...')
|
||||||
|
self.loaded_classes[class_name].unload()
|
||||||
|
self.Base.logs.info('Module Already Loaded ... reloading the module ...')
|
||||||
|
the_module = sys.modules['mods.' + module_name]
|
||||||
|
importlib.reload(the_module)
|
||||||
|
|
||||||
|
# Supprimer la class déja instancier
|
||||||
|
if class_name in self.loaded_classes:
|
||||||
|
# Supprimer les commandes déclarer dans la classe
|
||||||
|
for level, command in self.loaded_classes[class_name].commands_level.items():
|
||||||
|
# Supprimer la commande de la variable commands
|
||||||
|
for c in self.loaded_classes[class_name].commands_level[level]:
|
||||||
|
self.commands.remove(c)
|
||||||
|
self.commands_level[level].remove(c)
|
||||||
|
|
||||||
|
del self.loaded_classes[class_name]
|
||||||
|
|
||||||
|
my_class = getattr(the_module, class_name, None)
|
||||||
|
new_instance = my_class(self.ircObject)
|
||||||
|
self.loaded_classes[class_name] = new_instance
|
||||||
|
|
||||||
|
self.Base.db_update_module(from_user, mod_name)
|
||||||
|
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Module {module_name} rechargé")
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Module {module_name} n'est pas chargé !")
|
||||||
|
|
||||||
|
except TypeError as te:
|
||||||
|
self.Base.logs.error(f"A TypeError raised: {te}")
|
||||||
|
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :A TypeError raised: {te}")
|
||||||
|
self.Base.db_delete_module(module_name)
|
||||||
|
except AttributeError as ae:
|
||||||
|
self.Base.logs.error(f"Missing Attribute: {ae}")
|
||||||
|
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Missing Attribute: {ae}")
|
||||||
|
self.Base.db_delete_module(module_name)
|
||||||
|
except KeyError as ke:
|
||||||
|
self.Base.logs.error(f"Key Error: {ke}")
|
||||||
|
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Key Error: {ke}")
|
||||||
|
self.Base.db_delete_module(module_name)
|
||||||
|
except Exception as e:
|
||||||
|
self.Base.logs.error(f"Something went wrong with a module you want to reload: {e}")
|
||||||
|
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Something went wrong with the module: {e}")
|
||||||
|
self.Base.db_delete_module(module_name)
|
||||||
|
|
||||||
def insert_db_admin(self, uid:str, level:int) -> None:
|
def insert_db_admin(self, uid:str, level:int) -> None:
|
||||||
|
|
||||||
if self.User.get_User(uid) is None:
|
if self.User.get_User(uid) is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
getUser = self.User.get_User(uid)
|
getUser = self.User.get_User(uid)
|
||||||
|
|
||||||
nickname = getUser.nickname
|
nickname = getUser.nickname
|
||||||
@@ -1047,7 +1099,7 @@ class Irc:
|
|||||||
ping_response = current_unixtime - recieved_unixtime
|
ping_response = current_unixtime - recieved_unixtime
|
||||||
|
|
||||||
self.send2socket(f'PONG :{recieved_unixtime}')
|
self.send2socket(f'PONG :{recieved_unixtime}')
|
||||||
self.send2socket(f':{dnickname} NOTICE {user_trigger} :\x01PING {recieved_unixtime} secs\x01')
|
self.send2socket(f':{dnickname} NOTICE {user_trigger} :\x01PING {ping_response} secs\x01')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if not arg[0].lower() in self.commands:
|
if not arg[0].lower() in self.commands:
|
||||||
@@ -1363,8 +1415,14 @@ class Irc:
|
|||||||
self.send2socket(f':{dnickname} NOTICE {fromuser} : ***************** FIN DES COMMANDES *****************')
|
self.send2socket(f':{dnickname} NOTICE {fromuser} : ***************** FIN DES COMMANDES *****************')
|
||||||
|
|
||||||
case 'load':
|
case 'load':
|
||||||
|
try:
|
||||||
self.load_module(fromuser, str(cmd[1]))
|
# Load a module ex: .load mod_defender
|
||||||
|
mod_name = str(cmd[1])
|
||||||
|
self.load_module(fromuser, mod_name)
|
||||||
|
except KeyError as ke:
|
||||||
|
self.Base.logs.error(f"Key Error: {ke} - list recieved: {cmd}")
|
||||||
|
except Exception as err:
|
||||||
|
self.Base.logs.error(f"General Error: {ke} - list recieved: {cmd}")
|
||||||
|
|
||||||
case 'unload':
|
case 'unload':
|
||||||
# unload mod_defender
|
# unload mod_defender
|
||||||
@@ -1375,50 +1433,10 @@ class Irc:
|
|||||||
self.Base.logs.error(f"General Error: {err}")
|
self.Base.logs.error(f"General Error: {err}")
|
||||||
|
|
||||||
case 'reload':
|
case 'reload':
|
||||||
# reload mod_dktmb
|
# reload mod_defender
|
||||||
try:
|
try:
|
||||||
module_name = str(cmd[1]).lower() # ==> mod_defender
|
module_name = str(cmd[1]).lower() # ==> mod_defender
|
||||||
class_name = module_name.split('_')[1].capitalize() # ==> Defender
|
self.reload_module(from_user=fromuser, mod_name=module_name)
|
||||||
|
|
||||||
if 'mods.' + module_name in sys.modules:
|
|
||||||
self.Base.logs.info('Unload the module ...')
|
|
||||||
self.loaded_classes[class_name].unload()
|
|
||||||
self.Base.logs.info('Module Already Loaded ... reloading the module ...')
|
|
||||||
the_module = sys.modules['mods.' + module_name]
|
|
||||||
importlib.reload(the_module)
|
|
||||||
|
|
||||||
# Supprimer la class déja instancier
|
|
||||||
if class_name in self.loaded_classes:
|
|
||||||
# Supprimer les commandes déclarer dans la classe
|
|
||||||
for level, command in self.loaded_classes[class_name].commands_level.items():
|
|
||||||
# Supprimer la commande de la variable commands
|
|
||||||
for c in self.loaded_classes[class_name].commands_level[level]:
|
|
||||||
self.commands.remove(c)
|
|
||||||
self.commands_level[level].remove(c)
|
|
||||||
|
|
||||||
del self.loaded_classes[class_name]
|
|
||||||
|
|
||||||
my_class = getattr(the_module, class_name, None)
|
|
||||||
new_instance = my_class(self.ircObject)
|
|
||||||
self.loaded_classes[class_name] = new_instance
|
|
||||||
|
|
||||||
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Module {module_name} rechargé")
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Module {module_name} n'est pas chargé !")
|
|
||||||
|
|
||||||
except TypeError as te:
|
|
||||||
self.Base.logs.error(f"A TypeError raised: {te}")
|
|
||||||
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :A TypeError raised: {te}")
|
|
||||||
self.Base.db_delete_module(module_name)
|
|
||||||
except AttributeError as ae:
|
|
||||||
self.Base.logs.error(f"Missing Attribute: {ae}")
|
|
||||||
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Missing Attribute: {ae}")
|
|
||||||
self.Base.db_delete_module(module_name)
|
|
||||||
except KeyError as ke:
|
|
||||||
self.Base.logs.error(f"Key Error: {ke}")
|
|
||||||
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Key Error: {ke}")
|
|
||||||
self.Base.db_delete_module(module_name)
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.Base.logs.error(f"Something went wrong with a module you want to reload: {e}")
|
self.Base.logs.error(f"Something went wrong with a module you want to reload: {e}")
|
||||||
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Something went wrong with the module: {e}")
|
self.send2socket(f":{self.Config.SERVICE_NICKNAME} PRIVMSG {self.Config.SERVICE_CHANLOG} :Something went wrong with the module: {e}")
|
||||||
@@ -1469,24 +1487,24 @@ class Irc:
|
|||||||
|
|
||||||
self.Base.logs.debug(self.loaded_classes)
|
self.Base.logs.debug(self.loaded_classes)
|
||||||
all_modules = self.Base.get_all_modules()
|
all_modules = self.Base.get_all_modules()
|
||||||
|
loaded = False
|
||||||
|
|
||||||
results = self.Base.db_execute_query(f'SELECT module_name FROM {self.Config.table_module}')
|
results = self.Base.db_execute_query(f'SELECT datetime, user, module_name FROM {self.Config.table_module}')
|
||||||
results = results.fetchall()
|
results = results.fetchall()
|
||||||
|
|
||||||
found = False
|
|
||||||
|
|
||||||
for module in all_modules:
|
for module in all_modules:
|
||||||
for loaded_mod in results:
|
for loaded_mod in results:
|
||||||
if module == loaded_mod[0]:
|
if module == loaded_mod[2]:
|
||||||
found = True
|
loaded_datetime = loaded_mod[0]
|
||||||
|
loaded_user = loaded_mod[1]
|
||||||
|
loaded = True
|
||||||
|
|
||||||
if found:
|
if loaded:
|
||||||
self.send2socket(f":{dnickname} NOTICE {fromuser} :{module} - {self.Config.COLORS.green}Loaded{self.Config.COLORS.nogc}")
|
self.send2socket(f":{dnickname} NOTICE {fromuser} :{module} - {self.Config.COLORS.green}Loaded{self.Config.COLORS.nogc} by {loaded_user} on {loaded_datetime}")
|
||||||
|
loaded = False
|
||||||
else:
|
else:
|
||||||
self.send2socket(f":{dnickname} NOTICE {fromuser} :{module} - {self.Config.COLORS.red}Not Loaded{self.Config.COLORS.nogc}")
|
self.send2socket(f":{dnickname} NOTICE {fromuser} :{module} - {self.Config.COLORS.red}Not Loaded{self.Config.COLORS.nogc}")
|
||||||
|
|
||||||
found = False
|
|
||||||
|
|
||||||
case 'show_timers':
|
case 'show_timers':
|
||||||
|
|
||||||
if self.Base.running_timers:
|
if self.Base.running_timers:
|
||||||
|
|||||||
@@ -59,10 +59,21 @@ class Jsonrpc():
|
|||||||
self.__load_module_configuration()
|
self.__load_module_configuration()
|
||||||
# End of mandatory methods you can start your customization #
|
# End of mandatory methods you can start your customization #
|
||||||
|
|
||||||
self.UnrealIrcdRpcLive: Live = Live(path_to_socket_file=self.Config.JSONRPC_PATH_TO_SOCKET_FILE,
|
# self.UnrealIrcdRpcLive: Live = Live(
|
||||||
callback_object_instance=self,
|
# req_method='unixsocket',
|
||||||
callback_method_name='callback_sent_to_irc'
|
# path_to_socket_file=self.Config.JSONRPC_PATH_TO_SOCKET_FILE,
|
||||||
)
|
# callback_object_instance=self,
|
||||||
|
# callback_method_name='callback_sent_to_irc'
|
||||||
|
# )
|
||||||
|
|
||||||
|
self.UnrealIrcdRpcLive: Live = Live(
|
||||||
|
req_method='websocket',
|
||||||
|
url=self.Config.JSONRPC_URL,
|
||||||
|
username=self.Config.JSONRPC_USER,
|
||||||
|
password=self.Config.JSONRPC_PASSWORD,
|
||||||
|
callback_object_instance=self,
|
||||||
|
callback_method_name='callback_sent_to_irc'
|
||||||
|
)
|
||||||
|
|
||||||
self.Rpc: Loader = Loader(
|
self.Rpc: Loader = Loader(
|
||||||
req_method=self.Config.JSONRPC_METHOD,
|
req_method=self.Config.JSONRPC_METHOD,
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
{
|
{
|
||||||
"version": "5.3.5"
|
"version": "5.3.8",
|
||||||
|
|
||||||
|
"requests": "2.32.3",
|
||||||
|
"psutil": "6.0.0",
|
||||||
|
"unrealircd_rpc_py": "1.0.5",
|
||||||
|
"sqlalchemy": "2.0.35",
|
||||||
|
"faker": "30.1.0"
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user