yuqworks / yuq Goto Github PK
View Code? Open in Web Editor NEW通用聊天机器人开发框架(QQ,微信,Telegram,及更多)
License: Apache License 2.0
通用聊天机器人开发框架(QQ,微信,Telegram,及更多)
License: Apache License 2.0
提供三种不同的级别规定 Action 的重复任务运行限制。
sender: 发送者。
source: 发送源
all: 全局
允许提供一个时间,来标明当前限制类型在执行本 Action 后的一段时间内仍无法触发本 Action。
声明当拥有此权限的人,可以不受限制与冷却时间,重复使用本 Action。
提供快速确定好友,临时会话目标,群成员的权限,同时允许更多精细化的操作方式。
目标具有的权限区分应该更加细腻。
应该按照不同场景,区分目标拥有不同的权限列表。
同一个 ID 下,一个人应在好友状态,群聊状态,临时会话状态拥有不同的权限。
同时不同群中同一个人拥有的权限也应该是不同的。
一个权限组为一组权限的集合。
同时权限组有具体的生效范围。
一个权限组可以仅在某个群生效,也可以在多个群生效,也可以在全部群同时生效。
同时也可以在好友私聊和临时会话中同时生效。
一个目标,允许有多个权限组。
但是同生效范围仅允许有一个权限组。
一个权限组可以继承自另外一个权限组,继承其权限和生效范围。
对于群内提供一些默认权限组。
所有群成员都会被默认添加进本组。
也是理论上最基础的用户组。
继承自群成员组。
所有管理员会被自动添加进本组。
当目标失去管理员身份时,会被自动移出本组,并移动至群成员组。
如果目标拥有其他权限组,如若权限组小于管理员组级别,则会自动移动至管理员组。
继承自管理员组
群主会被自动添加进本组。
当群主失去群主资格的时候会被自动移出本组。
TODO
继承自临时会话组
权限名不限制格式,但多级权限将使用 ”.“ 分割。
如授予用户上级权限,则代表用户可拥有其所有子权限。
举例:当用户拥有 moe.chat 权限时,可正常使用 moe.chat.sendMessage 权限的指令。
应当为 Contact 提供
boolean hasPermission(String permissionName)
方法来确定目标用户是否有具体权限。
应当为 Contact 提供
boolean addPermission(String permissionName)
方法来为目标用户新增具体权限。
应当为 Contact 提供
boolean delPermission(String permissionName)
方法来为目标用户移除具体权限。
应当为 Contact 提供
boolean moveToPermissionGroup(String groupName)
方法来确定来将目标移动至某一权限组。
TODO
应当为 Controller Action 提供 @PermissionCheck
注解用以提供权限检查。
如果有什么更好的想法与操作方式,或者优化设计思路,请回复。
yuq.getGroups().get(xxxx).get(xxxx)得到的member对象希望新增一个.getLastTime()方法,用以获得群成员的发言时间
对路由分词进行改造,不再使用空格分词,允许使用更复杂的分词逻辑。
同时支持更复杂的内容映射到参数。
以致于提升 Controller 的易用性。
希望您能提供:
如:
希望可以将 StringintStringint... 映射为 Map<String,Integer>
举例:
敏捷12力量3
映射为:
{
"敏捷":12,
"智慧":3
}
如果您有相应的需求,欢迎回复本 issue 来提供思路。
如题,现在的版本似乎不能全面的监听到自己消息的发出。希望能加一个event来监听自己的消息发出。
希望增强EhcacheHelp,使之能获取到所有的key,完成遍历操作
当前的Action不支持重载,在识别的时候不能按照参数类型启动合适的方法。但是很多的功能目前必须使用重载。
@Action(.rab {skill})
public void rab(String skill){}
@Action(.rab {time} {skill})
public void rab(int time,String skill){}
@Action(.rab {skill} {num})
public void rab(String skill,int num){}
@Action(.rab {time} {skill} {num})
public void rab(int time,String skill,int num){}
希望能添加一个方法,判读2条信息的内容是否一致,做复读机
包括接收,发送,转发。
将所有的联系人列表由 Map 切换到列表,并提供 get(id:Long) 与 get(platformId:String) 保证兼容性。
提供一个 yuq 对象。
提供一个 mf 对象。
提供一个 mif 对象。
提供一个 replay 方法,使得可以快速向当前消息源回复。
在 platformId 为 Long(允许内)的平台的时候,id 则与 platformId 相等。
在 platformId 为其他类型的平台的时候,id 由框架按规则生成,并保证其可靠性。
如群成员上线等信息,等同于原酷Q的.getGroup().getMax()方法
希望能在@Before
里添加一参数注入,用以获取下一步传入的@Action
方法
同理,也希望@After
能提供获取上游@Action
的方法。
版本
yuqartqq-0.1.0.0-dev7
yuq-0.1.0.0-dev23
yucode-0.2.0.0-dev15
现在还在是[ NoImpl ]
原有接口setGroupNotice(groupId,title,text);方法,希望支持类似方法,感谢
@Action("{time}秒后说一句/{nr}")
fun timeMessage(time: String, nr: String, message: Message): String {
//TODO
}
可同等替换为
@Action("{time}秒后说一句 {nr}")
fun timeMessage(time: String, nr: String, message: Message): String {
//TODO
}
以增强表达力
希望能为@qmsg添加一个属性,使得消息具有at并换行
如题,目前暂时无法对一个群里的下一条消息接收,只能接收某个人而不是群中所有人。希望能够添加支持
QQ里面的消息转发
举例演示。
buildMessage(() -> {
textLine("%s,您好。", member.getNameCard());
if (memberGirlsNow == 0){
text("您当前还没有老婆!");
return;
}
for (String girl : girls) {
textLine("-------------");
textLine("老婆:%s。",girl);
imageByFile();
}
if (memberGirlsNow == memberGirlsMax){
textLine("-------------");
text("您的老婆已达上限!");
}
});
相比于 LineQ 方式,DSL 方式在承载业务上,要轻松的多。
LineQ 主要用于非承载业务的复杂消息构建。
DSL 主要用于承载业务的复杂消息构建。
如题,有时候需要获知当前已登录机器人的qq号/昵称等信息,之前在使用酷Q java sdk编程时有类似于CQ.getLoginNick()
和 CQ.getLoginQQ()
这样的API,也希望YuQ能提供类似的接口来获得当前登录机器人的一些信息(QQ/昵称/服务器等)
nameCardOrName 在群名片为 "" 的情况下提供 目标用户 的昵称
如题
版本
yuqartqq-0.1.0.0-dev7
yuq-0.1.0.0-dev23
yucode-0.2.0.0-dev15
在Yuq中根据群成员qq号获取用户昵称时,会报错
我们可以给某些用户添加一定的状态参数。
状态参数可拥有自定义持续时间。
同一状态可以拥有数量。
在状态结束后拥有自定义回调。
对于用户,我们将提供添加状态的操作
(状态名: String, 持续时间: Long 可选 默认不过期, 数量: Int 可选 默认 1, 与其他同名状态独立: Boolean 可选 默认 false, 结束回调)
我们提供查询用户是否具有某个状态的操作。
对于移除状态操作,额外提供不触发结束回调选项。
现在使用Action时,如果想同时匹配多种结果Synonym注解显得比较麻烦。
而同时使用正则和参数获取的时候,每段正则必须放在{名称:[正则]}内,显得冗长多余。
在匹配时,会匹配到头部相同命令。(如.coc5会被匹配到Action("{pt:[\.。]coc")上)(可能已经修复)
不使用空格的情况下,正则仅能识别为String类型,不能类型转换。
将
@Action("全员禁言/{flag}")
fun test(flag: Boolean) {
// TODO
}
可自动将 flag 参数映射为 @PathVar(1, PathVar.Type.Switch)
等同于编写代码
@Action("全员禁言")
fun test(@PathVar(1, PathVar.Type.Switch) flag: Boolean) {
// TODO
}
com.icecreamqaq.yuq.message.Message.kt第152行:if (reply != null) sb.append("Rain:Reply:$id")
希望发送图片能添加一个根据byte[]发送图片
希望大佬支持GroupController 和 PrivateController 混用
如题,希望能够添加对群公告的增加,修改,删除,查询功能。
如题
比如下列代码:
@Action("rad{ex}")
fun rad(ex: String) = "rad!!"
@Action("radio{ex}")
fun radio(ex: String) = "radio!!"
当发送 radio111
给机器人时,预想的是机器人返回 radio!!
,但实际情况是返回 rad!!
。
希望冰淇淋大佬能为 @Action
注解添加优先级,或者提供其他解决方案。
当前可用的解决方案:
if(ex.startsWith("io")) return radio(ex.subString(2))
(@Action("rad{ex:[^i][^o].*}")
(希望能增强依赖注入:在kotlin中,能为写在类外面的变量进行依赖注入
使得消息回复与撤回可以通过一个消息ID完成
使 Action 支持挂起(suspend)函数,以便更方便的支持 kotlin 协程。
TaskLimit添加类似组这种东西,相同组的action共享同一个冷却时间,方便编写同一个功能的不同指令
在Action上添加@qmsg(at = true)注解,如果在before被抛出Message异常,message异常包含了一个mif.at(qq),则会出现两个at
当前分为了4档,但是不够用,是否可以换成数字,根据数字大小来排列优先级?
希望给事件添加全局异常拦截器
nameCardOrNick 在群名片为 "" 的情况下提供 目标用户 的昵称
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.