Skip to content

Commit

Permalink
✨ Added sendForwardMsg action for LagrangeExtend #216
Browse files Browse the repository at this point in the history
* [add]: 自定义消息合并转发 兼容 Lagrange

* [add]: 发送合并转发消息 兼容 Lagrange

* [add]: 改为任意List
  • Loading branch information
xiaomujin authored Apr 24, 2024
1 parent aab9249 commit d136b42
Show file tree
Hide file tree
Showing 6 changed files with 89 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/main/java/com/mikuac/shiro/action/LagrangeExtend.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.mikuac.shiro.action;

import com.mikuac.shiro.dto.action.common.ActionData;
import com.mikuac.shiro.dto.action.common.ActionList;

import java.util.List;
import java.util.Map;

public interface LagrangeExtend {

/**
Expand All @@ -11,4 +15,12 @@ public interface LagrangeExtend {
*/
ActionList<String> fetchCustomFace();

/**
* 发送合并转发
*
* @param msg 自定义转发消息 (可使用 ShiroUtils.generateForwardMsg() 方法创建)
* @return result {@link ActionData} of {@link String} 合并转发的 longmsg Id
*/
ActionData<String> sendForwardMsg(List<Map<String, Object>> msg);

}
10 changes: 10 additions & 0 deletions src/main/java/com/mikuac/shiro/common/utils/ArrayMsgUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,16 @@ public ArrayMsgUtils rps(int value) {
return this;
}

public ArrayMsgUtils longMsg(String id) {
builder.add(getJsonData("longmsg", m -> m.put("id", id)));
return this;
}

public ArrayMsgUtils forward(String id) {
builder.add(getJsonData("forward", m -> m.put("id", id)));
return this;
}

public ArrayMsgUtils markdown(String content) {
builder.add(getJsonData("markdown", m -> {
HashMap<String, String> map = new HashMap<>();
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/com/mikuac/shiro/common/utils/MsgUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,30 @@ public MsgUtils rps(int value) {
return this;
}

/**
* 发送长消息
*
* @param id 长消息Id
* @return {@link MsgUtils}
*/
public MsgUtils longMsg(String id) {
String code = String.format("[CQ:longmsg,id=%s]", id);
builder.append(code);
return this;
}

/**
* 发送合并转发消息
*
* @param id 合并转发消息Id
* @return {@link MsgUtils}
*/
public MsgUtils forward(String id) {
String code = String.format("[CQ:forward,id=%s]", id);
builder.append(code);
return this;
}

/**
* 构建消息链
*
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/com/mikuac/shiro/common/utils/ShiroUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,29 @@ public static List<Map<String, Object>> generateForwardMsg(List<String> contents
return nodes;
}

/**
* 兼容 Lagrange
* 生成自定义合并转发消息
*
* @param contents 消息列表,每个元素视为一个消息节点 Object 可为 List<ArrayMsg> 或 CQCode
* @return 消息结构
*/
@SuppressWarnings("Duplicates")
public static List<Map<String, Object>> generateForwardMsg(String uin, String name, List<?> contents) {
List<Map<String, Object>> nodes = new ArrayList<>();
contents.forEach(msg -> {
Map<String, Object> node = new HashMap<>();
node.put("type", "node");
Map<String, Object> data = new HashMap<>();
data.put("name", name);
data.put("uin", uin);
data.put("content", msg);
node.put("data", data);
nodes.add(node);
});
return nodes;
}

/**
* 兼容 Shamrock
* 生成引用消息和自定义消息混合合并转发
Expand Down
15 changes: 15 additions & 0 deletions src/main/java/com/mikuac/shiro/core/Bot.java
Original file line number Diff line number Diff line change
Expand Up @@ -1348,6 +1348,21 @@ public ActionList<String> fetchCustomFace() {
}.getType()) : null;
}

/**
* 获取合并转发消息Id
*
* @param msg 自定义转发消息 (可使用 ShiroUtils.generateForwardMsg() 方法创建)
* @return result {@link ActionData} of {@link String} 合并转发的消息Id
*/
@Override
public ActionData<String> sendForwardMsg(List<Map<String, Object>> msg) {
JSONObject params = new JSONObject();
params.put(ActionParams.MESSAGES, msg);
JSONObject result = actionHandler.action(session, ActionPathEnum.SEND_FORWARD_MSG, params);
return result != null ? result.to(new TypeReference<ActionData<String>>() {
}.getType()) : null;
}

/**
* 自定义请求
*
Expand Down
5 changes: 5 additions & 0 deletions src/main/java/com/mikuac/shiro/enums/MsgTypeEnum.java
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,11 @@ public enum MsgTypeEnum {
*/
tts,

/**
* 长消息
*/
longmsg,

/**
* 未知类型
*/
Expand Down

0 comments on commit d136b42

Please sign in to comment.