Skip to content

Commit 5ac6d85

Browse files
committed
latest patch to fix nested db update bug
1 parent 2f9f5f0 commit 5ac6d85

File tree

4 files changed

+33
-20
lines changed

4 files changed

+33
-20
lines changed

bot/handlers/callbackQuery/handleSettingsButtonPress.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ async def handleGroupSettingsButtonPress(u: Update, c):
292292
]
293293
else:
294294
settings["handleMessages"] = int(query_data[1])
295-
db.updateChat(chatID, settings)
295+
db.updateChatSettings(chatID, settings)
296296
reply = f"Handling messages has been set to <b>{['No', 'Yes'][settings['handleMessages']]}</b>"
297297
buttons = homeStateGroup
298298

@@ -319,7 +319,7 @@ async def handleGroupSettingsButtonPress(u: Update, c):
319319
]
320320
else:
321321
settings["allowAudio"] = int(query_data[1])
322-
db.updateChat(chatID, settings)
322+
db.updateChatSettings(chatID, settings)
323323
reply = f"Allowing audio has been set to <b>{['No', 'Yes'][settings['allowAudio']]}</b>"
324324
buttons = homeStateGroup
325325

@@ -348,7 +348,7 @@ async def handleGroupSettingsButtonPress(u: Update, c):
348348
]
349349
else:
350350
settings["previewLink"] = int(query_data[1])
351-
db.updateChat(chatID, settings)
351+
db.updateChatSettings(chatID, settings)
352352
reply = f"Preview link has been set to <b>{['No', 'Yes'][settings['previewLink']]}</b>"
353353
buttons = homeStateGroup
354354

@@ -391,7 +391,7 @@ async def handleGroupSettingsButtonPress(u: Update, c):
391391

392392
settings["restrictedLangs"].append(langCode)
393393

394-
db.updateChat(chatID, settings)
394+
db.updateChatSettings(chatID, settings)
395395

396396
# -- Previous State --
397397
restrictedLangs = settings["restrictedLangs"]
@@ -431,7 +431,7 @@ async def handleGroupSettingsButtonPress(u: Update, c):
431431

432432
settings["restrictedLangs"].remove(langCode)
433433

434-
db.updateChat(chatID, settings)
434+
db.updateChatSettings(chatID, settings)
435435

436436
# -- Previous State --
437437
restrictedLangs = settings["restrictedLangs"]

bot/handlers/database.py

+17-6
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,23 @@ def addChannel(self, channel) -> None:
6666
self.channels.append(channel)
6767
return None
6868

69-
def updateUser(self, userID: int, settings: dict) -> dict:
69+
def updateUser(self, userID: int, data: dict) -> dict:
70+
user = self.findUser(userID)
71+
if not user:
72+
user = self.addUser(userID)
73+
74+
user.update(data)
75+
return user
76+
77+
def updateUserSettings(self, userID: int, settings: dict) -> dict:
7078
user = self.findUser(userID)
7179
if not user:
7280
user = self.addUser(userID)
7381

7482
user["settings"] = {**user["settings"], **settings}
7583
return user
7684

77-
def updateChat(self, chatID: int, settings: dict) -> dict:
85+
def updateChatSettings(self, chatID: int, settings: dict) -> dict:
7886
chat = self.findChat(chatID)
7987
if not chat:
8088
chat = self.addChat(chatID)
@@ -237,17 +245,17 @@ def updateUser(self, userID: int, newData: dict):
237245
def updateUserSettings(self, userID: int, settings: dict):
238246
user = self.getUser(userID)
239247
settings = {**user["settings"], **settings}
240-
self.localDB.updateUser(userID, settings)
248+
self.localDB.updateUserSettings(userID, settings)
241249
func = self.db.users.update_one
242250
value = ({"_id": userID}, {"$set": {"settings": settings}})
243251
self.queue.append((func, value))
244252
return None
245253

