pyrogram timestamp: 'int' object has no attribute 'timestamp'

Написал userbot'а telegram через pyrogram, хочу при помощи команды замутить половину чата. Однако, выдает следующую ошибку:

return int(dt.timestamp()) if dt else None
AttributeError: 'int' object has no attribute 'timestamp'

Мой код:

def thanos(_, msg):
    chat = msg.text.split(".thanos ", maxsplit=1)[1]
 
    members = [
        x
        for x in app.get_chat_members(chat)
        if x.status not in ("administrator", "creator")
    ]
 
    random.shuffle(members)
 
    app.send_message(chat, "Щелчок Таноса ... *щёлк*")
 
    for i in range(len(members) // 2):
        try:
            app.restrict_chat_member(
                chat_id=chat,
                user_id=members[i].user.id,
                permissions=ChatPermissions(),
                until_date=int(time.time() + 300),
            )
            app.send_message(chat, "Исчез " + members[i].user.first_name)
        except FloodWait as e:
            print("> waiting", e.x, "seconds.")
            time.sleep(e.x)

Полный текст ошибки:

'int' object has no attribute 'timestamp'
Traceback (most recent call last):
  File "C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\pyrogram\dispatcher.py", line 242, in handler_worker
    await self.loop.run_in_executor(
  File "C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\Desktop\клиент\main.py", line 85, in thanos
    app.restrict_chat_member(
  File "C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\pyrogram\sync.py", line 78, in async_to_sync_wrap
    return asyncio.run_coroutine_threadsafe(coroutine, main_loop).result()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 456, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\concurrent\futures\_base.py", line 401, in __get_result
    raise self._exception
  File "C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\pyrogram\methods\chats\restrict_chat_member.py", line 83, in restrict_chat_member
    until_date=utils.datetime_to_timestamp(until_date),
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\User\AppData\Local\Programs\Python\Python312\Lib\site-packages\pyrogram\utils.py", line 371, in datetime_to_timestamp
    return int(dt.timestamp()) if dt else None
               ^^^^^^^^^^^^
AttributeError: 'int' object has no attribute 'timestamp'

Ответы (1 шт):

Автор решения: mrgervant

Согласно документации Вы должны передавать в функцию restrict_chat_member() параметр until_date только в формате datetime - но не в int.

Если Вы смотрели/брали примеры на aiogram, то там допустимо передавать int, но это не работает в pyrogram.

Для исправления уберите преобразование значения времени в int и передайте datetime:

from datetime import datetime, timedelta

###

restrict_time = datetime.now() + timedelta(seconds=300)

try:
    app.restrict_chat_member(
        chat_id=chat,
        user_id=members[i].user.id,
        permissions=ChatPermissions(),
        until_date=restrict_time,
    )
###
→ Ссылка