mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 10:38:42 +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 imageHandler = new DemoImageHandler(); | ||||
|     WxMpMessageHandler oauth2handler = new DemoOAuth2Handler(); | ||||
|     WxMpMessageHandler checkAnswerHandler = new DemoCheckAnswerHandler(); | ||||
|     DemoStartGuessNumberHandler startGuessNumberHandler = new DemoStartGuessNumberHandler(); | ||||
|     DemoGuessNumberHandler guessNumberHandler = new DemoGuessNumberHandler(); | ||||
|  | ||||
|     wxMpMessageRouter = new WxMpMessageRouter(wxMpService); | ||||
|       wxMpMessageRouter | ||||
|           .rule().handler(logHandler).next() | ||||
|           .rule().msgType(WxConsts.XML_MSG_TEXT).content("猜数字").handler(startGuessNumberHandler).next() | ||||
|           .rule().msgType(WxConsts.XML_MSG_TEXT).rContent("\\d+").handler(checkAnswerHandler).end() | ||||
|           .rule().msgType(WxConsts.XML_MSG_TEXT).matcher(guessNumberHandler).handler(guessNumberHandler).end() | ||||
|           .rule().async(false).content("哈哈").handler(textHandler).end() | ||||
|           .rule().async(false).content("图片").handler(imageHandler).end() | ||||
|           .rule().async(false).content("oauth").handler(oauth2handler).end() | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Daniel Qian
					Daniel Qian