All Projects → AcceNoi → accenbot

AcceNoi / accenbot

Licence: AGPL-3.0 license
基于Onebot-kotlin实现的QQ群聊天机器人,遵循OneBot标准。极简、高效的框架。

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to accenbot

GreenOnions
一个Mirai的QQ机器人, 实现了搜图, RSS订阅转发, 根据PixivID下载原图, 翻译, setu等功能
Stars: ✭ 109 (+541.18%)
Mutual labels:  qqbot, onebot, cqhttp-mirai
onebot
OneBot:统一的聊天机器人应用接口标准
Stars: ✭ 1,113 (+6447.06%)
Mutual labels:  qqbot, onebot
zhamao-framework
协程、高性能、灵活的聊天机器人 & Web 开发框架(炸毛框架)
Stars: ✭ 99 (+482.35%)
Mutual labels:  qqbot, onebot
MiraiCQ
用C/C++,易语言写QQ机器人,兼容酷Q插件,支持Linux(通过Wine)
Stars: ✭ 55 (+223.53%)
Mutual labels:  qqbot, onebot
FG
基于Nonebot的QQ群机器人🤖️,特色功能是利用机器学习算法,基于每日聊天记录生成每日总结。可在酷Q/Mirai平台上运行
Stars: ✭ 74 (+335.29%)
Mutual labels:  qqbot, cqhttp-mirai
OneBot-YaYa
✨ OneBot(原CQHTTP) 多平台的实现
Stars: ✭ 108 (+535.29%)
Mutual labels:  qqbot, onebot
ProtobufBot
QQ机器人框架 ProtobufBot 整体介绍。看README
Stars: ✭ 45 (+164.71%)
Mutual labels:  qqbot, onebot
Shiro
基于OneBot协议的QQ机器人快速开发框架
Stars: ✭ 78 (+358.82%)
Mutual labels:  qqbot, onebot
Sisters.WudiLib
C# 与 One Bot 协议实现通信。
Stars: ✭ 33 (+94.12%)
Mutual labels:  qqbot
coolq-php-sdk
coolq-php-sdk
Stars: ✭ 23 (+35.29%)
Mutual labels:  qqbot
dis-seckill
⭐⭐⭐⭐SpringBoot+Zookeeper+Dubbo打造分布式高并发商品秒杀系统
Stars: ✭ 187 (+1000%)
Mutual labels:  springboot2-x
smpe-admin
SMPE-ADMIN后端通用开发框架
Stars: ✭ 42 (+147.06%)
Mutual labels:  springboot2-x
Black-Cat-qqbot
一个qq机器人,基于graia
Stars: ✭ 16 (-5.88%)
Mutual labels:  qqbot
mee-admin
admin、cms、console 等多用途开源后台系统
Stars: ✭ 117 (+588.24%)
Mutual labels:  springboot2-x
mirai-rulateday-dice
利用Mirai框架的Mirai-Console开发TRPG骰子插件模板。目前集成了大部分的常用指令,并在此基础上实现更多的跑团体系优化指令。例如COC7技能详细查询、DND5e技能列表查询、DND5e怪物图鉴等。目前处于测试阶段。
Stars: ✭ 55 (+223.53%)
Mutual labels:  qqbot
OPQBot-GroupManager
OPQBot 群管理机器人
Stars: ✭ 25 (+47.06%)
Mutual labels:  qqbot
CoolQ-Golang-Plugin
Golang 酷Q CoolQ 插件 plugin 模板 template
Stars: ✭ 17 (+0%)
Mutual labels:  qqbot
rsshub2qq
基于酷Q制作的RSSHub QQ群推送机器人,用于订阅RSSHub的更新并转发到QQ群
Stars: ✭ 104 (+511.76%)
Mutual labels:  qqbot
pixiv-helper
mirai-console 插件开发计划
Stars: ✭ 113 (+564.71%)
Mutual labels:  qqbot
lit-ncov-report
洛阳理工学院 "健康状况管控平台" , 非官方Python封装库兼CLI工具与拓展实现
Stars: ✭ 41 (+141.18%)
Mutual labels:  qqbot

基于Onebotonebot-kotlin实现的QQ聊天机器人极简框架。

License Size OneBot v11

Author Accen/クロノス
Email [email protected]

注意

本项目依赖onebot-kotlin

本项目使用了preview特性,请确保使用JDK15+(可能会持续到17发布)进行编译和运行,并添加--enable-preview参数。

当前最新版本V2.1-Tempest,整理出第一版Accenbot极简配置框架。

V2.0+待填的坑

  • 支持解析分P的B站视频 feat 0742
  • 集成ffmpeg(当前是外挂)
  • 整理各个功能的配置(基于Springboot-configuration-processor2.4+)
  • 隔离每个功能的工作空间
  • 集成onebot-kotlin feat onebot-kotlin-embedded

Quick Start

特性介绍

1. 菜单生成器

将FuncSwitch配置在相应的类上,可以自动生成菜单,详见FuncSwitchFuncSwitchGroupCmdShower(核心)

/**
 * 配置在Cmd上面,标识其对应的功能点
 * @author <a href="[email protected]">Accen</a>
 *
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FuncSwitch {
	/**
	 * 功能key,默认cmd_类名
	 * @return
	 */
	String name() default "";
	/**
	 * 是否要在菜单中展示出来
	 * @return
	 */
	boolean showMenu() default false;
	/**
	 * 功能名
	 * @return
	 */
	String title();
	/**
	 * 排序
	 * @return
	 */
	int order() default 99;
	/**
	 * 格式
	 * @return
	 */
	String format() default "";
	/**
	 * 所属分组
	 * @return
	 */
	Class<?> groupClass() default Default.class;
}

