wechat query command

This commit is contained in:
Sola
2015-12-08 23:10:22 +08:00
parent b0ba46cc77
commit 2a062e4008
10 changed files with 161 additions and 46 deletions

View File

@@ -0,0 +1,44 @@
package love.sola.netsupport.wechat.matcher;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import love.sola.netsupport.config.Settings;
import me.chanjar.weixin.mp.api.WxMpMessageMatcher;
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
import java.util.concurrent.TimeUnit;
/**
* ***********************************************
* Created by Sola on 2015/11/4.
* Don't modify this source without my agreement
* ***********************************************
*/
public class CheckSpamMatcher implements WxMpMessageMatcher {
private class ValueLoader extends CacheLoader<String, Long> {
@Override
public Long load(String key) throws Exception {
return System.currentTimeMillis() + Settings.I.Check_Spam_Interval;
}
}
private LoadingCache<String, Long> cache = CacheBuilder.newBuilder()
.concurrencyLevel(4)
.weakKeys()
.maximumSize(4096)
.expireAfterWrite(Settings.I.Check_Spam_Cache_Expire_Time, TimeUnit.SECONDS)
.build(new ValueLoader());
@Override
public boolean match(WxMpXmlMessage wxMessage) {
Long l = cache.getIfPresent(wxMessage.getFromUserName());
if (l != null && l > System.currentTimeMillis()) {
return true;
}
cache.refresh(wxMessage.getFromUserName());
return false;
}
}

View File

@@ -5,6 +5,9 @@ import love.sola.netsupport.sql.TableUser;
import me.chanjar.weixin.mp.api.WxMpMessageMatcher;
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
import java.util.HashSet;
import java.util.Set;
/**
* ***********************************************
* Created by Sola on 2015/11/26.
@@ -13,11 +16,18 @@ import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
*/
public class RegisterMatcher implements WxMpMessageMatcher {
public static Set<String> registered = new HashSet<>();
@Override
public boolean match(WxMpXmlMessage message) {
String fromUser = message.getFromUserName();
User u = TableUser.getUserByWechat(fromUser);
return u == null;
if (registered.contains(fromUser)) {
return false;
} else {
User u = TableUser.getUserByWechat(fromUser);
if (u != null) registered.add(u.getWechatId());
return u == null;
}
}
}