From 9cda21ea294e91da1382408077ac1dd6c1a6889a Mon Sep 17 00:00:00 2001 From: krosh Date: Mon, 3 Mar 2025 20:42:31 +0300 Subject: [PATCH] bug fix --- app/main.py | 25 +++++++++++++++-------- app/plugin/admin.py | 46 +++++++++++++++++++++---------------------- app/plugin/shuffle.py | 2 +- app/plugin/user.py | 6 +++--- 4 files changed, 43 insertions(+), 36 deletions(-) diff --git a/app/main.py b/app/main.py index 27f3731..31213a9 100755 --- a/app/main.py +++ b/app/main.py @@ -1,7 +1,3 @@ -import os -import sys -import telebot -import threading from config import config, Messages from telebot import types from plugin.user import User @@ -88,12 +84,19 @@ def handle_all_messages(message: types.Message): if __name__ == "__main__": - print("/t--- Bot started ---") + print("\t--- Bot started ---") admins = Admin.get_all_admins() + + print(admins) + + print(Admin._db.find({})) + + print([(data, "user_id" in data) for data in Admin._db.find({})]) + for admin in admins: bot.send_message( - admin["user_id"], + admin.user_id, "Служебное сообщение: бот был перезапущен.", ) @@ -111,14 +114,20 @@ if __name__ == "__main__": users = User.get_all() for user in users: bot.send_message( - user["user_id"], + user.user_id, "Напоминание, что наше мероприятие пройдёт уже завтра! Следите за новостями)", ) + if len(user.type) != 4: + bot.send_message( + user.user_id, + "Вы ещё не прошли тест! Пожалуйста, пройдите его, чтобы мы могли вас зарегистрировать.", + ) + admins = Admin.get_all_admins() for admin in admins: bot.send_message( - admin["user_id"], + admin.user_id, "Отправлено напоминание о скором начале мероприятия.", ) time.sleep(10) diff --git a/app/plugin/admin.py b/app/plugin/admin.py index 125a90a..748953e 100755 --- a/app/plugin/admin.py +++ b/app/plugin/admin.py @@ -3,7 +3,7 @@ from config import config import os import threading import time -from plugin.user import User +from plugin.user import User, users_reg from plugin.shuffle import Shuffle, already_matched from plugin.bot_instance import bot @@ -26,7 +26,7 @@ class Admin: data = self._db.find_one({"user_id": self.user_id}) if data: self.name = data["name"] - self.added_by = data["added_by"] + self.added_by = data.get("added_by") else: raise ValueError("Admin not found") @@ -109,6 +109,7 @@ class Admin: # ----------------- TELEBOT ----------------- # def admin_only(func): + def wrapper(message, *args, **kwargs): if Admin.is_admin(message.chat.id): return func(message, *args, **kwargs) @@ -276,40 +277,34 @@ class Admin: for admin in Admin.get_all_admins(): bot.send_message( - admin["user_id"], - "Отправлено приглашение пользователем. В данный момент подтвердило участие 0 человек. Запускайте команду /end_random для завершения регистрации", + admin.user_id, + "Отправлено приглашение пользователем. В данный момент подтвердило участие 0 человек.\ + \n/update чтобы узнать, сколько уже подтвердило участие\ + \n/end_random для завершения регистрации", ) User.start_shuffle_reg() - def monitor_participation(): - while True: - participants = len(already_matched) - bot.send_message( - message.chat.id, - f"В данный момент подтвердило участие {participants} человек", - ) - time.sleep(5) + return - thread = threading.Thread( - target=monitor_participation, name="monitor_participation" + @bot.message_handler(commands=["update"]) + @admin_only + def update_random_command(message): + bot.send_message( + message.chat.id, + f"Подтвердило участие: {len(users_reg)} человек", ) - thread.start() return @bot.message_handler(commands=["end_random", "random_again"]) @admin_only def end_random_command(message): - for thread in threading.enumerate(): - if thread.name == "monitor_participation": - thread.kill() - bot.send_message(message.chat.id, "Регистрация завершена. Ожидайте") pairs = Shuffle() for pair in pairs: - if pair[1]: + if len(pair) == 2: bot.send_message( pair[0].user_id, f"Ваша пара: {pair[1].name}. Парта находится под номером: {pairs.index(pair) + 1})", @@ -327,16 +322,19 @@ class Admin: with open("pairs.txt", "w") as f: str_pair = "" for pair in pairs: - str_pair += ( - f"Парта {pairs.index(pair) + 1}: {pair[0].name} | {pair[1].name}\n" - ) + if len(pair) == 2: + str_pair += f"Парта {pairs.index(pair) + 1}: {pair[0].name} | {pair[1].name}\n" + else: + str_pair += ( + f"Парта {pairs.index(pair) + 1}: {pair[0].name} | Нет пары\n" + ) f.write(str_pair) with open("pairs.txt", "rb") as f: for admin in Admin.get_all_admins(): bot.send_document( - admin["user_id"], + admin.user_id, f, caption="Распредение по парам.", ) diff --git a/app/plugin/shuffle.py b/app/plugin/shuffle.py index ced1092..fa1f028 100755 --- a/app/plugin/shuffle.py +++ b/app/plugin/shuffle.py @@ -11,7 +11,7 @@ def Shuffle() -> List[Tuple[User, User]]: pairs = [] if len(users) % 2 != 0: - pairs.append((users.pop(),)) + pairs.append((users.pop(), None)) # Step 1: Match men with women by compatibility and age for user in users: diff --git a/app/plugin/user.py b/app/plugin/user.py index 91cb50a..18c1851 100755 --- a/app/plugin/user.py +++ b/app/plugin/user.py @@ -2,7 +2,7 @@ from db import DB from plugin.bot_instance import bot from config import Messages from telebot import types -from typing import List, Tuple +from typing import List users_reg: List["User"] = [] @@ -132,7 +132,7 @@ class User: @staticmethod def start_shuffle_reg(): users_reg.clear() - users = [user for user in User.get_all() if user.type] + users = [user for user in User.get_all() if len(user.type) == 4] markup = types.InlineKeyboardMarkup() markup.add( @@ -151,9 +151,9 @@ class User: users_reg.append(user) bot.edit_message_text( + "Вы добавлены в список участников! Пожалуйста, подождите, пока все зарегистрируются", call.message.chat.id, call.message.message_id, - "Вы добавлены в список участников! Пожалуйста, подождите, пока все зарегистрируются", reply_markup=None, )