Possibly fixed #8 #57
@ -1,5 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
from bson import json_util
|
from bson import json_util
|
||||||
from libbot.pyrogram.classes import PyroClient
|
from libbot.pyrogram.classes import PyroClient
|
||||||
@ -9,13 +9,12 @@ from classes.location import Location
|
|||||||
from classes.pyrouser import PyroUser
|
from classes.pyrouser import PyroUser
|
||||||
from modules.database import col_users
|
from modules.database import col_users
|
||||||
from modules.database_api import col_entries
|
from modules.database_api import col_entries
|
||||||
from modules.utils import from_utc
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
async def remind(app: PyroClient) -> None:
|
async def remind(app: PyroClient) -> None:
|
||||||
utcnow = datetime.utcnow()
|
utcnow = datetime.now(timezone.utc)
|
||||||
|
|
||||||
logger.debug("Performing reminder lookup for %s (UTCNOW)", utcnow)
|
logger.debug("Performing reminder lookup for %s (UTCNOW)", utcnow)
|
||||||
|
|
||||||
@ -40,12 +39,16 @@ async def remind(app: PyroClient) -> None:
|
|||||||
try:
|
try:
|
||||||
location: Location = await app.get_location(user.location.id) # type: ignore
|
location: Location = await app.get_location(user.location.id) # type: ignore
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
logger.warning("Skipping reminder for %s due to invalid location", user.id)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
user_date = from_utc(
|
try:
|
||||||
datetime.utcnow() + timedelta(days=user.offset),
|
user_date = user.get_reminder_date()
|
||||||
user.location.timezone.zone,
|
except AttributeError:
|
||||||
).replace(hour=0, minute=0, second=0, microsecond=0)
|
logger.warning(
|
||||||
|
"Skipping reminder for %s due to missing attributes", user.id
|
||||||
|
)
|
||||||
|
continue
|
||||||
|
|
||||||
entries = await col_entries.find(
|
entries = await col_entries.find(
|
||||||
{
|
{
|
||||||
|
@ -6,7 +6,9 @@ from pytz import timezone as pytz_timezone
|
|||||||
|
|
||||||
|
|
||||||
def to_utc(date: datetime, timezone: Union[str, None] = None) -> datetime:
|
def to_utc(date: datetime, timezone: Union[str, None] = None) -> datetime:
|
||||||
"""Move timezone unaware datetime object to UTC timezone and return it.
|
"""*DEPRECATED AND WILL BE REMOVED IN FUTURE RELEASES*
|
||||||
|
|
||||||
|
Move timezone unaware datetime object to UTC timezone and return it.
|
||||||
|
|
||||||
### Args:
|
### Args:
|
||||||
* date (`datetime`): Datetime to be converted.
|
* date (`datetime`): Datetime to be converted.
|
||||||
@ -20,7 +22,9 @@ def to_utc(date: datetime, timezone: Union[str, None] = None) -> datetime:
|
|||||||
|
|
||||||
|
|
||||||
def from_utc(date: datetime, timezone: Union[str, None] = None) -> datetime:
|
def from_utc(date: datetime, timezone: Union[str, None] = None) -> datetime:
|
||||||
"""Move timezone unaware datetime object to the timezone specified and return it.
|
"""*DEPRECATED AND WILL BE REMOVED IN FUTURE RELEASES*
|
||||||
|
|
||||||
|
Move timezone unaware datetime object to the timezone specified and return it.
|
||||||
|
|
||||||
### Args:
|
### Args:
|
||||||
* date (`datetime`): Datetime to be converted.
|
* date (`datetime`): Datetime to be converted.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
from convopyro import listen_message
|
from convopyro import listen_message
|
||||||
from pyrogram import filters
|
from pyrogram import filters
|
||||||
@ -7,7 +7,6 @@ from pyrogram.types import ForceReply, Message, ReplyKeyboardRemove
|
|||||||
|
|
||||||
from classes.pyroclient import PyroClient
|
from classes.pyroclient import PyroClient
|
||||||
from modules import custom_filters
|
from modules import custom_filters
|
||||||
from modules.utils import from_utc
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -65,18 +64,19 @@ async def command_set_offset(app: PyroClient, message: Message):
|
|||||||
|
|
||||||
logger.info("User %s has set offset to %s", user.id, offset)
|
logger.info("User %s has set offset to %s", user.id, offset)
|
||||||
|
|
||||||
garbage_time = from_utc(
|
garbage_time = (
|
||||||
datetime(1970, 1, 1, user.time_hour, user.time_minute),
|
datetime.now(timezone.utc)
|
||||||
None if user.location is None else user.location.timezone.zone,
|
.replace(hour=user.time_hour, minute=user.time_minute)
|
||||||
).strftime(app._("time", "formats"))
|
.astimezone(user.location.timezone or timezone.utc)
|
||||||
|
)
|
||||||
|
|
||||||
await answer.reply_text(
|
await answer.reply_text(
|
||||||
app._("set_offset_finished", "messages", locale=user.locale).format(
|
app._("set_offset_finished", "messages", locale=user.locale).format(
|
||||||
offset=offset,
|
offset=offset,
|
||||||
time=garbage_time,
|
time=garbage_time.strftime(app._("time", "formats", locale=user.locale)),
|
||||||
toggle_notice=""
|
toggle_notice=(
|
||||||
if user.enabled
|
"" if user.enabled else app._("toggle", "messages", locale=user.locale)
|
||||||
else app._("toggle", "messages", locale=user.locale),
|
),
|
||||||
),
|
),
|
||||||
reply_markup=ReplyKeyboardRemove(),
|
reply_markup=ReplyKeyboardRemove(),
|
||||||
)
|
)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
from convopyro import listen_message
|
from convopyro import listen_message
|
||||||
from pyrogram import filters
|
from pyrogram import filters
|
||||||
@ -7,7 +7,6 @@ from pyrogram.types import ForceReply, Message, ReplyKeyboardRemove
|
|||||||
|
|
||||||
from classes.pyroclient import PyroClient
|
from classes.pyroclient import PyroClient
|
||||||
from modules import custom_filters
|
from modules import custom_filters
|
||||||
from modules.utils import to_utc
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -58,28 +57,34 @@ async def command_set_time(app: PyroClient, message: Message):
|
|||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
|
|
||||||
parsed_time = datetime.strptime(answer.text, "%H:%M").replace(
|
parsed_time = datetime.strptime(answer.text, "%H:%M").replace(
|
||||||
year=now.year, month=now.month, day=now.day, second=0, microsecond=0
|
year=now.year,
|
||||||
|
month=now.month,
|
||||||
|
day=now.day,
|
||||||
|
second=0,
|
||||||
|
microsecond=0,
|
||||||
|
tzinfo=timezone.utc,
|
||||||
)
|
)
|
||||||
|
|
||||||
user_time = to_utc(parsed_time, user.location.timezone.zone)
|
user_time = parsed_time.astimezone(user.location.timezone or timezone.utc)
|
||||||
|
|
||||||
await user.update_time(hour=user_time.hour, minute=user_time.minute)
|
await user.update_time(hour=user_time.hour, minute=user_time.minute)
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
"User %s has selected notification time of %s",
|
"User %s has selected notification time of %s (%s UTC)",
|
||||||
user.id,
|
user.id,
|
||||||
|
parsed_time.strftime("%H:%M"),
|
||||||
user_time.strftime("%H:%M"),
|
user_time.strftime("%H:%M"),
|
||||||
)
|
)
|
||||||
|
|
||||||
garbage_time = parsed_time.strftime(app._("time", "formats"))
|
garbage_time = parsed_time.strftime(app._("time", "formats", locale=user.locale))
|
||||||
|
|
||||||
await answer.reply_text(
|
await answer.reply_text(
|
||||||
app._("set_time_finished", "messages", locale=user.locale).format(
|
app._("set_time_finished", "messages", locale=user.locale).format(
|
||||||
offset=user.offset,
|
offset=user.offset,
|
||||||
time=garbage_time,
|
time=garbage_time,
|
||||||
toggle_notice=""
|
toggle_notice=(
|
||||||
if user.enabled
|
"" if user.enabled else app._("toggle", "messages", locale=user.locale)
|
||||||
else app._("toggle", "messages", locale=user.locale),
|
),
|
||||||
),
|
),
|
||||||
reply_markup=ReplyKeyboardRemove(),
|
reply_markup=ReplyKeyboardRemove(),
|
||||||
)
|
)
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import logging
|
import logging
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from convopyro import listen_message
|
from convopyro import listen_message
|
||||||
from libbot import i18n
|
from libbot import i18n
|
||||||
@ -11,7 +10,6 @@ from classes.pyroclient import PyroClient
|
|||||||
from modules import custom_filters
|
from modules import custom_filters
|
||||||
from modules.search_name import search_name
|
from modules.search_name import search_name
|
||||||
from modules.search_nearby import search_nearby
|
from modules.search_nearby import search_nearby
|
||||||
from modules.utils import from_utc
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -74,10 +72,12 @@ async def command_setup(app: PyroClient, message: Message):
|
|||||||
|
|
||||||
await user.update_location(location.id)
|
await user.update_location(location.id)
|
||||||
|
|
||||||
user_time = from_utc(
|
try:
|
||||||
datetime(1970, 1, 1, user.time_hour, user.time_minute),
|
user_time = user.get_reminder_time().strftime(
|
||||||
None if user.location is None else user.location.timezone.zone,
|
app._("time", "formats", locale=user.locale)
|
||||||
).strftime(app._("time", "formats", locale=user.locale))
|
)
|
||||||
|
except AttributeError:
|
||||||
|
user_time = "N/A"
|
||||||
|
|
||||||
await message.reply_text(
|
await message.reply_text(
|
||||||
app._("setup_finished", "messages", locale=user.locale).format(
|
app._("setup_finished", "messages", locale=user.locale).format(
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from convopyro import listen_message
|
from convopyro import listen_message
|
||||||
from pyrogram import filters
|
from pyrogram import filters
|
||||||
from pyrogram.types import (
|
from pyrogram.types import (
|
||||||
@ -11,7 +9,6 @@ from pyrogram.types import (
|
|||||||
|
|
||||||
from classes.pyroclient import PyroClient
|
from classes.pyroclient import PyroClient
|
||||||
from modules import custom_filters
|
from modules import custom_filters
|
||||||
from modules.utils import from_utc
|
|
||||||
|
|
||||||
|
|
||||||
@PyroClient.on_message(
|
@PyroClient.on_message(
|
||||||
@ -91,13 +88,18 @@ async def command_start(app: PyroClient, message: Message):
|
|||||||
|
|
||||||
await user.update_location(location.id)
|
await user.update_location(location.id)
|
||||||
|
|
||||||
user_time = from_utc(
|
try:
|
||||||
datetime(1970, 1, 1, user.time_hour, user.time_minute),
|
user_time = user.get_reminder_time().strftime(
|
||||||
None if user.location is None else user.location.timezone.zone,
|
app._("time", "formats", locale=user.locale)
|
||||||
).strftime(app._("time", "formats", locale=user.locale))
|
)
|
||||||
|
except AttributeError:
|
||||||
|
user_time = "N/A"
|
||||||
|
|
||||||
await answer.reply_text(
|
await answer.reply_text(
|
||||||
app._("start_selection_yes", "messages", locale=user.locale).format(
|
app._("start_selection_yes", "messages", locale=user.locale).format(
|
||||||
name=location.name, offset=user.offset, time=user_time
|
name=location.name,
|
||||||
|
offset=user.offset,
|
||||||
|
time=user_time,
|
||||||
),
|
),
|
||||||
reply_markup=ReplyKeyboardRemove(),
|
reply_markup=ReplyKeyboardRemove(),
|
||||||
)
|
)
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from pyrogram import filters
|
from pyrogram import filters
|
||||||
from pyrogram.types import Message
|
from pyrogram.types import Message
|
||||||
|
|
||||||
from classes.pyroclient import PyroClient
|
from classes.pyroclient import PyroClient
|
||||||
from modules import custom_filters
|
from modules import custom_filters
|
||||||
from modules.utils import from_utc
|
|
||||||
|
|
||||||
|
|
||||||
@PyroClient.on_message(
|
@PyroClient.on_message(
|
||||||
@ -22,10 +19,12 @@ async def command_toggle(app: PyroClient, message: Message):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
user_time = from_utc(
|
try:
|
||||||
datetime(1970, 1, 1, user.time_hour, user.time_minute),
|
user_time = user.get_reminder_time().strftime(
|
||||||
None if user.location is None else user.location.timezone.zone,
|
app._("time", "formats", locale=user.locale)
|
||||||
).strftime(app._("time", "formats"))
|
)
|
||||||
|
except AttributeError:
|
||||||
|
user_time = "N/A"
|
||||||
|
|
||||||
if user.location is None:
|
if user.location is None:
|
||||||
await message.reply_text(
|
await message.reply_text(
|
||||||
|
Reference in New Issue
Block a user