Merge pull request #8 from hibobmaster/dev
Prevent blocking execution flow
This commit is contained in:
commit
b620dd2a15
3 changed files with 23 additions and 48 deletions
61
bot.py
61
bot.py
|
@ -147,7 +147,6 @@ class Bot:
|
||||||
if bard_token is not None:
|
if bard_token is not None:
|
||||||
self.bardbot = Bardbot(self.bard_token)
|
self.bardbot = Bardbot(self.bard_token)
|
||||||
|
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
try:
|
try:
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
|
@ -156,7 +155,6 @@ class Bot:
|
||||||
asyncio.set_event_loop(loop)
|
asyncio.set_event_loop(loop)
|
||||||
loop.run_until_complete(self._close())
|
loop.run_until_complete(self._close())
|
||||||
|
|
||||||
|
|
||||||
async def _close(self):
|
async def _close(self):
|
||||||
await self.session.close()
|
await self.session.close()
|
||||||
|
|
||||||
|
@ -196,13 +194,13 @@ class Bot:
|
||||||
prompt = n.group(1)
|
prompt = n.group(1)
|
||||||
if self.api_key != '':
|
if self.api_key != '':
|
||||||
try:
|
try:
|
||||||
await self.chat(room_id,
|
asyncio.create_task(self.chat(room_id,
|
||||||
reply_to_event_id,
|
reply_to_event_id,
|
||||||
prompt,
|
prompt,
|
||||||
sender_id,
|
sender_id,
|
||||||
raw_user_message
|
raw_user_message
|
||||||
)
|
)
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e, exc_info=True)
|
logger.error(e, exc_info=True)
|
||||||
await send_room_message(self.client, room_id, reply_message=str(e))
|
await send_room_message(self.client, room_id, reply_message=str(e))
|
||||||
|
@ -214,12 +212,13 @@ class Bot:
|
||||||
if m:
|
if m:
|
||||||
prompt = m.group(1)
|
prompt = m.group(1)
|
||||||
try:
|
try:
|
||||||
await self.gpt(
|
asyncio.create_task(self.gpt(
|
||||||
room_id,
|
room_id,
|
||||||
reply_to_event_id,
|
reply_to_event_id,
|
||||||
prompt, sender_id,
|
prompt, sender_id,
|
||||||
raw_user_message
|
raw_user_message
|
||||||
)
|
)
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e, exc_info=True)
|
logger.error(e, exc_info=True)
|
||||||
await send_room_message(self.client, room_id, reply_message=str(e))
|
await send_room_message(self.client, room_id, reply_message=str(e))
|
||||||
|
@ -231,14 +230,14 @@ class Bot:
|
||||||
prompt = b.group(1)
|
prompt = b.group(1)
|
||||||
# raw_content_body used for construct formatted_body
|
# raw_content_body used for construct formatted_body
|
||||||
try:
|
try:
|
||||||
await self.bing(
|
asyncio.create_task(self.bing(
|
||||||
room_id,
|
room_id,
|
||||||
reply_to_event_id,
|
reply_to_event_id,
|
||||||
prompt,
|
prompt,
|
||||||
sender_id,
|
sender_id,
|
||||||
raw_user_message
|
raw_user_message
|
||||||
)
|
)
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e, exc_info=True)
|
logger.error(e, exc_info=True)
|
||||||
await send_room_message(self.client, room_id, reply_message=str(e))
|
await send_room_message(self.client, room_id, reply_message=str(e))
|
||||||
|
@ -249,7 +248,7 @@ class Bot:
|
||||||
if i:
|
if i:
|
||||||
prompt = i.group(1)
|
prompt = i.group(1)
|
||||||
try:
|
try:
|
||||||
await self.pic(room_id, prompt)
|
asyncio.create_task(self.pic(room_id, prompt))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e, exc_info=True)
|
logger.error(e, exc_info=True)
|
||||||
await send_room_message(self.client, room_id, reply_message=str(e))
|
await send_room_message(self.client, room_id, reply_message=str(e))
|
||||||
|
@ -260,23 +259,22 @@ class Bot:
|
||||||
if b:
|
if b:
|
||||||
prompt = b.group(1)
|
prompt = b.group(1)
|
||||||
try:
|
try:
|
||||||
await self.bard(
|
asyncio.create_task(self.bard(
|
||||||
room_id,
|
room_id,
|
||||||
reply_to_event_id,
|
reply_to_event_id,
|
||||||
prompt,
|
prompt,
|
||||||
sender_id,
|
sender_id,
|
||||||
raw_user_message
|
raw_user_message
|
||||||
)
|
)
|
||||||
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e, exc_info=True)
|
logger.error(e, exc_info=True)
|
||||||
await send_room_message(self.client, room_id, reply_message={e})
|
await send_room_message(self.client, room_id, reply_message={e})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# help command
|
# help command
|
||||||
h = self.help_prog.match(content_body)
|
h = self.help_prog.match(content_body)
|
||||||
if h:
|
if h:
|
||||||
await self.help(room_id)
|
asyncio.create_task(self.help(room_id))
|
||||||
|
|
||||||
# message_callback decryption_failure event
|
# message_callback decryption_failure event
|
||||||
async def decryption_failure(self, room: MatrixRoom, event: MegolmEvent) -> None:
|
async def decryption_failure(self, room: MatrixRoom, event: MegolmEvent) -> None:
|
||||||
|
@ -528,7 +526,6 @@ class Bot:
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception(e)
|
raise Exception(e)
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
text = text.strip()
|
text = text.strip()
|
||||||
await send_room_message(self.client, room_id, reply_message=text,
|
await send_room_message(self.client, room_id, reply_message=text,
|
||||||
|
@ -549,7 +546,6 @@ class Bot:
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception(e)
|
raise Exception(e)
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
text = text.strip()
|
text = text.strip()
|
||||||
await send_room_message(self.client, room_id, reply_message=text,
|
await send_room_message(self.client, room_id, reply_message=text,
|
||||||
|
@ -569,8 +565,7 @@ class Bot:
|
||||||
raise Exception("Timeout error")
|
raise Exception("Timeout error")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception(e)
|
raise Exception(e)
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
text = text.strip()
|
text = text.strip()
|
||||||
await send_room_message(self.client, room_id, reply_message=text,
|
await send_room_message(self.client, room_id, reply_message=text,
|
||||||
|
@ -586,16 +581,16 @@ class Bot:
|
||||||
response = await asyncio.to_thread(self.bardbot.ask, prompt)
|
response = await asyncio.to_thread(self.bardbot.ask, prompt)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise Exception(e)
|
raise Exception(e)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
content = str(response['content']).strip()
|
content = str(response['content']).strip()
|
||||||
await send_room_message(self.client, room_id, reply_message=content,
|
await send_room_message(self.client, room_id, reply_message=content,
|
||||||
reply_to_event_id="", sender_id=sender_id, user_message=raw_user_message, markdown_formatted=self.markdown_formatted)
|
reply_to_event_id="", sender_id=sender_id, user_message=raw_user_message, markdown_formatted=self.markdown_formatted)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(e, exc_info=True)
|
logger.error(e, exc_info=True)
|
||||||
|
|
||||||
|
|
||||||
# !pic command
|
# !pic command
|
||||||
|
|
||||||
async def pic(self, room_id, prompt):
|
async def pic(self, room_id, prompt):
|
||||||
try:
|
try:
|
||||||
await self.client.room_typing(room_id, timeout=180000)
|
await self.client.room_typing(room_id, timeout=180000)
|
||||||
|
@ -653,21 +648,3 @@ class Bot:
|
||||||
async def sync_forever(self, timeout=30000, full_state=True) -> None:
|
async def sync_forever(self, timeout=30000, full_state=True) -> None:
|
||||||
|
|
||||||
await self.client.sync_forever(timeout=timeout, full_state=full_state)
|
await self.client.sync_forever(timeout=timeout, full_state=full_state)
|
||||||
|
|
||||||
# Sync encryption keys with the server
|
|
||||||
async def sync_encryption_key(self) -> None:
|
|
||||||
if self.client.should_upload_keys:
|
|
||||||
await self.client.keys_upload()
|
|
||||||
|
|
||||||
# Trust own devices
|
|
||||||
async def trust_own_devices(self) -> None:
|
|
||||||
await self.client.sync(timeout=30000, full_state=True)
|
|
||||||
for device_id, olm_device in self.client.device_store[
|
|
||||||
self.user_id].items():
|
|
||||||
logger.debug("My other devices are: "
|
|
||||||
f"device_id={device_id}, "
|
|
||||||
f"olm_device={olm_device}.")
|
|
||||||
logger.info("Setting up trust for my own "
|
|
||||||
f"device {device_id} and session key "
|
|
||||||
f"{olm_device.keys['ed25519']}.")
|
|
||||||
self.client.verify_device(olm_device)
|
|
||||||
|
|
6
main.py
6
main.py
|
@ -1,7 +1,8 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import signal
|
||||||
|
from functools import partial
|
||||||
from bot import Bot
|
from bot import Bot
|
||||||
from log import getlogger
|
from log import getlogger
|
||||||
|
|
||||||
|
@ -46,9 +47,6 @@ async def main():
|
||||||
)
|
)
|
||||||
|
|
||||||
await matrix_bot.login()
|
await matrix_bot.login()
|
||||||
await matrix_bot.sync_encryption_key()
|
|
||||||
|
|
||||||
# await matrix_bot.trust_own_devices()
|
|
||||||
|
|
||||||
await matrix_bot.sync_forever(timeout=30000, full_state=True)
|
await matrix_bot.sync_forever(timeout=30000, full_state=True)
|
||||||
|
|
||||||
|
|
|
@ -13,8 +13,8 @@ async def send_room_message(client: AsyncClient,
|
||||||
NORMAL_BODY = content = {"msgtype": "m.text", "body": reply_message, }
|
NORMAL_BODY = content = {"msgtype": "m.text", "body": reply_message, }
|
||||||
if reply_to_event_id == '':
|
if reply_to_event_id == '':
|
||||||
if markdown_formatted:
|
if markdown_formatted:
|
||||||
# only format message contains multiline codes
|
# only format message contains multiline codes, *, |
|
||||||
if re.search(r"```", reply_message) is not None:
|
if re.search(r"```|\*|\|", reply_message) is not None:
|
||||||
content = {
|
content = {
|
||||||
"msgtype": "m.text",
|
"msgtype": "m.text",
|
||||||
"body": reply_message,
|
"body": reply_message,
|
||||||
|
|
Loading…
Reference in a new issue