Compare commits

..
3 Commits
Author SHA1 Message Date
wonder 5ddf362834 ✨Feat: 耕种板块 2025-10-26 16:18:33 +08:00
wonder dbee3a5b12 ✨Feat: 实现菜单推送 2025-10-26 16:07:38 +08:00
wonder 2372b7ebae 🔧Chore: 部分代码补充 2025-10-26 15:32:39 +08:00
5 changed files with 112 additions and 2 deletions
@@ -0,0 +1,20 @@
package com.wonderland.stardewvalley.handle;
import com.wonderland.stardewvalley.entity.game.Weather;
import com.wonderland.stardewvalley.util.lark.LarkUtil;
import com.wonderland.stardewvalley.util.weather.WeatherUtil;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Component;
@Component
public class WeatherHandle {
@Resource
private LarkUtil larkUtil;
public void sendCard() throws Exception {
Weather weather = WeatherUtil.getWeather();
larkUtil.sendWeatherCard(weather);
}
}
@@ -4,7 +4,8 @@ import lombok.Getter;
@Getter @Getter
public enum CardTemplate { public enum CardTemplate {
CARD_TEMPLATE_WEATHER("AAqxas5etOJDx", "1.0.5"); CARD_TEMPLATE_WEATHER("AAqxas5etOJDx", "1.0.5"),
CARD_TEMPLATE_FARM("AAqxaYo9rbXPa", "1.0.7");
private String cardId; private String cardId;
private String version; private String version;
@@ -0,0 +1,25 @@
package com.wonderland.stardewvalley.util.bean;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext context;
public static <T> T getBean(Class<T> beanClass) {
return context.getBean(beanClass);
}
public static <T> T getBean(String name, Class<T> beanClass) {
return context.getBean(name, beanClass);
}
public static Object getBean(String name) {
return context.getBean(name);
}
@Override
public void setApplicationContext(ApplicationContext appContext) throws BeansException {
context = appContext;
}
}
@@ -8,6 +8,8 @@ import com.lark.oapi.service.im.ImService;
import com.lark.oapi.service.im.v1.model.P2MessageReceiveV1; import com.lark.oapi.service.im.v1.model.P2MessageReceiveV1;
import com.lark.oapi.ws.Client; import com.lark.oapi.ws.Client;
import com.wonderland.stardewvalley.common.constant.LarkConstant; import com.wonderland.stardewvalley.common.constant.LarkConstant;
import com.wonderland.stardewvalley.handle.WeatherHandle;
import com.wonderland.stardewvalley.util.bean.SpringContextUtil;
public class EventListener { public class EventListener {
@@ -30,6 +32,14 @@ public class EventListener {
.onP2BotMenuV6(new ApplicationService.P2BotMenuV6Handler() { .onP2BotMenuV6(new ApplicationService.P2BotMenuV6Handler() {
@Override @Override
public void handle(P2BotMenuV6 event) throws Exception { public void handle(P2BotMenuV6 event) throws Exception {
String eventKey = event.getEvent().getEventKey();
if (eventKey.equals("weather")) {
WeatherHandle weatherHandle = SpringContextUtil.getBean(WeatherHandle.class);
weatherHandle.sendCard();
} else if (eventKey.equals("farm")) {
LarkUtil.sendFarmCard();
}
System.out.printf("[ onP2BotMenuV6 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent())); System.out.printf("[ onP2BotMenuV6 access ], data: %s\n", Jsons.DEFAULT.toJson(event.getEvent()));
} }
}) })
@@ -11,10 +11,10 @@ import com.lark.oapi.service.im.v1.model.CreateMessageReq;
import com.lark.oapi.service.im.v1.model.CreateMessageReqBody; import com.lark.oapi.service.im.v1.model.CreateMessageReqBody;
import com.lark.oapi.service.im.v1.model.CreateMessageResp; import com.lark.oapi.service.im.v1.model.CreateMessageResp;
import com.wonderland.stardewvalley.common.constant.BackGroundConstant; import com.wonderland.stardewvalley.common.constant.BackGroundConstant;
import com.wonderland.stardewvalley.service.ai.ChatUtil;
import com.wonderland.stardewvalley.common.constant.LarkConstant; import com.wonderland.stardewvalley.common.constant.LarkConstant;
import com.wonderland.stardewvalley.entity.game.Weather; import com.wonderland.stardewvalley.entity.game.Weather;
import com.wonderland.stardewvalley.lark.card.CardTemplate; import com.wonderland.stardewvalley.lark.card.CardTemplate;
import com.wonderland.stardewvalley.service.ai.ChatUtil;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -129,4 +129,58 @@ public class LarkUtil {
// 业务数据处理 // 业务数据处理
System.out.println(Jsons.DEFAULT.toJson(resp.getData())); System.out.println(Jsons.DEFAULT.toJson(resp.getData()));
} }
public static void sendFarmCard() throws Exception {
// 构建client
Client client = Client.newBuilder(LarkConstant.APP_ID, LarkConstant.APP_SECRET).build();
// 生成uuid
String uuid = IdUtil.randomUUID().toString();
// 卡片参数
// String textParam = JSONUtil.toJsonStr(weather);
// log.info(textParam);
// 构建卡片:对于不同的卡片,只需要给出不同的 模板id 版本号 变量字段
Map<String, Object> templateData = new HashMap<>();
templateData.put("template_id", CardTemplate.CARD_TEMPLATE_FARM.getCardId());
templateData.put("template_version_name", CardTemplate.CARD_TEMPLATE_FARM.getVersion());
// templateData.put("template_variable", "");
// String jsonCardContent = Jsons.DEFAULT.toJson(templateData);
Map<String, Object> jsonContent = new HashMap<>();
jsonContent.put("data", templateData);
jsonContent.put("type", "template");
String json = Jsons.DEFAULT.toJson(jsonContent);
log.info(json);
// 创建请求对象
CreateMessageReq req = CreateMessageReq.newBuilder()
.receiveIdType("open_id")
.createMessageReqBody(CreateMessageReqBody.newBuilder()
.receiveId(LarkConstant.USER_OPEN_ID)
.msgType("interactive")
.content(json)
.uuid(uuid)
.build())
.build();
// 发起请求
CreateMessageResp resp = client.im().v1().message().create(req);
// 处理服务端错误
if(!resp.success()) {
System.out.println(String.format("code:%s,msg:%s,reqId:%s, resp:%s",
resp.getCode(), resp.getMsg(), resp.getRequestId(), Jsons.createGSON(true, false).toJson(JsonParser.parseString(new String(resp.getRawResponse().getBody(), StandardCharsets.UTF_8)))));
return;
}
// 业务数据处理
System.out.println(Jsons.DEFAULT.toJson(resp.getData()));
}
} }