prevent blocking execution flow

This commit is contained in:
hibobmaster 2023-04-14 19:03:34 +08:00
parent 51bde67149
commit bbd45e78fa
No known key found for this signature in database
GPG Key ID: 316B77D7914D713C
3 changed files with 23 additions and 27 deletions

43
bot.py
View File

@ -147,7 +147,6 @@ class Bot:
if bard_token is not None:
self.bardbot = Bardbot(self.bard_token)
def __del__(self):
try:
loop = asyncio.get_event_loop()
@ -156,7 +155,6 @@ class Bot:
asyncio.set_event_loop(loop)
loop.run_until_complete(self._close())
async def _close(self):
await self.session.close()
@ -196,13 +194,13 @@ class Bot:
prompt = n.group(1)
if self.api_key != '':
try:
await self.chat(room_id,
reply_to_event_id,
prompt,
sender_id,
raw_user_message
)
asyncio.create_task(self.chat(room_id,
reply_to_event_id,
prompt,
sender_id,
raw_user_message
)
)
except Exception as e:
logger.error(e, exc_info=True)
await send_room_message(self.client, room_id, reply_message=str(e))
@ -214,12 +212,13 @@ class Bot:
if m:
prompt = m.group(1)
try:
await self.gpt(
asyncio.create_task(self.gpt(
room_id,
reply_to_event_id,
prompt, sender_id,
raw_user_message
)
)
except Exception as e:
logger.error(e, exc_info=True)
await send_room_message(self.client, room_id, reply_message=str(e))
@ -231,14 +230,14 @@ class Bot:
prompt = b.group(1)
# raw_content_body used for construct formatted_body
try:
await self.bing(
asyncio.create_task(self.bing(
room_id,
reply_to_event_id,
prompt,
sender_id,
raw_user_message
)
)
except Exception as e:
logger.error(e, exc_info=True)
await send_room_message(self.client, room_id, reply_message=str(e))
@ -249,7 +248,7 @@ class Bot:
if i:
prompt = i.group(1)
try:
await self.pic(room_id, prompt)
asyncio.create_task(self.pic(room_id, prompt))
except Exception as e:
logger.error(e, exc_info=True)
await send_room_message(self.client, room_id, reply_message=str(e))
@ -260,23 +259,22 @@ class Bot:
if b:
prompt = b.group(1)
try:
await self.bard(
asyncio.create_task(self.bard(
room_id,
reply_to_event_id,
prompt,
sender_id,
raw_user_message
)
)
except Exception as e:
logger.error(e, exc_info=True)
await send_room_message(self.client, room_id, reply_message={e})
# help command
h = self.help_prog.match(content_body)
if h:
await self.help(room_id)
asyncio.create_task(self.help(room_id))
# message_callback decryption_failure event
async def decryption_failure(self, room: MatrixRoom, event: MegolmEvent) -> None:
@ -528,7 +526,6 @@ class Bot:
except Exception as e:
raise Exception(e)
try:
text = text.strip()
await send_room_message(self.client, room_id, reply_message=text,
@ -549,7 +546,6 @@ class Bot:
except Exception as e:
raise Exception(e)
try:
text = text.strip()
await send_room_message(self.client, room_id, reply_message=text,
@ -569,8 +565,7 @@ class Bot:
raise Exception("Timeout error")
except Exception as e:
raise Exception(e)
try:
text = text.strip()
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)
except Exception as e:
raise Exception(e)
try:
content = str(response['content']).strip()
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:
logger.error(e, exc_info=True)
# !pic command
async def pic(self, room_id, prompt):
try:
await self.client.room_typing(room_id, timeout=180000)

View File

@ -1,7 +1,8 @@
import asyncio
import json
import os
import signal
from functools import partial
from bot import Bot
from log import getlogger

View File

@ -13,8 +13,8 @@ async def send_room_message(client: AsyncClient,
NORMAL_BODY = content = {"msgtype": "m.text", "body": reply_message, }
if reply_to_event_id == '':
if markdown_formatted:
# only format message contains multiline codes
if re.search(r"```", reply_message) is not None:
# only format message contains multiline codes, *, |
if re.search(r"```|\*|\|", reply_message) is not None:
content = {
"msgtype": "m.text",
"body": reply_message,