diff options
Diffstat (limited to 'ATRI/plugins/plugin_utils/__init__.py')
-rw-r--r-- | ATRI/plugins/plugin_utils/__init__.py | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/ATRI/plugins/plugin_utils/__init__.py b/ATRI/plugins/plugin_utils/__init__.py new file mode 100644 index 0000000..54abdeb --- /dev/null +++ b/ATRI/plugins/plugin_utils/__init__.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +# -*- encoding: utf-8 -*- +''' +@File : __init__.py +@Time : 2020/10/17 21:16:59 +@Author : Kyomotoi +@Contact : kyomotoiowo@gmail.com +@Github : https://github.com/Kyomotoi +@License : Copyright © 2018-2020 Kyomotoi, All Rights Reserved. +@Docs : Thanks for mnixry idea! fork from https://github.com/mnixry/coolQPythonBot +''' +__author__ = 'kyomotoi' + +import os +import json +import random +from pathlib import Path +from time import strftime +from zipfile import PyZipFile +from typing import Tuple, Dict, List +from datetime import datetime, timedelta + +from nonebot.plugin import on_command +from nonebot.adapters.cqhttp import Bot, Event + +from utils.utils_banList import banList + + +file = Path('.') / 'ATRI' / 'data' / 'data_IDcard' / 'main.bin' + +def infoID() -> Tuple[Dict[str, List[str]], Dict[str, str]]: + with PyZipFile(os.path.abspath(file), "r") as zipFile: + with zipFile.open("name.json", "r") as f: + name = json.loads(f.read().decode()) + with zipFile.open("area.json", "r") as f: + area = json.loads(f.read().decode()) + return name, area + +NAME, AREA = infoID() + +BIRTH_BEGIN = datetime(*[1980, 10, 10]) # type: ignore +BIRTH_END = datetime(*[2002, 10, 10]) # type: ignore + +def numberID(area: int, sex: int, birth: int) -> str: + def checkSum(fullCode: str) -> int or str: + assert len(fullCode) == 17 + checkSum = sum( + [((1 << (17 - i)) % 11) * int(fullCode[i]) for i in range(0, 17)] + ) + checkDigit = (12 - (checkSum % 11)) % 11 + if checkDigit < 10: + return checkDigit + else: + return "X" + + orderCode = str(random.randint(10, 99)) + sexCode = str(random.randrange(sex, 10, step=2)) + fullCode = str(area) + str(birth) + str(orderCode) + str(sexCode) + fullCode += str(checkSum(fullCode)) + return fullCode + + +plugin_name = "one-key-adult" +generateID = on_command("我要转大人,一天打25小时游戏") + +@generateID.handle() # type: ignore +async def _(bot: Bot, event: Event, state: dict) -> None: + user = str(event.user_id) + group = str(event.group_id) + + if banList(user, group): + id_card_area = int(random.choice(list(AREA.keys()))) + id_card_area_name = AREA[str(id_card_area)] + id_card_year_old = timedelta(days=random.randint(0, (BIRTH_END - BIRTH_BEGIN).days) + 1) + id_card_birth_day = strftime("%Y%m%d", (BIRTH_BEGIN + id_card_year_old).timetuple()) + id_card_sex = random.choice([0, 1]) + id_card_name = random.choice(NAME[{0: "female", 1: "male"}[id_card_sex]]) + id_card_id = numberID(id_card_area, id_card_sex, id_card_birth_day) + + msg0 = "恭喜,你已经成大人了!\n" + msg0 += "这是你一天25h游戏的通行证:\n" + msg0 += f"NumberID: {id_card_id}\n" + msg0 += f"Sex: {'男' if id_card_sex == 1 else '女'}\n" + msg0 += f"Name: {id_card_name} || Address: {id_card_area_name}\n" + msg0 += "注: 1、以上信息根据国家公开标准生成,非真实信息。\n" + msg0 += " 2、不适用于网易和腾讯。" + + await generateID.finish(msg0) |