Initial commit
This commit is contained in:
59
plugins/commands/upcoming.py
Normal file
59
plugins/commands/upcoming.py
Normal file
@@ -0,0 +1,59 @@
|
||||
from datetime import datetime, timedelta, timezone
|
||||
|
||||
from pyrogram import filters
|
||||
from pyrogram.types import Message
|
||||
from pytz import timezone as pytz_timezone
|
||||
|
||||
from classes.garbage_entry import GarbageEntry
|
||||
from classes.pyroclient import PyroClient
|
||||
from modules.database import col_entries
|
||||
|
||||
|
||||
@PyroClient.on_message(
|
||||
~filters.scheduled & filters.private & filters.command(["upcoming"], prefixes=["/"]) # type: ignore
|
||||
)
|
||||
async def command_upcoming(app: PyroClient, message: Message):
|
||||
user = await app.find_user(message.from_user)
|
||||
|
||||
if user.location is None:
|
||||
await message.reply_text(
|
||||
"You have no location set. Use /setup to select your location."
|
||||
)
|
||||
return
|
||||
|
||||
date_min = (
|
||||
datetime.now(pytz_timezone(user.location.timezone)).replace(
|
||||
second=0, microsecond=0
|
||||
)
|
||||
).replace(tzinfo=timezone.utc)
|
||||
date_max = (
|
||||
datetime.now(pytz_timezone(user.location.timezone)).replace(
|
||||
second=0, microsecond=0
|
||||
)
|
||||
+ timedelta(days=30)
|
||||
).replace(tzinfo=timezone.utc)
|
||||
|
||||
entries = [
|
||||
await GarbageEntry.from_record(entry)
|
||||
async for entry in col_entries.find(
|
||||
{
|
||||
"location": {"$in": user.location.id},
|
||||
"date": {"$gte": date_min, "$lte": date_max},
|
||||
}
|
||||
)
|
||||
]
|
||||
|
||||
entries_text = "\n\n".join(
|
||||
[
|
||||
f"**{entry.date.strftime(app._('date', 'formats', locale=user.locale))}**:\n{app._(str(entry.garbage_type.value), 'garbage_types')}"
|
||||
for entry in entries
|
||||
]
|
||||
)
|
||||
|
||||
if not entries:
|
||||
await message.reply_text(
|
||||
f"No garbage collection entries found for the next 30 days at **{user.location.name}**"
|
||||
)
|
||||
return
|
||||
|
||||
await message.reply_text(f"Upcoming garbage collection:\n\n{entries_text}")
|
Reference in New Issue
Block a user