-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.js
72 lines (70 loc) · 2.08 KB
/
index.js
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
const { Message, log } = require("mirai-ts");
const TraceMoe = require("tracemoe-helper");
const { default: Bot } = require("el-bot");
let api;
/**
* 格式化结果
* @param {Object} data
*/
async function formatResult(data) {
let r = [
Message.Plain("搜索结果:"),
Message.Plain(
`\n动画名:${data.docs[0].title_native}(${data.docs[0].title_romaji})`
),
Message.Plain(`\n中文名:${data.docs[0].title_chinese || "未知"}`),
Message.Plain(
`\n准确度:${Math.floor(data.docs[0].similarity * 100)}%${
data.docs[0].similarity < 0.86
? "\n(准确度过低,请确保这张图片是完整的、没有裁剪过的动画视频截图)"
: ""
}`
),
Message.Plain(`\n话数:${data.docs[0].episode || "未知"}`),
];
// if (!data.docs[0].is_adult) r = r.concat([Message.Plain('\n'), Message.Image(null, await api.previewImage(data.docs[0].anilist_id, data.docs[0].filename, data.docs[0].at, data.docs[0].tokenthumb))]);
return r;
}
/**
* 搜索
* @param {String} url
*/
async function traceSearch(url) {
try {
const data = await api.search(url);
const res = await formatResult(data);
return res;
} catch (e) {
log.warning(e);
return "失败";
}
}
/**
* 搜图
* @param {Bot} ctx
* @param {Object} options
*/
module.exports = async (ctx, options) => {
const mirai = ctx.mirai;
api = new TraceMoe(options.token || ""); // 实例化
let searchFlag = {};
mirai.on("message", async (msg) => {
if (msg.plain.trim() === "搜番") {
searchFlag[msg.sender.id.toString()] = true;
if (msg.messageChain.length == 2) msg.reply("请发送要搜索的截图");
}
if (searchFlag[msg.sender.id.toString()]) {
let searchReply = false;
msg.messageChain.forEach(async (smsg) => {
if (smsg.type === "Image") {
if (!searchReply) {
msg.reply("少女祈祷中...");
searchReply = true;
}
msg.reply(await traceSearch(smsg.url));
delete searchFlag[msg.sender.id.toString()];
}
});
}
});
};