aboutsummaryrefslogtreecommitdiff
path: root/src/IRCBot.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/IRCBot.py')
-rw-r--r--src/IRCBot.py26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/IRCBot.py b/src/IRCBot.py
index 62594404..d12cc377 100644
--- a/src/IRCBot.py
+++ b/src/IRCBot.py
@@ -1,4 +1,4 @@
-import os, select, socket, sys, threading, time, traceback, typing, uuid
+import queue, os, select, socket, sys, threading, time, traceback, typing, uuid
from src import EventManager, Exports, IRCServer, Logging, ModuleManager
from src import Socket, utils
@@ -29,12 +29,23 @@ class Bot(object):
self._trigger_functions = []
self._events.on("timer.reconnect").hook(self._timed_reconnect)
- def trigger(self, func: typing.Callable[[], typing.Any]=None):
+ def trigger(self,
+ func: typing.Optional[typing.Callable[[], typing.Any]]=None):
+ func = func or (lambda: None)
+ if threading.current_thread() is threading.main_thread():
+ returned = func()
+ self._trigger_client.send(b"TRIGGER")
+ return returned
+
self.lock.acquire()
- if func:
- self._trigger_functions.append(func)
- self._trigger_client.send(b"TRIGGER")
+
+ func_queue = queue.Queue(1)
+ self._trigger_functions.append([func, func_queue])
+
self.lock.release()
+ self._trigger_client.send(b"TRIGGER")
+
+ return func_queue.get(True)
def add_server(self, server_id: int, connect: bool = True,
connection_params: typing.Optional[
@@ -165,8 +176,9 @@ class Bot(object):
self._timers.call()
self.cache.expire()
- for func in self._trigger_functions:
- func()
+ for func, func_queue in self._trigger_functions:
+ returned = func()
+ func_queue.put(returned)
self._trigger_functions.clear()
for fd, event in events: