mirror of
https://github.com/TeamPGM/PagerMaid_Plugins_Pyro.git
synced 2024-11-24 16:39:59 +00:00
xtaodada
fb5a3f5baf
All checks were successful
Github commit to telegram / build (push) Successful in 13s
116 lines
4.4 KiB
Python
116 lines
4.4 KiB
Python
""" PagerMaid module that 每日英语 """
|
|
|
|
from os import sep
|
|
from os.path import isfile
|
|
from datetime import date
|
|
from typing import Optional, Dict
|
|
|
|
from pyrogram import Client
|
|
from pyrogram.enums.parse_mode import ParseMode
|
|
|
|
from pagermaid.dependence import client, scheduler
|
|
from pagermaid.enums import Message
|
|
from pagermaid.group_manager import enforce_permission
|
|
from pagermaid.listener import listener
|
|
from pagermaid.modules.help import from_msg_get_sudo_uid
|
|
from pagermaid.services import bot
|
|
from pagermaid.utils import Sub, safe_remove
|
|
from pagermaid.utils.bot_utils import edit_delete
|
|
from pagermaid.utils.listener import from_self
|
|
|
|
everyday_en_sub = Sub("everyday_en")
|
|
everyday_en_data_cache: Optional[Dict] = None
|
|
everyday_en_cache_time: Optional[date] = None
|
|
|
|
|
|
async def get_everyday_en() -> None:
|
|
global everyday_en_data_cache, everyday_en_cache_time
|
|
if (
|
|
everyday_en_cache_time == date.today()
|
|
and everyday_en_data_cache
|
|
and isfile(f"data{sep}everyday_en.jpg")
|
|
and isfile(f"data{sep}everyday_en.mp3")
|
|
):
|
|
return
|
|
resp = await client.get("https://open.iciba.com/dsapi/")
|
|
if resp.is_error:
|
|
raise ValueError(f"每日英语获取失败,错误码:{resp.status_code}")
|
|
everyday_en_data_cache = resp.json()
|
|
everyday_en_cache_time = date.today()
|
|
safe_remove(f"data{sep}everyday_en.jpg")
|
|
safe_remove(f"data{sep}everyday_en.mp3")
|
|
if url := everyday_en_data_cache.get("fenxiang_img", ""):
|
|
resp = await client.get(url, follow_redirects=True)
|
|
with open(f"data{sep}everyday_en.jpg", "wb") as f:
|
|
f.write(resp.content)
|
|
if url := everyday_en_data_cache.get("tts", ""):
|
|
resp = await client.get(url, follow_redirects=True)
|
|
with open(f"data{sep}everyday_en.mp3", "wb") as f:
|
|
f.write(resp.content)
|
|
|
|
|
|
async def push_everyday_en(gid: int) -> None:
|
|
reply = None
|
|
if isfile(f"data{sep}everyday_en.jpg"):
|
|
reply = await bot.send_photo(
|
|
gid,
|
|
f"data{sep}everyday_en.jpg",
|
|
caption=f"【{everyday_en_data_cache['dateline']}】\n"
|
|
f"{everyday_en_data_cache['content']}\n"
|
|
f"释义:{everyday_en_data_cache['note']}",
|
|
)
|
|
if isfile(f"data{sep}everyday_en.mp3"):
|
|
await bot.send_voice(
|
|
gid,
|
|
f"data{sep}everyday_en.mp3",
|
|
reply_to_message_id=reply.id if reply else None,
|
|
)
|
|
|
|
|
|
@scheduler.scheduled_job("cron", hour="8", id="everyday_en.push")
|
|
async def everyday_en_subscribe() -> None:
|
|
await get_everyday_en()
|
|
for gid in everyday_en_sub.get_subs():
|
|
try:
|
|
await push_everyday_en(gid)
|
|
except Exception as e: # noqa
|
|
everyday_en_sub.del_id(gid)
|
|
|
|
|
|
@listener(
|
|
command="everyday_en", parameters="订阅/退订", description="查看今日每日英语,支持订阅/退订每天上午八点定时发送"
|
|
)
|
|
async def everyday_en(_: Client, message: Message):
|
|
"""每日英语"""
|
|
if not message.arguments:
|
|
try:
|
|
await get_everyday_en()
|
|
except ValueError as e:
|
|
return await message.edit(e.__str__())
|
|
await message.safe_delete()
|
|
await push_everyday_en(message.chat.id)
|
|
elif message.arguments == "订阅":
|
|
if from_self(message) or enforce_permission(
|
|
from_msg_get_sudo_uid(message), "modules.manage_subs"
|
|
):
|
|
if everyday_en_sub.check_id(message.chat.id):
|
|
return await edit_delete(
|
|
message, "❌ 你已经订阅了每日英语", parse_mode=ParseMode.HTML
|
|
)
|
|
everyday_en_sub.add_id(message.chat.id)
|
|
await message.edit("你已经成功订阅了每日英语")
|
|
else:
|
|
await edit_delete(message, "❌ 权限不足,无法订阅每日英语", parse_mode=ParseMode.HTML)
|
|
elif message.arguments == "退订":
|
|
if from_self(message) or enforce_permission(
|
|
from_msg_get_sudo_uid(message), "modules.manage_subs"
|
|
):
|
|
if not everyday_en_sub.check_id(message.chat.id):
|
|
return await edit_delete(
|
|
message, "❌ 你还没有订阅每日英语", parse_mode=ParseMode.HTML
|
|
)
|
|
everyday_en_sub.del_id(message.chat.id)
|
|
await message.edit("你已经成功退订了每日英语")
|
|
else:
|
|
await edit_delete(message, "❌ 权限不足,无法退订每日英语", parse_mode=ParseMode.HTML)
|