2023-05-11 16:03:18 +08:00
|
|
|
|
import { randomUUID } from "crypto"
|
2023-06-18 11:57:31 +08:00
|
|
|
|
import path from "node:path"
|
2023-07-07 22:34:50 +08:00
|
|
|
|
import fs from "node:fs"
|
2023-05-11 16:03:18 +08:00
|
|
|
|
|
2023-06-26 23:32:52 +08:00
|
|
|
|
Bot.adapter.push(new class gocqhttpAdapter {
|
|
|
|
|
constructor() {
|
|
|
|
|
this.id = "QQ"
|
|
|
|
|
this.name = "go-cqhttp"
|
2023-07-05 17:02:48 +08:00
|
|
|
|
this.path = this.name
|
2023-06-26 23:32:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-05-11 16:03:18 +08:00
|
|
|
|
toStr(data) {
|
|
|
|
|
switch (typeof data) {
|
|
|
|
|
case "string":
|
|
|
|
|
return data
|
|
|
|
|
case "number":
|
|
|
|
|
return String(data)
|
|
|
|
|
case "object":
|
|
|
|
|
if (Buffer.isBuffer(data))
|
|
|
|
|
return Buffer.from(data, "utf8").toString()
|
|
|
|
|
else
|
|
|
|
|
return JSON.stringify(data)
|
|
|
|
|
}
|
2023-07-05 17:02:48 +08:00
|
|
|
|
return data
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
makeLog(msg) {
|
|
|
|
|
return this.toStr(msg).replace(/base64:\/\/.*?(,|]|")/g, "base64://...$1")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sendApi(ws, action, params) {
|
|
|
|
|
const echo = randomUUID()
|
2023-11-04 15:56:13 +08:00
|
|
|
|
ws.sendMsg({ action, params, echo })
|
2023-05-11 16:03:18 +08:00
|
|
|
|
return new Promise(resolve =>
|
|
|
|
|
Bot.once(echo, data =>
|
|
|
|
|
resolve({ ...data, ...data.data })))
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-19 20:11:50 +08:00
|
|
|
|
setProfile(data, profile) {
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 设置资料:${JSON.stringify(profile)}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("set_qq_profile", profile)
|
2023-07-19 20:11:50 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-05-11 16:03:18 +08:00
|
|
|
|
makeMsg(msg) {
|
|
|
|
|
if (!Array.isArray(msg))
|
|
|
|
|
msg = [msg]
|
|
|
|
|
const msgs = []
|
|
|
|
|
for (const i of msg)
|
|
|
|
|
if (typeof i == "object") {
|
|
|
|
|
if (i.data)
|
|
|
|
|
msgs.push(i)
|
|
|
|
|
else
|
|
|
|
|
msgs.push({ type: i.type, data: { ...i, type: undefined }})
|
|
|
|
|
} else {
|
|
|
|
|
msgs.push({ type: "text", data: { text: i }})
|
|
|
|
|
}
|
|
|
|
|
return msgs
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sendFriendMsg(data, msg) {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
if (msg?.type == "node")
|
|
|
|
|
return this.sendFriendForwardMsg(data, msg.data)
|
|
|
|
|
|
2023-08-20 08:35:47 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id} => ${data.user_id}]`)} 发送好友消息:${this.makeLog(msg)}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("send_msg", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
user_id: data.user_id,
|
|
|
|
|
message: this.makeMsg(msg),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sendGroupMsg(data, msg) {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
if (msg?.type == "node")
|
|
|
|
|
return this.sendGroupForwardMsg(data, msg.data)
|
|
|
|
|
|
2023-08-20 08:35:47 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id} => ${data.group_id}]`)} 发送群消息:${this.makeLog(msg)}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("send_msg", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
message: this.makeMsg(msg),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sendGuildMsg(data, msg) {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
if (msg?.type == "node")
|
2023-08-20 08:35:47 +08:00
|
|
|
|
return Bot.sendForwardMsg(msg => this.sendGuildMsg(data, msg), msg)
|
2023-06-18 11:57:31 +08:00
|
|
|
|
|
2023-08-20 08:35:47 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}] => ${data.guild_id}-${data.channel_id}`)} 发送频道消息:${this.makeLog(msg)}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("send_guild_channel_msg", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
guild_id: data.guild_id,
|
|
|
|
|
channel_id: data.channel_id,
|
|
|
|
|
message: this.makeMsg(msg),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-19 17:15:47 +08:00
|
|
|
|
async getMsg(data, message_id) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
const msg = (await data.bot.sendApi("get_msg", { message_id })).data
|
2023-07-19 17:15:47 +08:00
|
|
|
|
|
|
|
|
|
if (msg?.message) {
|
|
|
|
|
const message = []
|
|
|
|
|
for (const i of msg.message)
|
|
|
|
|
message.push({ ...i.data, type: i.type })
|
|
|
|
|
msg.message = message
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return msg
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
recallMsg(data, message_id) {
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 撤回消息:${message_id}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("delete_msg", { message_id })
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getForwardMsg(data, message_id) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("get_forward_msg", { message_id })
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
makeForwardMsg(msg) {
|
|
|
|
|
const messages = []
|
|
|
|
|
for (const i of msg)
|
|
|
|
|
messages.push({
|
|
|
|
|
type: "node",
|
|
|
|
|
data: {
|
|
|
|
|
name: i.nickname || "匿名消息",
|
|
|
|
|
uin: Number(i.user_id) || 80000000,
|
|
|
|
|
content: this.makeMsg(i.message),
|
|
|
|
|
time: i.time,
|
|
|
|
|
},
|
|
|
|
|
})
|
|
|
|
|
return messages
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-18 11:57:31 +08:00
|
|
|
|
async sendFriendForwardMsg(data, msg) {
|
2023-08-20 08:35:47 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id} => ${data.user_id}]`)} 发送好友转发消息:${this.makeLog(msg)}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
msg = await data.bot.sendApi("send_private_forward_msg", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
user_id: data.user_id,
|
|
|
|
|
messages: this.makeForwardMsg(msg),
|
|
|
|
|
})
|
|
|
|
|
return msg
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-18 11:57:31 +08:00
|
|
|
|
async sendGroupForwardMsg(data, msg) {
|
2023-08-20 08:35:47 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id} => ${data.group_id}]`)} 发送群转发消息:${this.makeLog(msg)}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
msg = await data.bot.sendApi("send_group_forward_msg", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
messages: this.makeForwardMsg(msg),
|
|
|
|
|
})
|
|
|
|
|
return msg
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getFriendArray(data) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return (await data.bot.sendApi("get_friend_list")).data
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getFriendList(data) {
|
|
|
|
|
const array = []
|
2023-07-08 21:40:55 +08:00
|
|
|
|
for (const { user_id } of (await this.getFriendArray(data)))
|
|
|
|
|
array.push(user_id)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
return array
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getFriendMap(data) {
|
|
|
|
|
for (const i of (await this.getFriendArray(data)))
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.bot.fl.set(i.user_id, i)
|
|
|
|
|
return data.bot.fl
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getFriendInfo(data) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("get_stranger_info", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
user_id: data.user_id,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getGroupArray(data) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
const array = (await data.bot.sendApi("get_group_list")).data
|
2023-05-11 16:03:18 +08:00
|
|
|
|
for (const guild of (await this.getGuildArray(data)))
|
|
|
|
|
for (const channel of (await this.getGuildChannelArray({
|
|
|
|
|
...data,
|
|
|
|
|
guild_id: guild.guild_id,
|
|
|
|
|
})))
|
|
|
|
|
array.push({
|
2023-07-28 13:05:48 +08:00
|
|
|
|
guild,
|
|
|
|
|
channel,
|
2023-05-11 16:03:18 +08:00
|
|
|
|
group_id: `${guild.guild_id}-${channel.channel_id}`,
|
|
|
|
|
group_name: `${guild.guild_name}-${channel.channel_name}`,
|
|
|
|
|
})
|
|
|
|
|
return array
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getGroupList(data) {
|
|
|
|
|
const array = []
|
2023-07-08 21:40:55 +08:00
|
|
|
|
for (const { group_id } of (await this.getGroupArray(data)))
|
|
|
|
|
array.push(group_id)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
return array
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getGroupMap(data) {
|
|
|
|
|
for (const i of (await this.getGroupArray(data)))
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.bot.gl.set(i.group_id, i)
|
|
|
|
|
return data.bot.gl
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getGroupInfo(data) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("get_group_info", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-28 19:57:42 +08:00
|
|
|
|
async getMemberArray(data) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return (await data.bot.sendApi("get_group_member_list", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
})).data
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-28 19:57:42 +08:00
|
|
|
|
async getMemberList(data) {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
const array = []
|
2023-07-08 21:40:55 +08:00
|
|
|
|
for (const { user_id } of (await this.getMemberArray(data)))
|
|
|
|
|
array.push(user_id)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
return array
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-28 19:57:42 +08:00
|
|
|
|
async getMemberMap(data) {
|
2023-08-20 08:35:47 +08:00
|
|
|
|
const map = new Map
|
2023-06-28 19:57:42 +08:00
|
|
|
|
for (const i of (await this.getMemberArray(data)))
|
2023-05-11 16:03:18 +08:00
|
|
|
|
map.set(i.user_id, i)
|
|
|
|
|
return map
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-28 19:57:42 +08:00
|
|
|
|
getMemberInfo(data) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("get_group_member_info", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
user_id: data.user_id,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getGuildArray(data) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return (await data.bot.sendApi("get_guild_list")).data
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getGuildInfo(data) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("get_guild_meta_by_guest", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
guild_id: data.guild_id,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getGuildChannelArray(data) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return (await data.bot.sendApi("get_guild_channel_list", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
guild_id: data.guild_id,
|
|
|
|
|
})).data
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getGuildChannelMap(data) {
|
2023-08-20 08:35:47 +08:00
|
|
|
|
const map = new Map
|
2023-05-11 16:03:18 +08:00
|
|
|
|
for (const i of (await this.getGuildChannelArray(data)))
|
|
|
|
|
map.set(i.channel_id, i)
|
|
|
|
|
return map
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getGuildMemberArray(data) {
|
|
|
|
|
const array = []
|
|
|
|
|
let next_token = ""
|
|
|
|
|
while (true) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
const list = (await data.bot.sendApi("get_guild_member_list", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
guild_id: data.guild_id,
|
|
|
|
|
next_token,
|
|
|
|
|
})).data
|
|
|
|
|
|
|
|
|
|
for (const i of list.members)
|
|
|
|
|
array.push({
|
|
|
|
|
...i,
|
|
|
|
|
user_id: i.tiny_id,
|
|
|
|
|
})
|
|
|
|
|
if (list.finished) break
|
|
|
|
|
next_token = list.next_token
|
|
|
|
|
}
|
|
|
|
|
return array
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getGuildMemberList(data) {
|
|
|
|
|
const array = []
|
2023-07-08 21:40:55 +08:00
|
|
|
|
for (const { user_id } of (await this.getGuildMemberArray(data)))
|
|
|
|
|
array.push(user_id)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
return array.push
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async getGuildMemberMap(data) {
|
2023-08-20 08:35:47 +08:00
|
|
|
|
const map = new Map
|
2023-05-11 16:03:18 +08:00
|
|
|
|
for (const i of (await this.getGuildMemberArray(data)))
|
|
|
|
|
map.set(i.user_id, i)
|
|
|
|
|
return map
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getGuildMemberInfo(data) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("get_guild_member_profile", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
guild_id: data.guild_id,
|
|
|
|
|
user_id: data.user_id,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setGroupName(data, group_name) {
|
2023-06-29 20:25:21 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 设置群名:[${data.group_id}] ${group_name}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("set_group_name", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
group_name,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setGroupAvatar(data, file) {
|
2023-06-29 20:25:21 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 设置群头像:[${data.group_id}] ${file}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("set_group_portrait", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
group_id: data.group_id,
|
2023-06-29 20:25:21 +08:00
|
|
|
|
file: segment.image(file).file,
|
2023-05-11 16:03:18 +08:00
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setGroupAdmin(data, user_id, enable) {
|
2023-06-29 20:25:21 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} ${enable ? "设置" : "取消"}群管理员:[${data.group_id}] ${user_id}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("set_group_admin", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
user_id,
|
|
|
|
|
enable,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setGroupCard(data, user_id, card) {
|
2023-06-29 20:25:21 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 设置群名片:[${data.group_id}] ${user_id} ${card}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("set_group_card", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
user_id,
|
|
|
|
|
card,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setGroupTitle(data, user_id, special_title, duration) {
|
2023-06-29 20:25:21 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 设置群头衔:[${data.group_id}] ${user_id} ${special_title} ${duration}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("set_group_special_title", {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
user_id,
|
|
|
|
|
special_title,
|
|
|
|
|
duration,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-18 11:57:31 +08:00
|
|
|
|
downloadFile(data, url, thread_count, headers) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("download_file", {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
url,
|
|
|
|
|
thread_count,
|
|
|
|
|
headers,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-23 20:50:45 +08:00
|
|
|
|
async makeFile(data, file, name = path.basename(file)) {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
if (file.match(/^https?:\/\//))
|
|
|
|
|
file = (await this.downloadFile(data, file)).file
|
|
|
|
|
else if (fs.existsSync(file))
|
|
|
|
|
file = path.resolve(file)
|
|
|
|
|
return { file, name }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async sendFriendFile(data, file, name) {
|
2023-08-20 08:35:47 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id} => ${data.user_id}]`)} 发送好友文件:${name}(${file})`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("upload_private_file", {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
user_id: data.user_id,
|
|
|
|
|
...await this.makeFile(data, file, name),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async sendGroupFile(data, file, folder, name) {
|
2023-06-29 20:25:21 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 发送群文件:[${data.group_id}] ${folder||""}/${name}(${file})`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("upload_group_file", {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
folder,
|
|
|
|
|
...await this.makeFile(data, file, name),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
deleteGroupFile(data, file_id, busid) {
|
2023-06-29 20:25:21 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 删除群文件:[${data.group_id}] ${file_id}(${busid})`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("delete_group_file", {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
file_id,
|
|
|
|
|
busid,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
createGroupFileFolder(data, name) {
|
2023-06-29 20:25:21 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 创建群文件夹:[${data.group_id}] ${name}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("create_group_file_folder", {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
name,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getGroupFileSystemInfo(data) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("get_group_file_system_info", {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getGroupFiles(data, folder_id) {
|
|
|
|
|
if (folder_id)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("get_group_files_by_folder", {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
folder_id,
|
|
|
|
|
})
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("get_group_root_files", {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getGroupFileUrl(data, file_id, busid) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("get_group_file_url", {
|
2023-06-18 11:57:31 +08:00
|
|
|
|
group_id: data.group_id,
|
|
|
|
|
file_id,
|
|
|
|
|
busid,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
getGroupFs(data) {
|
|
|
|
|
return {
|
|
|
|
|
upload: (file, folder, name) => this.sendGroupFile(data, file, folder, name),
|
|
|
|
|
rm: (file_id, busid) => this.deleteGroupFile(data, file_id, busid),
|
|
|
|
|
mkdir: name => this.createGroupFileFolder(data, name),
|
|
|
|
|
df: () => this.getGroupFileSystemInfo(data),
|
|
|
|
|
ls: folder_id => this.getGroupFiles(data, folder_id),
|
|
|
|
|
download: (file_id, busid) => this.getGroupFileUrl(data, file_id, busid),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-07-27 11:57:24 +08:00
|
|
|
|
setFriendAddRequest(data, flag, approve, remark) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("set_friend_add_request", {
|
2023-07-27 11:57:24 +08:00
|
|
|
|
flag,
|
|
|
|
|
approve,
|
|
|
|
|
remark,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setGroupAddRequest(data, flag, sub_type, approve, reason) {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
return data.bot.sendApi("set_group_add_request", {
|
2023-07-27 11:57:24 +08:00
|
|
|
|
flag,
|
|
|
|
|
sub_type,
|
|
|
|
|
approve,
|
|
|
|
|
reason,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-18 11:57:31 +08:00
|
|
|
|
pickFriend(data, user_id) {
|
2023-06-26 23:32:52 +08:00
|
|
|
|
const i = {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
...data.bot.fl.get(user_id),
|
2023-06-26 23:32:52 +08:00
|
|
|
|
...data,
|
|
|
|
|
user_id,
|
|
|
|
|
}
|
2023-06-18 11:57:31 +08:00
|
|
|
|
return {
|
2023-06-26 23:32:52 +08:00
|
|
|
|
...i,
|
2023-06-18 11:57:31 +08:00
|
|
|
|
sendMsg: msg => this.sendFriendMsg(i, msg),
|
2023-07-19 17:15:47 +08:00
|
|
|
|
getMsg: message_id => this.getMsg(i, message_id),
|
2023-06-18 11:57:31 +08:00
|
|
|
|
recallMsg: message_id => this.recallMsg(i, message_id),
|
2023-07-19 17:15:47 +08:00
|
|
|
|
getForwardMsg: message_id => this.getForwardMsg(i, message_id),
|
2023-06-18 11:57:31 +08:00
|
|
|
|
sendForwardMsg: msg => this.sendFriendForwardMsg(i, msg),
|
|
|
|
|
sendFile: (file, name) => this.sendFriendFile(i, file, name),
|
|
|
|
|
getInfo: () => this.getFriendInfo(i),
|
2023-06-26 23:32:52 +08:00
|
|
|
|
getAvatarUrl: () => `https://q1.qlogo.cn/g?b=qq&s=0&nk=${user_id}`,
|
2023-06-18 11:57:31 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pickMember(data, group_id, user_id) {
|
|
|
|
|
if (typeof group_id == "string" && group_id.match("-")) {
|
2023-06-26 23:32:52 +08:00
|
|
|
|
const guild_id = group_id.split("-")
|
|
|
|
|
const i = {
|
|
|
|
|
...data,
|
|
|
|
|
guild_id: guild_id[0],
|
|
|
|
|
channel_id: guild_id[1],
|
|
|
|
|
user_id,
|
|
|
|
|
}
|
2023-06-18 11:57:31 +08:00
|
|
|
|
return {
|
2023-06-26 23:32:52 +08:00
|
|
|
|
...this.pickGroup(i, group_id),
|
|
|
|
|
...i,
|
2023-06-18 11:57:31 +08:00
|
|
|
|
getInfo: () => this.getGuildMemberInfo(i),
|
|
|
|
|
getAvatarUrl: async () => (await this.getGuildMemberInfo(i)).avatar_url,
|
|
|
|
|
}
|
2023-06-26 23:32:52 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const i = {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
...data.bot.fl.get(user_id),
|
2023-06-26 23:32:52 +08:00
|
|
|
|
...data,
|
|
|
|
|
group_id,
|
|
|
|
|
user_id,
|
|
|
|
|
}
|
|
|
|
|
return {
|
|
|
|
|
...this.pickFriend(i, user_id),
|
|
|
|
|
...i,
|
2023-06-28 19:57:42 +08:00
|
|
|
|
getInfo: () => this.getMemberInfo(i),
|
2023-06-26 23:32:52 +08:00
|
|
|
|
poke: () => this.sendGroupMsg(i, segment.poke(user_id)),
|
2023-06-18 11:57:31 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pickGroup(data, group_id) {
|
|
|
|
|
if (typeof group_id == "string" && group_id.match("-")) {
|
2023-06-26 23:32:52 +08:00
|
|
|
|
const guild_id = group_id.split("-")
|
|
|
|
|
const i = {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
...data.bot.gl.get(group_id),
|
2023-06-26 23:32:52 +08:00
|
|
|
|
...data,
|
|
|
|
|
guild_id: guild_id[0],
|
|
|
|
|
channel_id: guild_id[1],
|
|
|
|
|
}
|
2023-06-18 11:57:31 +08:00
|
|
|
|
return {
|
2023-06-26 23:32:52 +08:00
|
|
|
|
...i,
|
2023-06-18 11:57:31 +08:00
|
|
|
|
sendMsg: msg => this.sendGuildMsg(i, msg),
|
2023-07-19 17:15:47 +08:00
|
|
|
|
getMsg: message_id => this.getMsg(i, message_id),
|
2023-06-18 11:57:31 +08:00
|
|
|
|
recallMsg: message_id => this.recallMsg(i, message_id),
|
2023-07-19 17:15:47 +08:00
|
|
|
|
getForwardMsg: message_id => this.getForwardMsg(i, message_id),
|
2023-06-18 11:57:31 +08:00
|
|
|
|
getInfo: () => this.getGuildInfo(i),
|
|
|
|
|
getChannelArray: () => this.getGuildChannelArray(i),
|
|
|
|
|
getChannelList: () => this.getGuildChannelList(i),
|
|
|
|
|
getChannelMap: () => this.getGuildChannelMap(i),
|
|
|
|
|
getMemberArray: () => this.getGuildMemberArray(i),
|
|
|
|
|
getMemberList: () => this.getGuildMemberList(i),
|
|
|
|
|
getMemberMap: () => this.getGuildMemberMap(i),
|
2023-06-26 23:32:52 +08:00
|
|
|
|
pickMember: user_id => this.pickMember(i, group_id, user_id),
|
2023-06-18 11:57:31 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-06-26 23:32:52 +08:00
|
|
|
|
const i = {
|
2023-08-21 11:55:17 +08:00
|
|
|
|
...data.bot.gl.get(group_id),
|
2023-06-26 23:32:52 +08:00
|
|
|
|
...data,
|
|
|
|
|
group_id,
|
|
|
|
|
}
|
2023-06-18 11:57:31 +08:00
|
|
|
|
return {
|
2023-06-26 23:32:52 +08:00
|
|
|
|
...i,
|
2023-06-18 11:57:31 +08:00
|
|
|
|
sendMsg: msg => this.sendGroupMsg(i, msg),
|
2023-07-19 17:15:47 +08:00
|
|
|
|
getMsg: message_id => this.getMsg(i, message_id),
|
2023-06-18 11:57:31 +08:00
|
|
|
|
recallMsg: message_id => this.recallMsg(i, message_id),
|
2023-07-19 17:15:47 +08:00
|
|
|
|
getForwardMsg: message_id => this.getForwardMsg(i, message_id),
|
2023-06-18 11:57:31 +08:00
|
|
|
|
sendForwardMsg: msg => this.sendGroupForwardMsg(i, msg),
|
2023-06-18 13:34:34 +08:00
|
|
|
|
sendFile: (file, name) => this.sendGroupFile(i, file, undefined, name),
|
2023-06-18 11:57:31 +08:00
|
|
|
|
getInfo: () => this.getGroupInfo(i),
|
2023-06-26 23:32:52 +08:00
|
|
|
|
getAvatarUrl: () => `https://p.qlogo.cn/gh/${group_id}/${group_id}/0`,
|
2023-06-28 19:57:42 +08:00
|
|
|
|
getMemberArray: () => this.getMemberArray(i),
|
|
|
|
|
getMemberList: () => this.getMemberList(i),
|
|
|
|
|
getMemberMap: () => this.getMemberMap(i),
|
2023-06-26 23:32:52 +08:00
|
|
|
|
pickMember: user_id => this.pickMember(i, group_id, user_id),
|
2023-06-18 11:57:31 +08:00
|
|
|
|
pokeMember: user_id => this.sendGroupMsg(i, segment.poke(user_id)),
|
|
|
|
|
setName: group_name => this.setGroupName(i, group_name),
|
|
|
|
|
setAvatar: file => this.setGroupAvatar(i, file),
|
|
|
|
|
setAdmin: (user_id, enable) => this.setGroupAdmin(i, user_id, enable),
|
|
|
|
|
setCard: (user_id, card) => this.setGroupCard(i, user_id, card),
|
|
|
|
|
setTitle: (user_id, special_title, duration) => this.setGroupTitle(i, user_id, special_title, duration),
|
|
|
|
|
fs: this.getGroupFs(i),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-21 11:55:17 +08:00
|
|
|
|
async connect(data, ws) {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
Bot[data.self_id] = {
|
2023-07-05 17:02:48 +08:00
|
|
|
|
adapter: this,
|
2023-08-21 11:55:17 +08:00
|
|
|
|
ws: ws,
|
|
|
|
|
sendApi: (action, params) => this.sendApi(ws, action, params),
|
2023-05-11 16:03:18 +08:00
|
|
|
|
stat: { start_time: data.time },
|
2023-07-28 12:23:18 +08:00
|
|
|
|
model: "TRSS Yunzai ",
|
|
|
|
|
|
|
|
|
|
info: {},
|
|
|
|
|
get uin() { return this.info.user_id },
|
|
|
|
|
get nickname() { return this.info.nickname },
|
|
|
|
|
get avatar() { return `https://q1.qlogo.cn/g?b=qq&s=0&nk=${this.uin}` },
|
2023-05-11 16:03:18 +08:00
|
|
|
|
|
2023-07-19 20:11:50 +08:00
|
|
|
|
setProfile: profile => this.setProfile(data, profile),
|
|
|
|
|
setNickname: nickname => this.setProfile(data, { nickname }),
|
|
|
|
|
|
2023-06-18 11:57:31 +08:00
|
|
|
|
pickFriend: user_id => this.pickFriend(data, user_id),
|
2023-07-29 13:47:45 +08:00
|
|
|
|
get pickUser() { return this.pickFriend },
|
2023-05-11 16:03:18 +08:00
|
|
|
|
getFriendArray: () => this.getFriendArray(data),
|
|
|
|
|
getFriendList: () => this.getFriendList(data),
|
|
|
|
|
getFriendMap: () => this.getFriendMap(data),
|
2023-08-20 08:35:47 +08:00
|
|
|
|
fl: new Map,
|
2023-05-11 16:03:18 +08:00
|
|
|
|
|
2023-06-18 11:57:31 +08:00
|
|
|
|
pickMember: (group_id, user_id) => this.pickMember(data, group_id, user_id),
|
|
|
|
|
pickGroup: group_id => this.pickGroup(data, group_id),
|
2023-05-11 16:03:18 +08:00
|
|
|
|
getGroupArray: () => this.getGroupArray(data),
|
|
|
|
|
getGroupList: () => this.getGroupList(data),
|
|
|
|
|
getGroupMap: () => this.getGroupMap(data),
|
2023-08-20 08:35:47 +08:00
|
|
|
|
gl: new Map,
|
|
|
|
|
gml: new Map,
|
2023-07-27 11:57:24 +08:00
|
|
|
|
|
|
|
|
|
request_list: [],
|
2023-08-21 11:55:17 +08:00
|
|
|
|
getSystemMsg: () => data.bot.request_list,
|
2023-07-27 11:57:24 +08:00
|
|
|
|
setFriendAddRequest: (flag, approve, remark) => this.setFriendAddRequest(data, flag, approve, remark),
|
|
|
|
|
setGroupAddRequest: (flag, sub_type, approve, reason) => this.setGroupAddRequest(data, flag, sub_type, approve, reason),
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.bot = Bot[data.self_id]
|
2023-05-11 16:03:18 +08:00
|
|
|
|
|
2023-07-28 12:23:18 +08:00
|
|
|
|
if (!Bot.uin.includes(data.self_id))
|
|
|
|
|
Bot.uin.push(data.self_id)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.bot.sendApi("_set_model_show", {
|
|
|
|
|
model: data.bot.model,
|
|
|
|
|
model_show: data.bot.model,
|
2023-05-11 16:03:18 +08:00
|
|
|
|
})
|
|
|
|
|
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.bot.info = (await data.bot.sendApi("get_login_info")).data
|
|
|
|
|
data.bot.guild_info = (await data.bot.sendApi("get_guild_service_profile")).data
|
|
|
|
|
data.bot.clients = (await data.bot.sendApi("get_online_clients")).clients
|
|
|
|
|
data.bot.version = {
|
|
|
|
|
...(await data.bot.sendApi("get_version_info")).data,
|
2023-07-05 17:02:48 +08:00
|
|
|
|
id: this.id,
|
|
|
|
|
name: this.name,
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.bot.getFriendMap()
|
|
|
|
|
data.bot.getGroupMap()
|
2023-05-11 16:03:18 +08:00
|
|
|
|
|
2023-08-21 11:55:17 +08:00
|
|
|
|
logger.mark(`${logger.blue(`[${data.self_id}]`)} ${this.name}(${this.id}) ${data.bot.version.app_full_name} 已连接`)
|
2023-08-20 08:35:47 +08:00
|
|
|
|
Bot.em(`connect.${data.self_id}`, data)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
makeMessage(data) {
|
|
|
|
|
const message = []
|
|
|
|
|
for (const i of data.message)
|
2023-07-19 09:34:22 +08:00
|
|
|
|
message.push({ ...i.data, type: i.type })
|
2023-05-11 16:03:18 +08:00
|
|
|
|
data.message = message
|
|
|
|
|
|
|
|
|
|
switch (data.message_type) {
|
|
|
|
|
case "private":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 好友消息:[${data.sender.nickname}(${data.user_id})] ${data.raw_message}`)
|
|
|
|
|
break
|
|
|
|
|
case "group":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群消息:[${data.group_id}, ${data.sender.card||data.sender.nickname}(${data.user_id})] ${data.raw_message}`)
|
|
|
|
|
break
|
|
|
|
|
case "guild":
|
|
|
|
|
data.message_type = "group"
|
|
|
|
|
data.group_id = `${data.guild_id}-${data.channel_id}`
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 频道消息:[${data.group_id}, ${data.sender.nickname}(${data.user_id})] ${JSON.stringify(data.message)}`)
|
2023-08-16 22:58:09 +08:00
|
|
|
|
Object.defineProperty(data, "friend", { get() { return this.member || {}}})
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
default:
|
2023-06-30 21:20:06 +08:00
|
|
|
|
logger.warn(`${logger.blue(`[${data.self_id}]`)} 未知消息:${logger.magenta(JSON.stringify(data))}`)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-08-20 08:35:47 +08:00
|
|
|
|
Bot.em(`${data.post_type}.${data.message_type}.${data.sub_type}`, data)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async makeNotice(data) {
|
|
|
|
|
switch (data.notice_type) {
|
|
|
|
|
case "friend_recall":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 好友消息撤回:[${data.user_id}] ${data.message_id}`)
|
|
|
|
|
break
|
|
|
|
|
case "group_recall":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群消息撤回:[${data.group_id}, ${data.operator_id}=>${data.user_id}] ${data.message_id}`)
|
|
|
|
|
break
|
|
|
|
|
case "group_increase":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群成员增加:[${data.group_id}, ${data.operator_id}=>${data.user_id}] ${data.sub_type}`)
|
2023-07-28 12:23:18 +08:00
|
|
|
|
if (data.user_id == data.self_id)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.bot.getGroupMap()
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
case "group_decrease":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群成员减少:[${data.group_id}, ${data.operator_id}=>${data.user_id}] ${data.sub_type}`)
|
2023-07-28 12:23:18 +08:00
|
|
|
|
if (data.user_id == data.self_id)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.bot.getGroupMap()
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
case "group_admin":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群管理员变动:[${data.group_id}, ${data.user_id}] ${data.sub_type}`)
|
|
|
|
|
data.set = data.sub_type == "set"
|
|
|
|
|
break
|
|
|
|
|
case "group_upload":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群文件上传:[${data.group_id}, ${data.user_id}] ${JSON.stringify(data.file)}`)
|
|
|
|
|
break
|
|
|
|
|
case "group_ban":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群禁言:[${data.group_id}, ${data.operator_id}=>${data.user_id}] ${data.sub_type} ${data.duration}秒`)
|
|
|
|
|
break
|
|
|
|
|
case "friend_add":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 好友添加:[${data.user_id}]`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.bot.getFriendMap()
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
case "notify":
|
|
|
|
|
if (data.group_id)
|
|
|
|
|
data.notice_type = "group"
|
|
|
|
|
else
|
|
|
|
|
data.notice_type = "friend"
|
|
|
|
|
switch (data.sub_type) {
|
|
|
|
|
case "poke":
|
2023-07-28 19:36:51 +08:00
|
|
|
|
data.operator_id = data.user_id
|
2023-05-11 16:03:18 +08:00
|
|
|
|
if (data.group_id)
|
2023-07-28 19:36:51 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群戳一戳:[${data.group_id}, ${data.operator_id}=>${data.target_id}]`)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
else
|
2023-07-28 19:36:51 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 好友戳一戳:[${data.operator_id}=>${data.target_id}]`)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
case "honor":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群荣誉:[${data.group_id}, ${data.user_id}] ${data.honor_type}`)
|
|
|
|
|
break
|
|
|
|
|
case "title":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群头衔:[${data.group_id}, ${data.user_id}] ${data.title}`)
|
|
|
|
|
break
|
|
|
|
|
default:
|
2023-06-30 21:20:06 +08:00
|
|
|
|
logger.warn(`${logger.blue(`[${data.self_id}]`)} 未知通知:${logger.magenta(JSON.stringify(data))}`)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
break
|
|
|
|
|
case "group_card":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群名片更新:[${data.group_id}, ${data.user_id}] ${data.card_old}=>${data.card_new}`)
|
|
|
|
|
break
|
|
|
|
|
case "offline_file":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 离线文件:[${data.user_id}] ${JSON.stringify(data.file)}`)
|
|
|
|
|
break
|
|
|
|
|
case "client_status":
|
2023-07-07 17:48:53 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 客户端${data.online ? "上线" : "下线"}:${JSON.stringify(data.client)}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.clients = (await data.bot.sendApi("get_online_clients")).clients
|
|
|
|
|
data.bot.clients = data.clients
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
case "essence":
|
|
|
|
|
data.notice_type = "group_essence"
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 群精华消息:[${data.group_id}, ${data.operator_id}=>${data.sender_id}] ${data.sub_type} ${data.message_id}`)
|
|
|
|
|
break
|
|
|
|
|
case "guild_channel_recall":
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 频道消息撤回:[${data.guild_id}-${data.channel_id}, ${data.operator_id}=>${data.user_id}] ${data.message_id}`)
|
|
|
|
|
break
|
|
|
|
|
case "message_reactions_updated":
|
|
|
|
|
data.notice_type = "guild_message_reactions_updated"
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 频道消息表情贴:[${data.guild_id}-${data.channel_id}, ${data.user_id}] ${data.message_id} ${JSON.stringify(data.current_reactions)}`)
|
|
|
|
|
break
|
|
|
|
|
case "channel_updated":
|
|
|
|
|
data.notice_type = "guild_channel_updated"
|
2023-05-31 09:55:20 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 子频道更新:[${data.guild_id}-${data.channel_id}, ${data.user_id}] ${JSON.stringify(data.old_info)}=>${JSON.stringify(data.new_info)}`)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
case "channel_created":
|
|
|
|
|
data.notice_type = "guild_channel_created"
|
2023-05-31 09:55:20 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 子频道创建:[${data.guild_id}-${data.channel_id}, ${data.user_id}] ${JSON.stringify(data.channel_info)}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.bot.getGroupMap()
|
2023-06-23 20:50:45 +08:00
|
|
|
|
break
|
|
|
|
|
case "channel_destroyed":
|
|
|
|
|
data.notice_type = "guild_channel_destroyed"
|
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 子频道删除:[${data.guild_id}-${data.channel_id}, ${data.user_id}] ${JSON.stringify(data.channel_info)}`)
|
2023-08-21 11:55:17 +08:00
|
|
|
|
data.bot.getGroupMap()
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
default:
|
2023-06-30 21:20:06 +08:00
|
|
|
|
logger.warn(`${logger.blue(`[${data.self_id}]`)} 未知通知:${logger.magenta(JSON.stringify(data))}`)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let notice = data.notice_type.split("_")
|
|
|
|
|
data.notice_type = notice.shift()
|
|
|
|
|
notice = notice.join("_")
|
|
|
|
|
if (notice)
|
|
|
|
|
data.sub_type = notice
|
|
|
|
|
|
2023-08-14 14:04:35 +08:00
|
|
|
|
if (data.guild_id && data.channel_id) {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
data.group_id = `${data.guild_id}-${data.channel_id}`
|
2023-08-16 22:58:09 +08:00
|
|
|
|
Object.defineProperty(data, "friend", { get() { return this.member || {}}})
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-08-20 08:35:47 +08:00
|
|
|
|
Bot.em(`${data.post_type}.${data.notice_type}.${data.sub_type}`, data)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
makeRequest(data) {
|
|
|
|
|
switch (data.request_type) {
|
|
|
|
|
case "friend":
|
2023-07-27 11:57:24 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 加好友请求:[${data.user_id}] ${data.comment}(${data.flag})`)
|
|
|
|
|
data.sub_type = "add"
|
|
|
|
|
data.approve = approve => data.bot.setFriendAddRequest(data.flag, approve)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
case "group":
|
2023-07-27 11:57:24 +08:00
|
|
|
|
logger.info(`${logger.blue(`[${data.self_id}]`)} 加群请求:[${data.group_id}, ${data.user_id}] ${data.sub_type} ${data.comment}(${data.flag})`)
|
|
|
|
|
data.approve = approve => data.bot.setGroupAddRequest(data.flag, data.sub_type, approve)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
default:
|
2023-06-30 21:20:06 +08:00
|
|
|
|
logger.warn(`${logger.blue(`[${data.self_id}]`)} 未知请求:${logger.magenta(JSON.stringify(data))}`)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-07-27 11:57:24 +08:00
|
|
|
|
data.bot.request_list.push(data)
|
2023-08-20 08:35:47 +08:00
|
|
|
|
Bot.em(`${data.post_type}.${data.request_type}.${data.sub_type}`, data)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
heartbeat(data) {
|
|
|
|
|
if (data.status?.stat)
|
|
|
|
|
data.bot.stat = {
|
|
|
|
|
...data.status,
|
|
|
|
|
lost_pkt_cnt: data.status.stat.packet_lost,
|
|
|
|
|
lost_times: data.status.stat.lost_times,
|
|
|
|
|
recv_msg_cnt: data.status.stat.message_received,
|
|
|
|
|
recv_pkt_cnt: data.status.stat.packet_received,
|
|
|
|
|
sent_msg_cnt: data.status.stat.message_sent,
|
|
|
|
|
sent_pkt_cnt: data.status.stat.packet_sent,
|
|
|
|
|
start_time: data.bot.stat.start_time,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-21 11:55:17 +08:00
|
|
|
|
makeMeta(data, ws) {
|
2023-05-11 16:03:18 +08:00
|
|
|
|
switch (data.meta_event_type) {
|
|
|
|
|
case "heartbeat":
|
|
|
|
|
this.heartbeat(data)
|
|
|
|
|
break
|
|
|
|
|
case "lifecycle":
|
2023-08-21 11:55:17 +08:00
|
|
|
|
this.connect(data, ws)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
default:
|
2023-06-30 21:20:06 +08:00
|
|
|
|
logger.warn(`${logger.blue(`[${data.self_id}]`)} 未知消息:${logger.magenta(JSON.stringify(data))}`)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
message(data, ws) {
|
|
|
|
|
try {
|
|
|
|
|
data = JSON.parse(data)
|
|
|
|
|
} catch (err) {
|
2023-06-30 21:20:06 +08:00
|
|
|
|
return logger.error(`解码数据失败:${logger.red(err)}`)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (data.post_type) {
|
2023-06-30 21:20:06 +08:00
|
|
|
|
if (data.meta_event_type != "lifecycle" && !Bot.uin.includes(data.self_id)) {
|
|
|
|
|
logger.warn(`${logger.blue(`[${data.self_id}]`)} 找不到对应Bot,忽略消息:${logger.magenta(JSON.stringify(data))}`)
|
2023-06-26 23:32:52 +08:00
|
|
|
|
return false
|
2023-06-30 21:20:06 +08:00
|
|
|
|
}
|
2023-05-11 16:03:18 +08:00
|
|
|
|
data.bot = Bot[data.self_id]
|
2023-06-30 21:20:06 +08:00
|
|
|
|
|
2023-05-11 16:03:18 +08:00
|
|
|
|
switch (data.post_type) {
|
|
|
|
|
case "meta_event":
|
2023-08-21 11:55:17 +08:00
|
|
|
|
this.makeMeta(data, ws)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
break
|
|
|
|
|
case "message":
|
|
|
|
|
this.makeMessage(data)
|
|
|
|
|
break
|
|
|
|
|
case "notice":
|
|
|
|
|
this.makeNotice(data)
|
|
|
|
|
break
|
|
|
|
|
case "request":
|
|
|
|
|
this.makeRequest(data)
|
|
|
|
|
break
|
|
|
|
|
case "message_sent":
|
|
|
|
|
data.post_type = "message"
|
|
|
|
|
this.makeMessage(data)
|
|
|
|
|
break
|
|
|
|
|
default:
|
2023-06-30 21:20:06 +08:00
|
|
|
|
logger.warn(`${logger.blue(`[${data.self_id}]`)} 未知消息:${logger.magenta(JSON.stringify(data))}`)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
} else if (data.echo) {
|
|
|
|
|
Bot.emit(data.echo, data)
|
|
|
|
|
} else {
|
2023-06-30 21:20:06 +08:00
|
|
|
|
logger.warn(`${logger.blue(`[${data.self_id}]`)} 未知消息:${logger.magenta(JSON.stringify(data))}`)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
load() {
|
2023-08-20 08:35:47 +08:00
|
|
|
|
if (!Array.isArray(Bot.wsf[this.path]))
|
|
|
|
|
Bot.wsf[this.path] = []
|
|
|
|
|
Bot.wsf[this.path].push((ws, ...args) =>
|
|
|
|
|
ws.on("message", data => this.message(data, ws, ...args))
|
2023-07-23 19:04:24 +08:00
|
|
|
|
)
|
2023-05-11 16:03:18 +08:00
|
|
|
|
}
|
2023-06-26 23:32:52 +08:00
|
|
|
|
})
|