Update Telethon, fix leave messages and stop deleting sessions
This commit is contained in:
+16
-16
@@ -128,8 +128,8 @@ class Portal:
|
|||||||
try:
|
try:
|
||||||
hash_content += {
|
hash_content += {
|
||||||
MessageMediaContact: lambda media: [media.user_id],
|
MessageMediaContact: lambda media: [media.user_id],
|
||||||
MessageMediaDocument: lambda media: [media.document.id, media.caption],
|
MessageMediaDocument: lambda media: [media.document.id],
|
||||||
MessageMediaPhoto: lambda media: [media.photo.id, media.caption],
|
MessageMediaPhoto: lambda media: [media.photo.id],
|
||||||
MessageMediaGeo: lambda media: [media.geo.long, media.geo.lat],
|
MessageMediaGeo: lambda media: [media.geo.long, media.geo.lat],
|
||||||
}[type(event.media)](event.media)
|
}[type(event.media)](event.media)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@@ -341,9 +341,9 @@ class Portal:
|
|||||||
puppet = p.Puppet.get(user_id)
|
puppet = p.Puppet.get(user_id)
|
||||||
user = u.User.get_by_tgid(user_id)
|
user = u.User.get_by_tgid(user_id)
|
||||||
kick_message = (f"Kicked by {sender.displayname}"
|
kick_message = (f"Kicked by {sender.displayname}"
|
||||||
if sender and sender.tgid != user.tgid
|
if sender and sender.tgid != puppet.tgid
|
||||||
else "Left Telegram chat")
|
else "Left Telegram chat")
|
||||||
if sender and sender.tgid != user.tgid:
|
if sender and sender.tgid != puppet.tgid:
|
||||||
await self.main_intent.kick(self.mxid, puppet.mxid, kick_message)
|
await self.main_intent.kick(self.mxid, puppet.mxid, kick_message)
|
||||||
else:
|
else:
|
||||||
await puppet.intent.leave_room(self.mxid)
|
await puppet.intent.leave_room(self.mxid)
|
||||||
@@ -819,8 +819,8 @@ class Portal:
|
|||||||
if self.mxid:
|
if self.mxid:
|
||||||
await user.intent.set_typing(self.mxid, is_typing=True)
|
await user.intent.set_typing(self.mxid, is_typing=True)
|
||||||
|
|
||||||
async def handle_telegram_photo(self, source, intent, media, relates_to=None):
|
async def handle_telegram_photo(self, source, intent, evt, relates_to=None):
|
||||||
largest_size = self._get_largest_photo_size(media.photo)
|
largest_size = self._get_largest_photo_size(evt.media.photo)
|
||||||
file = await util.transfer_file_to_matrix(self.db, source.client, intent,
|
file = await util.transfer_file_to_matrix(self.db, source.client, intent,
|
||||||
largest_size.location)
|
largest_size.location)
|
||||||
if not file:
|
if not file:
|
||||||
@@ -833,17 +833,18 @@ class Portal:
|
|||||||
"orientation": 0,
|
"orientation": 0,
|
||||||
"mimetype": file.mime_type,
|
"mimetype": file.mime_type,
|
||||||
}
|
}
|
||||||
name = media.caption
|
name = evt.message
|
||||||
await intent.set_typing(self.mxid, is_typing=False)
|
await intent.set_typing(self.mxid, is_typing=False)
|
||||||
return await intent.send_image(self.mxid, file.mxc, info=info, text=name,
|
return await intent.send_image(self.mxid, file.mxc, info=info, text=name,
|
||||||
relates_to=relates_to)
|
relates_to=relates_to)
|
||||||
|
|
||||||
async def handle_telegram_document(self, source, intent, media, relates_to=None):
|
async def handle_telegram_document(self, source, intent, evt, relates_to=None):
|
||||||
file = await util.transfer_file_to_matrix(self.db, source.client, intent, media.document)
|
document = evt.media.document
|
||||||
|
file = await util.transfer_file_to_matrix(self.db, source.client, intent, document)
|
||||||
if not file:
|
if not file:
|
||||||
return None
|
return None
|
||||||
name = media.caption
|
name = evt.message
|
||||||
for attr in media.document.attributes:
|
for attr in document.attributes:
|
||||||
if not name and isinstance(attr, DocumentAttributeFilename):
|
if not name and isinstance(attr, DocumentAttributeFilename):
|
||||||
name = attr.file_name
|
name = attr.file_name
|
||||||
if not file.was_converted:
|
if not file.was_converted:
|
||||||
@@ -851,9 +852,9 @@ class Portal:
|
|||||||
file.mime_type = mime_from_name or file.mime_type
|
file.mime_type = mime_from_name or file.mime_type
|
||||||
elif isinstance(attr, DocumentAttributeSticker):
|
elif isinstance(attr, DocumentAttributeSticker):
|
||||||
name = f"Sticker for {attr.alt}"
|
name = f"Sticker for {attr.alt}"
|
||||||
mime_type = media.document.mime_type or file.mime_type
|
mime_type = document.mime_type or file.mime_type
|
||||||
info = {
|
info = {
|
||||||
"size": media.document.size,
|
"size": document.size,
|
||||||
"mimetype": mime_type,
|
"mimetype": mime_type,
|
||||||
}
|
}
|
||||||
type = "m.file"
|
type = "m.file"
|
||||||
@@ -968,10 +969,9 @@ class Portal:
|
|||||||
elif evt.media:
|
elif evt.media:
|
||||||
relates_to = formatter.telegram_reply_to_matrix(evt, source)
|
relates_to = formatter.telegram_reply_to_matrix(evt, source)
|
||||||
if isinstance(evt.media, MessageMediaPhoto):
|
if isinstance(evt.media, MessageMediaPhoto):
|
||||||
response = await self.handle_telegram_photo(source, intent, evt.media, relates_to)
|
response = await self.handle_telegram_photo(source, intent, evt, relates_to)
|
||||||
elif isinstance(evt.media, MessageMediaDocument):
|
elif isinstance(evt.media, MessageMediaDocument):
|
||||||
response = await self.handle_telegram_document(source, intent, evt.media,
|
response = await self.handle_telegram_document(source, intent, evt, relates_to)
|
||||||
relates_to)
|
|
||||||
elif isinstance(evt.media, MessageMediaGeo):
|
elif isinstance(evt.media, MessageMediaGeo):
|
||||||
response = await self.handle_telegram_location(source, intent, evt.media.geo,
|
response = await self.handle_telegram_location(source, intent, evt.media.geo,
|
||||||
relates_to)
|
relates_to)
|
||||||
|
|||||||
@@ -49,15 +49,15 @@ class MautrixTelegramClient(TelegramClient):
|
|||||||
|
|
||||||
return self._get_response_message(request, result)
|
return self._get_response_message(request, result)
|
||||||
|
|
||||||
async def send_file(self, entity, file, mime_type=None, caption=None, attributes=None,
|
async def send_file(self, entity, file, mime_type=None, caption=None, entities=None,
|
||||||
file_name=None, reply_to=None, **kwargs):
|
attributes=None, file_name=None, reply_to=None, **kwargs):
|
||||||
entity = await self.get_input_entity(entity)
|
entity = await self.get_input_entity(entity)
|
||||||
reply_to = self._get_message_id(reply_to)
|
reply_to = self._get_message_id(reply_to)
|
||||||
|
|
||||||
file_handle = await self.upload_file(file, file_name=file_name, use_cache=False)
|
file_handle = await self.upload_file(file, file_name=file_name, use_cache=False)
|
||||||
|
|
||||||
if mime_type == "image/png":
|
if mime_type == "image/png":
|
||||||
media = InputMediaUploadedPhoto(file_handle, caption or "")
|
media = InputMediaUploadedPhoto(file_handle)
|
||||||
else:
|
else:
|
||||||
attributes = attributes or []
|
attributes = attributes or []
|
||||||
attr_dict = {type(attr): attr for attr in attributes}
|
attr_dict = {type(attr): attr for attr in attributes}
|
||||||
@@ -65,10 +65,10 @@ class MautrixTelegramClient(TelegramClient):
|
|||||||
media = InputMediaUploadedDocument(
|
media = InputMediaUploadedDocument(
|
||||||
file=file_handle,
|
file=file_handle,
|
||||||
mime_type=mime_type or "application/octet-stream",
|
mime_type=mime_type or "application/octet-stream",
|
||||||
attributes=list(attr_dict.values()),
|
attributes=list(attr_dict.values()))
|
||||||
caption=caption or "")
|
|
||||||
|
|
||||||
request = SendMediaRequest(entity, media, reply_to_msg_id=reply_to)
|
request = SendMediaRequest(entity, media, message=caption, entities=entities,
|
||||||
|
reply_to_msg_id=reply_to)
|
||||||
return self._get_response_message(request, await self(request))
|
return self._get_response_message(request, await self(request))
|
||||||
|
|
||||||
async def download_file_bytes(self, location):
|
async def download_file_bytes(self, location):
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ class User(AbstractUser):
|
|||||||
self.log.debug(f"Unauthenticated user {self.name} start()ed, deleting...")
|
self.log.debug(f"Unauthenticated user {self.name} start()ed, deleting...")
|
||||||
# User not logged in -> forget user
|
# User not logged in -> forget user
|
||||||
self.client.disconnect()
|
self.client.disconnect()
|
||||||
self.client.session.delete()
|
# self.client.session.delete()
|
||||||
self.delete()
|
self.delete()
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
|||||||
@@ -29,9 +29,9 @@ setuptools.setup(
|
|||||||
"telethon-asyncio-git",
|
"telethon-asyncio-git",
|
||||||
],
|
],
|
||||||
dependency_links=[
|
dependency_links=[
|
||||||
("https://github.com/tulir/telethon-asyncio/tarball/0ee04f939267c29f9a684f1e5c90cedd67ecb4f9#egg=telethon-asyncio-git-0.17.4+1"
|
("https://github.com/tulir/telethon-asyncio/tarball/4432a2d14eded4463f8f30127d39b2801f671cf1#egg=telethon-asyncio-git-0.17.4+2"
|
||||||
if sys.version_info >= (3, 6)
|
if sys.version_info >= (3, 6)
|
||||||
else "https://github.com/tulir/telethon-asyncio/tarball/24ffd719cb6fa3eba6c2585c860c685275e12c52#egg=telethon-asyncio-git-0.17.4+1")
|
else "https://github.com/tulir/telethon-asyncio/tarball/4432a2d14eded4463f8f30127d39b2801f671cf1#egg=telethon-asyncio-git-0.17.4+2")
|
||||||
],
|
],
|
||||||
|
|
||||||
classifiers=[
|
classifiers=[
|
||||||
|
|||||||
Reference in New Issue
Block a user