根据Pyrogram库文档,我正在尝试设置;phone_code";参数有一个可调用的函数,但我总是收到这个错误,有人能帮我吗?
from pyrogram import Client
import time
def codePhone(phone_number):
print('numero')
sleep (10)
return '2154'
app = Client("my_account",phone_number='39**********',phone_code=codePhone)
with app:
app.send_message("me", "Hi!")
错误:
Pyrogram v1.0.7, Copyright (C) 2017-2020 Dan <https://github.com/delivrance>
Licensed under the terms of the GNU Lesser General Public License v3 or later (LGPLv3+)
The confirmation code has been sent via SMS
Traceback (most recent call last):
File "/home/Topnews/Test/tdlib/prova3.py", line 10, in <module>
with app:
File "/usr/local/lib/python3.8/dist-packages/pyrogram/client.py", line 248, in __enter__
return self.start()
File "/usr/local/lib/python3.8/dist-packages/pyrogram/sync.py", line 56, in async_to_sync_wrap
return loop.run_until_complete(coroutine)
File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
return future.result()
File "/usr/local/lib/python3.8/dist-packages/pyrogram/methods/utilities/start.py", line 57, in start
await self.authorize()
File "/usr/local/lib/python3.8/dist-packages/pyrogram/client.py", line 327, in authorize
signed_in = await self.sign_in(self.phone_number, sent_code.phone_code_hash, self.phone_code)
File "/usr/local/lib/python3.8/dist-packages/pyrogram/methods/auth/sign_in.py", line 61, in sign_in
r = await self.send(
File "/usr/local/lib/python3.8/dist-packages/pyrogram/methods/advanced/send.py", line 77, in send
r = await self.session.send(
File "/usr/local/lib/python3.8/dist-packages/pyrogram/session/session.py", line 441, in send
return await self._send(data, timeout=timeout)
File "/usr/local/lib/python3.8/dist-packages/pyrogram/session/session.py", line 364, in _send
message = self.msg_factory(data)
File "/usr/local/lib/python3.8/dist-packages/pyrogram/session/internals/msg_factory.py", line 37, in __call__
len(body)
File "/usr/local/lib/python3.8/dist-packages/pyrogram/raw/core/tl_object.py", line 76, in __len__
return len(self.write())
File "/usr/local/lib/python3.8/dist-packages/pyrogram/raw/functions/auth/sign_in.py", line 81, in write
data.write(String(self.phone_code))
File "/usr/local/lib/python3.8/dist-packages/pyrogram/raw/core/primitives/string.py", line 31, in __new__
return super().__new__(cls, value.encode())
AttributeError: 'function' object has no attribute 'encode'
对不起,我认为我不完全理解这里的要求,但从外观上看,你需要让它工作。因此,在这种情况下,您需要了解传递给函数的参数是什么。
由于codePhone
函数接受一个参数(phone_number(,但在Client类中,您只是将其作为回调引用发送,这似乎是不正确的。
此外,根据模块的文档(Pyrogram(,这里说phone_code
参数需要是字符串(很可能是数字字符串->'2154'(。所以试着用它来代替。
如果这对你有用,请告诉我。
TL;DR:使用
app = Client("my_account",phone_number='39**********',phone_code='2154')
您使用的是1.0.7版本,但在0.16.0版中删除了对客户端参数回调函数的支持
删除了对客户端参数回调函数的支持,如phone_number、phone_code、password……支持更简单的顺序授权流程。
目前希望您为phone_code
提供str
。
Client
类中的phone_number
参数采用字符串,而不是函数。如果你想自动处理电话号码登录:
from pyrogram import Client
from pyrogram.errors import SessionPasswordNeeded
import os
api_id = input('API ID: ')
api_hash = input('API HASH: ')
phone = input('Phone Number (with +): ')
def connect():
try:
client = Client(phone, api_id, api_hash)
client.connect()
code = client.send_code(phone)
try:
signed_in = client.sign_in(phone, code.phone_code_hash, input('Verification Code: '))
client.accept_terms_of_service(signed_in.id)
except SessionPasswordNeeded:
client.check_password(input('Two-Step Verification password: '))
client.disconnect()
except Exception as ex:
os.remove(f'{phone}.session')
print(f'Error !nt`{type(ex).__name__}`nt{ex}')
return
with client as app:
app.send_message('me', "Hey it's YOU!")
if __name__ == '__main__':
connect()