Improve context_id() function

This commit is contained in:
Richard Chien 2018-07-29 20:45:07 +08:00
parent 3791560456
commit 1bf3976498

View File

@ -1,3 +1,4 @@
import hashlib
from typing import Dict, Any, Union, List, Sequence, Callable from typing import Dict, Any, Union, List, Sequence, Callable
from aiocqhttp import Error as CQHttpError from aiocqhttp import Error as CQHttpError
@ -5,16 +6,40 @@ from aiocqhttp import Error as CQHttpError
from . import NoneBot, expression from . import NoneBot, expression
def context_id(ctx: Dict[str, Any]) -> str: def context_id(ctx: Dict[str, Any], *,
"""Calculate a unique id representing the current user.""" mode: str = 'default', use_hash: bool = False) -> str:
src = '' """
Calculate a unique id representing the current context.
mode:
default: one id for one context
group: one id for one group or discuss
user: one id for one user
:param ctx: the context dict
:param mode: unique id mode: "default", "group", or "user"
:param use_hash: use md5 to hash the id or not
"""
ctx_id = ''
if mode == 'default':
if ctx.get('group_id'): if ctx.get('group_id'):
src += f'/group/{ctx["group_id"]}' ctx_id += f'/group/{ctx["group_id"]}'
elif ctx.get('discuss_id'): elif ctx.get('discuss_id'):
src += f'/discuss/{ctx["discuss_id"]}' ctx_id += f'/discuss/{ctx["discuss_id"]}'
if ctx.get('user_id'): if ctx.get('user_id'):
src += f'/user/{ctx["user_id"]}' ctx_id += f'/user/{ctx["user_id"]}'
return src elif mode == 'group':
if ctx.get('group_id'):
ctx_id += f'/group/{ctx["group_id"]}'
elif ctx.get('discuss_id'):
ctx_id += f'/discuss/{ctx["discuss_id"]}'
elif mode == 'user':
if ctx.get('user_id'):
ctx_id += f'/user/{ctx["user_id"]}'
if ctx_id and use_hash:
ctx_id = hashlib.md5(ctx_id.encode('ascii')).hexdigest()
return ctx_id
async def send(bot: NoneBot, ctx: Dict[str, Any], async def send(bot: NoneBot, ctx: Dict[str, Any],