mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-09-20 18:48:13 +08:00
issue #77 用matcher做新的猜数字游戏,代码更简单
This commit is contained in:
@@ -1,71 +0,0 @@
|
|||||||
package me.chanjar.weixin.mp.demo;
|
|
||||||
|
|
||||||
import me.chanjar.weixin.common.exception.WxErrorException;
|
|
||||||
import me.chanjar.weixin.common.session.WxSession;
|
|
||||||
import me.chanjar.weixin.common.session.WxSessionManager;
|
|
||||||
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
|
|
||||||
import me.chanjar.weixin.mp.api.WxMpService;
|
|
||||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
|
|
||||||
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
|
|
||||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class DemoCheckAnswerHandler implements WxMpMessageHandler {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService,
|
|
||||||
WxSessionManager sessionManager) {
|
|
||||||
|
|
||||||
WxSession session = sessionManager.getSession(wxMessage.getFromUserName());
|
|
||||||
|
|
||||||
if (session.getAttribute("guessing") == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
boolean guessing = (Boolean) session.getAttribute("guessing");
|
|
||||||
if (!guessing) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
int answer = (Integer) session.getAttribute("number");
|
|
||||||
int guessNumber = Integer.valueOf(wxMessage.getContent());
|
|
||||||
if (guessNumber < answer) {
|
|
||||||
WxMpCustomMessage m = WxMpCustomMessage
|
|
||||||
.TEXT()
|
|
||||||
.toUser(wxMessage.getFromUserName())
|
|
||||||
.content("小了")
|
|
||||||
.build();
|
|
||||||
try {
|
|
||||||
wxMpService.customMessageSend(m);
|
|
||||||
} catch (WxErrorException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (guessNumber > answer) {
|
|
||||||
WxMpCustomMessage m = WxMpCustomMessage
|
|
||||||
.TEXT()
|
|
||||||
.toUser(wxMessage.getFromUserName())
|
|
||||||
.content("大了")
|
|
||||||
.build();
|
|
||||||
try {
|
|
||||||
wxMpService.customMessageSend(m);
|
|
||||||
} catch (WxErrorException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
WxMpCustomMessage m = WxMpCustomMessage
|
|
||||||
.TEXT()
|
|
||||||
.toUser(wxMessage.getFromUserName())
|
|
||||||
.content("Bingo!")
|
|
||||||
.build();
|
|
||||||
try {
|
|
||||||
session.removeAttribute("guessing");
|
|
||||||
wxMpService.customMessageSend(m);
|
|
||||||
} catch (WxErrorException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@@ -0,0 +1,135 @@
|
|||||||
|
package me.chanjar.weixin.mp.demo;
|
||||||
|
|
||||||
|
import me.chanjar.weixin.common.exception.WxErrorException;
|
||||||
|
import me.chanjar.weixin.common.session.WxSession;
|
||||||
|
import me.chanjar.weixin.common.session.WxSessionManager;
|
||||||
|
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
|
||||||
|
import me.chanjar.weixin.mp.api.WxMpMessageMatcher;
|
||||||
|
import me.chanjar.weixin.mp.api.WxMpService;
|
||||||
|
import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
|
||||||
|
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
|
||||||
|
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMatcher {
|
||||||
|
|
||||||
|
private Random random = new Random();
|
||||||
|
|
||||||
|
private Pattern pattern = Pattern.compile("\\d+");
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean match(WxMpXmlMessage message) {
|
||||||
|
return isUserWantGuess(message) || isUserAnswering(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isUserWantGuess(WxMpXmlMessage message) {
|
||||||
|
return "猜数字".equals(message.getContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isUserAnswering(WxMpXmlMessage message) {
|
||||||
|
return pattern.matcher(message.getContent()).matches();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService,
|
||||||
|
WxSessionManager sessionManager) {
|
||||||
|
|
||||||
|
if (isUserWantGuess(wxMessage)) {
|
||||||
|
letsGo(wxMessage, wxMpService, sessionManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isUserAnswering(wxMessage)) {
|
||||||
|
giveHint(wxMessage, wxMpService, sessionManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void letsGo(WxMpXmlMessage wxMessage, WxMpService wxMpService, WxSessionManager sessionManager) {
|
||||||
|
WxSession session = sessionManager.getSession(wxMessage.getFromUserName());
|
||||||
|
if (session.getAttribute("guessing") == null) {
|
||||||
|
WxMpCustomMessage m = WxMpCustomMessage
|
||||||
|
.TEXT()
|
||||||
|
.toUser(wxMessage.getFromUserName())
|
||||||
|
.content("请猜一个100以内的数字")
|
||||||
|
.build();
|
||||||
|
try {
|
||||||
|
wxMpService.customMessageSend(m);
|
||||||
|
} catch (WxErrorException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
WxMpCustomMessage m = WxMpCustomMessage
|
||||||
|
.TEXT()
|
||||||
|
.toUser(wxMessage.getFromUserName())
|
||||||
|
.content("放弃了吗?那请重新猜一个100以内的数字")
|
||||||
|
.build();
|
||||||
|
try {
|
||||||
|
wxMpService.customMessageSend(m);
|
||||||
|
} catch (WxErrorException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
session.setAttribute("guessing", Boolean.TRUE);
|
||||||
|
session.setAttribute("number", random.nextInt(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected void giveHint(WxMpXmlMessage wxMessage, WxMpService wxMpService, WxSessionManager sessionManager) {
|
||||||
|
|
||||||
|
WxSession session = sessionManager.getSession(wxMessage.getFromUserName());
|
||||||
|
|
||||||
|
if (session.getAttribute("guessing") == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean guessing = (Boolean) session.getAttribute("guessing");
|
||||||
|
if (!guessing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int answer = (Integer) session.getAttribute("number");
|
||||||
|
int guessNumber = Integer.valueOf(wxMessage.getContent());
|
||||||
|
if (guessNumber < answer) {
|
||||||
|
WxMpCustomMessage m = WxMpCustomMessage
|
||||||
|
.TEXT()
|
||||||
|
.toUser(wxMessage.getFromUserName())
|
||||||
|
.content("小了")
|
||||||
|
.build();
|
||||||
|
try {
|
||||||
|
wxMpService.customMessageSend(m);
|
||||||
|
} catch (WxErrorException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (guessNumber > answer) {
|
||||||
|
WxMpCustomMessage m = WxMpCustomMessage
|
||||||
|
.TEXT()
|
||||||
|
.toUser(wxMessage.getFromUserName())
|
||||||
|
.content("大了")
|
||||||
|
.build();
|
||||||
|
try {
|
||||||
|
wxMpService.customMessageSend(m);
|
||||||
|
} catch (WxErrorException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
WxMpCustomMessage m = WxMpCustomMessage
|
||||||
|
.TEXT()
|
||||||
|
.toUser(wxMessage.getFromUserName())
|
||||||
|
.content("Bingo!")
|
||||||
|
.build();
|
||||||
|
try {
|
||||||
|
session.removeAttribute("guessing");
|
||||||
|
wxMpService.customMessageSend(m);
|
||||||
|
} catch (WxErrorException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@@ -1,54 +0,0 @@
|
|||||||
package me.chanjar.weixin.mp.demo;
|
|
||||||
|
|
||||||
import me.chanjar.weixin.common.exception.WxErrorException;
|
|
||||||
import me.chanjar.weixin.common.session.WxSession;
|
|
||||||
import me.chanjar.weixin.common.session.WxSessionManager;
|
|
||||||
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
|
|
||||||
import me.chanjar.weixin.mp.api.WxMpService;
|
|
||||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
|
|
||||||
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
|
|
||||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
public class DemoStartGuessNumberHandler implements WxMpMessageHandler {
|
|
||||||
|
|
||||||
private Random random = new Random();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService,
|
|
||||||
WxSessionManager sessionManager) {
|
|
||||||
|
|
||||||
WxSession session = sessionManager.getSession(wxMessage.getFromUserName());
|
|
||||||
|
|
||||||
if (session.getAttribute("guessing") == null) {
|
|
||||||
WxMpCustomMessage m = WxMpCustomMessage
|
|
||||||
.TEXT()
|
|
||||||
.toUser(wxMessage.getFromUserName())
|
|
||||||
.content("请猜一个100以内的数字")
|
|
||||||
.build();
|
|
||||||
try {
|
|
||||||
wxMpService.customMessageSend(m);
|
|
||||||
} catch (WxErrorException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
WxMpCustomMessage m = WxMpCustomMessage
|
|
||||||
.TEXT()
|
|
||||||
.toUser(wxMessage.getFromUserName())
|
|
||||||
.content("放弃了吗?那请重新猜一个100以内的数字")
|
|
||||||
.build();
|
|
||||||
try {
|
|
||||||
wxMpService.customMessageSend(m);
|
|
||||||
} catch (WxErrorException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
session.setAttribute("guessing", Boolean.TRUE);
|
|
||||||
session.setAttribute("number", random.nextInt(100));
|
|
||||||
return null;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@@ -44,14 +44,12 @@ public class WxMpDemoServer {
|
|||||||
WxMpMessageHandler textHandler = new DemoTextHandler();
|
WxMpMessageHandler textHandler = new DemoTextHandler();
|
||||||
WxMpMessageHandler imageHandler = new DemoImageHandler();
|
WxMpMessageHandler imageHandler = new DemoImageHandler();
|
||||||
WxMpMessageHandler oauth2handler = new DemoOAuth2Handler();
|
WxMpMessageHandler oauth2handler = new DemoOAuth2Handler();
|
||||||
WxMpMessageHandler checkAnswerHandler = new DemoCheckAnswerHandler();
|
DemoGuessNumberHandler guessNumberHandler = new DemoGuessNumberHandler();
|
||||||
DemoStartGuessNumberHandler startGuessNumberHandler = new DemoStartGuessNumberHandler();
|
|
||||||
|
|
||||||
wxMpMessageRouter = new WxMpMessageRouter(wxMpService);
|
wxMpMessageRouter = new WxMpMessageRouter(wxMpService);
|
||||||
wxMpMessageRouter
|
wxMpMessageRouter
|
||||||
.rule().handler(logHandler).next()
|
.rule().handler(logHandler).next()
|
||||||
.rule().msgType(WxConsts.XML_MSG_TEXT).content("猜数字").handler(startGuessNumberHandler).next()
|
.rule().msgType(WxConsts.XML_MSG_TEXT).matcher(guessNumberHandler).handler(guessNumberHandler).end()
|
||||||
.rule().msgType(WxConsts.XML_MSG_TEXT).rContent("\\d+").handler(checkAnswerHandler).end()
|
|
||||||
.rule().async(false).content("哈哈").handler(textHandler).end()
|
.rule().async(false).content("哈哈").handler(textHandler).end()
|
||||||
.rule().async(false).content("图片").handler(imageHandler).end()
|
.rule().async(false).content("图片").handler(imageHandler).end()
|
||||||
.rule().async(false).content("oauth").handler(oauth2handler).end()
|
.rule().async(false).content("oauth").handler(oauth2handler).end()
|
||||||
|
Reference in New Issue
Block a user