diff --git a/src/snekbot/bot.py b/src/snekbot/bot.py index edc6087..22120a2 100644 --- a/src/snekbot/bot.py +++ b/src/snekbot/bot.py @@ -33,6 +33,7 @@ class Bot: self.rpc = None self.ws = None self.joined = set() + self.semaphore = asyncio.Semaphore(1) async def on_init(self): logger.debug("Bot initialized.") @@ -115,36 +116,38 @@ class Bot: await self.on_idle() message = None + data = None while True: - data = await rpc.receive() - if not data: - return - - event = "?" - try: - event = data.event - except AttributeError: - pass - - try: - message = data.message.strip() - event = "message" - except AttributeError: - pass + async iwth self.semaphore: + data = await rpc.receive() + if not data: + return + + event = "?" + try: + event = data.event + except AttributeError: + pass - if event == "?": - continue - elif event == "message": - if not data.is_final: - continue - break + try: + message = data.message.strip() + event = "message" + except AttributeError: + pass + + if event == "?": + continue + elif event == "message": + if not data.is_final: + continue + break - try: - await getattr(self, "on_" + data.event)(**data.data) - except AttributeError: - logger.debug("Not implemented event: " + event) - + try: + await getattr(self, "on_" + data.event)(**data.data) + except AttributeError: + logger.debug("Not implemented event: " + event) + if data.username == self.user["username"]: await self.on_own_message(data.channel_uid, message) elif message.startswith("ping"):