我正在使用以下函数从聊天中获取消息(这是一个电视节目库)
async def dump_all_messages(channel) -> list:
'''функция для сбора сообщений с канала'''
offset_msg = 0 # номер записи, с которой начинается считывание
limit_msg = 100 # максимальное число записей, передаваемых за один раз
all_messages = [] # список всех сообщений
total_messages = 0
total_count_limit = 0
while True:
history = await telethon_client(GetHistoryRequest(
peer=channel,
offset_id=offset_msg,
offset_date=None, add_offset=0,
limit=limit_msg, max_id=0, min_id=0,
hash=0))
if not history.messages:
break
messages = history.messages
for message in messages:
message = message.to_dict()
all_messages.append({message['from_id']: message['message'].replace('\n', ' ').replace(r'\u', ' ')}):
offset_msg = messages[len(messages) - 1].id
total_messages = len(all_messages)
if total_count_limit != 0 and total_messages >= total_count_limit:
break
return all_messages
问题是这个函数返回发件人的 id,我需要昵称。但我找不到常规API 的函数(我不使用 bot-api),它允许我通过用户的 id 获取用户的昵称。我试过了
filter_user = ChannelParticipantsSearch('')
while True:
participants = await telethon_client(GetParticipantsRequest(channel,
filter_user, offset_user, limit_user, hash=0))
其中字符串被视为过滤器,即 不是id,而是昵称。我还尝试了 pyrogram 库方法
with Client('user', api, 'hash') as app:
user = app.get_users('username')
name = user.username
return name
但她也需要昵称而不是身份。如何通过他的 id 在电报中获取一个人的昵称?
使用get_entity()方法,您可以将几乎任何东西作为输入传递给它:
user = await client.get_entity(1234567)