simple-robot-module-ding 钉钉机器人模组
钉钉机器人模组提供了对钉钉机器人的送信整合
说明
由于钉钉机器人仅支持推送消息而不支持接收消息,因此决定将钉钉机器人作为模组发布而不是作为组件。
你可以在任何组件中使用钉钉机器人模组,并使其与您的机器人应用相结合。
钉钉机器人模组中所使用的交互方式来源于钉钉机器人官方文档。
配置文件:
# suppress inspection "UnusedProperty" for whole file
# 此处可支持多个钉钉bot,格式与simbot.core.bots格式类型
# 关于secret和access_token, 分比对应code和path
# access_token就是注册了bot之后,给你的webhook地址后的那个access_token参数。此参数是必须存在的
# secret是钉钉机器人三种安全策略的第二种,可以生成,也可以不存在。
# 具体请查看钉钉机器人官方文档:https://ding-doc.dingtalk.com/doc#/serverapi3/iydd5h/404d04c3
# 例如:
# simbot.ding.bots=secret:access_token
# 其中,secret可省略,则为:
# simbot.ding.bots=:access_token
simbot.ding.bots=${secret}:${access_token}
# 钉钉bot的webhook地址,不要携带任何参数, 如果不填默认值为 https://oapi.dingtalk.com/robot/send
simbot.ding.webhook=https://oapi.dingtalk.com/robot/send
使用
导入依赖:
<dependency>
<groupId>love.forte.simple-robot</groupId>
<artifactId>module-ding</artifactId>
<version>${version}</version>
</dependency>
注入
注入DingSenderManager
类来使用你的钉钉机器人。获取机器人的key为access_token
关于DingSenderManager
发送消息的类型,我提供了三种方式:
- 使用字符串
- 使用
DingSpecialMessageChain
- 使用
DingSpecialMessage
其中,DingSpecialMessageChain
代表多个DingSpecialMessage
的集合体,一般用于将普通消息与at类型消息合并在一起的时候使用。
关于字符串,它会将非CQ码部分解析为Text类型的消息,而CQ码部分会解析成对应的类型。(关于可解析的CQ码,下面的代码中的注释里会有简单介绍。)
而关于DingSpecialMessage
,他是所有的钉钉机器人可发送的消息类型的接口,我提供了如下的实现类:
// 钉钉 text类型的消息
// [CQ:at,qq=123,all,456,789]
// 或者
// [CQ:at,code=123,all,456,789]
DingText dingText = new DingText("123");
// 钉钉 at类型的消息
// 参数1 at的人
// 参数2 是否at全体, 默认为false
DingAt dingAt = new DingAt(new String[]{"1111", "2222", "3333"});
// 只at全体的ding at
DingAt atAll = DingAt.getAtAll();
// 不at任何人的空at
DingAt emptyAt = DingAt.getEmpty();
// 钉钉 markdown类型的消息
// [CQ:ding-markdown,title=标题,text=正文]
DingMarkdown markdown = new DingMarkdown("标题", "正文");
// 可以通过DingMarkDownBuilder构造markdown
DingMarkdownBuilder builder = new DingMarkdownBuilder("标题");
DingMarkdown markdown2 = builder
.h1("标题1")
.h2("标题2")
.h3("标题3")
.h4("标题4")
.orderedList("有序1", "有序2", "有序3")
.build();
System.out.println(markdown2.getText());
// 钉钉 link类型
// 参数:
/*
title
text
messageUrl
picUrl 默认为null
*/
// [CQ:ding-link,title=标题,text=正文,messageUrl=链接]
DingLink link = new DingLink("标题", "正文", "文本链接");
// 钉钉 独立跳转链接
// [CQ:ding-actionCard,title=标题.text=正文,btnOrientation=0,btnTitle=t1,t2,btnUrl=url1,url2]
// 其中,,是逗号的转移。一般不用管,当成btnTitle=1,2就行
DingAutonomyActionCard dingAutonomyActionCard = new DingAutonomyActionCard("title", "text", "1", new DingAutonomyActionCardButtons[]{new DingAutonomyActionCardButtons("标题", "链接")});
// 钉钉 整体跳转链接
// [CQ:ding-actionCard,title=标题.text=正文,btnOrientation=0,btnTitle=t1,btnUrl=url1]
DingWholeActionCard dingWholeActionCard = new DingWholeActionCard("title", "text", "1", "button title", "button url");
// 钉钉 FeedCard 暂时不支持CQ码解析
DingFeedCard feedCard = new DingFeedCard(new DingFeedCardLink[]{new DingFeedCardLink("标题", "图片链接", "跳转链接")});
自定义
钉钉机器人模组内置的一些东西可以通过自定义来实现定制化。
内部使用的自动注入配置类为:
love.forte.simbot.component.ding.DingComponentConfiguration
、love.forte.simbot.component.ding.TemporaryHttpClientConfiguration
注①:以下提及的接口在注入依赖的时候需要使其的优先级(@Beans
的priority
参数)大于PriorityConstant.FIRST_LAST
注②:以下提及的可定制化接口的具体说明请参考源代码的注释,此处不会过于详细的介绍。
DingSecretCalculator
love.forte.simbot.component.ding.sceret.DingSecretCalculator
签名计算器,用于计算钉钉机器人交互时候的密钥签名
DingSenderBuilder
love.forte.simbot.component.ding.sender.DingSenderBuilder
接收参数并构建DingSender
实例的构建器。
DingSenderManager
love.forte.simbot.component.ding.sender.DingSenderManager
最终得到的DingSenderManager
实例。不过一般通过定义DingSenderBuilder
即可实现大部分的需求。