/terminal-service

像创建Springweb应用一样创建coolq机器人

Primary LanguageJava

Terminal Service

通过命令行来操控你的QQ机器人

Usage

准备

  1. 你刚好有一个装上了CQHTTP插件的Coolq机器人
  2. 创建一个SpringBoot web工程
  3. 引入本项目依赖(目前只能clone源码,再maven install到本地使用)
  4. 添加配置项bot.cq-http-url,默认值是http://localhost:5700

开始

使用注解@CommandLine.Command创建一个命令,更多细节请看picocli

@CommandLine.Command
public class SomeCommand{
	// 一些命令参数...
}

使用注解@CommandController创建一个命令处理器,需要实现Reply接口或Send接口

@CommandController(bind = "xxx")
public class SomeCommandController implements Reply {

    private SomeCommand command;

    @Override
    public ReplyEntity call(PostEntity postEntity) { // Coolq上报的消息作为参数传进来
        // 实现这个接口时,返回的内容将会作为快速回复发送出去
        // do something with your command...
    }
}
@CommandController(bind = "xxx")
public class SomeCommandController implements Send {

    private SomeCommand command;

    @Override
    public void call(CQClientApi cqClientApi, PostEntity postEntity) {
       // 实现这个接口时,可使用传入的api进行发送消息等操作
       // // do something with your command...
    }
}

关于CQClientApi,这个api描述了一些CQHTTP支持的操作,在没有自定义实现并加入Spring容器管理时,我提供了一个依赖于我另一个项目的实现。

Example

我要使用的命令

@CommandLine.Command(name = "say")
public class SayCommand {

    @CommandLine.Parameters(index = "0")
    private String saySomething; // 位于say后面的第一个单词,如say hello中就是hello

    public String getSaySomething() {
        return saySomething;
    }

}

我如何处理这个命令

@CommandController(bind = "say")
public class SayCommandController implements Reply {

    private SayCommand command;

    @Override
    public ReplyEntity call(PostEntity postEntity) {
        return new ReplyEntity(
                new MessageSegmentBuilder()
                        .addTextSegment(command.getSaySomething()) // 简单地将say后面的内容重复一遍
                        .build()
        );
    }
}

启动,并试一下

1586495454772

ok