make it work with pantalaimon and encryption

This commit is contained in:
Cyberes 2024-02-22 14:56:34 -07:00
parent d7d68f4d42
commit c56bf9160e
2 changed files with 8 additions and 5 deletions

View File

@ -13,6 +13,8 @@ pip install -r requirements.txt
Copy `config.sample.yaml` to `config.yaml` and fill it out with your bot's auth and your OpenAI API key. Copy `config.sample.yaml` to `config.yaml` and fill it out with your bot's auth and your OpenAI API key.
[Pantalaimon](https://github.com/matrix-org/pantalaimon) is **required** for the bot to be able to talk in encrypted rooms.
Then invite your bot and start a chat by prefixing your message with `!c`. The bot will create a thread (you don't need Then invite your bot and start a chat by prefixing your message with `!c`. The bot will create a thread (you don't need
to use `!c` in the thread). to use `!c` in the thread).

View File

@ -16,7 +16,8 @@ class MatrixNioGPTHelper:
""" """
client = None client = None
client_config = AsyncClientConfig(max_limit_exceeded=0, max_timeouts=0, store_sync_tokens=True, encryption_enabled=True) # Encryption is disabled because it's handled by Pantalaimon.
client_config = AsyncClientConfig(max_limit_exceeded=0, max_timeouts=0, store_sync_tokens=True, encryption_enabled=False)
def __init__(self, auth_file: Union[Path, str], user_id: str, passwd: str, homeserver: str, store_path: str, device_name: str = 'MatrixGPT', device_id: str = None): def __init__(self, auth_file: Union[Path, str], user_id: str, passwd: str, homeserver: str, store_path: str, device_name: str = 'MatrixGPT', device_id: str = None):
self.auth_file = auth_file self.auth_file = auth_file
@ -31,23 +32,23 @@ class MatrixNioGPTHelper:
Path(self.store_path).mkdir(parents=True, exist_ok=True) Path(self.store_path).mkdir(parents=True, exist_ok=True)
self.device_name = device_name self.device_name = device_name
self.client = AsyncClient(homeserver=self.homeserver, user=self.user_id, config=self.client_config, store_path=self.store_path, device_id=device_id) self.client = AsyncClient(homeserver=self.homeserver, user=self.user_id, config=self.client_config, device_id=device_id)
async def login(self) -> tuple[bool, LoginError] | tuple[bool, LoginResponse | None]: async def login(self) -> tuple[bool, LoginError] | tuple[bool, LoginResponse | None]:
try: try:
# If there are no previously-saved credentials, we'll use the password # If there are no previously-saved credentials, we'll use the password.
if not os.path.exists(self.auth_file): if not os.path.exists(self.auth_file):
logger.info('Using username/password.') logger.info('Using username/password.')
resp = await self.client.login(self.passwd, device_name=self.device_name) resp = await self.client.login(self.passwd, device_name=self.device_name)
# check that we logged in succesfully # check that we logged in successfully.
if isinstance(resp, LoginResponse): if isinstance(resp, LoginResponse):
self.write_details_to_disk(resp) self.write_details_to_disk(resp)
return True, resp return True, resp
else: else:
return False, resp return False, resp
else: else:
# Otherwise the config file exists, so we'll use the stored credentials # Otherwise the config file exists, so we'll use the stored credentials.
logger.info('Using cached credentials.') logger.info('Using cached credentials.')
with open(self.auth_file, "r") as f: with open(self.auth_file, "r") as f:
config = json.load(f) config = json.load(f)