mirror of
https://github.com/PaiGramTeam/MibooGram.git
synced 2024-11-25 09:37:38 +00:00
✨ Add get_chat
function with cache
This commit is contained in:
parent
0e4b1cdc1b
commit
f19c9bd67a
@ -3,29 +3,37 @@ from telegram.error import BadRequest, Forbidden
|
|||||||
from telegram.ext import CallbackContext, ConversationHandler
|
from telegram.ext import CallbackContext, ConversationHandler
|
||||||
|
|
||||||
from core.plugin import handler, conversation
|
from core.plugin import handler, conversation
|
||||||
|
from utils.bot import get_chat
|
||||||
from utils.log import logger
|
from utils.log import logger
|
||||||
|
|
||||||
|
|
||||||
async def clean_message(context: CallbackContext):
|
async def clean_message(context: CallbackContext):
|
||||||
job = context.job
|
job = context.job
|
||||||
logger.debug(f"删除消息 chat_id[{job.chat_id}] 的 message_id[{job.data}]")
|
message_id = job.data
|
||||||
|
char_info = f"chat_id[{job.chat_id}]"
|
||||||
|
try:
|
||||||
|
chat = await get_chat(job.chat_id)
|
||||||
|
char_info = f"{chat.full_name}[{chat.id}]"
|
||||||
|
except (BadRequest, Forbidden) as exc:
|
||||||
|
logger.warning("获取 chat info 失败 %s", exc.message)
|
||||||
|
except Exception as exc:
|
||||||
|
logger.warning("获取 chat info 消息失败 %s", str(exc))
|
||||||
|
logger.debug("删除消息 %s message_id[%s]", char_info, message_id)
|
||||||
try:
|
try:
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
await context.bot.delete_message(chat_id=job.chat_id, message_id=job.data)
|
await context.bot.delete_message(chat_id=job.chat_id, message_id=message_id)
|
||||||
except BadRequest as exc:
|
except BadRequest as exc:
|
||||||
if "not found" in str(exc):
|
if "not found" in exc.message:
|
||||||
logger.warning(f"删除消息 chat_id[{job.chat_id}] message_id[{job.data}]失败 消息不存在")
|
logger.warning("删除消息 %s message_id[%s] 失败 消息不存在", char_info, message_id)
|
||||||
elif "Message can't be deleted" in str(exc):
|
elif "Message can't be deleted" in exc.message:
|
||||||
logger.warning(f"删除消息 chat_id[{job.chat_id}] message_id[{job.data}]失败 消息无法删除 可能是没有授权")
|
logger.warning("删除消息 %s message_id[%s] 失败 消息无法删除 可能是没有授权", char_info, message_id)
|
||||||
else:
|
else:
|
||||||
logger.error(f"删除消息 chat_id[{job.chat_id}] message_id[{job.data}]失败")
|
logger.warning("删除消息 %s message_id[%s] 失败", char_info, message_id, exc_info=exc)
|
||||||
logger.exception(exc)
|
|
||||||
except Forbidden as exc:
|
except Forbidden as exc:
|
||||||
if "bot was kicked" in str(exc):
|
if "bot was kicked" in exc.message:
|
||||||
logger.warning(f"删除消息 chat_id[{job.chat_id}] message_id[{job.data}]失败 已经被踢出群")
|
logger.warning("删除消息 %s message_id[%s] 失败 已经被踢出群", char_info, message_id)
|
||||||
else:
|
else:
|
||||||
logger.error(f"删除消息 chat_id[{job.chat_id}] message_id[{job.data}]失败")
|
logger.warning("删除消息 %s message_id[%s] 失败", char_info, message_id, exc_info=exc)
|
||||||
logger.exception(exc)
|
|
||||||
|
|
||||||
|
|
||||||
def add_delete_message_job(context: CallbackContext, chat_id: int, message_id: int, delete_seconds: int):
|
def add_delete_message_job(context: CallbackContext, chat_id: int, message_id: int, delete_seconds: int):
|
||||||
|
24
utils/bot.py
24
utils/bot.py
@ -1,7 +1,29 @@
|
|||||||
from typing import List
|
import json
|
||||||
|
from typing import List, cast, Union
|
||||||
|
|
||||||
|
from telegram import Chat
|
||||||
from telegram.ext import CallbackContext
|
from telegram.ext import CallbackContext
|
||||||
|
|
||||||
|
from core.base.redisdb import RedisDB
|
||||||
|
from core.bot import bot
|
||||||
|
|
||||||
|
redis_db = bot.services.get(RedisDB)
|
||||||
|
redis_db = cast(RedisDB, redis_db)
|
||||||
|
|
||||||
|
|
||||||
|
async def get_chat(chat_id: Union[str, int], ttl: int = 86400) -> Chat:
|
||||||
|
if redis_db:
|
||||||
|
qname = f"bot:chat:{chat_id}"
|
||||||
|
data = await redis_db.client.get(qname)
|
||||||
|
if data:
|
||||||
|
json_data = json.loads(data)
|
||||||
|
return Chat.de_json(json_data, bot.app.bot)
|
||||||
|
chat_info = await bot.app.bot.get_chat(chat_id)
|
||||||
|
await redis_db.client.set(qname, chat_info.to_json())
|
||||||
|
await redis_db.client.expire(qname, ttl)
|
||||||
|
return chat_info
|
||||||
|
return await bot.app.bot.get_chat(chat_id)
|
||||||
|
|
||||||
|
|
||||||
def get_all_args(context: CallbackContext) -> List[str]:
|
def get_all_args(context: CallbackContext) -> List[str]:
|
||||||
args = context.args
|
args = context.args
|
||||||
|
Loading…
Reference in New Issue
Block a user