3

Telegram の CLI バージョン ( https://telegram.org/ ) をダウンロードしました。その CLI インターフェイスのそれほど完全ではないバージョンは、 https ://github.com/griganton/telepy からダウンロードされました。

現在、認証はすべて正常に機能していますが、実際の機能はありません。

だから私はJASON-Schemeを少し変更し、初期認証に必要な機能を追加しました

{'id': '1988976461',
 'method': 'sendCode',
 'params': [{'name': 'phone_number', 'type': 'string'},
            {'name': 'sms_type', 'type': 'int'},
            {'name': 'api_id', 'type': 'int'},
            {'name': 'api_hash', 'type': 'string'},
            {'name': 'lang_code', 'type': 'string'}],
 'type': 'SentCode'}

ドキュメント https://core.telegram.org/method/auth.sendCodeに書かれているとおり

ドキュメントによると、SMSコードを要求するメッセージを送信した後 auth.SentCode、パケットの先頭にある16進コードで受信する必要があるよう0xEFED51D9ですが、代わりにサーバーからの応答として何かを受信して​​いますmsg_container73f1f8dc私の要求にまったく関係がないように見えるタイプの。

これは全体として非常に面倒で奇妙に思えます。全体として、ドキュメントに従って、要求どおりに実装しようとした原因がわかりません。

私が送信しているパケットは問題ないように見え、実際に SmsCode を自分の電話に受け取ります..しかし、受け取った応答が悪い \ なんらかの理由で不明です。

JSON に実装された関数を次のように呼び出しています。

auth = Session.method_call('sendCode', phone_number=PHONE_NUMBER, sms_type=0, api_id=MY_API_ID, api_hash=MY_API_HASH, lang_code="en")

だからそれは機能しています..しかし、私は phone_code_hash. 何らかの理由で、Telegram 自体のドキュメントも奇妙であることに注意してください。彼らが提供したクエリの例を見ると、数値はドキュメントの内容と一致しません(ドキュメントから引用):

クエリの例:

(auth.sendCode "79991234567" 1 32 "test-hash" "en")
=
(auth.sentCode
  phone_registered:(boolFalse)
  phone_code_hash:"2dc02d2cda9e615c84"
)

d16ff372 3939370b 33323139 37363534 00000001 00000020 73657409 61682d74 00006873 e77e812d
=
2215bcbd bc799737 63643212 32643230 39616463 35313665 00343863 e12b7901

ここから取得: https://core.telegram.org/method/auth.sendCode

各部分で予想される最初の DWORD は異なる必要があります。例:768d5f4dの代わりにd16ff372..

それで、私は何が欠けていますか?

いくつかの参照(コードセクションとして配置しないと、何らかの理由でこれを投稿できません)

https://core.telegram.org/constructor/auth.sentCode
https://core.telegram.org/mtproto/service_messages
https://core.telegram.org/method/auth.sendCode
4

2 に答える 2

0

ほとんどの場合、テレグラムはメッセージを msg_container にパックします。

たとえば、最後のメッセージの予想される応答とともに、以前のメッセージの Msg_acks を取得する場合があります。

最善の策は、受信したコンテナーのケースを処理するようにコードをセットアップし、コンテナー内のアイテムの数を確認してから、受信したメッセージをループ処理し、さまざまなメッセージ タイプを適切なハンドラーに渡すことです。

また、gzip 圧縮されたメッセージを含む rpc_response を取得する可能性があることに注意してください。その場合、解凍してから、メッセージのコレクションを含む可能性のあるメッセージ コンテンツを処理する必要があります。

乾杯

于 2016-02-20T00:12:18.267 に答える
0

問題は、ソケットの不適切な処理でした..サーバーは 2 つのパケットを送信しました。

最初のパケットは一部Message_Serviceで、2 番目のパケットは実際に必要なデータでした。

ドキュメントでこれらのメッセージについて何も言わなかったので、それは奇妙です

于 2015-04-27T07:00:12.680 に答える