2. 极简正则匹配

使用@CmdRegular和@GeneralMessage,可以快速、无侵入、去耦合地实现一个匹配型的功能,详见DemoGeneralMessageCmdRegular AutowiredParamAutowiredRegularCmdRegularManager(核心)

@Component
public class Demo {
	@CmdRegular(expression = "^检索(.+)$",enableAutowiredParam = false)
	@GeneralMessage
	public String search(String key) {
		//TODO your code
		return "检索结果...";
	}
	
	@CmdRegular(name="engine",expression = "^用(.+)引擎检索(\\d+)$")
	@GeneralMessage(targetId = "123456")
	public String search(Qmessage qmassage
						,@AutowiredParam("message") String msg
						,@AutowiredParam Date sendTime
						,int pid
						,@AutowiredRegular(1) String engine) {
		//TODO your code
		return "检索结果...";
	}
}

3.极简配置框架Accenbot

除了2种描述的极简正则匹配用于最常用的文本匹配回复,框架将符合Onebot标准Event全部采用极简化配置的方式,同样配合@AutowiredParam和@GeneralMessage,实现功能的快速编写。

其核心理念是将方法Method代理,将上报的Event的参数注入到该Method的参数中,执行后,若其符合发送消息的格式,则自动封装成消息发出。实现消息来源与反馈的去耦合。

@AutowiredParam:自动注入Event参数,用于标识该Parameter。例如:你可以使用.来注入Event这个对象,或者.post_type来注入Event的post_type参数,或者.sender.nickname注入nickname参数(当然前提是存在这个参数)。另外,AutowiredParam允许你使用驼峰命名的风格就像.postType,但是我并不希望你这样做,最好是保持与Onebot协议中描述的一致;此外,AutowiredParam允许你以参数签名的方式来定义第一层的参数,例如@AutowiredParam String postType。

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AutowiredParam {
	String value() default "";
}

@CmdMessage、@CmdMeta、@CmdNotice、@CmdRequest:用来定义一个代理(我称之为AccenbotCmdProxy),它们分别匹配Onebot中的四种Event类型。它们可以被标识在Class或者Method上,标识在类上时,executeMethod将起作用,它会将类中的这些方法(默认为execute)注册为AccenbotCmdProxy。而标识在方法上,则为此方法。value参数为该AccenbotCmdProxy的唯一标识,请确保此value为唯一的,否则将抛出CmdRegisterDuplicateException异常,或者使用默认值,框架会为你生成一个唯一的value(但是这很蠢,如果你希望在运行时注销一个AccenbotCmdProxy,建议你显式地为它命名)。

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CmdMessage {
	String value() default "";
	String[] executeMethod() default {"execute"};
	int order() default 999;
	MessageType[] messageType() default MessageType._ALL;
	MessageSubType[] subType() default MessageSubType._ALL;
}

除了上面四种,@CmdRegular(也就是第2点描述的)也是相同的原理,只是因为常用(现在实现的80%功能都是属于这种类型)所以单列出来了。

4.Context、Event和EventCmd前后置处理器

AccenbotContext管理着所有的事件上报处理,提供了两个接入点以供扩展。

4.1 EventPostProcessor

/**
 * AccenbotContex的事件处理器前后预置,{@link AccenbotContext#accept(Map)}
 * @author <a href="[email protected]">Accen</a>
 * @since 2.2
 */
public interface EventPostProcessor {
	default public void beforeEventPost(Map<String, Object> event) {};
	default public void afterEventPostSuccess(Map<String, Object> event,AccenbotContext context) {};
	default public void afterEventPostFaild(Map<String,Object> event) {};
}

实现此接口,并注册到SpringIoc中。

beforeEventPost将在AccenbotContext在接受到事件上报时执行,你可以对event进行预处理。

afterEventPostSuccess将在AccenbotContext寻找到特定的Context处理事件后执行,你可以对event进行后处理。

afterEventPostFaild将在AccenbotContext未能寻找到Context时执行,你可以对预处理进行回滚等操作。

4.2 EventCmdPostProcessor

/**
 * cmd执行器前后预置,{@link AccenbotContext#acceptEvent}
 * @author <a href="[email protected]">Accen</a>
 * @since 2.2
 */
public interface EventCmdPostProcessor {
	default public boolean beforeEventCmdPost(AccenbotCmdProxy proxy,Map<String, Object> event) {return true;}
	default public Object afterEventCmdPost(AccenbotCmdProxy proxy,Map<String, Object> event,Object invokeResult) {return invokeResult;}
}

实现此接口,并注册到SpringIoc中。

beforeEventCmdPost将在特定的CmdProxy(功能)处理前执行,需要返回一个boolean确定是否继续执行。

afterEventCmdPost将在特定的CmdProxy(功能)处理后执行,可以接受CmdProxy处理的返回值,或者对预处理进行回滚操作。

现已通过接入前后置处理器实现的功能有:依赖与排斥。后续还将重构其他功能。

4.3 ContextPostProcessor

/**
 * 监听accenbotcontext的注册和注销
 * @author <a href="[email protected]">Accen</a>
 * since 2.2
 */
public interface ContextPostProcessor {
	/**
	 * 注册完一个context后收到此通知
	 * @param postType
	 * @param context
	 */
	default public void afterRegisterContext(PostType postType,AccenbotContext context) {}
	//TODO 注销
}

与上类似

5.监控

GET /cmd/list

可以查看所有框架内处理的功能点

已实现的功能

感谢

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].