Skip to content

Commit 083b8bd

Browse files
committed
extend reset functionaliy
1 parent a2ee15d commit 083b8bd

File tree

1 file changed

+91
-28
lines changed

1 file changed

+91
-28
lines changed

src/bot.py

Lines changed: 91 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)