simple-robot-module-ding

a simple-robot module for ding-ding

License

License

GroupId

GroupId

love.forte.simple-robot
ArtifactId

ArtifactId

module-ding
Last Version

Last Version

0.2-1.16
Release Date

Release Date

Type

Type

jar
Description

Description

simple-robot-module-ding
a simple-robot module for ding-ding
Project URL

Project URL

https://github.com/ForteScarlet/simple-robot-module-ding
Source Code Management

Source Code Management

https://github.com/ForteScarlet/simple-robot-module-ding

Download module-ding

How to add to project

<!-- https://jarcasting.com/artifacts/love.forte.simple-robot/module-ding/ -->
<dependency>
    <groupId>love.forte.simple-robot</groupId>
    <artifactId>module-ding</artifactId>
    <version>0.2-1.16</version>
</dependency>
// https://jarcasting.com/artifacts/love.forte.simple-robot/module-ding/
implementation 'love.forte.simple-robot:module-ding:0.2-1.16'
// https://jarcasting.com/artifacts/love.forte.simple-robot/module-ding/
implementation ("love.forte.simple-robot:module-ding:0.2-1.16")
'love.forte.simple-robot:module-ding:jar:0.2-1.16'
<dependency org="love.forte.simple-robot" name="module-ding" rev="0.2-1.16">
  <artifact name="module-ding" type="jar" />
</dependency>
@Grapes(
@Grab(group='love.forte.simple-robot', module='module-ding', version='0.2-1.16')
)
libraryDependencies += "love.forte.simple-robot" % "module-ding" % "0.2-1.16"
[love.forte.simple-robot/module-ding "0.2-1.16"]

Dependencies

compile (2)

Group / Artifact Type Version
io.github.ForteScarlet : simple-robot-core Optional jar 1.16.3
org.jetbrains.kotlin : kotlin-stdlib-jdk8 jar 1.3.72

test (1)

Group / Artifact Type Version
org.jetbrains.kotlin : kotlin-test jar 1.3.72

Project Modules

There are no modules declared in this project.

simple-robot-module-ding 钉钉机器人模组

img

钉钉机器人模组提供了对钉钉机器人的送信整合

说明

由于钉钉机器人仅支持推送消息而不支持接收消息,因此决定将钉钉机器人作为模组发布而不是作为组件

你可以在任何组件中使用钉钉机器人模组,并使其与您的机器人应用相结合。

钉钉机器人模组中所使用的交互方式来源于钉钉机器人官方文档

配置文件:

# 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

使用

导入依赖:

img

<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&#44;t2,btnUrl=url1&#44;url2]
        // 其中,&#44;是逗号的转移。一般不用管,当成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.DingComponentConfigurationlove.forte.simbot.component.ding.TemporaryHttpClientConfiguration

注①:以下提及的接口在注入依赖的时候需要使其的优先级(@Beanspriority参数)大于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即可实现大部分的需求。

Versions

Version
0.2-1.16
0.1-1.16