如何获得电报用户头像照片的用户ID与aiogram v2?



我试图通过用户ID获取带有aiogram v2的Telegram用户头像。

def get_photo(user_id):
photo_data = bot.get_user_profile_photos(user_id, 1, 1)
return photo_data
@dp.message_handler(commands=['photo'])
async def get_user_photo():
photo_data = get_photo(367928353)
#logger.error(photo_data)
await message.answer(photo_data)

通过命令'/photo'我收到:

Task exception was never retrieved
future: <Task finished name='Task-8' coro=<Dispatcher._process_polling_updates() done, defined at /home/r/rlyzhov/.local/lib/python3.10/site-packages/aiogram/dispatcher/dispatcher.py:407> exception=TypeError('get_user_photo() takes 0 positional arguments but 1 was given')>
Traceback (most recent call last):
File "/home/r/rlyzhov/.local/lib/python3.10/site-packages/aiogram/dispatcher/dispatcher.py", line 415, in _process_polling_updates
for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)):
File "/home/r/rlyzhov/.local/lib/python3.10/site-packages/aiogram/dispatcher/dispatcher.py", line 235, in process_updates
return await asyncio.gather(*tasks)
File "/home/r/rlyzhov/.local/lib/python3.10/site-packages/aiogram/dispatcher/handler.py", line 117, in notify
response = await handler_obj.handler(*args, **partial_data)
File "/home/r/rlyzhov/.local/lib/python3.10/site-packages/aiogram/dispatcher/dispatcher.py", line 256, in process_update
return await self.message_handlers.notify(update.message)
File "/home/r/rlyzhov/.local/lib/python3.10/site-packages/aiogram/dispatcher/handler.py", line 117, in notify
response = await handler_obj.handler(*args, **partial_data)
TypeError: get_user_photo() takes 0 positional arguments but 1 was given

我做错了什么?

我理解lasttypeerror,但是我给它1个参数是什么?也许我对图形和异步函数的了解还太少

请告诉我我需要读什么来理解问题并解决它。谢谢你

try:通过用户ID获取带有aiogram v2的Telegram用户头像期望:电报用户照片接待:误差

首先您需要阅读文档,即关于处理程序的文档。只是你的函数get_phot是同步的,它使用异步方法bot.get_user_profile_photos,然后你创建一个处理程序get_user_photo(),但不从图形传输参数types.Message。我重写了你的代码,结果就是这样。

from aiogram import types
from loader import dp

@dp.message_handler(commands=['photo'])
async def get_user_photo(message: types.Message):
profile_pictures = await dp.bot.get_user_profile_photos(message.from_user.id)
await message.answer_photo(dict((profile_pictures.photos[0][0])).get("file_id"))

对于这个任务,我认为我们不需要创建另一个函数,但如果你想,你可以创建。在profile_pictures中,我们保存了PhotoSize,它存储了用户个人资料照片的所有信息。在下一行中,我们将PhotoSize转换为dict,并且只接受"file_id"。对于测试,我们将这张照片发送到聊天

最新更新