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