88from telethon .tl .functions .channels import JoinChannelRequest
99from telethon .tl .types import Message
1010
11- from database .database import create_groups_model , create_keywords_model
11+ from database .database import create_groups_model , create_keywords_model , create_group_model
1212from keyboards .keyboards import menu_launch_tracking_keyboard
1313from locales .locales import get_text
1414from system .dispatcher import api_id , api_hash
2222forwarded_messages = set ()
2323
2424
25- async def process_message (client , message : Message , chat_id : int , user_id ):
25+ async def get_target_group_id (client : TelegramClient , user_id : int ):
26+ """
27+ Получает ID целевой группы для пересылки сообщений из базы данных
28+ :param client: Объект TelegramClient
29+ :param user_id: ID пользователя
30+ :return: ID группы или None
31+ """
32+ GroupModel = create_group_model (user_id = user_id )
33+
34+ # Создаем таблицу, если не существует
35+ if not GroupModel .table_exists ():
36+ GroupModel .create_table ()
37+ logger .info (f"Created target group table for user { user_id } " )
38+ return None
39+
40+ # Получаем первую группу из базы (можно модифицировать для нескольких групп)
41+ groups = list (GroupModel .select ())
42+ if not groups :
43+ logger .warning (f"No target group found for user { user_id } " )
44+ return None
45+
46+ target_username = groups [0 ].user_group
47+ logger .info (f"Target group username: { target_username } " )
48+
49+ try :
50+ # Получаем сущность группы/канала
51+ entity = await client .get_entity (target_username )
52+ target_group_id = entity .id
53+ logger .success (f"✅ Target group ID resolved: { target_group_id } " )
54+ return target_group_id
55+ except Exception as e :
56+ logger .error (f"❌ Failed to resolve target group { target_username } : { e } " )
57+ return None
58+
59+
60+ async def join_target_group (client : TelegramClient , user_id ):
61+ """
62+ Подписывается на целевую группу для пересылки сообщений
63+ :param client: Объект TelegramClient
64+ :param user_id: ID пользователя
65+ :return: ID группы или None
66+ """
67+ GroupModel = create_group_model (user_id = user_id )
68+
69+ if not GroupModel .table_exists ():
70+ GroupModel .create_table ()
71+ return None
72+
73+ groups = list (GroupModel .select ())
74+ if not groups :
75+ return None
76+
77+ target_username = groups [0 ].user_group
78+
79+ try :
80+ logger .info (f"🔗 Attempting to join target group { target_username } ..." )
81+ await client (JoinChannelRequest (target_username ))
82+ logger .success (f"✅ Successfully joined target group { target_username } " )
83+
84+ # Получаем ID группы
85+ entity = await client .get_entity (target_username )
86+ return entity .id
87+
88+ except UserAlreadyParticipantError :
89+ logger .info (f"ℹ️ Already member of target group { target_username } " )
90+ entity = await client .get_entity (target_username )
91+ return entity .id
92+
93+ except FloodWaitError as e :
94+ logger .warning (f"⚠️ FloodWait error. Waiting { e .seconds } seconds..." )
95+ await asyncio .sleep (e .seconds )
96+ try :
97+ await client (JoinChannelRequest (target_username ))
98+ entity = await client .get_entity (target_username )
99+ return entity .id
100+ except Exception as retry_error :
101+ logger .error (f"❌ Failed to join target group after retry: { retry_error } " )
102+ return None
103+
104+ except ValueError :
105+ logger .error (f"❌ Invalid target group username: { target_username } " )
106+ return None
107+
108+ except InviteRequestSentError :
109+ logger .error (f"❌ Invite request sent for { target_username } , waiting for approval" )
110+ return None
111+
112+ except Exception as e :
113+ logger .exception (f"❌ Failed to join target group { target_username } : { e } " )
114+ return None
115+
116+
117+ async def process_message (client , message : Message , chat_id : int , user_id , target_group_id ):
118+ """
119+ Обрабатывает сообщение и пересылает его в целевую группу при наличии ключевых слов
120+ """
26121 if not message .message :
27122 return
28123
@@ -55,15 +150,16 @@ async def process_message(client, message: Message, chat_id: int, user_id):
55150 logger .info (f"📌 Найдено совпадение. Пересылаю сообщение ID={ message .id } " )
56151 try :
57152 # Убедитесь, что CONFIG["target_channel_id"] определен
58- await client .forward_messages (CONFIG ["target_channel_id" ], message )
153+ # await client.forward_messages(CONFIG["target_channel_id"], message)
154+ await client .forward_messages (target_group_id , message )
59155 forwarded_messages .add (msg_key )
60156 except Exception as e :
61157 logger .exception (f"❌ Ошибка при пересылке: { e } " )
62158
63159
64160async def join_required_channels (client : TelegramClient , user_id ):
65161 """
66- Подписываемся на обязательные каналы
162+ Подписывается на обязательные каналы (источники сообщений)
67163 :param client: Объект TelegramClient
68164 :param user_id: Объект пользователя Telegram
69165 :return: None
@@ -154,6 +250,18 @@ async def filter_messages(message, user_id, user):
154250
155251 logger .info ("✅ Сессия активна, подключение успешно!" )
156252
253+ # === Подключаемся к целевой группе для пересылки ===
254+ target_group_id = await join_target_group (client = client , user_id = user_id )
255+
256+ if not target_group_id :
257+ logger .error ("❌ Failed to join target group or group not configured" )
258+ await message .answer (
259+ get_text (user .language , "target_group_missing" ),
260+ reply_markup = menu_launch_tracking_keyboard ()
261+ )
262+ await client .disconnect ()
263+ return
264+
157265 # === Подключаемся к обязательным каналам ===
158266 await join_required_channels (client = client , user_id = user_id )
159267
@@ -176,7 +284,7 @@ async def filter_messages(message, user_id, user):
176284 # === Обработка новых сообщений ===
177285 @client .on (events .NewMessage (chats = channels ))
178286 async def handle_new_message (event : events .NewMessage .Event ):
179- await process_message (client , event .message , event .chat_id , user_id )
287+ await process_message (client , event .message , event .chat_id , user_id , target_group_id )
180288
181289 logger .info ("👂 Бот слушает новые сообщения..." )
182290 try :
0 commit comments