From 0dfcb4963a254e08b3089ac53c35ada7c9a03e63 Mon Sep 17 00:00:00 2001 From: Ville Ranki Date: Thu, 27 Feb 2020 22:19:56 +0200 Subject: [PATCH] Added hack to avoid running old commands after join. --- bot.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/bot.py b/bot.py index 72d6768..4034418 100755 --- a/bot.py +++ b/bot.py @@ -15,11 +15,11 @@ import traceback import urllib.parse import logging import logging.config +import datetime from importlib import reload import requests -from nio import AsyncClient, InviteEvent, JoinError, RoomMessageText, MatrixRoom, LogoutResponse, LogoutError, \ - LoginError +from nio import AsyncClient, InviteEvent, JoinError, RoomMessageText, MatrixRoom, LogoutResponse, LoginError # Couple of custom exceptions @@ -37,7 +37,7 @@ class Bot: def __init__(self): self.appid = 'org.vranki.hemppa' - self.version = '1.2' + self.version = '1.3' self.client = None self.join_on_invite = False self.modules = dict() @@ -47,6 +47,9 @@ class Bot: self.debug = os.getenv("DEBUG", "false").lower() == "true" self.logger = None + self.jointime = None # HACKHACKHACK to avoid running old commands after join + self.join_hack_time = 5 # Seconds + self.initialize_logger() def initialize_logger(self): @@ -144,6 +147,13 @@ class Bot: if not self.starts_with_command(body): return + # HACK to ignore messages for some time after joining. + if self.jointime: + if (datetime.datetime.now() - self.jointime).seconds < self.join_hack_time: + self.logger.info(f"Waiting for join delay, ignoring message: {body}") + return + self.jointime = None + command = body.split().pop(0) # Strip away non-alphanumeric characters, including leading ! for security @@ -179,12 +189,13 @@ class Bot: if self.join_on_invite or self.is_owner(event): for attempt in range(3): + self.jointime = datetime.datetime.now() result = await self.client.join(room.room_id) if type(result) == JoinError: self.logger.error(f"Error joining room %s (attempt %d): %s", room.room_id, attempt, result.message) else: self.logger.info(f"joining room '{room.display_name}'({room.room_id}) invited by '{event.sender}'") - break + return else: self.logger.warning(f'Received invite event, but not joining as sender is not owner or bot not configured to join on invite. {event}')