Move more things to use telethon methods
This commit is contained in:
@@ -21,19 +21,16 @@ import mimetypes
|
|||||||
|
|
||||||
import magic
|
import magic
|
||||||
|
|
||||||
from telethon.tl.functions.messages import (
|
from telethon.tl.functions.messages import (EditChatPhotoRequest, EditChatTitleRequest,
|
||||||
DeleteChatUserRequest, EditChatAdminRequest, EditChatPhotoRequest, EditChatTitleRequest,
|
UpdatePinnedMessageRequest, SetTypingRequest,
|
||||||
UpdatePinnedMessageRequest, SetTypingRequest, EditChatAboutRequest)
|
EditChatAboutRequest)
|
||||||
from telethon.tl.functions.channels import (
|
from telethon.tl.functions.channels import EditPhotoRequest, EditTitleRequest, JoinChannelRequest
|
||||||
EditAdminRequest, EditPhotoRequest, EditTitleRequest, JoinChannelRequest, LeaveChannelRequest)
|
|
||||||
from telethon.tl.functions.messages import ReadHistoryRequest as ReadMessageHistoryRequest
|
|
||||||
from telethon.tl.functions.channels import ReadHistoryRequest as ReadChannelHistoryRequest
|
|
||||||
from telethon.errors import (ChatNotModifiedError, PhotoExtInvalidError,
|
from telethon.errors import (ChatNotModifiedError, PhotoExtInvalidError,
|
||||||
PhotoInvalidDimensionsError, PhotoSaveFileInvalidError)
|
PhotoInvalidDimensionsError, PhotoSaveFileInvalidError)
|
||||||
from telethon.tl.patched import Message, MessageService
|
from telethon.tl.patched import Message, MessageService
|
||||||
from telethon.tl.types import (
|
from telethon.tl.types import (
|
||||||
ChatAdminRights, DocumentAttributeFilename, DocumentAttributeImageSize, GeoPoint,
|
DocumentAttributeFilename, DocumentAttributeImageSize, GeoPoint,
|
||||||
InputChatUploadedPhoto, InputUserSelf, MessageActionChatEditPhoto, MessageMediaGeo,
|
InputChatUploadedPhoto, MessageActionChatEditPhoto, MessageMediaGeo,
|
||||||
SendMessageCancelAction, SendMessageTypingAction, TypeInputPeer, TypeMessageEntity,
|
SendMessageCancelAction, SendMessageTypingAction, TypeInputPeer, TypeMessageEntity,
|
||||||
UpdateNewMessage, InputMediaUploadedDocument)
|
UpdateNewMessage, InputMediaUploadedDocument)
|
||||||
|
|
||||||
@@ -127,8 +124,7 @@ class PortalMatrix(BasePortal, MautrixBasePortal, ABC):
|
|||||||
await user.client.send_read_acknowledge(self.peer, max_id=message.tgid,
|
await user.client.send_read_acknowledge(self.peer, max_id=message.tgid,
|
||||||
clear_mentions=True)
|
clear_mentions=True)
|
||||||
|
|
||||||
async def kick_matrix(self, user: Union['u.User', 'p.Puppet'], source: 'u.User',
|
async def kick_matrix(self, user: Union['u.User', 'p.Puppet'], source: 'u.User') -> None:
|
||||||
ban: bool = False) -> None:
|
|
||||||
if user.tgid == source.tgid:
|
if user.tgid == source.tgid:
|
||||||
return
|
return
|
||||||
if isinstance(user, u.User) and await user.needs_relaybot(self):
|
if isinstance(user, u.User) and await user.needs_relaybot(self):
|
||||||
@@ -140,14 +136,7 @@ class PortalMatrix(BasePortal, MautrixBasePortal, ABC):
|
|||||||
if not self.has_bot:
|
if not self.has_bot:
|
||||||
return
|
return
|
||||||
source = self.bot
|
source = self.bot
|
||||||
target = await user.get_input_entity(source)
|
await source.client.kick_participant(self.peer, user.peer)
|
||||||
if self.peer_type == "chat":
|
|
||||||
await source.client(DeleteChatUserRequest(chat_id=self.tgid, user_id=target))
|
|
||||||
elif self.peer_type == "channel":
|
|
||||||
channel = await self.get_input_entity(source)
|
|
||||||
await source.client.edit_permissions(channel, target, view_messages=False)
|
|
||||||
if not ban:
|
|
||||||
await source.client.edit_permissions(channel, target, view_messages=True)
|
|
||||||
|
|
||||||
async def leave_matrix(self, user: 'u.User', event_id: EventID) -> None:
|
async def leave_matrix(self, user: 'u.User', event_id: EventID) -> None:
|
||||||
if await user.needs_relaybot(self):
|
if await user.needs_relaybot(self):
|
||||||
@@ -162,11 +151,8 @@ class PortalMatrix(BasePortal, MautrixBasePortal, ABC):
|
|||||||
del self.by_mxid[self.mxid]
|
del self.by_mxid[self.mxid]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
elif self.peer_type == "chat":
|
else:
|
||||||
await user.client(DeleteChatUserRequest(chat_id=self.tgid, user_id=InputUserSelf()))
|
await user.client.delete_dialog(self.peer)
|
||||||
elif self.peer_type == "channel":
|
|
||||||
channel = await self.get_input_entity(user)
|
|
||||||
await user.client(LeaveChannelRequest(channel=channel))
|
|
||||||
|
|
||||||
async def join_matrix(self, user: 'u.User', event_id: EventID) -> None:
|
async def join_matrix(self, user: 'u.User', event_id: EventID) -> None:
|
||||||
if await user.needs_relaybot(self):
|
if await user.needs_relaybot(self):
|
||||||
@@ -388,19 +374,13 @@ class PortalMatrix(BasePortal, MautrixBasePortal, ABC):
|
|||||||
|
|
||||||
async def _update_telegram_power_level(self, sender: 'u.User', user_id: TelegramID,
|
async def _update_telegram_power_level(self, sender: 'u.User', user_id: TelegramID,
|
||||||
level: int) -> None:
|
level: int) -> None:
|
||||||
if self.peer_type == "chat":
|
moderator = level >= 50
|
||||||
await sender.client(EditChatAdminRequest(
|
admin = level >= 75
|
||||||
chat_id=self.tgid, user_id=user_id, is_admin=level >= 50))
|
await sender.client.edit_admin(self.peer, user_id,
|
||||||
elif self.peer_type == "channel":
|
change_info=moderator, post_messages=moderator,
|
||||||
moderator = level >= 50
|
edit_messages=moderator, delete_messages=moderator,
|
||||||
admin = level >= 75
|
ban_users=moderator, invite_users=moderator,
|
||||||
rights = ChatAdminRights(change_info=moderator, post_messages=moderator,
|
pin_messages=moderator, add_admins=admin)
|
||||||
edit_messages=moderator, delete_messages=moderator,
|
|
||||||
ban_users=moderator, invite_users=moderator,
|
|
||||||
pin_messages=moderator, add_admins=admin)
|
|
||||||
await sender.client(
|
|
||||||
EditAdminRequest(channel=await self.get_input_entity(sender),
|
|
||||||
user_id=user_id, admin_rights=rights))
|
|
||||||
|
|
||||||
async def handle_matrix_power_levels(self, sender: 'u.User', new_users: Dict[UserID, int],
|
async def handle_matrix_power_levels(self, sender: 'u.User', new_users: Dict[UserID, int],
|
||||||
old_users: Dict[UserID, int]) -> None:
|
old_users: Dict[UserID, int]) -> None:
|
||||||
|
|||||||
@@ -112,6 +112,10 @@ class Puppet(CustomPuppetMixin):
|
|||||||
def tgid(self) -> TelegramID:
|
def tgid(self) -> TelegramID:
|
||||||
return self.id
|
return self.id
|
||||||
|
|
||||||
|
@property
|
||||||
|
def peer(self) -> PeerUser:
|
||||||
|
return PeerUser(user_id=self.tgid)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
async def is_logged_in() -> bool:
|
async def is_logged_in() -> bool:
|
||||||
""" Is True if the puppet is logged in. """
|
""" Is True if the puppet is logged in. """
|
||||||
@@ -127,7 +131,7 @@ class Puppet(CustomPuppetMixin):
|
|||||||
|
|
||||||
def get_input_entity(self, user: 'AbstractUser'
|
def get_input_entity(self, user: 'AbstractUser'
|
||||||
) -> Awaitable[Union[TypeInputPeer, TypeInputUser]]:
|
) -> Awaitable[Union[TypeInputPeer, TypeInputUser]]:
|
||||||
return user.client.get_input_entity(PeerUser(user_id=self.tgid))
|
return user.client.get_input_entity(self.peer)
|
||||||
|
|
||||||
# region DB conversion
|
# region DB conversion
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user