优化 获取用户消息
This commit is contained in:
		
							parent
							
								
									276d27f24c
								
							
						
					
					
						commit
						090b7d8b43
					
				
							
								
								
									
										42
									
								
								lib/bot.js
								
								
								
								
							
							
						
						
									
										42
									
								
								lib/bot.js
								
								
								
								
							| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -471,7 +471,7 @@ class PluginsLoader {
 | 
				
			||||||
     * @param msg 发送的消息
 | 
					     * @param msg 发送的消息
 | 
				
			||||||
     * @param quote 是否引用回复
 | 
					     * @param quote 是否引用回复
 | 
				
			||||||
     * @param data.recallMsg 是否撤回消息,0-120秒,0不撤回
 | 
					     * @param data.recallMsg 是否撤回消息,0-120秒,0不撤回
 | 
				
			||||||
     * @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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,3 @@
 | 
				
			||||||
 | 
					 | 
				
			||||||
let stateArr = {}
 | 
					let stateArr = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class plugin {
 | 
					export default class plugin {
 | 
				
			||||||
| 
						 | 
					@ -42,15 +41,15 @@ export default class plugin {
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * @param msg 发送的消息
 | 
					   * @param msg 发送的消息
 | 
				
			||||||
   * @param quote 是否引用回复
 | 
					   * @param quote 是否引用回复
 | 
				
			||||||
 * @param data.recallMsg 群聊是否撤回消息,0-120秒,0不撤回
 | 
					   * @param data.recallMsg 是否撤回消息,0-120秒,0不撤回
 | 
				
			||||||
 * @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]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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),
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue