From b9b6ec13c546ba538329477f92d1f1fe726554c1 Mon Sep 17 00:00:00 2001 From: kr0sh512 Date: Sat, 23 Dec 2023 20:02:42 +0300 Subject: [PATCH] add random function --- .gitignore | 1 + __pycache__/admin.cpython-311.pyc | Bin 0 -> 1753 bytes __pycache__/for_json.cpython-311.pyc | Bin 0 -> 14270 bytes __pycache__/schedules.cpython-311.pyc | Bin 0 -> 29270 bytes for_json.py | 55 +++++++++++++- json/logs.json | 6 ++ schedules.py | 99 +++++++++++++++++++++----- 7 files changed, 141 insertions(+), 20 deletions(-) create mode 100644 __pycache__/admin.cpython-311.pyc create mode 100644 __pycache__/for_json.cpython-311.pyc create mode 100644 __pycache__/schedules.cpython-311.pyc create mode 100644 json/logs.json diff --git a/.gitignore b/.gitignore index 71e586a..40b2a5e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ users.json schedule.json settings.json +json/students.json diff --git a/__pycache__/admin.cpython-311.pyc b/__pycache__/admin.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9dd4ecf9f02a0e6bb5615c4b2c1c475bc27c0b7 GIT binary patch literal 1753 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 ADgXcg literal 0 HcmV?d00001 diff --git a/__pycache__/schedules.cpython-311.pyc b/__pycache__/schedules.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..afed869a8f2bddad432c3bb27450d79ef505247b GIT binary patch literal 29270 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: @{}\ + \ngroup: {}\ + \nid: {}\ + \nname: {}".format(data[infos["id"]]["username"], + data[infos["id"]]["group"], + infos["id"], + data[infos["id"]]["first_name"] + data[infos["id"]]["last_name"])) + return def change_user_param(id, key, value): @@ -52,6 +70,11 @@ def change_user_param(id, key, value): with open(path_users, 'w', encoding='utf-8') as json_file: json.dump(data, json_file, ensure_ascii=False, indent=4) create_schedule_tasks() + bot.send_admin_message("Изменения:\ + \nuser: @{}\ + \nid: {}\ + \nkey: {}\ + \nvalue: {}".format(data[id]["username"], id, key, value)) return def parse_lesson(time, lesson): @@ -149,6 +172,28 @@ def groups_in_json(): return schdl.keys() +def students_in_json(id="", key=""): + id = str(id) + + group = {} + with open(path_users, 'r', encoding='utf-8') as json_file: + group = json.load(json_file) + group = group[id]["group"] + + stud = {} + with open(path_students, 'r', encoding='utf-8') as json_file: + stud = json.load(json_file) + stud = stud.get(group) + + if stud == None: + return None + + if key == "": + return list(stud.keys()) + + return stud[key] + + def return_infos(id): id = str(id) data = {} @@ -159,9 +204,15 @@ def return_infos(id): return data def pause_bot(): - schedule.clear() global allow_update - allow_update = False + if allow_update: + schedule.clear() + allow_update = False + bot.send_admin_message('Бот больше не отправляет расписание') + else: + create_schedule_tasks(True) + allow_update = True + bot.send_admin_message('Бот возобновил рассылку!') return diff --git a/json/logs.json b/json/logs.json new file mode 100644 index 0000000..56bc9fa --- /dev/null +++ b/json/logs.json @@ -0,0 +1,6 @@ +{ + "time": { + "func": "", + "params": "" + } +} \ No newline at end of file diff --git a/schedules.py b/schedules.py index c77a709..2a19ef0 100644 --- a/schedules.py +++ b/schedules.py @@ -1,5 +1,5 @@ #!/usr/bin/python3.3 -import threading, telebot, schedule, time +import threading, telebot, schedule, time, random from datetime import datetime import os, sys from telebot import types @@ -7,15 +7,27 @@ from telegram.constants import ParseMode import for_json from admin import admin_command, is_admin, send_admin_message, send_admin_document -bot = telebot.TeleBot("TOKEN_API") +# bot = telebot.TeleBot("TOKEN_API") +bot = telebot.TeleBot("6240513112:AAFccyClvWsSNtVsZgNWAKFaNTs2-0y__pw") +# bot = telebot.TeleBot("6355753103:AAFPzya37HNjBEKnv83fqWbyXX6Bhe52DR4") +# def log(func): +# def wrapper(*args, **kwargs): +# message = args[0] + +# for_json.add_log(message) +# func(*args, **kwargs) +# return + +# return wrapper @bot.message_handler(commands=['help', 'faq']) def help(message): help_msg = 'Мои команды:\ \n/start - используй, чтобы сменить номер группы.\ \n/schedule - используй, чтобы получить расписание на сегодня.\ + \n/random - сделай очередь из людей\ \n/info - используй, чтобы узнать твои настройки бота\ \n/pause - используй, чтобы прекратить получать сообщения от бота\ \n/thread - используй в нужном чате канала, чтобы бот отправлял сообщения именно туда\ @@ -40,19 +52,19 @@ def help(message): ### --//-- -@bot.message_handler(commands=['test']) -@admin_command -def update_schedules(message): - text = 'Жирный текст\ - \nКурсивный текст\ - \nПеречёркнутый текст\ - \nСсылка\ - \nМоноширинный текст\ - \n
Форматированный с сохранением     пробелов
\ - \n
Цитата
' - send_admin_message(text) +# @bot.message_handler(commands=['test']) +# @admin_command +# def update_schedules(message): +# text = 'Жирный текст\ +# \nКурсивный текст\ +# \nПеречёркнутый текст\ +# \nСсылка\ +# \nМоноширинный текст\ +# \n
Форматированный с сохранением     пробелов
\ +# \n
Цитата
' +# send_admin_message(text) - return +# return @bot.message_handler(commands=['restart']) @admin_command @@ -75,6 +87,8 @@ def send_json(message): send_admin_document(json_file) with open(for_json.path_schedule, 'rb') as json_file: send_admin_document(json_file) + with open(for_json.path_students, 'rb') as json_file: + send_admin_document(json_file) return @@ -84,8 +98,7 @@ def send_json(message): @admin_command def pause_bot(message): for_json.pause_bot() - send_admin_message('Бот больше не отправляет расписание') - + return @bot.message_handler(commands=['stop']) @@ -145,12 +158,13 @@ def start(message): markup = types.InlineKeyboardMarkup() for i in for_json.groups_in_json(): markup.add(types.InlineKeyboardButton(text=i, callback_data=i)) + markup.add(types.InlineKeyboardButton(text="Моей группы нет в этом списке", callback_data="other")) bot.send_message(message.chat.id, 'Пожалуйста, выбери свою группу', parse_mode=ParseMode.HTML, reply_markup=markup) return -@bot.callback_query_handler(func=lambda call: not(call.data in ['left', 'right'])) +@bot.callback_query_handler(func=lambda call: call.data in for_json.groups_in_json() or call.data == "other") def callback_inline(call): infos = [ call.from_user.id, @@ -221,6 +235,55 @@ def change_schedule(call): +@bot.message_handler(commands=['random']) +def random_people(message): + list_of_num = ["1️⃣", "2️⃣", "3️⃣", "4️⃣", "5️⃣", "6", "7", "8", "9"] + + list_of_var = for_json.students_in_json(message.chat.id) + + text = 'Для вашей группы эта команда не настроена.\n\nНапиши запрос через /request' + + if list_of_var == None: + send_message(message.chat.id, text) + send_admin_message('Запрос на random команду от {}'.format( + for_json.return_infos(message.chat.id)["group"])) + + return + + text = '• Выбери как именно мне перемешать вас:\n' + + l = [] + for i, val in enumerate(list_of_var): + text += '\n{} {}'.format(list_of_num[i], val) + l.append(types.InlineKeyboardButton(text=list_of_num[i], callback_data=val)) + + l = [l] + + markup = types.InlineKeyboardMarkup(l) + bot.send_message(message.chat.id, text, ParseMode.HTML, reply_markup=markup) + + return + +@bot.callback_query_handler(func=lambda call: not(call.data in ['left', 'right'] + or call.data in for_json.groups_in_json() or call.data == "other")) +def make_random(call): + list_of_stud = for_json.students_in_json(call.message.chat.id, call.data) + + random.shuffle(list_of_stud) + + text = '{}:\n\n'.format(call.data) + + for i, name in enumerate(list_of_stud): + text += '{}{}. {}\n'.format(' ' if i + 1 < 10 else '', i + 1, name) + + bot.edit_message_text('Хорошо, вот ваше распределение!', call.message.chat.id, + call.message.message_id, parse_mode=ParseMode.HTML) + + send_message(call.message.chat.id, text) + + return + + @bot.message_handler(commands=['info']) def send_info(message): if len(message.text.split(' ')) == 2 and is_admin(message): @@ -393,7 +456,7 @@ def send_document(id, file, text = ''): if __name__ == '__main__': - for_json.create_schedule_tasks() + for_json.create_schedule_tasks(True) send_admin_message('Я перезапустился!') print("-------------------------")