Added hack to avoid running old commands after join.

This commit is contained in:
Ville Ranki 2020-02-27 22:19:56 +02:00
parent b8499e1c99
commit 0dfcb4963a
1 changed files with 15 additions and 4 deletions

19
bot.py
View File

@ -15,11 +15,11 @@ import traceback
import urllib.parse import urllib.parse
import logging import logging
import logging.config import logging.config
import datetime
from importlib import reload from importlib import reload
import requests import requests
from nio import AsyncClient, InviteEvent, JoinError, RoomMessageText, MatrixRoom, LogoutResponse, LogoutError, \ from nio import AsyncClient, InviteEvent, JoinError, RoomMessageText, MatrixRoom, LogoutResponse, LoginError
LoginError
# Couple of custom exceptions # Couple of custom exceptions
@ -37,7 +37,7 @@ class Bot:
def __init__(self): def __init__(self):
self.appid = 'org.vranki.hemppa' self.appid = 'org.vranki.hemppa'
self.version = '1.2' self.version = '1.3'
self.client = None self.client = None
self.join_on_invite = False self.join_on_invite = False
self.modules = dict() self.modules = dict()
@ -47,6 +47,9 @@ class Bot:
self.debug = os.getenv("DEBUG", "false").lower() == "true" self.debug = os.getenv("DEBUG", "false").lower() == "true"
self.logger = None self.logger = None
self.jointime = None # HACKHACKHACK to avoid running old commands after join
self.join_hack_time = 5 # Seconds
self.initialize_logger() self.initialize_logger()
def initialize_logger(self): def initialize_logger(self):
@ -144,6 +147,13 @@ class Bot:
if not self.starts_with_command(body): if not self.starts_with_command(body):
return 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) command = body.split().pop(0)
# Strip away non-alphanumeric characters, including leading ! for security # 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): if self.join_on_invite or self.is_owner(event):
for attempt in range(3): for attempt in range(3):
self.jointime = datetime.datetime.now()
result = await self.client.join(room.room_id) result = await self.client.join(room.room_id)
if type(result) == JoinError: if type(result) == JoinError:
self.logger.error(f"Error joining room %s (attempt %d): %s", room.room_id, attempt, result.message) self.logger.error(f"Error joining room %s (attempt %d): %s", room.room_id, attempt, result.message)
else: else:
self.logger.info(f"joining room '{room.display_name}'({room.room_id}) invited by '{event.sender}'") self.logger.info(f"joining room '{room.display_name}'({room.room_id}) invited by '{event.sender}'")
break return
else: 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}') self.logger.warning(f'Received invite event, but not joining as sender is not owner or bot not configured to join on invite. {event}')