Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

上下文是不是不可以做到同时满足多个条件 #45

Closed
kgysf opened this issue Jul 8, 2020 · 10 comments
Closed

上下文是不是不可以做到同时满足多个条件 #45

kgysf opened this issue Jul 8, 2020 · 10 comments

Comments

@kgysf
Copy link

kgysf commented Jul 8, 2020

Expected behavior

group / groups / user / users 多个条件组合同时满足
例如 app.group(123) && app.users.except(456) 在群123中除了456以外的用户
不知道现在的版本是否能够做到这个需求?

Versions

1.12.0

@shigma
Copy link
Member

shigma commented Jul 8, 2020

谢谢你的提问。目前做不到,下面的版本可能也不会考虑实现。

上下文这个概念相当于你使用 QQ 时打开的聊天窗口,会话这个概念则相当于你和我在同一个窗口中持续进行的对话。因此我觉得上下文模型无法表达你所说的这个需求。

另一方面,我暂时也没有想到必须引入新语法才能实现的需求。不妨说说你具体想要做什么,或许我可以给你提一些建议。

@kgysf
Copy link
Author

kgysf commented Jul 8, 2020

我的目的是给自己写个每个插件集中一个配置文件,通过读取配置直接过滤这个插件只处理哪些消息,类似于过滤器,这样不用在每个插件中去单独判断发送者之类的。

如果上下文的概念不适合,我建议可以加一个过滤器的概念,不仅仅是过滤发送者QQ和群号,还包括比如群内身份(群主,管理,成员)、事件类型(群聊,私聊,请求)、是否包含哪些关键字,其实就是和CQHTTP有提供的事件过滤器一样。

不过目前不支持的话也可以自己另外实现就是了。

@shigma
Copy link
Member

shigma commented Jul 8, 2020

我大概明白你的意思了。我应该不会提供插件级别的过滤器功能(原因类似,插件直接对接上下文,抽象级别太高,一旦复杂化会产生许多问题),但未来可能会针对你的情况上线其他功能。

同时,CQHTTP 的事件过滤器是底层的,它把不要的事件的所有出口都堵死了。如果你想要这种效果的话倒是很好实现:

// 这里的代码只要写一遍,不需要每个插件中单独判断
app.prependMiddleware((meta, next) => {
  // 自己写一个过滤器判断是否不是群管理员,如果不是则不进入之后的中间件流程
  if (!checkFilter(meta)) return next()
})

@kgysf
Copy link
Author

kgysf commented Jul 8, 2020

谢谢,我倒是确实没注意到prependMiddleware这个api,那么我自己实现就方便多了

@kgysf
Copy link
Author

kgysf commented Jul 8, 2020

我有一个新的疑问,我每个插件的过滤规则都是不同的,而这个api是将所有中间件直接全部中断了吧

@shigma
Copy link
Member

shigma commented Jul 8, 2020

是的(

但是你说 CQHTTP 的过滤器也是这样的吧🤣

@kgysf
Copy link
Author

kgysf commented Jul 8, 2020

那看来我只能自己另外实现了

(我举例CQHTTP只是举例和他那个过滤规则一样

@kgysf kgysf closed this as completed Jul 13, 2020
@shigma shigma mentioned this issue Jul 30, 2020
65 tasks
@arily
Copy link
Contributor

arily commented Aug 16, 2020

看到v2已经要实现了不知道是不是来晚了.
https://github.com/arily/sb-qq-bot-framework/blob/master/lib/Wrapper.js
这边有个hack的实现, 通过构造一个假的app拿到middleware和prependMiddleware function 然后代理这两个函数.
https://github.com/arily/sb-qq-bot-framework/blob/2aa5bda9b62ec1fe8cb09c11db0587ea04e210fc/config/contextPlugins.js#L19
这里是定义filter和prependFilter的地方

整个工程无敌乱 非常仓促的搭出来可用的版本之后酷q直接没了,失去了继续制造的动力

@undefined-moe
Copy link
Member

undefined-moe commented Aug 16, 2020

选择器支持多条件选择,但没有计划实现正则匹配,仅能根据群号,用户等简单筛选。
推荐使用 mrs4s/go-cqhttp 替代 cqp。

@arily
Copy link
Contributor

arily commented Aug 17, 2020

选择器支持多条件选择,但没有计划实现正则匹配,仅能根据群号,用户等简单筛选。
推荐使用 mrs4s/go-cqhttp 替代 cqp。

嗯,现在就是在用这个替代。就是不知道整个qqbot会不会一起出事

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants