添加好友请求限频功能
This commit is contained in:
@@ -177,6 +177,9 @@ friend.reject_request_duration 2592000000
|
|||||||
##好友请求过期时间,单位是毫秒,默认是7天,0为无限长期限。
|
##好友请求过期时间,单位是毫秒,默认是7天,0为无限长期限。
|
||||||
friend.request_expiration_duration 604800000
|
friend.request_expiration_duration 604800000
|
||||||
|
|
||||||
|
##好友请求限制频率,一个用户24小时之内允许请求好友的次数,默认不限频。
|
||||||
|
friend.request_rate_limit 30
|
||||||
|
|
||||||
##请求添加机器人为好友时,机器人是否自动接受,默认为true
|
##请求添加机器人为好友时,机器人是否自动接受,默认为true
|
||||||
friend.robot_auto_accept true
|
friend.robot_auto_accept true
|
||||||
|
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ public final class BrokerConstants {
|
|||||||
public static final String FRIEND_Repeat_Request_Duration = "friend.repeat_request_duration";
|
public static final String FRIEND_Repeat_Request_Duration = "friend.repeat_request_duration";
|
||||||
public static final String FRIEND_Reject_Request_Duration = "friend.reject_request_duration";
|
public static final String FRIEND_Reject_Request_Duration = "friend.reject_request_duration";
|
||||||
public static final String FRIEND_Request_Expiration_Duration = "friend.request_expiration_duration";
|
public static final String FRIEND_Request_Expiration_Duration = "friend.request_expiration_duration";
|
||||||
|
public static final String FRIEND_Request_Rate_Limit = "friend.request_rate_limit";
|
||||||
public static final String FRIEND_Request_Robot_Auto_Accept = "friend.robot_auto_accept";
|
public static final String FRIEND_Request_Robot_Auto_Accept = "friend.robot_auto_accept";
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,8 @@ public class AddFriendHandler extends GroupHandler<WFCMessage.AddFriendRequest>
|
|||||||
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.AddFriendRequest request, Qos1PublishHandler.IMCallback callback) {
|
public ErrorCode action(ByteBuf ackPayload, String clientID, String fromUser, ProtoConstants.RequestSourceType requestSourceType, WFCMessage.AddFriendRequest request, Qos1PublishHandler.IMCallback callback) {
|
||||||
long[] head = new long[1];
|
long[] head = new long[1];
|
||||||
boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin;
|
boolean isAdmin = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Admin;
|
||||||
ErrorCode errorCode = m_messagesStore.saveAddFriendRequest(fromUser, request, head, isAdmin);
|
boolean isRobot = requestSourceType == ProtoConstants.RequestSourceType.Request_From_Robot;
|
||||||
|
ErrorCode errorCode = m_messagesStore.saveAddFriendRequest(fromUser, request, head, isAdmin, isRobot);
|
||||||
if (errorCode == ERROR_CODE_SUCCESS) {
|
if (errorCode == ERROR_CODE_SUCCESS) {
|
||||||
WFCMessage.User user = m_messagesStore.getUserInfo(request.getTargetUid());
|
WFCMessage.User user = m_messagesStore.getUserInfo(request.getTargetUid());
|
||||||
if (user != null && user.getType() == ProtoConstants.UserType.UserType_Normal) {
|
if (user != null && user.getType() == ProtoConstants.UserType.UserType_Normal) {
|
||||||
|
|||||||
@@ -155,6 +155,7 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
private long mFriendRequestDuration = 7 * 24 * 60 * 60 * 1000;
|
private long mFriendRequestDuration = 7 * 24 * 60 * 60 * 1000;
|
||||||
private long mFriendRejectDuration = 30 * 24 * 60 * 60 * 1000;
|
private long mFriendRejectDuration = 30 * 24 * 60 * 60 * 1000;
|
||||||
private long mFriendRequestExpiration = 7 * 24 * 60 * 60 * 1000;
|
private long mFriendRequestExpiration = 7 * 24 * 60 * 60 * 1000;
|
||||||
|
private RateLimiter mFriendRateLimiter;
|
||||||
private boolean mFriendRobotAutoAccept = true;
|
private boolean mFriendRobotAutoAccept = true;
|
||||||
|
|
||||||
private long mPushExpiredTimes = 604800000L;
|
private long mPushExpiredTimes = 604800000L;
|
||||||
@@ -344,6 +345,13 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
printMissConfigLog(FRIEND_Request_Expiration_Duration, mFriendRequestExpiration + "");
|
printMissConfigLog(FRIEND_Request_Expiration_Duration, mFriendRequestExpiration + "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
int friendRequestRateLimit = Integer.parseInt(m_Server.getConfig().getProperty(FRIEND_Request_Rate_Limit, "0"));
|
||||||
|
if(friendRequestRateLimit > 0) {
|
||||||
|
mFriendRateLimiter = new RateLimiter(86400, friendRequestRateLimit);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
mFriendRobotAutoAccept = Boolean.parseBoolean(m_Server.getConfig().getProperty(BrokerConstants.FRIEND_Request_Robot_Auto_Accept, "true"));
|
mFriendRobotAutoAccept = Boolean.parseBoolean(m_Server.getConfig().getProperty(BrokerConstants.FRIEND_Request_Robot_Auto_Accept, "true"));
|
||||||
@@ -3353,11 +3361,18 @@ public class MemoryMessagesStore implements IMessagesStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ErrorCode saveAddFriendRequest(String userId, WFCMessage.AddFriendRequest request, long[] head, boolean isAdmin) {
|
public ErrorCode saveAddFriendRequest(String userId, WFCMessage.AddFriendRequest request, long[] head, boolean isAdmin, boolean isRobot) {
|
||||||
if (!isAdmin && mDisableFriendRequest) {
|
if (!isAdmin && mDisableFriendRequest) {
|
||||||
return ErrorCode.ERROR_CODE_NOT_RIGHT;
|
return ErrorCode.ERROR_CODE_NOT_RIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!isRobot && !isAdmin && mFriendRateLimiter != null) {
|
||||||
|
if(!mFriendRateLimiter.isGranted(userId)) {
|
||||||
|
LOG.error("User {} request add friend over frequency", userId);
|
||||||
|
return ErrorCode.ERROR_CODE_OVER_FREQUENCY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
HazelcastInstance hzInstance = m_Server.getHazelcastInstance();
|
||||||
MultiMap<String, WFCMessage.FriendRequest> requestMap = hzInstance.getMultiMap(USER_FRIENDS_REQUEST);
|
MultiMap<String, WFCMessage.FriendRequest> requestMap = hzInstance.getMultiMap(USER_FRIENDS_REQUEST);
|
||||||
|
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ public interface IMessagesStore {
|
|||||||
void clearUserFriend(String userId);
|
void clearUserFriend(String userId);
|
||||||
List<WFCMessage.FriendRequest> getFriendRequestList(String userId, long version);
|
List<WFCMessage.FriendRequest> getFriendRequestList(String userId, long version);
|
||||||
|
|
||||||
ErrorCode saveAddFriendRequest(String userId, WFCMessage.AddFriendRequest request, long[] head, boolean isAdmin);
|
ErrorCode saveAddFriendRequest(String userId, WFCMessage.AddFriendRequest request, long[] head, boolean isAdmin, boolean isRobot);
|
||||||
ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendRequest request, WFCMessage.Message.Builder msgBuilder, long[] heads, boolean isAdmin);
|
ErrorCode handleFriendRequest(String userId, WFCMessage.HandleFriendRequest request, WFCMessage.Message.Builder msgBuilder, long[] heads, boolean isAdmin);
|
||||||
ErrorCode deleteFriend(String userId, String friendUid, long[] head);
|
ErrorCode deleteFriend(String userId, String friendUid, long[] head);
|
||||||
ErrorCode blackUserRequest(String fromUser, String targetUserId, int status, long[] head);
|
ErrorCode blackUserRequest(String fromUser, String targetUserId, int status, long[] head);
|
||||||
|
|||||||
@@ -175,6 +175,9 @@ friend.reject_request_duration 2592000000
|
|||||||
##好友请求过期时间,单位是毫秒,默认是7天,0为无限长期限。
|
##好友请求过期时间,单位是毫秒,默认是7天,0为无限长期限。
|
||||||
friend.request_expiration_duration 604800000
|
friend.request_expiration_duration 604800000
|
||||||
|
|
||||||
|
##好友请求限制频率,一个用户24小时之内允许请求好友的次数,默认不限频。
|
||||||
|
#friend.request_rate_limit 30
|
||||||
|
|
||||||
##请求添加机器人为好友时,机器人是否自动接受,默认为true
|
##请求添加机器人为好友时,机器人是否自动接受,默认为true
|
||||||
friend.robot_auto_accept true
|
friend.robot_auto_accept true
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user