From 27b64a3a5461d6df0af219b3249b06837d1316d6 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Tue, 7 Jul 2026 17:17:50 +0700 Subject: [PATCH] Auto-search user info with services ID --- services/telegram_client.py | 32 ++++++++++++++++++++++++++++++-- services/xmpp_client.py | 23 +++++++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/services/telegram_client.py b/services/telegram_client.py index 18b1556..632579f 100644 --- a/services/telegram_client.py +++ b/services/telegram_client.py @@ -9,6 +9,7 @@ import config from services.session_manager import SessionManager from lib.agent_loop import run_agent_loop from lib import personality +from lib import ragroleplay from tools.roleplayer import _name_mentioned @@ -115,10 +116,12 @@ class TelegramClient: if not text: return msg_id = update.message.message_id + user = update.effective_user + tg_username = user.username if user else None print(f'[{_ts()}] Telegram DM from {chat_id}: {text[:60]}', flush=True) threading.Thread( target=self._process_message, - args=(chat_id, text, 'private', '', msg_id), + args=(chat_id, text, 'private', '', msg_id, tg_username), daemon=True ).start() @@ -174,7 +177,7 @@ class TelegramClient: daemon=True ).start() - def _process_message(self, chat_id, body, chat_type, sender_name, reply_to_msg_id): + def _process_message(self, chat_id, body, chat_type, sender_name, reply_to_msg_id, tg_username=None): session = self._session_mgr.get_or_create( str(chat_id), self._build_system_prompt( tools_definition=self._tools_def, @@ -190,6 +193,31 @@ class TelegramClient: self._schedule_send(chat_id, 'Memulai sesi baru. Ada yang bisa dibantu?', reply_to_msg_id) return + if self._skill == 'roleplayer' and chat_type == 'private': + try: + results = ragroleplay.users_filter(config.ragroleplay_db_path, unique_id=str(chat_id)) + if results: + u = results[0] + context = ( + f'[User Context]\n' + f'Nama: {u["fullname"]} ({u["nickname"]})\n' + f'Alias: {u.get("alias", "-") or "-"}\n' + f'Persona: {u.get("persona", "-") or "-"}\n' + f'Telegram: {u.get("telegram_id", "-") or "-"} / @{u.get("telegram_username", "-") or "-"}\n' + f'XMPP: {u.get("xampp_username", "-") or "-"}\n' + f'[/User Context]' + ) + session.add_message('system', context) + else: + tg_info = f'ID: {chat_id}' + if tg_username: + tg_info += f', @{tg_username}' + session.add_message('system', + f'[User Context: Pengguna baru — belum ada di database]\n' + f'[Platform: Telegram ({tg_info})]') + except Exception: + pass + session.add_message('user', body) is_roleplay = self._skill == 'roleplayer' diff --git a/services/xmpp_client.py b/services/xmpp_client.py index 18523dc..a8a4252 100644 --- a/services/xmpp_client.py +++ b/services/xmpp_client.py @@ -11,6 +11,7 @@ from lib.agent_loop import run_agent_loop import config from tools.roleplayer import should_respond from lib import personality +from lib import ragroleplay # Anti-ban: delay constants for MUC rejoin behavior MUC_REJOIN_INITIAL_DELAY = 5.0 # detik, delay awal sebelum rejoin @@ -296,6 +297,28 @@ class XMPPClient(ClientXMPP): self._schedule_send(jid, 'Memulai sesi baru. Ada yang bisa di bantu?') return + if self._skill == 'roleplayer': + try: + results = ragroleplay.users_filter(config.ragroleplay_db_path, unique_id=jid) + if results: + u = results[0] + context = ( + f'[User Context]\n' + f'Nama: {u["fullname"]} ({u["nickname"]})\n' + f'Alias: {u.get("alias", "-") or "-"}\n' + f'Persona: {u.get("persona", "-") or "-"}\n' + f'Telegram: {u.get("telegram_id", "-") or "-"} / @{u.get("telegram_username", "-") or "-"}\n' + f'XMPP: {u.get("xampp_username", "-") or "-"}\n' + f'[/User Context]' + ) + session.add_message('system', context) + else: + session.add_message('system', + f'[User Context: Pengguna baru — belum ada di database]\n' + f'[Platform: XMPP ({jid})]') + except Exception: + pass + session.add_message('user', body) is_roleplay = self._skill == 'roleplayer'