diff --git a/.gitignore b/.gitignore
index cdced54..34ad6fc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
+__pycache__
users.json
schedule.json
-settings.json
json/students.json
json/schedule_2sem.json
nohup.out
+config.yaml
diff --git a/for_json.py b/for_json.py
index 5849588..1c23248 100644
--- a/for_json.py
+++ b/for_json.py
@@ -4,7 +4,8 @@ import schedules as bot
from datetime import datetime
path_users = "json/users.json" # Нужный путь до json файлов
-path_schedule = "json/schedule_3sem.json"
+# path_schedule = "json/schedule_3sem.json"
+path_schedule = "json/groups/{}.json"
path_students = "json/students.json"
allow_update = True
@@ -69,7 +70,7 @@ def change_user_param(id, key, value):
return
-def parse_lesson(time, lesson):
+def parse_lesson_tmp(time, lesson):
text = ""
start, end = time.split("-")
@@ -101,6 +102,37 @@ def parse_lesson(time, lesson):
return text
+def parse_lesson(lesson: dict[str, str]) -> str:
+ text = ""
+ start, end = lesson["begin"], lesson["end"]
+
+ if not lesson["name"]:
+ return ""
+
+ if len(lesson["teacher.room"]) == 1:
+ text = "{}-{} | {}\
+ \n{}\
+ \n{}".format(
+ start,
+ end,
+ lesson["teacher.room"][0]["r"],
+ lesson["name"],
+ lesson["teacher.room"][0]["t"],
+ )
+ else:
+ text = "{}-{}\
+ \n{}".format(
+ start,
+ end,
+ lesson["name"],
+ )
+
+ for tr in lesson["teacher.room"]:
+ text += "\n({}) {}".format(tr["r"], tr["t"])
+
+ return text
+
+
def create_schedule_tasks(manual=False):
global allow_update
@@ -117,24 +149,25 @@ def create_schedule_tasks(manual=False):
schdl = {}
with open(path_users, "r", encoding="utf-8") as json_file:
users = json.load(json_file)
- with open(path_schedule, "r", encoding="utf-8") as json_file:
- schdl = json.load(json_file)
for id, params in users.items():
if params["allow_message"] != "yes":
continue
group = params["group"]
if group == "other":
continue
- timeout = params["timeout"]
- for day in schdl[group]:
- for i, lesson in schdl[group][day].items():
- if lesson["name"] == "": # Неправильный формат schedule
+
+ with open(path_schedule.format(group), "r", encoding="utf-8") as json_file:
+ schdl = json.load(json_file)["schedule"]
+
+ for day in schdl:
+ for lesson in schdl[day]:
+ if not lesson["name"]: # Неправильный формат schedule
continue
- start = i.split("-")[0]
- text = parse_lesson(i, lesson)
+ start = lesson["begin"]
+ text = parse_lesson(lesson)
- if text == "":
+ if not text:
continue
thread_id = params["thread"]
@@ -151,41 +184,41 @@ def create_schedule_tasks(manual=False):
if day == "mon":
schedule.every().monday.at(start_task).do(
- bot.send_message, id, text, thread_id, True
+ bot.send_message, id, text, thread_id, lesson["partity"]
)
elif day == "tue":
schedule.every().tuesday.at(start_task).do(
- bot.send_message, id, text, thread_id, True
+ bot.send_message, id, text, thread_id, lesson["partity"]
)
elif day == "wed":
schedule.every().wednesday.at(start_task).do(
- bot.send_message, id, text, thread_id, True
+ bot.send_message, id, text, thread_id, lesson["partity"]
)
elif day == "thu":
schedule.every().thursday.at(start_task).do(
- bot.send_message, id, text, thread_id, True
+ bot.send_message, id, text, thread_id, lesson["partity"]
)
elif day == "fri":
schedule.every().friday.at(start_task).do(
- bot.send_message, id, text, thread_id, True
+ bot.send_message, id, text, thread_id, lesson["partity"]
)
elif day == "sat":
schedule.every().saturday.at(start_task).do(
- bot.send_message, id, text, thread_id, True
+ bot.send_message, id, text, thread_id, lesson["partity"]
)
return
-def groups_in_json():
+def groups_in_json() -> list[str]:
schdl = {}
- with open(path_schedule, "r", encoding="utf-8") as json_file:
+ with open(path_schedule.format("groups"), "r", encoding="utf-8") as json_file:
schdl = json.load(json_file)
- return schdl.keys()
+ return schdl
-def students_in_group(group):
+def students_in_group(group) -> list[str]:
group = str(group)
data = {}
@@ -201,7 +234,7 @@ def students_in_group(group):
return students
-def students_in_json(id="", key=""):
+def students_in_json(id: str, key: str = "") -> list[str] | None:
id = str(id)
group = {}
@@ -223,7 +256,7 @@ def students_in_json(id="", key=""):
return stud[key]
-def return_infos(id):
+def return_infos(id) -> dict[str, str] | None:
id = str(id)
data = {}
with open(path_users, "r", encoding="utf-8") as json_file:
@@ -248,32 +281,38 @@ def pause_bot():
return
-def get_schedule(id, day):
+def get_schedule(id: str, day: str) -> str:
id = str(id)
+
if day == "sun":
day = "mon"
+
days = ["mon", "tue", "wed", "thu", "fri", "sat"]
russian_days = ["понедельник", "вторник", "среду", "четверг", "пятницу", "субботу"]
text = "Расписание на {}:\n\n".format(russian_days[days.index(day)])
schdl_today = {}
- with open(path_schedule, "r", encoding="utf-8") as schedule_file:
- group = ""
- with open(path_users, "r", encoding="utf-8") as user_file:
- group = json.load(user_file)[id]["group"]
- if group == "other":
- return "У тебя не выбрана группа для рассылки сообщений"
+ group = ""
+ with open(path_users, "r", encoding="utf-8") as user_file:
+ group = json.load(user_file)[id]["group"]
- try:
- schdl_today = json.load(schedule_file)[group][day]
- except:
- return "Расписания твоей группы на {} нет".format(
- russian_days[days.index(day)]
- )
+ if group == "other":
+ return "У тебя не выбрана группа для рассылки сообщений"
- for i, lesson in schdl_today.items():
- text += "•" + parse_lesson(i, lesson) + "\n\n"
+ try:
+ with open(path_schedule.format(group), "r", encoding="utf-8") as schedule_file:
+ try:
+ schdl_today = json.load(schedule_file)["schedule"][day]
+ except:
+ return "Расписания твоей группы на {} нет".format(
+ russian_days[days.index(day)]
+ )
+
+ for lesson in schdl_today:
+ text += "•" + parse_lesson(lesson) + "\n\n"
+ except:
+ return "Расписания твоей группы нет"
return text
diff --git a/json/tmp.json b/json/groups/202.json
similarity index 65%
rename from json/tmp.json
rename to json/groups/202.json
index 1bb6b84..7433f87 100644
--- a/json/tmp.json
+++ b/json/groups/202.json
@@ -28,6 +28,14 @@
"end": "12:05",
"name": "Практикум на ЭВМ",
"teacher.room": [
+ {
+ "t": "Тюляева В.В.",
+ "r": "МЗ-3"
+ },
+ {
+ "t": "Тюляева В.В.",
+ "r": "МЗ-3"
+ },
{
"t": "Тюляева В.В.",
"r": "МЗ-3"
@@ -36,6 +44,16 @@
"building": "2-й гуманитарный корпус",
"note": "Какое-то примечание",
"type": "seminar"
+ },
+ {
+ "partity": null,
+ "begin": "10:30",
+ "end": "12:05",
+ "name": "Практикум на ЭВМ",
+ "teacher.room": [],
+ "building": "2-й гуманитарный корпус",
+ "note": "Какое-то примечание",
+ "type": "seminar"
}
]
}
diff --git a/json/groups/groups.json b/json/groups/groups.json
new file mode 100644
index 0000000..12ad73b
--- /dev/null
+++ b/json/groups/groups.json
@@ -0,0 +1,24 @@
+[
+ "201",
+ "202",
+ "203",
+ "204",
+ "205",
+ "206",
+ "219",
+ "207",
+ "208",
+ "209",
+ "210",
+ "211",
+ "212",
+ "213",
+ "214",
+ "215",
+ "216",
+ "217",
+ "218",
+ "220",
+ "241",
+ "242"
+]
\ No newline at end of file
diff --git a/json/logs.json b/json/logs.json
deleted file mode 100644
index 56bc9fa..0000000
--- a/json/logs.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "time": {
- "func": "",
- "params": ""
- }
-}
\ No newline at end of file
diff --git a/schedules.py b/schedules.py
index 109ac14..092aa83 100644
--- a/schedules.py
+++ b/schedules.py
@@ -1,5 +1,5 @@
#!/usr/bin/python3.3
-import threading, telebot, schedule, time, random
+import threading, telebot, schedule, time, random, yaml
from datetime import datetime
import os, sys
from telebot import types
@@ -7,9 +7,10 @@ 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("6998513979:AAGgpjgdDsCEqPE0hC8yxrzclsNSd-oRP1s") # test
-# bot = telebot.TeleBot("6355753103:AAGniZ7Wf5XyPkn3z753UJvn6afbhOlImjA") # sсhedule
+config = yaml.safe_load(open("config.yaml"))
+bot = telebot.TeleBot(config["test_token"])
+
+PARTITY_FIRST = 1
@bot.message_handler(commands=["help", "faq"])
@@ -657,18 +658,15 @@ def text_message(message):
return
-def send_message(id, text, thread_id="General", distribution=False):
+def send_message(id, text, thread_id="General", partity=None):
if thread_id == "General":
thread_id = None
- if distribution:
+ if partity:
count_of_weeks = (datetime.now() - datetime(2024, 2, 5)).days // 7
- is_odd = (count_of_weeks + 1) % 2 == 1
+ is_odd = (count_of_weeks + 1) % 2 == PARTITY_FIRST
- if is_odd and ("(чёт)" in text):
- return
-
- if (not is_odd) and ("(нечёт)" in text):
+ if is_odd != bool(partity):
return
try: