summaryrefslogtreecommitdiff
path: root/check.py
blob: a70d508c2a8d2ad07ae7de1b12aa9084fa797a5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
'''
@File    :   check.py
@Time    :   2020/11/07 14:30:34
@Author  :   Kyomotoi
@Contact :   [email protected]
@Github  :   https://github.com/Kyomotoi
@License :   Copyright © 2018-2020 Kyomotoi, All Rights Reserved.
'''
__author__ = 'kyomotoi'

import os
import sys
import time
import pkg_resources

rely_list = ''.join(f'{rely}' for rely in pkg_resources.working_set)
need_rely_list = ['pathlib', 'pyyaml', 'rich']
for rely in need_rely_list:
    if rely not in rely_list:
        os.system(f'pip3 install {rely}')

from pathlib import Path
from rich.progress import Progress
from ATRI.utils.utils_yml import load_yaml

CONFIG_PATH = Path('.') / 'config.yml'
config = load_yaml(CONFIG_PATH)


class CheckATRI():
    """运行前检查必要条件"""
    def checkConfig(self) -> None:
        """检查配置文件是否填写完整"""
        len_config = len(config) + len(config['bot']) + len(
            config['api']) + len(config['html'])

        with Progress() as progress:
            task = progress.add_task("[cyan]Checking Config...",
                                     total=len_config)

            while not progress.finished:
                # 检查基本配置
                bot = config['bot']
                for key in bot:
                    if key == 'debug':
                        if bot['debug'] != 0:
                            print('DEBUG now is open.')
                            progress.update(task, advance=1)
                            time.sleep(0.1)
                    else:
                        if not bot[key]:
                            print(f"Can't load [{key}] from config.yml")
                            time.sleep(5)
                            sys.exit(0)

                        else:
                            progress.update(task, advance=1)
                            time.sleep(0.1)

                # 检查接口配置
                api = config['api']
                for key in api:
                    if not api[key]:
                        print(f"Can't load [{key}] from config.yml")
                        time.sleep(5)
                        sys.exit(0)
                    else:
                        progress.update(task, advance=1)
                        time.sleep(0.1)

                # 检查网页配置
                html = config['html']
                for key in html:
                    if not html[key]:
                        print(f"Can't load [{key}] from config.yml")
                        time.sleep(5)
                        sys.exit(0)
                    else:
                        progress.update(task, advance=1)
                        time.sleep(0.1)

    def checkRely(self) -> None:
        '''
        检查依赖是否完整
        如不完整自动安装
        别吐槽 暴 力
        '''
        rely_list = [
            'nonebot2', 'nonebot2[scheduler]', 'nonebot2[test]', 'nltk',
            'requests', 'pillow', 'psutil'
        ]
        rely_len = len(rely_list)

        with Progress() as progress:
            task = progress.add_task("[cyan]Checking Rely...", total=rely_len)

            while not progress.finished:
                for rely in rely_list:
                    if rely not in rely_list:
                        try:
                            os.system(f'pip3 install {rely}')
                        except:
                            print(
                                "Can't install package {rely}. Please use Google/Bing search error repo and fix it by yourself."
                            )
                            time.sleep(5)
                            sys.exit(0)
                    progress.update(task, advance=1)
                    time.sleep(0.1)