Skip to content

Commit 87b46a4

Browse files
committed
实现基本功能
0 parents  commit 87b46a4

File tree

10 files changed

+763
-0
lines changed

10 files changed

+763
-0
lines changed

.gitignore

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Compiled class file
2+
*.class
3+
4+
# Log file
5+
*.log
6+
7+
# BlueJ files
8+
*.ctxt
9+
10+
# Mobile Tools for Java (J2ME)
11+
.mtj.tmp/
12+
13+
# Package Files #
14+
*.jar
15+
*.war
16+
*.nar
17+
*.ear
18+
*.zip
19+
*.tar.gz
20+
*.rar
21+
22+
# IDEA
23+
*.iml
24+
.idea/
25+
*.ipr
26+
*.iws
27+
28+
/target/
29+
30+
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
31+
hs_err_pid*

README.md

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# 钉钉群聊机器人消息推送工具
2+
3+
## 实现功能
4+
5+
- [x] 发送text类型消息
6+
- [x] 发送link类型消息
7+
- [x] 发送markdown类型消息
8+
9+
## 使用方式
10+
11+
### 查看帮助
12+
13+
```bash
14+
java -jar ding-bot-pusher.jar -h
15+
usage: ding-bot-pusher
16+
--at-mobiles <atMobiles> 被@人的手机号
17+
--at-user-ids <atUserIds> 被@人的用户userid
18+
-h,--help 帮助
19+
--is-at-all 是否@所有人
20+
-m,--msg-type <msgType> 消息类型:text,link,markdown
21+
--msg-url <msgUrl> 点击消息跳转的URL
22+
--pic-url <picUrl> 图片URL
23+
--retry-interval <retryInterval> 消息发送失败重试间隔,单位毫秒
24+
--retry-num <retryNum> 消息发送失败重试次数
25+
-s,--secret <secret> 加签密钥
26+
-t,--token <accessToken> 机器人webhook中的access_token参数
27+
--text <text> 消息内容
28+
--title <title> 消息标题
29+
-v,--version 查看版本
30+
```
31+
32+
### 查看版本
33+
34+
```bash
35+
java -jar ding-bot-pusher.jar -v
36+
```
37+
38+
### 发送text类型消息
39+
40+
```bash
41+
java -jar ding-bot-pusher.jar -t your_token -s your_secret -m text --text "your_text"
42+
```
43+
44+
### 发送link类型消息
45+
46+
```bash
47+
java -jar ding-bot-pusher.jar -t your_token -s your_secret -m link --title "your_title" --text "your_text "--msg-url "your_msg_url"
48+
```
49+
50+
### 发送markdown类型消息
51+
52+
```bash
53+
java -jar ding-bot-pusher.jar -t your_token -s your_secret -m markdown --title "your_title" --text "your_markdown"
54+
```
55+
56+
### 其他问题
57+
58+
windows执行乱码
59+
60+
```bash
61+
java -Dfile.encoding=utf-8 -jar ...
62+
```
63+
64+
通过制定编码方式来解决
65+
66+
## 打包为exe

