fix: use message reaction for query acknowledgement

This commit is contained in:
ar51
2026-09-04 15:46:18 +08:00
parent c7c5c3259c
commit 24469372fb
7 changed files with 151 additions and 49 deletions

View File

@@ -79,7 +79,7 @@ ALLOWED_VERSIONS = {
}
CANDIDATE_BATCH_SIZE = 4
CANDIDATE_CONTINUATION_TTL_SECONDS = 6 * 60 * 60
RECEIVED_ACKNOWLEDGEMENT = "👀"
RECEIVED_REACTION_TYPE = "OnIt"
def _inclusive_date_range(start: date, end: date) -> frozenset[date]:
@@ -1160,33 +1160,40 @@ def reply(client: lark.Client, message_id: str, text: str) -> None:
logging.info("Feishu reply sent: message_id=%s parts=%s", message_id, len(post_contents))
def reply_received_acknowledgement(client: lark.Client, message_id: str) -> None:
request = (
lark.im.v1.ReplyMessageRequest.builder()
.message_id(message_id)
.request_body(
lark.im.v1.ReplyMessageRequestBody.builder()
.msg_type("text")
.content(
json.dumps(
{"text": RECEIVED_ACKNOWLEDGEMENT},
ensure_ascii=False,
)
)
.uuid(f"{message_id[:44]}-ack")
def add_received_reaction(client: lark.Client, message_id: str) -> bool:
try:
request_body = (
lark.im.v1.CreateMessageReactionRequestBody.builder()
.reaction_type({"emoji_type": RECEIVED_REACTION_TYPE})
.build()
)
.build()
)
response = client.im.v1.message.reply(request)
if not response.success():
logging.error(
"Feishu acknowledgement failed: code=%s message_id=%s",
response.code,
request = (
lark.im.v1.CreateMessageReactionRequest.builder()
.message_id(message_id)
.request_body(request_body)
.build()
)
response = client.im.v1.message_reaction.create(request)
except Exception:
logging.exception(
"Feishu received reaction raised; continuing query: message_id=%s",
message_id,
)
return
logging.info("Feishu acknowledgement sent: message_id=%s", message_id)
return False
if not response.success():
logging.error(
"Feishu received reaction failed: code=%s msg=%s message_id=%s",
response.code,
response.msg,
message_id,
)
return False
logging.info(
"Feishu received reaction added: type=%s message_id=%s",
RECEIVED_REACTION_TYPE,
message_id,
)
return True
_seen_message_ids: set[str] = set()
@@ -1215,7 +1222,7 @@ def handle_message(client: lark.Client, data: lark.im.v1.P2ImMessageReceiveV1) -
)
return
reply_received_acknowledgement(client, message_id)
add_received_reaction(client, message_id)
if continuation_state is None:
clear_candidate_continuation(key)