Fix pairing for Weixin and Telegram DMs

This commit is contained in:
chengyongru
2026-06-05 16:13:31 +08:00
committed by Xubin Ren
parent d435cb0b21
commit 3da68ac7fe
4 changed files with 121 additions and 17 deletions
+20 -2
View File
@@ -869,7 +869,9 @@ class TelegramChannel(BaseChannel):
return
user = update.effective_user
if not self.is_allowed(self._sender_id(user)):
sender_id = self._sender_id(user)
if not self.is_allowed(sender_id):
await self._send_pairing_code_if_private(sender_id, update.message, user)
return
await update.message.reply_text(
f"👋 Hi {user.first_name}! I'm nanobot.\n\n"
@@ -881,7 +883,10 @@ class TelegramChannel(BaseChannel):
"""Handle /help command for allowed users only."""
if not update.message or not update.effective_user:
return
if not self.is_allowed(self._sender_id(update.effective_user)):
user = update.effective_user
sender_id = self._sender_id(user)
if not self.is_allowed(sender_id):
await self._send_pairing_code_if_private(sender_id, update.message, user)
return
await update.message.reply_text(build_help_text())
@@ -891,6 +896,17 @@ class TelegramChannel(BaseChannel):
sid = str(user.id)
return f"{sid}|{user.username}" if user.username else sid
async def _send_pairing_code_if_private(self, sender_id: str, message, user) -> None:
if message.chat.type != "private":
return
await self._handle_message(
sender_id=sender_id,
chat_id=str(message.chat_id),
content="",
metadata=self._build_message_metadata(message, user),
is_dm=True,
)
@staticmethod
def _derive_topic_session_key(message) -> str | None:
"""Derive topic-scoped session key for Telegram chats with threads."""
@@ -1149,6 +1165,7 @@ class TelegramChannel(BaseChannel):
user = update.effective_user
sender_id = self._sender_id(user)
if not self.is_allowed(sender_id):
await self._send_pairing_code_if_private(sender_id, message, user)
return
self._remember_thread_context(message)
@@ -1186,6 +1203,7 @@ class TelegramChannel(BaseChannel):
chat_id = message.chat_id
sender_id = self._sender_id(user)
if not self.is_allowed(sender_id):
await self._send_pairing_code_if_private(sender_id, message, user)
return
self._remember_thread_context(message)