Add respond, reply and delete methods to events.ChatAction

Also introduces the new .action_message member.
This commit is contained in:
Lonami Exo 2018-03-07 17:51:59 +01:00
parent dc99d119c3
commit 801018fa9b

View File

@ -518,37 +518,37 @@ class ChatAction(_EventBuilder):
msg = update.message msg = update.message
action = update.message.action action = update.message.action
if isinstance(action, types.MessageActionChatJoinedByLink): if isinstance(action, types.MessageActionChatJoinedByLink):
event = ChatAction.Event(msg.to_id, event = ChatAction.Event(msg,
added_by=True, added_by=True,
users=msg.from_id) users=msg.from_id)
elif isinstance(action, types.MessageActionChatAddUser): elif isinstance(action, types.MessageActionChatAddUser):
event = ChatAction.Event(msg.to_id, event = ChatAction.Event(msg,
added_by=msg.from_id or True, added_by=msg.from_id or True,
users=action.users) users=action.users)
elif isinstance(action, types.MessageActionChatDeleteUser): elif isinstance(action, types.MessageActionChatDeleteUser):
event = ChatAction.Event(msg.to_id, event = ChatAction.Event(msg,
kicked_by=msg.from_id or True, kicked_by=msg.from_id or True,
users=action.user_id) users=action.user_id)
elif isinstance(action, types.MessageActionChatCreate): elif isinstance(action, types.MessageActionChatCreate):
event = ChatAction.Event(msg.to_id, event = ChatAction.Event(msg,
users=action.users, users=action.users,
created=True, created=True,
new_title=action.title) new_title=action.title)
elif isinstance(action, types.MessageActionChannelCreate): elif isinstance(action, types.MessageActionChannelCreate):
event = ChatAction.Event(msg.to_id, event = ChatAction.Event(msg,
created=True, created=True,
users=msg.from_id, users=msg.from_id,
new_title=action.title) new_title=action.title)
elif isinstance(action, types.MessageActionChatEditTitle): elif isinstance(action, types.MessageActionChatEditTitle):
event = ChatAction.Event(msg.to_id, event = ChatAction.Event(msg,
users=msg.from_id, users=msg.from_id,
new_title=action.title) new_title=action.title)
elif isinstance(action, types.MessageActionChatEditPhoto): elif isinstance(action, types.MessageActionChatEditPhoto):
event = ChatAction.Event(msg.to_id, event = ChatAction.Event(msg,
users=msg.from_id, users=msg.from_id,
new_photo=action.photo) new_photo=action.photo)
elif isinstance(action, types.MessageActionChatDeletePhoto): elif isinstance(action, types.MessageActionChatDeletePhoto):
event = ChatAction.Event(msg.to_id, event = ChatAction.Event(msg,
users=msg.from_id, users=msg.from_id,
new_photo=True) new_photo=True)
else: else:
@ -591,10 +591,17 @@ class ChatAction(_EventBuilder):
new_title (:obj:`bool`, optional): new_title (:obj:`bool`, optional):
The new title string for the chat, if applicable. The new title string for the chat, if applicable.
""" """
def __init__(self, chat_peer, new_pin=None, new_photo=None, def __init__(self, where, new_pin=None, new_photo=None,
added_by=None, kicked_by=None, created=None, added_by=None, kicked_by=None, created=None,
users=None, new_title=None): users=None, new_title=None, action_message=None):
super().__init__(chat_peer=chat_peer, msg_id=new_pin) if isinstance(where, types.MessageService):
self.action_message = where
where = where.to_id
else:
self.action_message = None
super().__init__(chat_peer=where, msg_id=new_pin)
self.action_message = action_message
self.new_pin = isinstance(new_pin, int) self.new_pin = isinstance(new_pin, int)
self._pinned_message = new_pin self._pinned_message = new_pin
@ -626,6 +633,40 @@ class ChatAction(_EventBuilder):
self._input_users = None self._input_users = None
self.new_title = new_title self.new_title = new_title
def respond(self, *args, **kwargs):
"""
Responds to the chat action message (not as a reply).
Shorthand for ``client.send_message(event.chat, ...)``.
"""
return self._client.send_message(self.input_chat, *args, **kwargs)
def reply(self, *args, **kwargs):
"""
Replies to the chat action message (as a reply). Shorthand for
``client.send_message(event.chat, ..., reply_to=event.message.id)``.
Has the same effect as ``.respond()`` if there is no message.
"""
if not self.action_message:
return self.respond(*args, **kwargs)
kwargs['reply_to'] = self.action_message.id
return self._client.send_message(self.input_chat, *args, **kwargs)
def delete(self, *args, **kwargs):
"""
Deletes the chat action message. You're responsible for checking
whether you have the permission to do so, or to except the error
otherwise. This is a shorthand for
``client.delete_messages(event.chat, event.message, ...)``.
Does nothing if no message action triggered this event.
"""
if self.action_message:
return self._client.delete_messages(self.input_chat,
[self.action_message],
*args, **kwargs)
@property @property
def pinned_message(self): def pinned_message(self):
""" """