Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
.Veneno.
wechaty
提交
b597270e
W
wechaty
项目概览
.Veneno.
/
wechaty
与 Fork 源项目一致
Fork自
wechaty / wechaty
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
W
wechaty
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b597270e
编写于
8月 01, 2020
作者:
Huan (李卓桓)
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add plugin uninstaller logic
上级
33ef68db
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
114 addition
and
13 deletion
+114
-13
src/mod.ts
src/mod.ts
+5
-2
src/plugin.spec.ts
src/plugin.spec.ts
+56
-0
src/plugin.ts
src/plugin.ts
+19
-0
src/wechaty.ts
src/wechaty.ts
+34
-11
未找到文件。
src/mod.ts
浏览文件 @
b597270e
...
...
@@ -38,12 +38,15 @@ export {
export
{
Wechaty
,
WechatyOptions
,
}
from
'
./wechaty
'
export
{
WechatyPlugin
,
}
from
'
./wechaty
'
WechatyPluginUninstaller
,
}
from
'
./plugin
'
export
{
PuppetModuleName
,
}
from
'
./puppet-config
'
}
from
'
./puppet-config
'
export
{
Contact
,
...
...
src/plugin.spec.ts
0 → 100755
浏览文件 @
b597270e
#!/usr/bin/env ts-node
/**
* Wechaty Chatbot SDK - https://github.com/wechaty/wechaty
*
* @copyright 2016 Huan LI (李卓桓) <https://github.com/huan>, and
* Wechaty Contributors <https://github.com/wechaty>.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
import
test
from
'
blue-tape
'
import
sinon
from
'
sinon
'
import
{
PuppetMock
}
from
'
wechaty-puppet-mock
'
import
{
Wechaty
,
}
from
'
./wechaty
'
import
{
WechatyPlugin
}
from
'
./plugin
'
test
(
'
Wechaty Plugin uninstaller should be called after wechaty.stop()
'
,
async
t
=>
{
const
spyPluginInstall
=
sinon
.
spy
()
const
spyPluginUninstall
=
sinon
.
spy
()
const
bot
=
new
Wechaty
({
puppet
:
new
PuppetMock
()
})
const
plugin
:
WechatyPlugin
=
(
_bot
:
Wechaty
)
=>
{
spyPluginInstall
()
return
()
=>
{
spyPluginUninstall
()
}
}
t
.
true
(
spyPluginInstall
.
notCalled
,
'
should be clean for install spy
'
)
t
.
true
(
spyPluginUninstall
.
notCalled
,
'
should be clean for uninstall spy
'
)
bot
.
use
(
plugin
)
t
.
true
(
spyPluginInstall
.
called
,
'
should called install spy after use()
'
)
t
.
true
(
spyPluginUninstall
.
notCalled
,
'
should not call uninstall spy after use()
'
)
await
bot
.
start
()
await
bot
.
stop
()
t
.
true
(
spyPluginUninstall
.
called
,
'
should called uninstall spy after stop()
'
)
})
src/plugin.ts
0 → 100644
浏览文件 @
b597270e
import
{
Wechaty
}
from
'
./wechaty
'
export
type
WechatyPluginUninstaller
=
()
=>
void
export
type
WechatyPluginReturn
=
void
|
WechatyPluginUninstaller
export
interface
WechatyPlugin
{
(
bot
:
Wechaty
):
WechatyPluginReturn
}
function
isWechatyPluginUninstaller
(
pluginReturn
:
WechatyPluginReturn
,
):
pluginReturn
is
WechatyPluginUninstaller
{
return
!!
pluginReturn
}
export
{
isWechatyPluginUninstaller
,
}
src/wechaty.ts
浏览文件 @
b597270e
...
...
@@ -20,8 +20,8 @@
import
cuid
from
'
cuid
'
import
os
from
'
os
'
import
{
StateSwitch
}
from
'
state-switch
'
import
{
StateSwitch
}
from
'
state-switch
'
import
{
instanceToClass
}
from
'
clone-class
'
import
{
Puppet
,
...
...
@@ -88,7 +88,13 @@ import { timestampToDate } from './helper-functions/pure/timestamp-to-date'
import
{
WechatyEventEmitter
,
WechatyEventName
,
}
from
'
./events/wechaty-events
'
}
from
'
./events/wechaty-events
'
import
{
WechatyPlugin
,
WechatyPluginUninstaller
,
isWechatyPluginUninstaller
,
}
from
'
./plugin
'
export
interface
WechatyOptions
{
memory
?
:
MemoryCard
,
...
...
@@ -102,11 +108,6 @@ export interface WechatyOptions {
ioToken
?
:
string
,
// Io TOKEN
}
type
WechatyPluginUninstaller
=
()
=>
void
export
interface
WechatyPlugin
{
(
bot
:
Wechaty
):
void
|
WechatyPluginUninstaller
}
const
PUPPET_MEMORY_NAME
=
'
puppet
'
/**
...
...
@@ -148,6 +149,8 @@ export class Wechaty extends WechatyEventEmitter implements Sayable {
private
static
globalPluginList
:
WechatyPlugin
[]
=
[]
private
pluginUninstallerList
:
WechatyPluginUninstaller
[]
private
memory
?:
MemoryCard
private
lifeTimer
?
:
NodeJS
.
Timer
...
...
@@ -307,6 +310,7 @@ export class Wechaty extends WechatyEventEmitter implements Sayable {
*/
super
.
setMaxListeners
(
1024
)
this
.
pluginUninstallerList
=
[]
this
.
installGlobalPlugin
()
}
...
...
@@ -356,13 +360,27 @@ export class Wechaty extends WechatyEventEmitter implements Sayable {
*
*/
public
use
(...
plugins
:
(
WechatyPlugin
|
WechatyPlugin
[])[])
{
const
pluginList
=
plugins
.
flat
()
pluginList
.
forEach
(
plugin
=>
plugin
(
this
))
const
pluginList
=
plugins
.
flat
()
as
WechatyPlugin
[]
const
uninstallerList
=
pluginList
.
map
(
plugin
=>
plugin
(
this
))
.
filter
(
isWechatyPluginUninstaller
)
this
.
pluginUninstallerList
.
push
(
...
uninstallerList
,
)
return
this
}
private
installGlobalPlugin
()
{
(
this
.
constructor
as
typeof
Wechaty
).
globalPluginList
.
forEach
(
plugin
=>
plugin
(
this
))
const
uninstallerList
=
instanceToClass
(
this
,
Wechaty
)
.
globalPluginList
.
map
(
plugin
=>
plugin
(
this
))
.
filter
(
isWechatyPluginUninstaller
)
this
.
pluginUninstallerList
.
push
(
...
uninstallerList
,
)
}
private
async
initPuppet
():
Promise
<
void
>
{
...
...
@@ -710,6 +728,11 @@ export class Wechaty extends WechatyEventEmitter implements Sayable {
this
.
lifeTimer
=
undefined
}
while
(
this
.
pluginUninstallerList
.
length
>
0
)
{
const
uninstaller
=
this
.
pluginUninstallerList
.
pop
()
if
(
uninstaller
)
uninstaller
()
}
try
{
await
this
.
puppet
.
stop
()
}
catch
(
e
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录