PagerMaid-Pyro/pagermaid/modules/clock.py
xtaodada a941308d17
Some checks failed
Docker Dev Build / docker build and publish (push) Failing after 13s
Docker Build / docker build and publish (push) Failing after 11s
🔖 Update to v1.5.0
这是一项破坏性变更,目录结构进行了重组,无核心功能变化
2024-09-28 22:01:40 +08:00

101 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

""" This module handles world clock related utility. """
from datetime import datetime
from pytz import country_names, country_timezones, timezone
from pagermaid.config import Config
from pagermaid.enums import Message
from pagermaid.listener import listener
from pagermaid.utils import lang
@listener(
is_plugin=False,
outgoing=True,
command="time",
description=lang("time_des"),
parameters=lang("time_parameters"),
)
async def time(message: Message):
"""For querying time."""
if len(message.parameter) == 1:
country = message.parameter[0].title()
else:
country = Config.REGION
try:
time_form = Config.TIME_FORM
date_form = Config.DATE_FORM
datetime.now().strftime(time_form)
datetime.now().strftime(date_form)
except (ValueError, KeyError):
time_form = "%H:%M"
date_form = "%A %y/%m/%d"
if not country:
time_zone = await get_timezone(Config.REGION)
await message.edit(
f"**{Config.REGION} {lang('time_time')}**\n"
f"`{datetime.now(time_zone).strftime(date_form)} "
f"{datetime.now(time_zone).strftime(time_form)}`"
)
return
time_zone = await get_timezone(country)
if not time_zone:
if len(message.parameter) < 1:
await message.edit(lang("time_config"))
return
try:
time_num, utc_num = int(message.parameter[0]), int(message.parameter[0])
if time_num == 0:
time_num, utc_num = "", ""
elif 0 < time_num < 13:
time_num, utc_num = f"-{time_num}", f"+{time_num}"
elif -13 < time_num < 0:
time_num, utc_num = f"+{-time_num}", f"{time_num}"
elif time_num < -12:
time_num, utc_num = "+12", "-12"
elif time_num > 12:
time_num, utc_num = "-12", "+12"
time_zone = timezone(f"Etc/GMT{time_num}")
country_name = f"UTC{utc_num}"
except ValueError:
await message.edit(lang("arg_error"))
return
else:
try:
country_name = country_names[country]
except KeyError:
country_name = country
await message.edit(
f"**{country_name} {lang('time_time')}**\n"
f"`{datetime.now(time_zone).strftime(date_form)} "
f"{datetime.now(time_zone).strftime(time_form)}`"
)
async def get_timezone(target):
"""Returns timezone of the parameter in command."""
if "(Uk)" in target:
target = target.replace("Uk", "UK")
if "(Us)" in target:
target = target.replace("Us", "US")
if " Of " in target:
target = target.replace(" Of ", " of ")
if "(Western)" in target:
target = target.replace("(Western)", "(western)")
if "Minor Outlying Islands" in target:
target = target.replace("Minor Outlying Islands", "minor outlying islands")
if "Nl" in target:
target = target.replace("Nl", "NL")
for country_code in country_names:
if target == country_names[country_code]:
return timezone(country_timezones[country_code][0])
try:
if country_names[target]:
return timezone(country_timezones[target][0])
except KeyError:
return