1
+ import time
1
2
import regex
2
3
3
- from ..database import db
4
4
from .. import Quran
5
+ from ..database import db
5
6
from ..helpers .decorators import onlyGroupAdmin
6
7
7
- from telegram import Update , Bot , InlineKeyboardButton , InlineKeyboardMarkup
8
+ from datetime import datetime , tzinfo
8
9
from telegram .ext import MessageHandler , filters , ContextTypes
10
+ from telegram import Update , Bot , InlineKeyboardButton , InlineKeyboardMarkup
9
11
10
12
11
- def _addScheduleToTemp (chatID : int , time : dict , chatType : str , langs : list = None ):
13
+ def _addScheduleToTemp (chatID : int , time : str , chatType : str , langs : list = None ):
12
14
"""Add a schedule to the temp database."""
13
15
langs = [i for i in langs if i ] or ["english_1" ]
16
+ langs = langs [:3 ]
14
17
collection = db .db .schedules
15
18
return collection .update_one (
16
19
{"_id" : chatID },
@@ -44,9 +47,6 @@ def _addScheduleToTemp(chatID: int, time: dict, chatType: str, langs: list = Non
44
47
regex .IGNORECASE ,
45
48
) # Match for: 11:49 pm - eng ara tur {'hour': '11', 'minute': '49', 'ampm': 'pm', 'langs': 'eng ara tur'}
46
49
47
- # TODO: run repeating every minute to check if the time has come
48
- # Enable, Disable, Delete schedule
49
-
50
50
51
51
# /schedule 11:49 pm - eng ara
52
52
@onlyGroupAdmin
@@ -68,12 +68,29 @@ async def scheduleCommand(u: Update, c: ContextTypes.DEFAULT_TYPE):
68
68
69
69
langs = [Quran .detectLanguage (i ) for i in langs ]
70
70
languages = [str (Quran .getTitleLanguageFromLang (i )) for i in langs ]
71
+ currentTime = datetime .utcnow ()
72
+ hours , minutes = result .split (":" )
73
+ remaining = (
74
+ datetime (
75
+ year = currentTime .year ,
76
+ month = currentTime .month ,
77
+ day = currentTime .day ,
78
+ hour = int (hours ),
79
+ minute = int (minutes ),
80
+ second = 0 ,
81
+ )
82
+ - currentTime
83
+ )
84
+ remaining = remaining .total_seconds ()
85
+
86
+ remaining = time .strftime ("%H:%M:%S" , time .gmtime (remaining ))
71
87
72
88
msg = f"""
73
89
<b>Schedule Enabled</b>
74
90
A random verse will be sent at the following time:
75
91
76
- <b>Time:</b> { result ["hour" ]:02d} :{ result ["minute" ]:02d} UTC (24-hour format)
92
+ <b>Time:</b> { result } UTC (24-hour format)
93
+ <b>Remaining:</b> { remaining }
77
94
78
95
<b>Language:</b> { ", " .join (languages ) or "English" }
79
96
@@ -114,18 +131,35 @@ async def showSchedule(u: Update, c: ContextTypes.DEFAULT_TYPE):
114
131
"No schedule found. See /help for more information."
115
132
)
116
133
117
- time = data .get ("time" )
134
+ runTime = data .get ("time" )
118
135
langs = data .get ("langs" )
119
136
chatType = data .get ("chatType" )
120
137
enabled = data .get ("enabled" )
121
138
122
139
languages = [str (Quran .getTitleLanguageFromLang (i )) for i in langs ]
140
+ hours , minutes = runTime .split (":" )
141
+
142
+ currentTime = datetime .utcnow ()
143
+ remaining = (
144
+ datetime (
145
+ year = currentTime .year ,
146
+ month = currentTime .month ,
147
+ day = currentTime .day ,
148
+ hour = int (hours ),
149
+ minute = int (minutes ),
150
+ second = 0 ,
151
+ )
152
+ - currentTime
153
+ )
154
+ remaining = remaining .total_seconds ()
155
+ remaining = time .strftime ("%H:%M:%S" , time .gmtime (remaining ))
123
156
124
157
msg = f"""
125
158
<b>Schedule Information</b>
126
159
A random verse will be sent at the following time:
127
160
128
- <b>Time:</b> { time ["hour" ]:02d} :{ time ["minute" ]:02d} UTC (24-hour format)
161
+ <b>Time:</b> { hours } :{ minutes } UTC (24-hour format)
162
+ <b>Remaining:</b> { remaining }
129
163
130
164
<b>Languages:</b> <code>{ ", " .join (languages ) or "English" } </code>
131
165
<b>Status:</b> <i>{ "Enabled" if enabled else "Disabled" } </i>
@@ -190,7 +224,7 @@ async def _validateTime(message, text: str):
190
224
else :
191
225
if hour >= 12 :
192
226
hour -= 12
193
-
227
+ return f" { hour :02d } : { minute :02d } " # 24-hour format
194
228
return {"hour" : hour , "minute" : minute }
195
229
196
230
0 commit comments