mirror of
https://github.com/LonamiWebs/Telethon.git
synced 2025-02-16 19:41:07 +03:00
Fix get(_input)_users in ChatAction with no service msg
This commit is contained in:
parent
0814a20ec4
commit
9a86447b6e
|
@ -381,7 +381,8 @@ class ChatAction(EventBuilder):
|
||||||
if not self._user_ids:
|
if not self._user_ids:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
if self._users is None or len(self._users) != len(self._user_ids):
|
# Note: we access the property first so that it fills if needed
|
||||||
|
if (self.users is None or len(self._users) != len(self._user_ids)) and self.action_message:
|
||||||
await self.action_message._reload_message()
|
await self.action_message._reload_message()
|
||||||
self._users = [
|
self._users = [
|
||||||
u for u in self.action_message.action_entities
|
u for u in self.action_message.action_entities
|
||||||
|
@ -397,19 +398,31 @@ class ChatAction(EventBuilder):
|
||||||
if self._input_users is None and self._user_ids:
|
if self._input_users is None and self._user_ids:
|
||||||
self._input_users = []
|
self._input_users = []
|
||||||
for user_id in self._user_ids:
|
for user_id in self._user_ids:
|
||||||
|
# First try to get it from our entities
|
||||||
|
try:
|
||||||
|
self._input_users.append(utils.get_input_peer(self._entities[user_id]))
|
||||||
|
continue
|
||||||
|
except (KeyError, TypeError) as e:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# If missing, try from the entity cache
|
||||||
try:
|
try:
|
||||||
self._input_users.append(self._client._entity_cache[user_id])
|
self._input_users.append(self._client._entity_cache[user_id])
|
||||||
|
continue
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return self._input_users or []
|
return self._input_users or []
|
||||||
|
|
||||||
async def get_input_users(self):
|
async def get_input_users(self):
|
||||||
"""
|
"""
|
||||||
Returns `input_users` but will make an API call if necessary.
|
Returns `input_users` but will make an API call if necessary.
|
||||||
"""
|
"""
|
||||||
self._input_users = None
|
if not self._user_ids:
|
||||||
if self._input_users is None:
|
return []
|
||||||
await self.action_message._reload_message()
|
|
||||||
|
# Note: we access the property first so that it fills if needed
|
||||||
|
if (self.input_users is None or len(self._input_users) != len(self._user_ids)) and self.action_message:
|
||||||
self._input_users = [
|
self._input_users = [
|
||||||
utils.get_input_peer(u)
|
utils.get_input_peer(u)
|
||||||
for u in self.action_message.action_entities
|
for u in self.action_message.action_entities
|
||||||
|
|
0
tests/telethon/crypto/__init__.py
Normal file
0
tests/telethon/crypto/__init__.py
Normal file
0
tests/telethon/events/__init__.py
Normal file
0
tests/telethon/events/__init__.py
Normal file
67
tests/telethon/events/test_chataction.py
Normal file
67
tests/telethon/events/test_chataction.py
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from telethon import TelegramClient, events, types, utils
|
||||||
|
|
||||||
|
|
||||||
|
def get_client():
|
||||||
|
return TelegramClient(None, 1, '1')
|
||||||
|
|
||||||
|
|
||||||
|
def get_user_456():
|
||||||
|
return types.User(
|
||||||
|
id=456,
|
||||||
|
access_hash=789,
|
||||||
|
first_name='User 123'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_get_input_users_no_action_message_no_entities():
|
||||||
|
event = events.ChatAction.build(types.UpdateChatParticipantDelete(
|
||||||
|
chat_id=123,
|
||||||
|
user_id=456,
|
||||||
|
version=1
|
||||||
|
))
|
||||||
|
event._set_client(get_client())
|
||||||
|
|
||||||
|
assert await event.get_input_users() == []
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_get_input_users_no_action_message():
|
||||||
|
user = get_user_456()
|
||||||
|
event = events.ChatAction.build(types.UpdateChatParticipantDelete(
|
||||||
|
chat_id=123,
|
||||||
|
user_id=456,
|
||||||
|
version=1
|
||||||
|
))
|
||||||
|
event._set_client(get_client())
|
||||||
|
event._entities[user.id] = user
|
||||||
|
|
||||||
|
assert await event.get_input_users() == [utils.get_input_peer(user)]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_get_users_no_action_message_no_entities():
|
||||||
|
event = events.ChatAction.build(types.UpdateChatParticipantDelete(
|
||||||
|
chat_id=123,
|
||||||
|
user_id=456,
|
||||||
|
version=1
|
||||||
|
))
|
||||||
|
event._set_client(get_client())
|
||||||
|
|
||||||
|
assert await event.get_users() == []
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_get_users_no_action_message():
|
||||||
|
user = get_user_456()
|
||||||
|
event = events.ChatAction.build(types.UpdateChatParticipantDelete(
|
||||||
|
chat_id=123,
|
||||||
|
user_id=456,
|
||||||
|
version=1
|
||||||
|
))
|
||||||
|
event._set_client(get_client())
|
||||||
|
event._entities[user.id] = user
|
||||||
|
|
||||||
|
assert await event.get_users() == [user]
|
0
tests/telethon/extensions/__init__.py
Normal file
0
tests/telethon/extensions/__init__.py
Normal file
Loading…
Reference in New Issue
Block a user