@@ -699,51 +699,114 @@ async def reset_connections(message: types.Message):
699699
700700 parts = message .text .split ()
701701
702- if len (parts ) == 1 or parts [1 ].lower () == "all" :
702+ # /reset all
703+ if len (parts ) == 2 and parts [1 ].lower () == "all" :
703704 async with db .pool .acquire () as conn :
704705 await conn .execute ("UPDATE bot_bday.users SET ward_id = NULL, giver_id = NULL" )
705706 await message .answer ("Связи всех пользователей сброшены." )
706707 await clear_all_reminders ()
707708 return
708709
709- try :
710- user_id = int (parts [1 ])
711- except ValueError :
712- await message .answer (
713- "Ошибка: ID должен быть числом. Используйте `/admin_reset [user_id]` или `/admin_reset all`"
714- )
715- return
716-
717- async with db .pool .acquire () as conn :
718- user = await conn .fetchrow (
719- "SELECT id, ward_id, giver_id FROM bot_bday.users WHERE id = $1" , user_id
720- )
721-
722- if not user :
723- await message .answer (f"Пользователь с ID { user_id } не найден." )
710+ # /reset <user_id1> <user_id2>
711+ if len (parts ) == 3 :
712+ try :
713+ user_id1 = int (parts [1 ])
714+ user_id2 = int (parts [2 ])
715+ except ValueError :
716+ await message .answer (
717+ "Ошибка: ID должны быть числами. Используйте `/reset <id1> <id2>`"
718+ )
724719 return
725720
726- ward_id = user ["ward_id" ]
727- giver_id = user ["giver_id" ]
721+ async with db .pool .acquire () as conn :
722+ # Проверяем, что оба пользователя существуют
723+ user1 = await conn .fetchrow ("SELECT id FROM bot_bday.users WHERE id = $1" , user_id1 )
724+ user2 = await conn .fetchrow ("SELECT id FROM bot_bday.users WHERE id = $1" , user_id2 )
728725
729- await conn .execute (
730- "UPDATE bot_bday.users SET ward_id = NULL, giver_id = NULL WHERE id = $1" , user_id
731- )
726+ if not user1 :
727+ await message .answer (f"Пользователь с ID { user_id1 } не найден." )
728+ return
729+ if not user2 :
730+ await message .answer (f"Пользователь с ID { user_id2 } не найден." )
731+ return
732732
733- if ward_id :
733+ # Удаляем связь в обе стороны
734734 await conn .execute (
735- "UPDATE bot_bday.users SET giver_id = NULL WHERE id = $1" , ward_id
735+ "UPDATE bot_bday.users SET ward_id = NULL WHERE id = $1 AND ward_id = $2" ,
736+ user_id1 ,
737+ user_id2 ,
736738 )
737- if giver_id :
738739 await conn .execute (
739- "UPDATE bot_bday.users SET ward_id = NULL WHERE id = $1" , giver_id
740+ "UPDATE bot_bday.users SET giver_id = NULL WHERE id = $1 AND giver_id = $2" ,
741+ user_id2 ,
742+ user_id1 ,
743+ )
744+ # И наоборот
745+ await conn .execute (
746+ "UPDATE bot_bday.users SET ward_id = NULL WHERE id = $1 AND ward_id = $2" ,
747+ user_id2 ,
748+ user_id1 ,
749+ )
750+ await conn .execute (
751+ "UPDATE bot_bday.users SET giver_id = NULL WHERE id = $1 AND giver_id = $2" ,
752+ user_id1 ,
753+ user_id2 ,
740754 )
741755
742- await clear_all_reminders ()
743- await schedule_all_reminders ()
756+ await clear_all_reminders ()
757+ await schedule_all_reminders ()
758+ await message .answer (f"Связь между пользователями #{ user_id1 } и #{ user_id2 } разорвана." )
759+ return
760+
761+ # /reset <user_id>
762+ if len (parts ) == 2 :
763+ try :
764+ user_id = int (parts [1 ])
765+ except ValueError :
766+ await message .answer (
767+ "Ошибка: ID должен быть числом. Используйте `/reset <user_id>`"
768+ )
769+ return
770+
771+ async with db .pool .acquire () as conn :
772+ user = await conn .fetchrow (
773+ "SELECT id, ward_id, giver_id FROM bot_bday.users WHERE id = $1" , user_id
774+ )
775+
776+ if not user :
777+ await message .answer (f"Пользователь с ID { user_id } не найден." )
778+ return
779+
780+ ward_id = user ["ward_id" ]
781+ giver_id = user ["giver_id" ]
782+
783+ # Сбрасываем связи для указанного пользователя
784+ await conn .execute (
785+ "UPDATE bot_bday.users SET ward_id = NULL, giver_id = NULL WHERE id = $1" , user_id
786+ )
787+
788+ # Сбрасываем соответствующие связи у его пары
789+ if ward_id :
790+ await conn .execute (
791+ "UPDATE bot_bday.users SET giver_id = NULL WHERE id = $1" , ward_id
792+ )
793+ if giver_id :
794+ await conn .execute (
795+ "UPDATE bot_bday.users SET ward_id = NULL WHERE id = $1" , giver_id
796+ )
797+
798+ await clear_all_reminders ()
799+ await schedule_all_reminders ()
800+ await message .answer (
801+ f"Связи пользователя #{ user_id } и связанных с ним пользователей сброшены. Напоминания обновлены."
802+ )
803+ return
744804
745805 await message .answer (
746- f"Связи пользователя #{ user_id } и связанных с ним пользователей сброшены. Напоминания обновлены."
806+ "Использование:\n "
807+ "• `/reset all` - сбросить все связи\n "
808+ "• `/reset <user_id>` - сбросить связи одного пользователя\n "
809+ "• `/reset <id1> <id2>` - разорвать связь между двумя пользователями"
747810 )
748811
749812
0 commit comments