246-
def updateChat(self, chatID: int, settings: dict):
254+
def updateChatSettings(self, chatID: int, settings: dict):
247255
chat = self.getChat(chatID)
248256
settings = {**chat["settings"], **settings}
249257
settings["restrictedLangs"] = list(set(settings["restrictedLangs"]))
250-
self.localDB.updateChat(chatID, settings)
258+
self.localDB.updateChatSettings(chatID, settings)
251259

252260
func = self.db.chats.update_one
253261
value = ({"_id": chatID}, {"$set": {"settings": settings}})
@@ -293,7 +301,10 @@ def runQueue(self):
293301
try:
294302
func(value)
295303
except Exception as e:
296-
logger.info("Error in queue:", e)
304+
logger.error("Error in queue:", e)
305+
logger.info(f"Func: {func}")
306+
logger.info(f"Value: {value}")
307+
logger.info("-" * 33)
297308

298309
end = time.time()
299310
timeMs = (end - start) * 1000

bot/handlers/middleware.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,5 @@ async def middleware(u: Update, c):
3939
if isGroup: # for new groups
4040
if not chat:
4141
chat = db.addChat(chatID)
42-
db.updateChat(chatID, {"lastMessageTime": utcTime})
42+
db.updateChatSettings(chatID, {"lastMessageTime": utcTime})
4343
db.updateCounter() # Update counter for each day

bot/handlers/sendScheduled.py

+10-8
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
from bot.handlers import Quran
1010
from bot.handlers.database import db
11-
from datetime import datetime
11+
from datetime import datetime, timezone
1212
from bot.utils import getLogger
1313

1414
logger = getLogger(__name__)
@@ -29,18 +29,18 @@ async def jobSendScheduled(context: ContextTypes.DEFAULT_TYPE):
2929
runTime = schedule["time"]
3030
hour, minute = runTime.split(":")
3131
hour, minute = int(hour), int(minute)
32-
nowHour, nowMinute = datetime.utcnow().strftime("%H:%M").split(":")
32+
nowHour, nowMinute = datetime.now(timezone.utc).strftime("%H:%M").split(":")
3333
nowHour, nowMinute = int(nowHour), int(nowMinute)
34-
logger.info(
35-
f"Chat ID: {chatID}, Time: {runTime}, Now Time: {nowHour}:{nowMinute}"
36-
)
3734

3835
if hour == nowHour and (0 <= nowMinute - minute <= 5):
3936
logger.info("Sending scheduled verse...")
37+
logger.info(
38+
f"Chat ID: {chatID}, Time: {runTime}, Now Time: {nowHour}:{nowMinute}"
39+
)
4040
lastSent = schedule.get("lastSent")
4141
if lastSent:
4242
lastSent = datetime.strptime(lastSent, "%d:%m:%Y %H:%M:%S")
43-
diff = datetime.utcnow() - lastSent
43+
diff = datetime.now(timezone.utc) - lastSent
4444
if diff.total_seconds() < 11 * 60:
4545
logger.info("Skipping due to last sent.")
4646
continue
@@ -82,7 +82,9 @@ async def jobSendScheduled(context: ContextTypes.DEFAULT_TYPE):
8282
{"_id": newChatID}, {"$set": {"lastSent": currentTime}}
8383
)
8484
except Exception as e:
85-
logger.error(f"Failing to send to new chat ID: {newChatID} - {e}")
85+
logger.error(
86+
f"Failing to send to new chat ID: {newChatID} - {e}"
87+
)
8688

8789
except Forbidden as e:
8890
logger.error(f"Forbidden: {e}")
@@ -94,7 +96,7 @@ async def jobSendScheduled(context: ContextTypes.DEFAULT_TYPE):
9496
await asyncio.sleep(0.1)
9597

9698
# sleep for dueNextMinute seconds
97-
dueNextMinute = 60 - int(datetime.utcnow().strftime("%S"))
99+
dueNextMinute = 60 - int(datetime.now(timezone.utc).strftime("%S"))
98100
# await asyncio.sleep(dueNextMinute - 1)
99101
except Exception as e:
100102
logger.error(f"Error: {e}")

0 commit comments

Comments
 (0)