mirror of
https://github.com/A-Minos/nonebot-plugin-tetris-stats.git
synced 2026-03-05 05:36:54 +08:00
70 lines
3.1 KiB
Python
70 lines
3.1 KiB
Python
from re import match
|
|
|
|
# userBind
|
|
async def handleBindMessage(message: str, gameType: str) -> dict[str, bool | str]:
|
|
_CMD_ALIASES = {'IO': ['io绑定', 'iobind'],
|
|
'TOP': ['top绑定', 'topbind']}
|
|
# 剔除命令前缀
|
|
for i in _CMD_ALIASES[gameType]:
|
|
if message.startswith(i):
|
|
message = message.replace(i, '')
|
|
message = message.strip()
|
|
break
|
|
if message == '' or message.isspace():
|
|
return {'Success': False, 'Type': None, 'Message': '用户名为空'}
|
|
else:
|
|
return await checkName(message, gameType)
|
|
|
|
# statsQuery
|
|
async def handleStatsQueryMessage(message: str, gameType: str) -> dict[str, bool | str]:
|
|
_CMD_ALIASES = {'IO': ['io查', 'iostats'],
|
|
'TOS': ['tos查', 'tostats', '茶服查', '茶服stats'],
|
|
'TOP': ['top查', 'topstats']}
|
|
_ME = ['我', '自己', '私', '俺', 'me']
|
|
message = (message.strip()).lower()
|
|
# 剔除命令前缀
|
|
for i in _CMD_ALIASES[gameType]:
|
|
if message.startswith(i):
|
|
message = message.replace(i, '')
|
|
message = message.strip()
|
|
break
|
|
if message == '' or message.isspace():
|
|
return {'Success': False, 'Type': None, 'Message': '用户名为空'}
|
|
else:
|
|
if message.startswith('[cq:at,qq='):
|
|
try:
|
|
QQNumber = int((str(message)).split(
|
|
'[cq:at,qq=')[1].split(']')[0])
|
|
except ValueError:
|
|
return {'Success': False, 'Type': None, 'Message': 'QQ号码不合法'}
|
|
else:
|
|
return {'Success': True, 'Type': 'AT', 'Message': None, 'QQNumber': QQNumber}
|
|
elif message in _ME:
|
|
return {'Success': True, 'Type': 'ME', 'Message': None}
|
|
else:
|
|
return await checkName(message, gameType)
|
|
|
|
async def checkName(name: str, gameType: str) -> dict[str, bool | str]:
|
|
if gameType == 'IO':
|
|
if match(r'^[a-f0-9]{24}$', name):
|
|
return {'Success': True, 'Type': 'ID', 'Message': None, 'User': name}
|
|
elif match(r'^[a-zA-Z0-9_-]{3,16}$', name):
|
|
return {'Success': True, 'Type': 'Name', 'Message': None, 'User': name}
|
|
else:
|
|
return {'Success': False, 'Type': None, 'Message': '用户名不合法'}
|
|
elif gameType == 'TOP':
|
|
if match(r'^[a-zA-Z0-9_]{1,16}$', name):
|
|
return {'Success': True, 'Type': 'Name', 'Message': None, 'User': name}
|
|
else:
|
|
return {'Success': False, 'Type': None, 'Message': '用户名不合法'}
|
|
elif gameType == 'TOS':
|
|
if (match(r'^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\-][^\+][^\|\*\?\\\s\!:<>/$"]*[^\.\|\*\?\\\s\!:<>/$"]+$', name)
|
|
and name.isdigit() is False
|
|
and 2 <= len(name) <= 18):
|
|
# 虽然我也不想这么长 但是似乎确实得这么长
|
|
return {'Success': True, 'Type': 'Name', 'Message': None, 'User': name}
|
|
elif name.isdigit() is True:
|
|
return {'Success': True, 'Type': 'QQ', 'Message': None, 'QQNumber': name}
|
|
else:
|
|
return {'Success': False, 'Type': None, 'Message': '用户名不合法'}
|