pbf.controller.ListenerManager
1command_listeners = {} 2message_listeners = {} 3notice_listeners = {} 4request_listeners = {} 5meta_listeners = {} 6 7 8class ListenerManager: 9 @staticmethod 10 def set_listener(event_type: str, listener_dict: dict): 11 """ 12 Set the listener dict. 13 :param event_type: str event type 14 :param listener_dict: dict listener dict 15 :return: 16 """ 17 global command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners 18 if event_type == "command": 19 command_listeners = listener_dict 20 elif event_type == "message": 21 message_listeners = listener_dict 22 elif event_type == "notice": 23 notice_listeners = listener_dict 24 elif event_type == "request": 25 request_listeners = listener_dict 26 elif event_type == "meta": 27 meta_listeners = listener_dict 28 else: 29 raise ValueError("Invalid event type") 30 31 @staticmethod 32 def add_listener(event_type: str, plugin_name: str, listener): 33 """ 34 Add a listener. 35 :param event_type: str event type 36 :param plugin_name: str plugin name 37 :param listener: object listener 38 :return: 39 """ 40 listeners = ListenerManager.get_listeners_by_type(event_type) 41 if plugin_name not in listeners: 42 listeners[plugin_name] = [] 43 listeners[plugin_name].append(listener) 44 ListenerManager.set_listener(event_type, listeners) 45 46 @staticmethod 47 def clear(): 48 """ 49 Clear all listeners. 50 :return: None 51 """ 52 global command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners 53 del command_listeners 54 del message_listeners 55 del notice_listeners 56 del request_listeners 57 del meta_listeners 58 command_listeners = {} 59 message_listeners = {} 60 notice_listeners = {} 61 request_listeners = {} 62 meta_listeners = {} 63 64 @staticmethod 65 def get_listeners_by_plugin_name(plugin_name: str): 66 """ 67 Get listeners by plugin name. 68 :param plugin_name: str plugin name 69 :return: list 70 """ 71 return command_listeners.get(plugin_name, []) + \ 72 message_listeners.get(plugin_name, []) + \ 73 notice_listeners.get(plugin_name, []) + \ 74 request_listeners.get(plugin_name, []) + \ 75 meta_listeners.get(plugin_name, []) 76 77 @staticmethod 78 def get_listeners_by_type(event_type: str): 79 """ 80 Get listeners by type. 81 :param event_type: str event type 82 :return: dict 83 """ 84 if event_type == "command": 85 return command_listeners 86 elif event_type == "message": 87 return message_listeners 88 elif event_type == "notice": 89 return notice_listeners 90 elif event_type == "request": 91 return request_listeners 92 elif event_type == "meta": 93 return meta_listeners 94 else: 95 return {} 96 97 @staticmethod 98 def remove_listeners_by_plugin_name(plugin_name: str): 99 """ 100 Remove listeners by plugin name. 101 :param plugin_name: str plugin name 102 :return: None 103 """ 104 # global command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners 105 for listeners in [command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners]: 106 if plugin_name in listeners: 107 listeners.pop(plugin_name) 108 ListenerManager.set_listener("command", command_listeners) 109 ListenerManager.set_listener("message", message_listeners) 110 ListenerManager.set_listener("notice", notice_listeners) 111 ListenerManager.set_listener("request", request_listeners) 112 ListenerManager.set_listener("meta", meta_listeners) 113 114 @staticmethod 115 def remove_listener_by_plugin_name(plugin_name: str, listener): 116 """ 117 Remove listener by plugin name. 118 :param plugin_name: str plugin name 119 :param listener: object listener 120 :return: None 121 """ 122 listeners = ListenerManager.get_listeners_by_plugin_name(plugin_name) 123 for i in range(len(listeners)): 124 if listeners[i] == listener: 125 listeners.pop(i) 126 break
command_listeners =
{}
message_listeners =
{}
notice_listeners =
{}
request_listeners =
{}
meta_listeners =
{}
class
ListenerManager:
9class ListenerManager: 10 @staticmethod 11 def set_listener(event_type: str, listener_dict: dict): 12 """ 13 Set the listener dict. 14 :param event_type: str event type 15 :param listener_dict: dict listener dict 16 :return: 17 """ 18 global command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners 19 if event_type == "command": 20 command_listeners = listener_dict 21 elif event_type == "message": 22 message_listeners = listener_dict 23 elif event_type == "notice": 24 notice_listeners = listener_dict 25 elif event_type == "request": 26 request_listeners = listener_dict 27 elif event_type == "meta": 28 meta_listeners = listener_dict 29 else: 30 raise ValueError("Invalid event type") 31 32 @staticmethod 33 def add_listener(event_type: str, plugin_name: str, listener): 34 """ 35 Add a listener. 36 :param event_type: str event type 37 :param plugin_name: str plugin name 38 :param listener: object listener 39 :return: 40 """ 41 listeners = ListenerManager.get_listeners_by_type(event_type) 42 if plugin_name not in listeners: 43 listeners[plugin_name] = [] 44 listeners[plugin_name].append(listener) 45 ListenerManager.set_listener(event_type, listeners) 46 47 @staticmethod 48 def clear(): 49 """ 50 Clear all listeners. 51 :return: None 52 """ 53 global command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners 54 del command_listeners 55 del message_listeners 56 del notice_listeners 57 del request_listeners 58 del meta_listeners 59 command_listeners = {} 60 message_listeners = {} 61 notice_listeners = {} 62 request_listeners = {} 63 meta_listeners = {} 64 65 @staticmethod 66 def get_listeners_by_plugin_name(plugin_name: str): 67 """ 68 Get listeners by plugin name. 69 :param plugin_name: str plugin name 70 :return: list 71 """ 72 return command_listeners.get(plugin_name, []) + \ 73 message_listeners.get(plugin_name, []) + \ 74 notice_listeners.get(plugin_name, []) + \ 75 request_listeners.get(plugin_name, []) + \ 76 meta_listeners.get(plugin_name, []) 77 78 @staticmethod 79 def get_listeners_by_type(event_type: str): 80 """ 81 Get listeners by type. 82 :param event_type: str event type 83 :return: dict 84 """ 85 if event_type == "command": 86 return command_listeners 87 elif event_type == "message": 88 return message_listeners 89 elif event_type == "notice": 90 return notice_listeners 91 elif event_type == "request": 92 return request_listeners 93 elif event_type == "meta": 94 return meta_listeners 95 else: 96 return {} 97 98 @staticmethod 99 def remove_listeners_by_plugin_name(plugin_name: str): 100 """ 101 Remove listeners by plugin name. 102 :param plugin_name: str plugin name 103 :return: None 104 """ 105 # global command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners 106 for listeners in [command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners]: 107 if plugin_name in listeners: 108 listeners.pop(plugin_name) 109 ListenerManager.set_listener("command", command_listeners) 110 ListenerManager.set_listener("message", message_listeners) 111 ListenerManager.set_listener("notice", notice_listeners) 112 ListenerManager.set_listener("request", request_listeners) 113 ListenerManager.set_listener("meta", meta_listeners) 114 115 @staticmethod 116 def remove_listener_by_plugin_name(plugin_name: str, listener): 117 """ 118 Remove listener by plugin name. 119 :param plugin_name: str plugin name 120 :param listener: object listener 121 :return: None 122 """ 123 listeners = ListenerManager.get_listeners_by_plugin_name(plugin_name) 124 for i in range(len(listeners)): 125 if listeners[i] == listener: 126 listeners.pop(i) 127 break
@staticmethod
def
set_listener(event_type: str, listener_dict: dict):
10 @staticmethod 11 def set_listener(event_type: str, listener_dict: dict): 12 """ 13 Set the listener dict. 14 :param event_type: str event type 15 :param listener_dict: dict listener dict 16 :return: 17 """ 18 global command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners 19 if event_type == "command": 20 command_listeners = listener_dict 21 elif event_type == "message": 22 message_listeners = listener_dict 23 elif event_type == "notice": 24 notice_listeners = listener_dict 25 elif event_type == "request": 26 request_listeners = listener_dict 27 elif event_type == "meta": 28 meta_listeners = listener_dict 29 else: 30 raise ValueError("Invalid event type")
Set the listener dict.
Parameters
- event_type: str event type
- listener_dict: dict listener dict
Returns
@staticmethod
def
add_listener(event_type: str, plugin_name: str, listener):
32 @staticmethod 33 def add_listener(event_type: str, plugin_name: str, listener): 34 """ 35 Add a listener. 36 :param event_type: str event type 37 :param plugin_name: str plugin name 38 :param listener: object listener 39 :return: 40 """ 41 listeners = ListenerManager.get_listeners_by_type(event_type) 42 if plugin_name not in listeners: 43 listeners[plugin_name] = [] 44 listeners[plugin_name].append(listener) 45 ListenerManager.set_listener(event_type, listeners)
Add a listener.
Parameters
- event_type: str event type
- plugin_name: str plugin name
- listener: object listener
Returns
@staticmethod
def
clear():
47 @staticmethod 48 def clear(): 49 """ 50 Clear all listeners. 51 :return: None 52 """ 53 global command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners 54 del command_listeners 55 del message_listeners 56 del notice_listeners 57 del request_listeners 58 del meta_listeners 59 command_listeners = {} 60 message_listeners = {} 61 notice_listeners = {} 62 request_listeners = {} 63 meta_listeners = {}
Clear all listeners.
Returns
None
@staticmethod
def
get_listeners_by_plugin_name(plugin_name: str):
65 @staticmethod 66 def get_listeners_by_plugin_name(plugin_name: str): 67 """ 68 Get listeners by plugin name. 69 :param plugin_name: str plugin name 70 :return: list 71 """ 72 return command_listeners.get(plugin_name, []) + \ 73 message_listeners.get(plugin_name, []) + \ 74 notice_listeners.get(plugin_name, []) + \ 75 request_listeners.get(plugin_name, []) + \ 76 meta_listeners.get(plugin_name, [])
Get listeners by plugin name.
Parameters
- plugin_name: str plugin name
Returns
list
@staticmethod
def
get_listeners_by_type(event_type: str):
78 @staticmethod 79 def get_listeners_by_type(event_type: str): 80 """ 81 Get listeners by type. 82 :param event_type: str event type 83 :return: dict 84 """ 85 if event_type == "command": 86 return command_listeners 87 elif event_type == "message": 88 return message_listeners 89 elif event_type == "notice": 90 return notice_listeners 91 elif event_type == "request": 92 return request_listeners 93 elif event_type == "meta": 94 return meta_listeners 95 else: 96 return {}
Get listeners by type.
Parameters
- event_type: str event type
Returns
dict
@staticmethod
def
remove_listeners_by_plugin_name(plugin_name: str):
98 @staticmethod 99 def remove_listeners_by_plugin_name(plugin_name: str): 100 """ 101 Remove listeners by plugin name. 102 :param plugin_name: str plugin name 103 :return: None 104 """ 105 # global command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners 106 for listeners in [command_listeners, message_listeners, notice_listeners, request_listeners, meta_listeners]: 107 if plugin_name in listeners: 108 listeners.pop(plugin_name) 109 ListenerManager.set_listener("command", command_listeners) 110 ListenerManager.set_listener("message", message_listeners) 111 ListenerManager.set_listener("notice", notice_listeners) 112 ListenerManager.set_listener("request", request_listeners) 113 ListenerManager.set_listener("meta", meta_listeners)
Remove listeners by plugin name.
Parameters
- plugin_name: str plugin name
Returns
None
@staticmethod
def
remove_listener_by_plugin_name(plugin_name: str, listener):
115 @staticmethod 116 def remove_listener_by_plugin_name(plugin_name: str, listener): 117 """ 118 Remove listener by plugin name. 119 :param plugin_name: str plugin name 120 :param listener: object listener 121 :return: None 122 """ 123 listeners = ListenerManager.get_listeners_by_plugin_name(plugin_name) 124 for i in range(len(listeners)): 125 if listeners[i] == listener: 126 listeners.pop(i) 127 break
Remove listener by plugin name.
Parameters
- plugin_name: str plugin name
- listener: object listener
Returns
None