Add missing awaits and use lock for create_matrix_room. Fixes #49
This commit is contained in:
@@ -293,7 +293,7 @@ class CommandHandler:
|
|||||||
if not portal:
|
if not portal:
|
||||||
return await evt.reply("This is not a portal room.")
|
return await evt.reply("This is not a portal room.")
|
||||||
|
|
||||||
for user in portal.main_intent.get_room_members(portal.mxid):
|
for user in await portal.main_intent.get_room_members(portal.mxid):
|
||||||
if user != portal.main_intent.mxid:
|
if user != portal.main_intent.mxid:
|
||||||
try:
|
try:
|
||||||
await portal.main_intent.kick(portal.mxid, user, "Portal deleted.")
|
await portal.main_intent.kick(portal.mxid, user, "Portal deleted.")
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
from collections import deque
|
from collections import deque
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
import asyncio
|
||||||
import random
|
import random
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import hashlib
|
import hashlib
|
||||||
@@ -56,6 +57,7 @@ class Portal:
|
|||||||
self.about = about
|
self.about = about
|
||||||
self.photo_id = photo_id
|
self.photo_id = photo_id
|
||||||
self._main_intent = None
|
self._main_intent = None
|
||||||
|
self._room_create_lock = asyncio.Lock()
|
||||||
|
|
||||||
self._dedup = deque()
|
self._dedup = deque()
|
||||||
self._dedup_mxid = {}
|
self._dedup_mxid = {}
|
||||||
@@ -160,17 +162,26 @@ class Portal:
|
|||||||
await puppet.intent.join_room(self.mxid)
|
await puppet.intent.join_room(self.mxid)
|
||||||
|
|
||||||
async def create_matrix_room(self, user, entity=None, invites=None, update_if_exists=True):
|
async def create_matrix_room(self, user, entity=None, invites=None, update_if_exists=True):
|
||||||
if not entity:
|
if self.mxid:
|
||||||
entity = await user.client.get_entity(self.peer)
|
if update_if_exists:
|
||||||
self.log.debug("Fetched data: %s", entity)
|
if not entity:
|
||||||
|
entity = await user.client.get_entity(self.peer)
|
||||||
|
await self.update_after_create(user, entity, self.peer_type == "user")
|
||||||
|
await self.invite_matrix(invites or [])
|
||||||
|
return self.mxid
|
||||||
|
async with self._room_create_lock:
|
||||||
|
return await self._create_matrix_room(user, entity, invites)
|
||||||
|
|
||||||
|
async def _create_matrix_room(self, user, entity, invites):
|
||||||
direct = self.peer_type == "user"
|
direct = self.peer_type == "user"
|
||||||
|
|
||||||
if self.mxid:
|
if self.mxid:
|
||||||
if update_if_exists:
|
|
||||||
await self.update_after_create(user, entity, direct)
|
|
||||||
await self.invite_matrix(invites or [])
|
|
||||||
return self.mxid
|
return self.mxid
|
||||||
|
|
||||||
|
if not entity:
|
||||||
|
entity = await user.client.get_entity(self.peer)
|
||||||
|
self.log.debug("Fetched data: %s", entity)
|
||||||
|
|
||||||
self.log.debug(f"Creating room for {self.tgid_log}")
|
self.log.debug(f"Creating room for {self.tgid_log}")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -695,7 +706,7 @@ class Portal:
|
|||||||
|
|
||||||
async def handle_telegram_message(self, source, sender, evt):
|
async def handle_telegram_message(self, source, sender, evt):
|
||||||
if not self.mxid:
|
if not self.mxid:
|
||||||
await self.create_matrix_room(source, invites=[source.mxid])
|
await self.create_matrix_room(source, invites=[source.mxid], update_if_exists=False)
|
||||||
|
|
||||||
tg_space = self.tgid if self.peer_type == "channel" else source.tgid
|
tg_space = self.tgid if self.peer_type == "channel" else source.tgid
|
||||||
|
|
||||||
@@ -738,7 +749,8 @@ class Portal:
|
|||||||
create_and_exit = (MessageActionChatCreate, MessageActionChannelCreate)
|
create_and_exit = (MessageActionChatCreate, MessageActionChannelCreate)
|
||||||
create_and_continue = (MessageActionChatAddUser, MessageActionChatJoinedByLink)
|
create_and_continue = (MessageActionChatAddUser, MessageActionChatJoinedByLink)
|
||||||
if isinstance(action, create_and_exit + create_and_continue):
|
if isinstance(action, create_and_exit + create_and_continue):
|
||||||
self.create_matrix_room(source, invites=[source.mxid])
|
await self.create_matrix_room(source, invites=[source.mxid],
|
||||||
|
update_if_exists=isinstance(action, create_and_exit))
|
||||||
if not isinstance(action, create_and_continue):
|
if not isinstance(action, create_and_continue):
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -756,7 +768,6 @@ class Portal:
|
|||||||
elif isinstance(action, MessageActionChatJoinedByLink):
|
elif isinstance(action, MessageActionChatJoinedByLink):
|
||||||
await self.add_telegram_user(sender.id, source)
|
await self.add_telegram_user(sender.id, source)
|
||||||
elif isinstance(action, MessageActionChatDeleteUser):
|
elif isinstance(action, MessageActionChatDeleteUser):
|
||||||
kick_message = None
|
|
||||||
if sender.id != action.user_id:
|
if sender.id != action.user_id:
|
||||||
kick_message = f"Kicked by {sender.displayname}"
|
kick_message = f"Kicked by {sender.displayname}"
|
||||||
await self.delete_telegram_user(action.user_id, kick_message)
|
await self.delete_telegram_user(action.user_id, kick_message)
|
||||||
|
|||||||
Reference in New Issue
Block a user