This commit is contained in:
2025-03-03 20:42:31 +03:00
parent 67b708bdff
commit 9cda21ea29
4 changed files with 43 additions and 36 deletions
+17 -8
View File
@@ -1,7 +1,3 @@
import os
import sys
import telebot
import threading
from config import config, Messages from config import config, Messages
from telebot import types from telebot import types
from plugin.user import User from plugin.user import User
@@ -88,12 +84,19 @@ def handle_all_messages(message: types.Message):
if __name__ == "__main__": if __name__ == "__main__":
print("/t--- Bot started ---") print("\t--- Bot started ---")
admins = Admin.get_all_admins() 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: for admin in admins:
bot.send_message( bot.send_message(
admin["user_id"], admin.user_id,
"Служебное сообщение: бот был перезапущен.", "Служебное сообщение: бот был перезапущен.",
) )
@@ -111,14 +114,20 @@ if __name__ == "__main__":
users = User.get_all() users = User.get_all()
for user in users: for user in users:
bot.send_message( 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() admins = Admin.get_all_admins()
for admin in admins: for admin in admins:
bot.send_message( bot.send_message(
admin["user_id"], admin.user_id,
"Отправлено напоминание о скором начале мероприятия.", "Отправлено напоминание о скором начале мероприятия.",
) )
time.sleep(10) time.sleep(10)
+22 -24
View File
@@ -3,7 +3,7 @@ from config import config
import os import os
import threading import threading
import time import time
from plugin.user import User from plugin.user import User, users_reg
from plugin.shuffle import Shuffle, already_matched from plugin.shuffle import Shuffle, already_matched
from plugin.bot_instance import bot from plugin.bot_instance import bot
@@ -26,7 +26,7 @@ class Admin:
data = self._db.find_one({"user_id": self.user_id}) data = self._db.find_one({"user_id": self.user_id})
if data: if data:
self.name = data["name"] self.name = data["name"]
self.added_by = data["added_by"] self.added_by = data.get("added_by")
else: else:
raise ValueError("Admin not found") raise ValueError("Admin not found")
@@ -109,6 +109,7 @@ class Admin:
# ----------------- TELEBOT ----------------- # # ----------------- TELEBOT ----------------- #
def admin_only(func): def admin_only(func):
def wrapper(message, *args, **kwargs): def wrapper(message, *args, **kwargs):
if Admin.is_admin(message.chat.id): if Admin.is_admin(message.chat.id):
return func(message, *args, **kwargs) return func(message, *args, **kwargs)
@@ -276,40 +277,34 @@ class Admin:
for admin in Admin.get_all_admins(): for admin in Admin.get_all_admins():
bot.send_message( bot.send_message(
admin["user_id"], admin.user_id,
"Отправлено приглашение пользователем. В данный момент подтвердило участие 0 человек. Запускайте команду /end_random для завершения регистрации", "Отправлено приглашение пользователем. В данный момент подтвердило участие 0 человек.\
\n/update чтобы узнать, сколько уже подтвердило участие\
\n/end_random для завершения регистрации",
) )
User.start_shuffle_reg() User.start_shuffle_reg()
def monitor_participation(): return
while True:
participants = len(already_matched)
bot.send_message(
message.chat.id,
f"В данный момент подтвердило участие {participants} человек",
)
time.sleep(5)
thread = threading.Thread( @bot.message_handler(commands=["update"])
target=monitor_participation, name="monitor_participation" @admin_only
def update_random_command(message):
bot.send_message(
message.chat.id,
f"Подтвердило участие: {len(users_reg)} человек",
) )
thread.start()
return return
@bot.message_handler(commands=["end_random", "random_again"]) @bot.message_handler(commands=["end_random", "random_again"])
@admin_only @admin_only
def end_random_command(message): def end_random_command(message):
for thread in threading.enumerate():
if thread.name == "monitor_participation":
thread.kill()
bot.send_message(message.chat.id, "Регистрация завершена. Ожидайте") bot.send_message(message.chat.id, "Регистрация завершена. Ожидайте")
pairs = Shuffle() pairs = Shuffle()
for pair in pairs: for pair in pairs:
if pair[1]: if len(pair) == 2:
bot.send_message( bot.send_message(
pair[0].user_id, pair[0].user_id,
f"Ваша пара: {pair[1].name}. Парта находится под номером: {pairs.index(pair) + 1})", f"Ваша пара: {pair[1].name}. Парта находится под номером: {pairs.index(pair) + 1})",
@@ -327,16 +322,19 @@ class Admin:
with open("pairs.txt", "w") as f: with open("pairs.txt", "w") as f:
str_pair = "" str_pair = ""
for pair in pairs: for pair in pairs:
str_pair += ( if len(pair) == 2:
f"Парта {pairs.index(pair) + 1}: {pair[0].name} | {pair[1].name}\n" 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) f.write(str_pair)
with open("pairs.txt", "rb") as f: with open("pairs.txt", "rb") as f:
for admin in Admin.get_all_admins(): for admin in Admin.get_all_admins():
bot.send_document( bot.send_document(
admin["user_id"], admin.user_id,
f, f,
caption="Распредение по парам.", caption="Распредение по парам.",
) )
+1 -1
View File
@@ -11,7 +11,7 @@ def Shuffle() -> List[Tuple[User, User]]:
pairs = [] pairs = []
if len(users) % 2 != 0: if len(users) % 2 != 0:
pairs.append((users.pop(),)) pairs.append((users.pop(), None))
# Step 1: Match men with women by compatibility and age # Step 1: Match men with women by compatibility and age
for user in users: for user in users:
+3 -3
View File
@@ -2,7 +2,7 @@ from db import DB
from plugin.bot_instance import bot from plugin.bot_instance import bot
from config import Messages from config import Messages
from telebot import types from telebot import types
from typing import List, Tuple from typing import List
users_reg: List["User"] = [] users_reg: List["User"] = []
@@ -132,7 +132,7 @@ class User:
@staticmethod @staticmethod
def start_shuffle_reg(): def start_shuffle_reg():
users_reg.clear() 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 = types.InlineKeyboardMarkup()
markup.add( markup.add(
@@ -151,9 +151,9 @@ class User:
users_reg.append(user) users_reg.append(user)
bot.edit_message_text( bot.edit_message_text(
"Вы добавлены в список участников! Пожалуйста, подождите, пока все зарегистрируются",
call.message.chat.id, call.message.chat.id,
call.message.message_id, call.message.message_id,
"Вы добавлены в список участников! Пожалуйста, подождите, пока все зарегистрируются",
reply_markup=None, reply_markup=None,
) )