pom.xml

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>com.zhuweitung</groupId>
8+
<artifactId>ding-bot-pusher</artifactId>
9+
<version>1.0.0</version>
10+
<description>钉钉群聊机器人消息推送工具</description>
11+
<developers>
12+
<developer>
13+
<name>zhuweitung</name>
14+
<email>zhuweitung@foxmail.com</email>
15+
</developer>
16+
</developers>
17+
18+
<properties>
19+
<maven.compiler.source>8</maven.compiler.source>
20+
<maven.compiler.target>8</maven.compiler.target>
21+
</properties>
22+
23+
<dependencies>
24+
<dependency>
25+
<groupId>cn.hutool</groupId>
26+
<artifactId>hutool-all</artifactId>
27+
<version>5.8.1</version>
28+
</dependency>
29+
<dependency>
30+
<groupId>org.projectlombok</groupId>
31+
<artifactId>lombok</artifactId>
32+
<version>1.18.24</version>
33+
</dependency>
34+
<dependency>
35+
<groupId>commons-cli</groupId>
36+
<artifactId>commons-cli</artifactId>
37+
<version>1.5.0</version>
38+
</dependency>
39+
<dependency>
40+
<groupId>com.aliyun</groupId>
41+
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
42+
<version>2.0.0</version>
43+
</dependency>
44+
<dependency>
45+
<groupId>commons-codec</groupId>
46+
<artifactId>commons-codec</artifactId>
47+
<version>1.15</version>
48+
</dependency>
49+
<dependency>
50+
<groupId>junit</groupId>
51+
<artifactId>junit</artifactId>
52+
<version>4.13.2</version>
53+
<scope>test</scope>
54+
</dependency>
55+
</dependencies>
56+
57+
<build>
58+
<plugins>
59+
<plugin>
60+
<groupId>org.apache.maven.plugins</groupId>
61+
<artifactId>maven-compiler-plugin</artifactId>
62+
<version>3.8.0</version>
63+
<configuration>
64+
<source>8</source>
65+
<target>8</target>
66+
</configuration>
67+
</plugin>
68+
69+
<plugin>
70+
<groupId>de.ntcomputer</groupId>
71+
<artifactId>executable-packer-maven-plugin</artifactId>
72+
<version>1.0.1</version>
73+
<configuration>
74+
<mainClass>com.zhuweitung.dbp.PushRunner</mainClass>
75+
</configuration>
76+
<executions>
77+
<execution>
78+
<goals>
79+
<goal>pack-executable-jar</goal>
80+
</goals>
81+
</execution>
82+
</executions>
83+
</plugin>
84+
85+
</plugins>
86+
</build>
87+
88+
</project>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.zhuweitung.dbp;
2+
3+
import com.zhuweitung.dbp.cli.CommandLineHelper;
4+
import com.zhuweitung.dbp.cli.CommandLineOption;
5+
import com.zhuweitung.dbp.push.DingBotPushConfig;
6+
import com.zhuweitung.dbp.push.DingBotPushHelper;
7+
import org.apache.commons.cli.*;
8+
9+
/**
10+
* 程序入口
11+
*
12+
* @author zhuweitung
13+
* @create 2022/7/20
14+
*/
15+
public class PushRunner {
16+
17+
public static void main(String[] args) throws ParseException {
18+
CommandLineParser parser = new DefaultParser();
19+
CommandLine cmd = parser.parse(CommandLineHelper.options, args);
20+
if (cmd.hasOption(CommandLineOption.Help.getOption())) {
21+
CommandLineHelper.help();
22+
return;
23+
}
24+
if (cmd.hasOption(CommandLineOption.Version.getOption())) {
25+
CommandLineHelper.version();
26+
return;
27+
}
28+
29+
// 生成参数对象
30+
DingBotPushConfig config = DingBotPushConfig.init(cmd);
31+
if (config == null) {
32+
return;
33+
}
34+
35+
// 发送消息
36+
boolean pushSuccess = DingBotPushHelper.push(config);
37+
if (pushSuccess) {
38+
System.out.println("消息推送成功");
39+
} else {
40+
System.err.println("消息推送失败");
41+
}
42+
}
43+
}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package com.zhuweitung.dbp.cli;
2+
3+
import org.apache.commons.cli.HelpFormatter;
4+
import org.apache.commons.cli.Options;
5+
6+
import java.io.IOException;
7+
import java.io.InputStream;
8+
import java.io.PrintWriter;
9+
import java.util.Properties;
10+
11+
/**
12+
* 命令行工具类
13+
*
14+
* @author zhuweitung
15+
* @create 2022/7/21
16+
*/
17+
public class CommandLineHelper {
18+
19+
private final static PrintWriter pw = new PrintWriter(System.out);
20+
21+
public final static Options options = new Options();
22+
23+
static {
24+
options.addOption(CommandLineOption.Help.getOption());
25+
options.addOption(CommandLineOption.Version.getOption());
26+
options.addOption(CommandLineOption.Token.getOption());
27+
options.addOption(CommandLineOption.Secret.getOption());
28+
options.addOption(CommandLineOption.MsgType.getOption());
29+
options.addOption(CommandLineOption.Title.getOption());
30+
options.addOption(CommandLineOption.Text.getOption());
31+
options.addOption(CommandLineOption.AtMobiles.getOption());
32+
options.addOption(CommandLineOption.AtUserIds.getOption());
33+
options.addOption(CommandLineOption.IsAtAll.getOption());
34+
options.addOption(CommandLineOption.MsgUrl.getOption());
35+
options.addOption(CommandLineOption.PicUrl.getOption());
36+
options.addOption(CommandLineOption.RetryNum.getOption());
37+
options.addOption(CommandLineOption.RetryInterval.getOption());
38+
}
39+
40+
/**
41+
* 打印帮助信息
42+
*
43+
* @param
44+
* @return void
45+
* @author zhuweitung
46+
* @date 2022/7/21
47+
*/
48+
public static void help() {
49+
HelpFormatter helpFormatter = new HelpFormatter();
50+
helpFormatter.printHelp("ding-bot-pusher", options);
51+
}
52+
53+
/**
54+
* 打印版本信息
55+
*
56+
* @param
57+
* @return void
58+
* @author zhuweitung
59+
* @date 2022/7/21
60+
*/
61+
public static void version() {
62+
String path = "/META-INF/maven/com.zhuweitung/ding-bot-pusher/pom.properties";
63+
InputStream stream = CommandLineHelper.class.getResourceAsStream(path);
64+
Properties properties = new Properties();
65+
try {
66+
if (stream != null) {
67+
properties.load(stream);
68+
}
69+
} catch (IOException e) {
70+
e.printStackTrace();
71+
}
72+
pw.println(properties.getProperty("version"));
73+
pw.flush();
74+
}
75+
76+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.zhuweitung.dbp.cli;
2+
3+
import org.apache.commons.cli.Option;
4+
5+
/**
6+
* 命令行选项
7+
*
8+
* @author zhuweitung
9+
* @create 2022/7/21
10+
*/
11+
public enum CommandLineOption {
12+
13+
Help(Option.builder("h").longOpt("help").desc("帮助").build()),
14+
Version(Option.builder("v").longOpt("version").desc("查看版本").build()),
15+
Token(Option.builder("t").longOpt("token").hasArg().argName("accessToken").desc("机器人webhook中的access_token参数").build()),
16+
Secret(Option.builder("s").longOpt("secret").hasArg().argName("secret").desc("加签密钥").build()),
17+
MsgType(Option.builder("m").longOpt("msg-type").hasArg().argName("msgType").desc("消息类型:" + com.zhuweitung.dbp.constant.MsgType.print()).build()),
18+
Title(Option.builder().longOpt("title").hasArg().desc("消息标题").argName("title").build()),
19+
Text(Option.builder().longOpt("text").hasArg().desc("消息内容").argName("text").build()),
20+
AtMobiles(Option.builder().longOpt("at-mobiles").hasArg().argName("atMobiles").desc("被@人的手机号").build()),
21+
AtUserIds(Option.builder().longOpt("at-user-ids").hasArg().argName("atUserIds").desc("被@人的用户userid").build()),
22+
IsAtAll(Option.builder().longOpt("is-at-all").desc("是否@所有人").build()),
23+
MsgUrl(Option.builder().longOpt("msg-url").hasArg().argName("msgUrl").desc("点击消息跳转的URL").build()),
24+
PicUrl(Option.builder().longOpt("pic-url").hasArg().argName("picUrl").desc("图片URL").build()),
25+
RetryNum(Option.builder().longOpt("retry-num").hasArg().argName("retryNum").desc("消息发送失败重试次数").build()),
26+
RetryInterval(Option.builder().longOpt("retry-interval").hasArg().argName("retryInterval").desc("消息发送失败重试间隔,单位毫秒").build());
27+
28+
private Option option;
29+
30+
public Option getOption() {
31+
return option;
32+
}
33+
34+
CommandLineOption(Option option) {
35+
this.option = option;
36+
}
37+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.zhuweitung.dbp.constant;
2+
3+
import java.util.Arrays;
4+
import java.util.stream.Collectors;
5+
6+
/**
7+
* 钉钉消息类型
8+
*
9+
* @author zhuweitung
10+
* @create 2022/7/21
11+
*/
12+
public enum MsgType {
13+
text,
14+
link,
15+
markdown;
16+
17+
public static boolean present(String name) {
18+
for (MsgType value : MsgType.values()) {
19+
if (value.name().equals(name)) {
20+
return true;
21+
}
22+
}
23+
return false;
24+
}
25+
26+
public static String print() {
27+
return Arrays.stream(MsgType.values()).map(MsgType::name).collect(Collectors.joining(","));
28+
}
29+
}

0 commit comments

Comments
 (0)