优化 获取用户消息

This commit is contained in:
🌌 2023-07-29 13:47:45 +08:00
parent 276d27f24c
commit 090b7d8b43
7 changed files with 46 additions and 50 deletions

View File

@ -66,10 +66,7 @@ export default class Yunzai extends EventEmitter {
map.set(id, { ...i, bot_id }) map.set(id, { ...i, bot_id })
return map return map
} }
get fl() { return this.getFriendMap() }
get fl() {
return this.getFriendMap()
}
getGroupArray() { getGroupArray() {
const array = [] const array = []
@ -94,14 +91,7 @@ export default class Yunzai extends EventEmitter {
map.set(id, { ...i, bot_id }) map.set(id, { ...i, bot_id })
return map return map
} }
get gl() { return this.getGroupMap() }
get gl() {
return this.getGroupMap()
}
pickUser(user_id) {
return this.pickFriend(user_id)
}
pickFriend(user_id) { pickFriend(user_id) {
user_id = Number(user_id) || String(user_id) user_id = Number(user_id) || String(user_id)
@ -109,6 +99,7 @@ export default class Yunzai extends EventEmitter {
if (user) return this[user.bot_id].pickFriend(user_id) if (user) return this[user.bot_id].pickFriend(user_id)
logger.error(`获取用户对象失败:找不到用户 ${logger.red(user_id)}`) logger.error(`获取用户对象失败:找不到用户 ${logger.red(user_id)}`)
} }
get pickUser() { return this.pickFriend }
pickGroup(group_id) { pickGroup(group_id) {
group_id = Number(group_id) || String(group_id) group_id = Number(group_id) || String(group_id)
@ -156,19 +147,18 @@ export default class Yunzai extends EventEmitter {
return false return false
} }
sendMasterMsg(msg) { async getFriendMsg(fnc = () => true) {
for (const bot_id in cfg.master) if (typeof fnc != "function") {
for (const user_id of cfg.master[bot_id]) const { self_id, user_id } = fnc
this.sendFriendMsg(bot_id, user_id, msg) fnc = data => data.self_id == self_id && data.user_id == user_id
} }
async getMasterMsg() {
while (true) { while (true) {
const msg = await new Promise(resolve => { const msg = await new Promise(resolve => {
this.once("message", data => { this.once("message", data => {
if (cfg.master[data.self_id]?.includes(String(data.user_id)) && data.message) { if (data.message && fnc(data)) {
let msg = "" let msg = ""
for (let i of data.message) for (const i of data.message)
if (i.type = "text") if (i.type = "text")
msg += i.text.trim() msg += i.text.trim()
resolve(msg) resolve(msg)
@ -181,11 +171,19 @@ export default class Yunzai extends EventEmitter {
} }
} }
makeForwardMsg(msg) { getMasterMsg() {
msg.replace = () => msg return this.getFriendMsg(data =>
return { type: "node", data: msg } cfg.master[data.self_id]?.includes(String(data.user_id)))
} }
sendMasterMsg(msg) {
for (const bot_id in cfg.master)
for (const user_id of cfg.master[bot_id])
this.sendFriendMsg(bot_id, user_id, msg)
}
makeForwardMsg(msg) { return { type: "node", data: msg } }
async sendForwardMsg(send, msg) { async sendForwardMsg(send, msg) {
const messages = [] const messages = []
for (const { message } of msg) for (const { message } of msg)

View File

@ -471,7 +471,7 @@ class PluginsLoader {
* @param msg 发送的消息 * @param msg 发送的消息
* @param quote 是否引用回复 * @param quote 是否引用回复
* @param data.recallMsg 是否撤回消息0-1200不撤回 * @param data.recallMsg 是否撤回消息0-1200不撤回
* @param data.at 是否at用户 * @param data.at 是否提及用户
*/ */
e.reply = async (msg = "", quote = false, data = {}) => { e.reply = async (msg = "", quote = false, data = {}) => {
if (!msg) return false if (!msg) return false

View File

@ -1,4 +1,3 @@
let stateArr = {} let stateArr = {}
export default class plugin { export default class plugin {
@ -40,17 +39,17 @@ export default class plugin {
} }
/** /**
* @param msg 发送的消息 * @param msg 发送的消息
* @param quote 是否引用回复 * @param quote 是否引用回复
* @param data.recallMsg 群聊是否撤回消息0-1200不撤回 * @param data.recallMsg 是否撤回消息0-1200不撤回
* @param data.at 是否at用户 * @param data.at 是否提及用户
*/ */
reply (msg = '', quote = false, data = {}) { reply(msg = '', quote = false, data = {}) {
if (!this.e.reply || !msg) return false if (!this.e.reply || !msg) return false
return this.e.reply(msg, quote, data) return this.e.reply(msg, quote, data)
} }
conKey (isGroup = false) { conKey(isGroup = false) {
if (isGroup) { if (isGroup) {
return `${this.name}.${this.e.group_id}` return `${this.name}.${this.e.group_id}`
} else { } else {
@ -63,7 +62,7 @@ export default class plugin {
* @param isGroup 是否群聊 * @param isGroup 是否群聊
* @param time 操作时间默认120秒 * @param time 操作时间默认120秒
*/ */
setContext (type, isGroup = false, time = 120) { setContext(type, isGroup = false, time = 120) {
let key = this.conKey(isGroup) let key = this.conKey(isGroup)
if (!stateArr[key]) stateArr[key] = {} if (!stateArr[key]) stateArr[key] = {}
stateArr[key][type] = this.e stateArr[key][type] = this.e
@ -78,12 +77,12 @@ export default class plugin {
} }
} }
getContext () { getContext() {
let key = this.conKey() let key = this.conKey()
return stateArr[key] return stateArr[key]
} }
getContextGroup () { getContextGroup() {
let key = this.conKey(true) let key = this.conKey(true)
return stateArr[key] return stateArr[key]
} }
@ -92,7 +91,7 @@ export default class plugin {
* @param type 执行方法 * @param type 执行方法
* @param isGroup 是否群聊 * @param isGroup 是否群聊
*/ */
finish (type, isGroup = false) { finish(type, isGroup = false) {
if (stateArr[this.conKey(isGroup)] && stateArr[this.conKey(isGroup)][type]) { if (stateArr[this.conKey(isGroup)] && stateArr[this.conKey(isGroup)][type]) {
delete stateArr[this.conKey(isGroup)][type] delete stateArr[this.conKey(isGroup)][type]
} }

View File

@ -101,6 +101,10 @@ Bot.adapter.push(new class stdinAdapter {
pickFriend() { pickFriend() {
return { return {
user_id: this.id,
nickname: this.name,
group_id: this.id,
group_name: this.name,
sendMsg: msg => this.sendMsg(msg), sendMsg: msg => this.sendMsg(msg),
recallMsg: message_id => this.recallMsg(message_id), recallMsg: message_id => this.recallMsg(message_id),
makeForwardMsg: Bot.makeForwardMsg, makeForwardMsg: Bot.makeForwardMsg,
@ -116,7 +120,7 @@ Bot.adapter.push(new class stdinAdapter {
user_id: this.id, user_id: this.id,
post_type: "message", post_type: "message",
message_type: "private", message_type: "private",
sender: { nickname: this.name }, sender: { user_id: this.id, nickname: this.name },
message: [{ type: "text", text: msg }], message: [{ type: "text", text: msg }],
raw_message: msg, raw_message: msg,
friend: this.pickFriend(), friend: this.pickFriend(),
@ -135,18 +139,17 @@ Bot.adapter.push(new class stdinAdapter {
stat: { start_time: Date.now()/1000 }, stat: { start_time: Date.now()/1000 },
version: { id: this.id, name: this.name }, version: { id: this.id, name: this.name },
pickFriend: () => this.pickFriend(), pickFriend: () => this.pickFriend(),
pickUser: () => this.pickFriend(), get pickUser() { return this.pickFriend },
pickMember: () => this.pickFriend(), get pickMember() { return this.pickFriend },
pickGroup: () => this.pickFriend(), get pickGroup() { return this.pickFriend },
fl: new Map().set(this.id, { fl: new Map().set(this.id, {
user_id: this.id, user_id: this.id,
nickname: this.name, nickname: this.name,
}),
gl: new Map().set(this.id, {
group_id: this.id, group_id: this.id,
group_name: this.name, group_name: this.name,
}), }),
get gl() { return this.fl },
} }
if (!Bot.uin.includes(this.id)) if (!Bot.uin.includes(this.id))

View File

@ -301,9 +301,8 @@ Bot.adapter.push(new class ComWeChatAdapter {
get nickname() { return this.info.user_name }, get nickname() { return this.info.user_name },
get avatar() { return this.info["wx.avatar"] }, get avatar() { return this.info["wx.avatar"] },
pickUser: user_id => this.pickFriend(data, user_id),
pickFriend: user_id => this.pickFriend(data, user_id), pickFriend: user_id => this.pickFriend(data, user_id),
get pickUser() { return this.pickFriend },
getFriendArray: () => this.getFriendArray(data), getFriendArray: () => this.getFriendArray(data),
getFriendList: () => this.getFriendList(data), getFriendList: () => this.getFriendList(data),
getFriendMap: () => this.getFriendMap(data), getFriendMap: () => this.getFriendMap(data),
@ -311,7 +310,6 @@ Bot.adapter.push(new class ComWeChatAdapter {
pickMember: (group_id, user_id) => this.pickMember(data, group_id, user_id), pickMember: (group_id, user_id) => this.pickMember(data, group_id, user_id),
pickGroup: group_id => this.pickGroup(data, group_id), pickGroup: group_id => this.pickGroup(data, group_id),
getGroupArray: () => this.getGroupArray(data), getGroupArray: () => this.getGroupArray(data),
getGroupList: () => this.getGroupList(data), getGroupList: () => this.getGroupList(data),
getGroupMap: () => this.getGroupMap(data), getGroupMap: () => this.getGroupMap(data),

View File

@ -168,12 +168,12 @@ Bot.adapter.push(new class GSUIDCoreAdapter {
name: this.name, name: this.name,
}, },
pickFriend: user_id => this.pickFriend(data.self_id, user_id), pickFriend: user_id => this.pickFriend(data.self_id, user_id),
get pickUser() { return this.pickFriend },
pickMember: (group_id, user_id) => this.pickMember(data.self_id, group_id, user_id), pickMember: (group_id, user_id) => this.pickMember(data.self_id, group_id, user_id),
pickGroup: group_id => this.pickGroup(data.self_id, group_id), pickGroup: group_id => this.pickGroup(data.self_id, group_id),
fl: new Map(), fl: new Map(),
gl: new Map(), gl: new Map(),
} }
Bot[data.self_id].pickUser = Bot[data.self_id].pickFriend
if (!Bot.uin.includes(data.self_id)) if (!Bot.uin.includes(data.self_id))
Bot.uin.push(data.self_id) Bot.uin.push(data.self_id)

View File

@ -576,9 +576,8 @@ Bot.adapter.push(new class gocqhttpAdapter {
setProfile: profile => this.setProfile(data, profile), setProfile: profile => this.setProfile(data, profile),
setNickname: nickname => this.setProfile(data, { nickname }), setNickname: nickname => this.setProfile(data, { nickname }),
pickUser: user_id => this.pickFriend(data, user_id),
pickFriend: user_id => this.pickFriend(data, user_id), pickFriend: user_id => this.pickFriend(data, user_id),
get pickUser() { return this.pickFriend },
getFriendArray: () => this.getFriendArray(data), getFriendArray: () => this.getFriendArray(data),
getFriendList: () => this.getFriendList(data), getFriendList: () => this.getFriendList(data),
getFriendMap: () => this.getFriendMap(data), getFriendMap: () => this.getFriendMap(data),
@ -586,7 +585,6 @@ Bot.adapter.push(new class gocqhttpAdapter {
pickMember: (group_id, user_id) => this.pickMember(data, group_id, user_id), pickMember: (group_id, user_id) => this.pickMember(data, group_id, user_id),
pickGroup: group_id => this.pickGroup(data, group_id), pickGroup: group_id => this.pickGroup(data, group_id),
getGroupArray: () => this.getGroupArray(data), getGroupArray: () => this.getGroupArray(data),
getGroupList: () => this.getGroupList(data), getGroupList: () => this.getGroupList(data),
getGroupMap: () => this.getGroupMap(data), getGroupMap: () => this.getGroupMap(data),