Fix message receiving in MQTT
This commit is contained in:
@@ -4,6 +4,24 @@ import paho.mqtt.client
|
|||||||
from . import _util, _graphql
|
from . import _util, _graphql
|
||||||
|
|
||||||
|
|
||||||
|
def fetch_sequence_id(state):
|
||||||
|
"""Fetch sequence ID."""
|
||||||
|
params = {
|
||||||
|
"limit": 1,
|
||||||
|
"tags": ["INBOX"],
|
||||||
|
"before": None,
|
||||||
|
"includeDeliveryReceipts": False,
|
||||||
|
"includeSeqID": True,
|
||||||
|
}
|
||||||
|
# Same request as in `Client.fetchThreadList`
|
||||||
|
(j,) = state._graphql_requests(_graphql.from_doc_id("1349387578499440", params))
|
||||||
|
try:
|
||||||
|
return int(j["viewer"]["message_threads"]["sync_sequence_id"])
|
||||||
|
except (KeyError, ValueError):
|
||||||
|
# TODO: Proper exceptions
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
@attr.s(slots=True)
|
@attr.s(slots=True)
|
||||||
class Mqtt:
|
class Mqtt:
|
||||||
_state = attr.ib()
|
_state = attr.ib()
|
||||||
@@ -21,6 +39,17 @@ class Mqtt:
|
|||||||
|
|
||||||
# Generate a random session ID between 1 and 9007199254740991
|
# Generate a random session ID between 1 and 9007199254740991
|
||||||
session_id = random.randint(1, 2 ** 53)
|
session_id = random.randint(1, 2 ** 53)
|
||||||
|
last_seq_id = fetch_sequence_id(state)
|
||||||
|
|
||||||
|
messenger_sync_create_queue_payload = {
|
||||||
|
"sync_api_version": 10,
|
||||||
|
"max_deltas_able_to_process": 1000,
|
||||||
|
"delta_batch_size": 500,
|
||||||
|
"encoding": "JSON",
|
||||||
|
"entity_fbid": state.user_id,
|
||||||
|
"initial_titan_sequence_id": str(last_seq_id),
|
||||||
|
"device_params": None,
|
||||||
|
}
|
||||||
|
|
||||||
username = {
|
username = {
|
||||||
# The user ID
|
# The user ID
|
||||||
@@ -62,7 +91,20 @@ class Mqtt:
|
|||||||
"/sr_res",
|
"/sr_res",
|
||||||
],
|
],
|
||||||
# MQTT extension by FB, allows making a PUBLISH while CONNECTing
|
# MQTT extension by FB, allows making a PUBLISH while CONNECTing
|
||||||
"pm": [],
|
"pm": [
|
||||||
|
# This is required to actually receive messages
|
||||||
|
{
|
||||||
|
"topic": "/messenger_sync_create_queue",
|
||||||
|
"payload": _util.json_minimal(messenger_sync_create_queue_payload),
|
||||||
|
"qos": 1,
|
||||||
|
"messageId": 65536,
|
||||||
|
}
|
||||||
|
# The above is more efficient, but the same effect could have been
|
||||||
|
# acheived with:
|
||||||
|
# def on_connect(*args):
|
||||||
|
# mqtt.publish("/messenger_sync_create_queue", ..., qos=1)
|
||||||
|
# mqtt.on_connect = on_connect
|
||||||
|
],
|
||||||
# Unknown parameters
|
# Unknown parameters
|
||||||
"cp": 3,
|
"cp": 3,
|
||||||
"ecp": 10,
|
"ecp": 10,
|
||||||
|
Reference in New Issue
Block a user