新增 plugin.awaitContext() 方法
This commit is contained in:
		
							parent
							
								
									37241496ac
								
							
						
					
					
						commit
						ff5a711390
					
				| 
						 | 
					@ -1,6 +1,8 @@
 | 
				
			||||||
import { Common } from '#miao'
 | 
					import { Common } from "#miao"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const stateArr = {}
 | 
					const stateArr = {}
 | 
				
			||||||
 | 
					const SymbolTimeout = Symbol("Timeout")
 | 
				
			||||||
 | 
					const SymbolResolve = Symbol("Resolve")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default class plugin {
 | 
					export default class plugin {
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
| 
						 | 
					@ -73,28 +75,30 @@ export default class plugin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  conKey(isGroup = false) {
 | 
					  conKey(isGroup = false) {
 | 
				
			||||||
    if (isGroup) {
 | 
					    if (isGroup) {
 | 
				
			||||||
      return `${this.name}.${this.e.group_id}`
 | 
					      return `${this.name}.${this.group_id || this.groupId || this.e.group_id}`
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      return `${this.name}.${this.userId || this.e.user_id}`
 | 
					      return `${this.name}.${this.user_id || this.userId || this.e.user_id}`
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * @param type 执行方法
 | 
					   * @param type 执行方法
 | 
				
			||||||
   * @param isGroup 是否群聊
 | 
					   * @param isGroup 是否群聊
 | 
				
			||||||
   * @param time 操作时间,默认120秒
 | 
					   * @param time 操作时间
 | 
				
			||||||
   * @param reply 超时时回复的内容,false则不回复
 | 
					   * @param timeout 操作超时回复
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  setContext(type, isGroup, time = 120, reply = "操作超时已取消") {
 | 
					  setContext(type, isGroup, time = 120, timeout = "操作超时已取消") {
 | 
				
			||||||
    const key = this.conKey(isGroup)
 | 
					    const key = this.conKey(isGroup)
 | 
				
			||||||
    if (!stateArr[key]) stateArr[key] = {}
 | 
					    if (!stateArr[key]) stateArr[key] = {}
 | 
				
			||||||
    stateArr[key][type] = this.e
 | 
					    stateArr[key][type] = this.e
 | 
				
			||||||
    if (time) stateArr[key][type].timeout = setTimeout(() => {
 | 
					    if (time) stateArr[key][type][SymbolTimeout] = setTimeout(() => {
 | 
				
			||||||
      if (stateArr[key][type]) {
 | 
					      if (stateArr[key][type]) {
 | 
				
			||||||
 | 
					        const resolve = stateArr[key][type][SymbolResolve]
 | 
				
			||||||
        delete stateArr[key][type]
 | 
					        delete stateArr[key][type]
 | 
				
			||||||
        this.reply(reply, true)
 | 
					        resolve ? resolve(false) : this.reply(timeout, true)
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }, time * 1000)
 | 
					    }, time * 1000)
 | 
				
			||||||
 | 
					    return stateArr[key][type]
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  getContext(type, isGroup) {
 | 
					  getContext(type, isGroup) {
 | 
				
			||||||
| 
						 | 
					@ -102,18 +106,23 @@ export default class plugin {
 | 
				
			||||||
    return stateArr[this.conKey(isGroup)]
 | 
					    return stateArr[this.conKey(isGroup)]
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					 | 
				
			||||||
   * @param type 执行方法
 | 
					 | 
				
			||||||
   * @param isGroup 是否群聊
 | 
					 | 
				
			||||||
   */
 | 
					 | 
				
			||||||
  finish(type, isGroup) {
 | 
					  finish(type, isGroup) {
 | 
				
			||||||
    const key = this.conKey(isGroup)
 | 
					    const key = this.conKey(isGroup)
 | 
				
			||||||
    if (stateArr[key] && stateArr[key][type]) {
 | 
					    if (stateArr[key]?.[type]) {
 | 
				
			||||||
      clearTimeout(stateArr[key][type].timeout)
 | 
					      clearTimeout(stateArr[key][type][SymbolTimeout])
 | 
				
			||||||
      delete stateArr[key][type]
 | 
					      delete stateArr[key][type]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  awaitContext(...args) {
 | 
				
			||||||
 | 
					    return new Promise(resolve => this.setContext("resolveContext", ...args)[SymbolResolve] = resolve)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  resolveContext(context) {
 | 
				
			||||||
 | 
					    this.finish("resolveContext")
 | 
				
			||||||
 | 
					    context[SymbolResolve](this.e)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async renderImg(plugin, tpl, data, cfg) {
 | 
					  async renderImg(plugin, tpl, data, cfg) {
 | 
				
			||||||
    return Common.render(plugin, tpl, data, { ...cfg, e: this.e })
 | 
					    return Common.render(plugin, tpl, data, { ...cfg, e: this.e })
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue