main
 1#!/usr/bin/env python
 2# -*- coding: utf-8 -*-
 3import random
 4from datetime import datetime
 5from zoneinfo import ZoneInfo
 6
 7from loguru import logger
 8from pyrogram.client import Client
 9from pyrogram.types import Message
10
11from config import TZ, cache
12from custom.config import GROUP_67373, USER_CYF
13from utils import nowdt, readable_time
14
15
16async def cyf_greeting(client: Client, message: Message):
17    if message.chat.id != GROUP_67373:
18        return
19    cyf_last_dt = await get_cyf_last_message_dt(client, message)
20    if message.from_user.id == USER_CYF:
21        delta = (nowdt(TZ) - cyf_last_dt).total_seconds()
22        if delta > 6 * 3600:
23            logger.success("Send CYF Sticker!")
24            await client.send_sticker(chat_id=GROUP_67373, sticker="CAACAgIAAxkBAAKG3Gfmdspcxdb0VqSS5Zhs-tX-cLTeAAI1AQACjKo0A4kY1NyS3VKIHgQ")  # 发
25            stickers = [
26                "CAACAgIAAxkBAAKG3Gfmdspcxdb0VqSS5Zhs-tX-cLTeAAI1AQACjKo0A4kY1NyS3VKIHgQ",  # 麻将Fa
27                "CAACAgUAAxkBAAENSJZnfPgfxTgZDNOKW5sNl1p0iXKceQACowsAAs4nCFWXVnARM_crvR4E",  # fafa i love you
28                "CAACAgUAAxkDAAENY9Fnq1cFOZODLp5LmgYETBy_IVmrBwACPAoAArIAAfBUuI2fqU5ZVNEeBA",
29                "CAACAgUAAxkDAAENY9Vnq1eAod-PjwgopOtfLcxFpTLyhwACjg4AAk3YsVTlfzct_olxjR4E",
30                "CAACAgUAAxkDAAENY9Znq1gvvAhN9eOwFVxeGnCn3DbPGwACgQ0AAtVI-FTbCC5TkOSsHB4E",
31                "CAACAgUAAxkDAAENY9dnq1hHhfGXySrioHSf3rc0jPzstgACfgoAAnoy-VSHSpEED_QmBx4E",
32            ]
33            random.choice(stickers)
34            # sticker = random.choice(stickers)
35            # await client.send_sticker(chat_id=GROUP_67373, sticker=sticker)
36        else:
37            logger.trace(f"CYF is active {readable_time(delta)} ago")
38
39
40async def get_cyf_last_message_dt(client: Client, message: Message) -> datetime:
41    """Get the last message of CYF.
42
43    Pyrogram has a bug of the message date.
44    The returned message.date is timezone awareness, but the tzinfo is always set to UTC.
45    So we need to set the correct timezone info.
46    """
47    now = nowdt(TZ)
48    if last_dt := cache.get("cyf_last_message_dt"):
49        if message.from_user.id == USER_CYF:
50            logger.success(f"Record CYF last message: {now:%Y-%m-%d %H:%M:%S}")
51            cache.set("cyf_last_message_dt", now, ttl=0)
52        return last_dt
53    try:
54        async for msg in client.search_messages(chat_id=GROUP_67373, from_user=USER_CYF, limit=1):  # type: ignore
55            mdate = msg.date.astimezone(ZoneInfo(TZ))
56            delta = (now - mdate).total_seconds()
57            logger.success(f"Retrieval CYF last message: {mdate:%Y-%m-%d %H:%M:%S} ({readable_time(delta)})")
58            cache.set("cyf_last_message_dt", mdate, ttl=0)
59            return msg.date
60    except Exception as e:
61        logger.error(e)
62
63    cache.set("cyf_last_message_dt", now, ttl=0)
64    return now