mirror of
https://github.com/NohamR/PronoteBot.git
synced 2025-05-23 16:38:59 +00:00
156 lines
5.2 KiB
Python
156 lines
5.2 KiB
Python
import pronotepy
|
|
from pronotepy.ent import ile_de_france
|
|
from datetime import date
|
|
from datetime import datetime
|
|
import time
|
|
import json
|
|
import requests
|
|
import os
|
|
from dotenv import load_dotenv
|
|
load_dotenv()
|
|
DISCORD_WEBHOOKS_PRONOTE = os.getenv("DISCORD_WEBHOOKS_PRONOTE")
|
|
ENT_USERNAME = os.getenv("ENT_USERNAME")
|
|
ENT_PASSWORD = os.getenv("ENT_PASSWORD")
|
|
PRNT_USERNAME = os.getenv("PRNT_USERNAME")
|
|
PRNT_PASSWORD = os.getenv("PRNT_PASSWORD")
|
|
ENT = os.getenv("ENT")
|
|
path = 'new/pronote/'
|
|
path =''
|
|
|
|
def date_encoder(obj):
|
|
if isinstance(obj, date):
|
|
return obj.isoformat()
|
|
raise TypeError("Type not serializable")
|
|
|
|
def envoyer_message_webhook(contenu):
|
|
data = {
|
|
'content': contenu
|
|
}
|
|
try:
|
|
response = requests.post(DISCORD_WEBHOOKS_PRONOTE, json=data)
|
|
if response.status_code == 204:
|
|
print(f'{datetime.now().strftime("%H:%M")} : Send')
|
|
else:
|
|
print(f"Échec de l'envoi du message. Code d'état : {response.status_code}")
|
|
except Exception as e:
|
|
print(e)
|
|
|
|
def refresh(send):
|
|
content = ''
|
|
try :
|
|
# client = pronotepy.Client('https://0910626l.index-education.net/pronote/eleve.html',
|
|
# username=ENT_USERNAME,
|
|
# password=ENT_PASSWORD,
|
|
# ent=globals().get(ENT)) #ile_de_france
|
|
client = pronotepy.Client('https://0910626l.index-education.net/pronote/eleve.html?login=true',
|
|
username=PRNT_USERNAME,
|
|
password=PRNT_PASSWORD)
|
|
if not client.logged_in:
|
|
exit(1)
|
|
|
|
if send == 1:
|
|
with open(path + 'grades.txt', 'r') as file:
|
|
prev_grades = json.load(file)
|
|
|
|
with open(path + 'average.txt', 'r') as file:
|
|
prev_average = json.load(file)
|
|
|
|
new_average = client.periods[0].overall_average
|
|
|
|
new_grades_list = []
|
|
for period in client.periods:
|
|
for grade in period.grades:
|
|
obj = grade.date
|
|
gooddate = obj.isoformat()
|
|
grade_dict = {
|
|
'grade': grade.grade,
|
|
'average': grade.average,
|
|
'coefficient': grade.coefficient,
|
|
'comment': grade.comment,
|
|
'date': gooddate,
|
|
'default_out_of': grade.default_out_of,
|
|
# 'id': grade.id,
|
|
'is_bonus': grade.is_bonus,
|
|
'is_optional': grade.is_optionnal,
|
|
'is_out_of_20': grade.is_out_of_20,
|
|
'max': grade.max,
|
|
'min': grade.min,
|
|
'out_of': grade.out_of,
|
|
# 'period_id': grade.period.id,
|
|
'period_name': grade.period.name,
|
|
# 'subject_id': grade.subject.id,
|
|
'subject_groups': grade.subject.groups,
|
|
'subject_name': grade.subject.name,
|
|
}
|
|
new_grades_list.append(grade_dict)
|
|
|
|
if send == 1:
|
|
if len(new_grades_list) != len(prev_grades):
|
|
changes = 0
|
|
while len(new_grades_list) != len(prev_grades):
|
|
prev_grades.append('tmp')
|
|
for i,old in zip(new_grades_list, prev_grades):
|
|
|
|
if i != old:
|
|
changes+=1
|
|
if changes == 1:
|
|
content = f"""**{i['subject_name']}** : {i['comment']}
|
|
{datetime.strptime(str(i['date']), "%Y-%m-%d").strftime("%d %B %Y")}
|
|
**{i['grade']}/{i['out_of']}** | Coef : {i['coefficient']}
|
|
Moy : **{i['average']}/{i['out_of']}**
|
|
:arrow_up_small: : {i['max']}/{i['out_of']} | :arrow_down_small: : {i['min']}/{i['out_of']}
|
|
|
|
Moy G : {new_average}({float(new_average)-float(prev_average)})
|
|
"""
|
|
print('content: ', content)
|
|
else:
|
|
print(f'{datetime.now().strftime("%H:%M")} : No change')
|
|
|
|
################
|
|
with open(path + 'grades.txt', 'w') as file:
|
|
json.dump(new_grades_list, file, indent=2, default=date_encoder)
|
|
|
|
with open(path + 'average.txt', 'w') as file:
|
|
json.dump(new_average, file, indent=2)
|
|
|
|
return 1, content
|
|
except Exception as e:
|
|
return e, content
|
|
|
|
|
|
# schedule.every(20).minutes.do(refresh)
|
|
# print('refresh: 20')
|
|
# while True:
|
|
# schedule.run_pending()
|
|
# time.sleep(1)
|
|
|
|
|
|
status = 0
|
|
while status != 1:
|
|
status, content = refresh(send = 0)
|
|
print('content: ', content)
|
|
print('status: ', status)
|
|
if status != 1 :
|
|
print(status)
|
|
envoyer_message_webhook(status)
|
|
time.sleep(2*60)
|
|
|
|
|
|
min = 20
|
|
print('refresh rate: ', 20)
|
|
while True:
|
|
status = 0
|
|
while status != 1:
|
|
status, content = refresh(send = 1)
|
|
if status != 1 :
|
|
print(status)
|
|
envoyer_message_webhook(status)
|
|
time.sleep(2*60)
|
|
elif content != '':
|
|
envoyer_message_webhook(content)
|
|
else :
|
|
print('No change')
|
|
time.sleep(min*60)
|
|
|
|
# ### debug
|
|
# # refresh(send=1) |