Merge branch 'master' into bots
This commit is contained in:
@@ -427,9 +427,19 @@ class IntentAPI:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_event_url(room_id, event_type, txn_id):
|
def _get_event_url(room_id, event_type, txn_id):
|
||||||
|
if not room_id:
|
||||||
|
raise ValueError("Room ID not given")
|
||||||
|
elif not event_type:
|
||||||
|
raise ValueError("Event type not given")
|
||||||
|
elif not txn_id:
|
||||||
|
raise ValueError("Transaction ID not given")
|
||||||
return f"/rooms/{quote(room_id)}/send/{quote(event_type)}/{quote(txn_id)}"
|
return f"/rooms/{quote(room_id)}/send/{quote(event_type)}/{quote(txn_id)}"
|
||||||
|
|
||||||
async def send_event(self, room_id, event_type, content, txn_id=None):
|
async def send_event(self, room_id, event_type, content, txn_id=None):
|
||||||
|
if not room_id:
|
||||||
|
raise ValueError("Room ID not given")
|
||||||
|
elif not event_type:
|
||||||
|
raise ValueError("Event type not given")
|
||||||
await self.ensure_joined(room_id)
|
await self.ensure_joined(room_id)
|
||||||
await self._ensure_has_power_level_for(room_id, event_type)
|
await self._ensure_has_power_level_for(room_id, event_type)
|
||||||
|
|
||||||
@@ -442,29 +452,47 @@ class IntentAPI:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_state_url(room_id, event_type, state_key=""):
|
def _get_state_url(room_id, event_type, state_key=""):
|
||||||
|
if not room_id:
|
||||||
|
raise ValueError("Room ID not given")
|
||||||
|
elif not event_type:
|
||||||
|
raise ValueError("Event type not given")
|
||||||
url = f"/rooms/{quote(room_id)}/state/{quote(event_type)}"
|
url = f"/rooms/{quote(room_id)}/state/{quote(event_type)}"
|
||||||
if state_key:
|
if state_key:
|
||||||
url += f"/{quote(state_key)}"
|
url += f"/{quote(state_key)}"
|
||||||
return url
|
return url
|
||||||
|
|
||||||
async def send_state_event(self, room_id, event_type, content, state_key=""):
|
async def send_state_event(self, room_id, event_type, content, state_key=""):
|
||||||
|
if not room_id:
|
||||||
|
raise ValueError("Room ID not given")
|
||||||
|
elif not event_type:
|
||||||
|
raise ValueError("Event type not given")
|
||||||
await self.ensure_joined(room_id)
|
await self.ensure_joined(room_id)
|
||||||
await self._ensure_has_power_level_for(room_id, event_type)
|
await self._ensure_has_power_level_for(room_id, event_type)
|
||||||
url = self._get_state_url(room_id, event_type, state_key)
|
url = self._get_state_url(room_id, event_type, state_key)
|
||||||
return await self.client.request("PUT", url, content)
|
return await self.client.request("PUT", url, content)
|
||||||
|
|
||||||
async def get_state_event(self, room_id, event_type, state_key=""):
|
async def get_state_event(self, room_id, event_type, state_key=""):
|
||||||
|
if not room_id:
|
||||||
|
raise ValueError("Room ID not given")
|
||||||
|
elif not event_type:
|
||||||
|
raise ValueError("Event type not given")
|
||||||
await self.ensure_joined(room_id)
|
await self.ensure_joined(room_id)
|
||||||
url = self._get_state_url(room_id, event_type, state_key)
|
url = self._get_state_url(room_id, event_type, state_key)
|
||||||
return await self.client.request("GET", url)
|
return await self.client.request("GET", url)
|
||||||
|
|
||||||
def join_room(self, room_id):
|
def join_room(self, room_id):
|
||||||
|
if not room_id:
|
||||||
|
raise ValueError("Room ID not given")
|
||||||
return self.ensure_joined(room_id, ignore_cache=True)
|
return self.ensure_joined(room_id, ignore_cache=True)
|
||||||
|
|
||||||
def _join_room_direct(self, room):
|
def _join_room_direct(self, room):
|
||||||
|
if not room:
|
||||||
|
raise ValueError("Room ID not given")
|
||||||
return self.client.request("POST", f"/join/{quote(room)}")
|
return self.client.request("POST", f"/join/{quote(room)}")
|
||||||
|
|
||||||
def leave_room(self, room_id):
|
def leave_room(self, room_id):
|
||||||
|
if not room_id:
|
||||||
|
raise ValueError("Room ID not given")
|
||||||
try:
|
try:
|
||||||
self.state_store.left(room_id, self.mxid)
|
self.state_store.left(room_id, self.mxid)
|
||||||
return self.client.request("POST", f"/rooms/{quote(room_id)}/leave")
|
return self.client.request("POST", f"/rooms/{quote(room_id)}/leave")
|
||||||
@@ -473,6 +501,8 @@ class IntentAPI:
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
def get_room_memberships(self, room_id):
|
def get_room_memberships(self, room_id):
|
||||||
|
if not room_id:
|
||||||
|
raise ValueError("Room ID not given")
|
||||||
return self.client.request("GET", f"/rooms/{quote(room_id)}/members")
|
return self.client.request("GET", f"/rooms/{quote(room_id)}/members")
|
||||||
|
|
||||||
async def get_room_members(self, room_id, allowed_memberships=("join",)):
|
async def get_room_members(self, room_id, allowed_memberships=("join",)):
|
||||||
@@ -490,6 +520,8 @@ class IntentAPI:
|
|||||||
# region Ensure functions
|
# region Ensure functions
|
||||||
|
|
||||||
async def ensure_joined(self, room_id, ignore_cache=False):
|
async def ensure_joined(self, room_id, ignore_cache=False):
|
||||||
|
if not room_id:
|
||||||
|
raise ValueError("Room ID not given")
|
||||||
if not ignore_cache and self.state_store.is_joined(room_id, self.mxid):
|
if not ignore_cache and self.state_store.is_joined(room_id, self.mxid):
|
||||||
return
|
return
|
||||||
await self.ensure_registered()
|
await self.ensure_registered()
|
||||||
@@ -524,6 +556,11 @@ class IntentAPI:
|
|||||||
self.state_store.registered(self.mxid)
|
self.state_store.registered(self.mxid)
|
||||||
|
|
||||||
async def _ensure_has_power_level_for(self, room_id, event_type):
|
async def _ensure_has_power_level_for(self, room_id, event_type):
|
||||||
|
if not room_id:
|
||||||
|
raise ValueError("Room ID not given")
|
||||||
|
elif not event_type:
|
||||||
|
raise ValueError("Event type not given")
|
||||||
|
|
||||||
if not self.state_store.has_power_levels(room_id):
|
if not self.state_store.has_power_levels(room_id):
|
||||||
await self.get_power_levels(room_id)
|
await self.get_power_levels(room_id)
|
||||||
if self.state_store.has_power_level(room_id, self.mxid, event_type):
|
if self.state_store.has_power_level(room_id, self.mxid, event_type):
|
||||||
|
|||||||
@@ -151,11 +151,12 @@ async def join(evt):
|
|||||||
for chat in updates.chats:
|
for chat in updates.chats:
|
||||||
portal = po.Portal.get_by_entity(chat)
|
portal = po.Portal.get_by_entity(chat)
|
||||||
if portal.mxid:
|
if portal.mxid:
|
||||||
await portal.create_matrix_room(evt.sender, chat, [evt.sender.mxid])
|
|
||||||
return await evt.reply(f"Created room for {portal.title}")
|
|
||||||
else:
|
|
||||||
await portal.invite_matrix([evt.sender.mxid])
|
await portal.invite_matrix([evt.sender.mxid])
|
||||||
return await evt.reply(f"Invited you to portal of {portal.title}")
|
return await evt.reply(f"Invited you to portal of {portal.title}")
|
||||||
|
else:
|
||||||
|
await evt.reply(f"Creating room for {chat.title}... This might take a while.")
|
||||||
|
await portal.create_matrix_room(evt.sender, chat, [evt.sender.mxid])
|
||||||
|
return await evt.reply(f"Created room for {portal.title}")
|
||||||
|
|
||||||
|
|
||||||
@command_handler()
|
@command_handler()
|
||||||
|
|||||||
@@ -397,10 +397,18 @@ class Portal:
|
|||||||
return chat.users, chat.full_chat.participants.participants
|
return chat.users, chat.full_chat.participants.participants
|
||||||
elif self.peer_type == "channel":
|
elif self.peer_type == "channel":
|
||||||
try:
|
try:
|
||||||
participants = await user.client(GetParticipantsRequest(
|
users, participants = [], []
|
||||||
entity, ChannelParticipantsRecent(), offset=0, limit=100, hash=0
|
offset = 0
|
||||||
))
|
while True:
|
||||||
return participants.users, participants.participants
|
response = await user.client(GetParticipantsRequest(
|
||||||
|
entity, ChannelParticipantsSearch(""), offset=offset, limit=100, hash=0
|
||||||
|
))
|
||||||
|
if not response.users:
|
||||||
|
break
|
||||||
|
participants += response.participants
|
||||||
|
users += response.users
|
||||||
|
offset += len(response.users)
|
||||||
|
return users, participants
|
||||||
except ChatAdminRequiredError:
|
except ChatAdminRequiredError:
|
||||||
return [], []
|
return [], []
|
||||||
elif self.peer_type == "user":
|
elif self.peer_type == "user":
|
||||||
@@ -1058,6 +1066,11 @@ class Portal:
|
|||||||
self.db.commit()
|
self.db.commit()
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
|
try:
|
||||||
|
del self.by_tgid[self.tgid_full]
|
||||||
|
del self.by_mxid[self.mxid]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
self.db.delete(self.to_db())
|
self.db.delete(self.to_db())
|
||||||
self.db.commit()
|
self.db.commit()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user