commands with callbackData support
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2021-09-09 23:55:14 +03:00
parent 932da0549a
commit 24b15ca4fe
15 changed files with 353 additions and 176 deletions

View File

@@ -4,17 +4,55 @@ import lombok.experimental.UtilityClass;
import ru.penkrat.stbf.api.Action;
import ru.penkrat.stbf.api.RequestMatcher;
import java.util.Objects;
import java.util.regex.Pattern;
@UtilityClass
public class RequestMatchers {
public RequestMatcher action(Action action) {
return request -> request.getMessageText()
.filter(text -> matchText(action, text))
.isPresent();
}
public RequestMatcher action(Action action) {
return request -> request.getMessageText()
.filter(text -> matchText(action, text))
.isPresent();
}
private static boolean matchText(Action action, String inputText) {
return inputText.equalsIgnoreCase(action.getText())
|| (action.getCmd() != null && inputText.equalsIgnoreCase(action.getCmd()));
}
public RequestMatcher cmd(Action action) {
return request -> request.getMessageText()
.filter(Objects::nonNull)
.filter(data -> Objects.equals(action.getCmd(), data))
.isPresent();
}
public RequestMatcher text(String callbackData) {
return request -> request.getCallbackData()
.filter(Objects::nonNull)
.filter(data -> Objects.equals(callbackData, data))
.isPresent();
}
public RequestMatcher callbackData(String callbackData) {
return request -> request.getCallbackData()
.filter(Objects::nonNull)
.filter(data -> Objects.equals(callbackData, data))
.isPresent();
}
public RequestMatcher callbackDataStartsWith(String callbackDataPrefix) {
return request -> request.getCallbackData()
.filter(Objects::nonNull)
.filter(data -> data.startsWith(callbackDataPrefix))
.isPresent();
}
public RequestMatcher callbackDataRegexp(String callbackDataPrefix) {
return request -> request.getCallbackData()
.filter(Objects::nonNull)
.filter(Pattern.compile(callbackDataPrefix).asPredicate())
.isPresent();
}
private static boolean matchText(Action action, String inputText) {
return inputText.equalsIgnoreCase(action.getText())
|| (action.getCmd() != null && inputText.equalsIgnoreCase(action.getCmd()));
}
}