This repository has been archived by the owner on Sep 28, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
127 lines (113 loc) · 4.49 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
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
126
127
const websocketClient = require('websocket').client
const server = require('./server')
const miraiApi = require('./miraiApi')
const url = "ws://127.0.0.1:23663/"
const handle = new(require('./handle'))()
const cron = require('node-cron')
const fs = require('fs')
const g_gc = parseInt(fs.readFileSync('./cache/.gc'));
// initialize server
let frontServer = new server(handle);
frontServer.start();
// Basic connection
let ws = new websocketClient()
let api;
function reconnect() {
ws.connect(url);
return "Over";
}
console.log(`Start connecting with group_id:${g_gc}`)
ws.on('connect', (client) => {
// initialize api,handle module
api = new miraiApi(client);
api.setResCreator((id) => {
return new Promise((resolve, rej) => {
setTimeout(() => rej('timeout'), 1000);
client.on('message', (msg) => {
let val = JSON.parse(msg.utf8Data);
if (val.echo == id) {
resolve(val);
}
})
})
})
handle.setFuncAddress(reconnect, api, g_gc); //将Class句柄传入处理module
console.log("WebSocket Client Connected");
client.on('message', (msg) => {
let inf = JSON.parse(msg.utf8Data);
if (inf.post_type == 'meta_event')
return;
// Router Part
if (inf.post_type == 'message') {
inf.message = inf.message.replace(/\\\//g, "/");
let ret;
switch (inf.message_type) {
case 'group':
if (inf.group_id != g_gc) return;
let res = handle.interaction(inf.sender.user_id, inf.message);
if (res != '') {
api.sendGroupMsg(g_gc, res);
}
ret = handle.orderMusic(inf.sender.user_id, inf.message, true);
ret.then(msg => {
if (msg != '') {
api.sendGroupMsg(g_gc, '[CQ:at,qq=' + inf.sender.user_id + '] ' + msg);
}
}).catch((err) => {
handle.getUser(inf.sender.user_id).num -= 1;
let msg = `Error caught\nerr:${err}`;
api.sendPrivateMsg(1124468334, msg);
api.sendGroupMsg(g_gc, '[CQ:at,qq=' + inf.sender.user_id + ']🤒点歌失败,请稍后再试\n失败原因:' + err);
});
break;
case 'private':
ret = handle.orderMusic(inf.sender.user_id, inf.message, false);
ret.then(msg => {
if (msg != '') api.sendPrivateMsg(inf.sender.user_id, msg);
}).catch((err) => {
let msg = `Error caught\nerr:${err}`;
handle.getUser(inf.sender.user_id).num -= 1;
api.sendPrivateMsg(1124468334, msg);
api.sendPrivateMsg(inf.sender.user_id, '🤒点歌失败,请稍后再试\n失败原因:' + err);
});
if (inf.message.substr(0, 14) == 'heart_checking') {
api.sendPrivateMsg(inf.sender.user_id, inf.message);
}
break;
default:
console.log(`unrecognized type : ${inf.message_type}`)
}
}
//处理加好友请求
if (inf.post_type == "request") {
console.log(inf);
switch (inf.request_type) {
case 'friend':
api.setFriendAddRequest(inf.flag, true, '')
break;
case `group`:
if (inf.group_id == g_gc) {
api.setGroupAddRequest(inf.flag, 'add', true, '');
}
break;
default:
console.log(`unrecognized request : ${inf.message_type}`)
}
}
})
})
ws.connect(url)
cron.schedule("0 30 11,17 * * *", () => {
try {
handle.switchType(true);
api.sendGroupMsg(g_gc, "[CQ:at,qq=all]🥰开始点歌啦,分享歌曲到群中即可点歌!\n(支持音源:网易云音乐、QQ音乐,暂不支持会员歌曲)");
handle.clearList();
fs.rmSync('./cache/musicLists.json');
fs.rmSync('./cache/usersLists.json');
} catch (e) {
console.log("starting order", e)
}
})
cron.schedule("0 30 13,19 * * *", () => {
handle.switchType(false);
})