Исправлен + доработан будильник, доработан парсер.

-Добавлен многопоток будильника для каждого юзера
-Отработано исключение "Будильник в прошлое"
-Добавлено чтение отправителя,пришедшего письма
This commit is contained in:
Mnimqa
2020-03-19 14:40:47 +03:00
committed by GitHub
parent 99bd0d596e
commit b713aa3145

View File

@@ -1,20 +1,42 @@
# будильник
# Парсер почты
import datetime
import imaplib
import time
import email
# будильник
import threading
#То, что нужно будет передавать функциям
def alarm_clock():
dt = datetime.datetime(2020, 3, 18, 18, 6, 15) # дата срабатывания будильника (год,месяц,день,час,минута,секунда)
#Инициализация будильника
userName='Denis'
year_Alarm_Clock=2020
month_Alarm_Clock=3
day_Alarm_Clock=19
hour_Alarm_Clock=12
min_Alarm_Clock=49
sec_Alarm_Clock=0
#Инициализация парсера почты
gmail_user=''#Login
gmail_pass=''#Password
#Сами функции
#Будильник
def alarm_clock(year_Alarm_Clock, month_Alarm_Clock, day_Alarm_Clock, hour_Alarm_Clock, min_Alarm_Clock, sec_Alarm_Clock):
dt = datetime.datetime(year_Alarm_Clock, month_Alarm_Clock, day_Alarm_Clock, hour_Alarm_Clock, min_Alarm_Clock, sec_Alarm_Clock)
diff = (dt - datetime.datetime.now()).total_seconds()
print(diff)
time.sleep(diff)
print('сообщение в телегу текст')
try:
time.sleep(diff)
print('сообщение в телегу текст')
except:
print('Нельзя поставить будильник в прошлое')
return
# проверка почты на новое письмо gmail
# Нужно включить https://myaccount.google.com/lesssecureapps и https://mail.google.com/mail/u/2/#settings/fwdandpop
#
def check_email(gmail_user, gmail_pass):
mail = imaplib.IMAP4_SSL('imap.gmail.com', 993)
mail.login(gmail_user, gmail_pass)
@@ -24,13 +46,41 @@ def check_email(gmail_user, gmail_pass):
mail.list()
count_Email_Current = (mail.select("inbox")[1][0]).decode('utf-8')
if count_Email_Current > count_Email_Start:
print('Отправить сообщение в телегу о том, а) занят б)текст')
result, data = mail.search(None, "ALL")
ids = data[0] # Получаем сроку номеров писем
id_list = ids.split() # Разделяем ID писем
latest_email_id = id_list[-1] # Берем последний ID
result, data = mail.fetch(latest_email_id, "(RFC822)") # Получаем тело письма (RFC822) для данного ID
raw_email = data[0][1]
email_message = email.message_from_bytes(raw_email)
email_message_From = email_message['From']
email_message_From = email_message_From[email_message_From.index('<'):email_message_From.index('>')]
email_message_From = email_message_From[1:]
print('Отправить сообщение в телегу о том, что занят')
print('Отправить "от кого" ', email_message_From)
count_Email_Start = count_Email_Current
time.sleep(15) # частота проверки нового письма
#Чтобы запустить будильник 1, Парсер 2
Mode=2
#Для создания потока будильника передаются:
# Id юзера который поставил будильник, и значения времени которые он поставил. Поток создаётся с именем(id) юзера
if __name__ == '__main__':
alarm_clock()
if Mode==1:
Clock_Thread = threading.Thread(
target = alarm_clock, name = userName, args=(year_Alarm_Clock,
month_Alarm_Clock,
day_Alarm_Clock,
hour_Alarm_Clock,
min_Alarm_Clock,
sec_Alarm_Clock))
Clock_Thread.start()
if Mode==2:
check_email(gmail_user, gmail_pass)
# сценарии должны хранить логины и пароль
# запилить бота, возврат темы и отправителя в словаре.