Added the option to !opt-in/opt-out [onlinebot only]
Fixed command & event threading Events are now threaded by event_type (i.e. all buddy_logon events get ran in the same one) Added default preferences Fixed recipe loading for multiple installs (i.e. on different machines)
This commit is contained in:
+19
-13
@@ -72,7 +72,7 @@ class EventService:
|
||||
"""
|
||||
if len(inspect.signature(handler).parameters) != 2:
|
||||
raise Exception(
|
||||
"Incorrect number of arguments for handler '%s.%s()'" % (handler.__module__, handler.__name__))
|
||||
f"Incorrect number of arguments for handler '{handler.__module__}.{handler.__name__}()'")
|
||||
|
||||
event_base_type, event_sub_type = self.get_event_type_parts(event_type)
|
||||
module = module.lower()
|
||||
@@ -80,12 +80,12 @@ class EventService:
|
||||
is_hidden = 1 if is_hidden else 0
|
||||
is_enabled = 1 if is_enabled else 0
|
||||
if event_base_type not in self.event_types:
|
||||
self.logger.error("Could not register handler '%s' for event type '%s': event type does not exist" % (
|
||||
handler_name, event_type))
|
||||
self.logger.error(
|
||||
f"Could not register handler '{handler_name}' for event type '{event_type}': event type does not exist")
|
||||
return
|
||||
|
||||
if not description:
|
||||
self.logger.warning("No description for event_type '%s' and handler '%s'" % (event_type, handler_name))
|
||||
self.logger.warning(f"No description for event_type '{event_type}' and handler '{handler_name}'")
|
||||
|
||||
row = self.db.query_single("SELECT 1 FROM event_config WHERE event_type = ? AND handler = ?",
|
||||
[event_base_type, handler_name])
|
||||
@@ -117,28 +117,34 @@ class EventService:
|
||||
event_base_type, event_sub_type = self.get_event_type_parts(event_type)
|
||||
|
||||
if event_base_type not in self.event_types:
|
||||
self.logger.error("Could not fire event type '%s': event type does not exist" % event_type)
|
||||
self.logger.error(f"Could not fire event type '{event_type}': event type does not exist")
|
||||
return
|
||||
|
||||
data = self.get_handlers(event_base_type, event_sub_type)
|
||||
for row in data:
|
||||
if event_type != "connect":
|
||||
t = Thread(target=self.call_handler, args=(row.handler, event_type, event_data), daemon=True)
|
||||
t.run()
|
||||
else:
|
||||
self.call_handler(row.handler, event_type, event_data)
|
||||
|
||||
# We dont want to spawn a new Thread for each event handler, but only per event type.
|
||||
def i():
|
||||
for row in data:
|
||||
if event_type != "connect":
|
||||
self.call_handler(row.handler, event_type, event_data)
|
||||
else:
|
||||
self.call_handler(row.handler, event_type, event_data)
|
||||
if event_type != "connect":
|
||||
Thread(target=i, daemon=True).start()
|
||||
else:
|
||||
i()
|
||||
|
||||
def call_handler(self, handler_method, event_type, event_data):
|
||||
handler = self.handlers.get(handler_method, None)
|
||||
if not handler:
|
||||
self.logger.error(
|
||||
"Could not find handler callback for event type '%s' and handler '%s'" % (event_type, handler_method))
|
||||
f"Could not find handler callback for event type '{event_type}' and handler '{handler_method}'")
|
||||
return
|
||||
|
||||
try:
|
||||
handler(event_type, event_data)
|
||||
except Exception as e:
|
||||
self.logger.error("error processing event '%s'" % event_type, e)
|
||||
self.logger.error(f"error processing event '{event_type}'", e)
|
||||
|
||||
def get_event_type_parts(self, event_type):
|
||||
parts = event_type.lower().split(":", 1)
|
||||
|
||||
Reference in New Issue
Block a user