summaryrefslogtreecommitdiff
path: root/ATRI/plugins/onMessage.py
blob: 0ab8f8802e14b6581414f7e2def1cda2b0a4c707 (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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import re
import os
import json
import nonebot
from pathlib import Path
from random import randint, choice

from ATRI.modules.error import errorBack
from ATRI.modules.time import sleepTime
from ATRI.modules.funcControl import checkSwitch, checkNoob
from ATRI.plugins.SauceNAO import API_KEY, SauceNAO


bot = nonebot.get_bot()


@bot.on_message("group")
async def _(context):
    group = context["group_id"]
    user = context["user_id"]
    if sleepTime():
        pass
    else:
        if checkNoob(user, group):
            msg = str(context["message"])
            print(msg)
            if "搜图" in msg or "识图" in msg:
                if checkSwitch("saucenao_search", group):
                    try:
                        pattern = r"CQ:reply,id=(.*?)]"
                        info = re.findall(pattern, msg)
                        msgID = info[0]
                        print(msgID)
                    except:
                        print('ERROR-onMessage')
                        return

                    try:
                        with open(Path('.') / 'ATRI' / 'data' / 'groupData' / f'{group}' / 'msgData.json', 'r') as f:
                            data = json.load(f)
                    except:
                        data = {}
                    
                    if msgID in data.keys():
                        msgR = data[f"{msgID}"]["msg"]

                        pattern = r"url=(.*?)]"
                        info = re.findall(pattern, msgR)
                        picURL = info[0]

                        try:
                            task = SauceNAO(api_key=API_KEY)
                            data = task.search(url=picURL)
                            msg0 = ''
                        except:
                            await bot.send_msg(group_id = group, message = errorBack('请求数据失败')) # type: ignore
                            return

                        print(data)
                        try:
                            data = json.loads(data)['results'][0]
                            title = data['data']['title']
                            pixiv_id = data['data']['pixiv_id']
                            member_name = data['data']['member_name']
                            member_id = data['data']['member_id']
                            similarity = data['header']['similarity']
                            mini_url = data['header']['thumbnail']
                            msg0 = f'[CQ:at,qq={user}]'
                            msg0 += f'SauceNAO结果:'
                            msg0 += f'[CQ:image,file={mini_url}]\n'
                            msg0 += f'相似度:{similarity}%\n'
                            msg0 += f'标题:{title}\n'
                            msg0 += f'插画ID:{pixiv_id}\n'
                            msg0 += f'画师:{member_name}\n'
                            msg0 += f'画师ID:{member_id}\n'
                            msg0 += f'直链:https://pixiv.cat/{pixiv_id}.jpg'
                        except:
                            await bot.send_msg(group_id = group, message = errorBack('处理数据失败')) # type: ignore
                            return
                        if msg0:
                            if float(similarity) > 70:
                                await bot.send_msg(group_id = group, message = msg0) # type: ignore
                            else:
                                await bot.send_msg(group_id = group,  message = 'ATRI无法找到相似的图呢...') # type: ignore
                    
                else:
                    await bot.send_msg(group_id = group, message = '该功能已关闭...') # type: ignore
            
            else:
                try:
                    with open(Path('.') / 'ATRI' / 'plugins' / 'LearnRepo' / 'LearnRepo.json', 'r') as f:
                        data = json.load(f)
                except:
                    data = {}

                if str(msg) in data.keys():
                    lt = data[f"{msg}"]
                    msg = lt[0]
                    prob = int(lt[1])
                    res = randint(1,prob)
                    if res == 1:
                        await bot.send_msg(
                            group_id = group,
                            message = msg
                        ) # type: ignore

@bot.on_message('group')
async def _(context):
    user = context["user_id"]
    group = context["group_id"]
    if checkNoob(user, group):
        if sleepTime():
            pass
        else:
            if randint(1,20) == 4:
                img = choice(
                    [
                        '11.jpg', '12.jpg', '23.jpg'
                    ]
                )
                img = os.path.abspath(Path('.') / 'ATRI' / 'data' / 'emoji' / 'senren' / f'{img}')
                await bot.send_msg(message = f'[CQ:image,file=file:///{img}]', auto_escape = False) # type: ignore
            
            else:
                pass