74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
import main
|
|
from modules import chankeep
|
|
|
|
from utils.logging.debug import debug
|
|
|
|
|
|
def get_first_relay(net):
|
|
"""
|
|
Get the first relay in the network.
|
|
:param net: the network
|
|
:param num: number or relay
|
|
:return: IRCPool instance for the IRC bot
|
|
"""
|
|
cur_relay = 0
|
|
max_relay = max(main.network[net].relays.keys())
|
|
debug(f"get_first_relay() {net}: max_relay:{max_relay}")
|
|
activeRelays = chankeep.getActiveRelays(net)
|
|
|
|
debug(f"get_first_relay() {net}: activeRelays:{activeRelays}")
|
|
while cur_relay != max_relay:
|
|
cur_relay += 1
|
|
if cur_relay not in activeRelays:
|
|
continue
|
|
name = net + str(cur_relay)
|
|
if name in main.IRCPool.keys():
|
|
# debug(f"get_first_relay() {net}: found relay {name}")
|
|
return main.IRCPool[name]
|
|
return None
|
|
|
|
|
|
def is_first_relay(net, num):
|
|
"""
|
|
Determine if we are the first relay for the network.
|
|
:param net: the network
|
|
:param num: number or relay
|
|
:return: True if we are the first relay, False otherwise
|
|
"""
|
|
first_relay = get_first_relay(net)
|
|
if not first_relay:
|
|
return False
|
|
return first_relay.num == num
|
|
|
|
|
|
def get_active_relays(net):
|
|
"""
|
|
Get all active instances for the network.
|
|
:param net: the network
|
|
:return: list of active instances
|
|
:rtype: list of IRCPool instances
|
|
"""
|
|
active_nums = chankeep.getActiveRelays(net)
|
|
active_insts = []
|
|
for num in active_nums:
|
|
name = net + str(num)
|
|
if name in main.IRCPool.keys():
|
|
active_insts.append(main.IRCPool[name])
|
|
return active_insts
|
|
|
|
|
|
def get_connected_relays(net):
|
|
"""
|
|
Get all connected instances for the network.
|
|
:param net: the network
|
|
:return: list of active instances
|
|
:rtype: list of IRCPool instances
|
|
"""
|
|
active_nums = chankeep.getConnectedRelays(net)
|
|
active_insts = []
|
|
for num in active_nums:
|
|
name = net + str(num)
|
|
if name in main.IRCPool.keys():
|
|
active_insts.append(main.IRCPool[name])
|
|
return active_insts
|