refactoring

pull/6/head
bvn13 2019-03-16 12:03:24 +03:00
parent 8cade905ef
commit b9b8d7e10f
12 changed files with 159 additions and 128 deletions

View File

@ -4,8 +4,10 @@ import org.pircbotx.hooks.ListenerAdapter;
import org.pircbotx.hooks.events.MessageEvent;
import org.pircbotx.hooks.types.GenericChannelEvent;
import org.pircbotx.hooks.types.GenericEvent;
import org.pircbotx.hooks.types.GenericMessageEvent;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;
/**
@ -36,4 +38,47 @@ public class ImprovedListenerAdapter extends ListenerAdapter {
}
protected boolean isApplicable(GenericMessageEvent event, String command) {
return isApplicable(event, command);
}
protected boolean isApplicable(GenericMessageEvent event, String command, Consumer<String> callback) {
String[] words = event.getMessage().split(" ");
if (words.length > 0) {
if (words[0].equalsIgnoreCase(command)) {
if (callback != null) {
callback.accept(event.getMessage().substring(words[0].length()).trim());
return true;
}
}
}
return false;
}
protected boolean isApplicable(GenericMessageEvent event, List<String> commands) {
return isApplicable(event, commands, null);
}
protected boolean isApplicable(GenericMessageEvent event, List<String> commands, Consumer<String> callback) {
String[] words = event.getMessage().split(" ");
if (words.length > 0) {
boolean isApplicable = false;
String command = "";
for (String c : commands) {
if (words[0].equalsIgnoreCase(c)) {
isApplicable = true;
command = words[0];
break;
}
}
if (isApplicable) {
if (callback != null) {
callback.accept(event.getMessage().substring(command.length()).trim());
}
return true;
}
}
return false;
}
}

View File

@ -116,7 +116,7 @@ public class AdminListener extends ImprovedListenerAdapter implements Descriptio
super.onJoin(event);
if (event.getChannel().getName().startsWith("#")) {
if (event.getUser().getNick().equals(event.getBot().getNick())) {
if (event.getUser() != null && event.getBot().getNick().equalsIgnoreCase(event.getUser().getNick())) {
event.getBot().sendRaw().rawLineNow("MODE " + event.getBot().getUserBot().getNick() + " +B");
try {
channelSettingsService.createChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), event.getChannel().getName());
@ -136,13 +136,13 @@ public class AdminListener extends ImprovedListenerAdapter implements Descriptio
return;
}
if (event.getUser().isVerified()
if (event.getUser() != null && event.getUser().isVerified()
&& !config.getMasterNick().isEmpty()
&& config.getMasterNick().equals(event.getUser().getNick())) {
if (event.getMessage().startsWith(COMMAND)) {
String command = event.getMessage().substring(COMMAND.length());
String commands[] = command.trim().split(" ", 2);
String[] commands = command.trim().split(" ", 2);
if (commands[0].startsWith("+") || commands[0].startsWith("-")) {
boolean isApply = commands[0].startsWith("+");
@ -196,20 +196,20 @@ public class AdminListener extends ImprovedListenerAdapter implements Descriptio
return;
}
if (event.getUser().isVerified()
if (event.getUser() != null && event.getUser().isVerified()
&& !config.getMasterNick().isEmpty()
&& config.getMasterNick().equals(event.getUser().getNick())) {
if (event.getMessage().startsWith(COMMAND)) {
String command = event.getMessage().substring(COMMAND.length());
String commands[] = command.trim().split(" ", 2);
String[] commands = command.trim().split(" ", 2);
if (commands.length != 2) {
event.respondPrivateMessage("Wrong command");
return;
}
String args[] = null;
String[] args = null;
switch (commands[0].toLowerCase()) {
case "restart":
event.getBot().stopBotReconnect(); break;
@ -273,8 +273,8 @@ public class AdminListener extends ImprovedListenerAdapter implements Descriptio
}
private boolean sameServer(String s1, String s2) {
String d1[] = s1.split("[\\.]");
String d2[] = s2.split("[\\.]");
String[] d1 = s1.split("[\\.]");
String[] d2 = s2.split("[\\.]");
if (d1.length >= 2 && d2.length >= 2) {
if (d1[d1.length - 1].equals(d2[d2.length - 1])
@ -302,8 +302,7 @@ public class AdminListener extends ImprovedListenerAdapter implements Descriptio
return null;
}
Config config = aConfig.get();
return config;
return aConfig.get();
}
private void changeSettings(String serverHost, String channelName, String set, String modeStr) {

View File

@ -32,10 +32,12 @@ public class AutoRejoinListener extends ImprovedListenerAdapter {
return;
}
if (event.getRecipient().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getRecipient() != null && event.getRecipient().getUserId().equals(event.getBot().getUserBot().getUserId())) {
wasKicked = true;
offender = event.getUser().getNick();
event.getBot().sendIRC().joinChannel(event.getChannel().getName());
if (event.getUser() != null) {
offender = event.getUser().getNick();
event.getBot().sendIRC().joinChannel(event.getChannel().getName());
}
}
}

View File

@ -5,6 +5,8 @@ import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.pircbotx.hooks.events.MessageEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.bvn13.jircbot.bot.ImprovedListenerAdapter;
@ -29,6 +31,8 @@ import static ru.bvn13.jircbot.documentation.ListenerDescription.CommandDescript
@Component
public class BashOrgListener extends ImprovedListenerAdapter implements DescriptionProvided {
private static final Logger logger = LoggerFactory.getLogger(BashOrgListener.class);
private static final String COMMAND = "?bash";
private static final String USER_AGENT = "Mozilla/5.0";
@ -66,16 +70,14 @@ public class BashOrgListener extends ImprovedListenerAdapter implements Descript
return;
}
if (!event.getMessage().startsWith(COMMAND)) {
return;
}
try {
event.respond(getRandomBashQuote());
} catch (Exception e) {
event.respond("ERROR: "+e.getMessage());
e.printStackTrace();
}
isApplicable(event, COMMAND, message -> {
try {
event.respond(getRandomBashQuote());
} catch (Exception e) {
event.respond("ERROR: "+e.getMessage());
logger.error("", e);
}
});
}
@ -108,12 +110,12 @@ public class BashOrgListener extends ImprovedListenerAdapter implements Descript
throw new Exception("Could not get a random quote!");
}
String contentType = con.getContentType();
Matcher matcher = PATTERN_CHARSET.matcher(contentType);
String charset = "utf-8";
if (matcher.find()) {
charset = matcher.group(1);
}
// String contentType = con.getContentType();
// Matcher matcher = PATTERN_CHARSET.matcher(contentType);
// String charset = "utf-8";
// if (matcher.find()) {
// charset = matcher.group(1);
// }
String response = getDataFromConnection(con);
Document doc = Jsoup.parse(response);

View File

@ -80,47 +80,49 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter implements
return;
}
String userName = event.getUser().getNick();
String channelName = this.getChannelName(event);
String userIdent = event.getUser().getNick() + "!" + event.getUser().getLogin() + "@" + event.getUser().getHostname();
if (event.getUser() != null) {
String userName = event.getUser().getNick();
String channelName = this.getChannelName(event);
String userIdent = event.getUser().getNick() + "!" + event.getUser().getLogin() + "@" + event.getUser().getHostname();
if (event.getMessage().startsWith(COMMAND)) {
String message = event.getMessage().replace(COMMAND, "").trim();
String commands[] = message.split(" ", 2);
if (event.getMessage().startsWith(COMMAND)) {
String message = event.getMessage().substring(COMMAND.length()).trim();
String[] commands = message.split(" ", 2);
if (commands.length != 2) {
event.respond("Deferred messages usage: ?tell <UserNick/ME/Ident> your message here");
return;
}
if (commands.length != 2) {
event.respond("Deferred messages usage: ?tell <UserNick/ME/Ident> your message here");
return;
}
if (commands[0].equalsIgnoreCase("me") || userName.equalsIgnoreCase(commands[0])) {
// deferred to myself
deferredMessageService.saveDeferredMessage(channelName, userName, userName.toLowerCase(), commands[1]);
event.respond("Saved message to "+userName);
} else {
if (commands[0].equalsIgnoreCase(event.getBot().getUserBot().getNick())) {
event.respond("Sorry, message cannot be deferred to me.");
if (commands[0].equalsIgnoreCase("me") || userName.equalsIgnoreCase(commands[0])) {
// deferred to myself
deferredMessageService.saveDeferredMessage(channelName, userName, userName.toLowerCase(), commands[1]);
event.respond("Saved message to "+userName);
} else {
// deferred to somebody
if (isUserOnline(event, commands[0])) {
event.respond(String.format("%s is online, tell him/her directly, please.", commands[0]));
if (commands[0].equalsIgnoreCase(event.getBot().getUserBot().getNick())) {
event.respond("Sorry, message cannot be deferred to me.");
} else {
deferredMessageService.saveDeferredMessage(channelName, userName, commands[0].toLowerCase(), commands[1]);
event.respond("Saved message to " + commands[0]);
// deferred to somebody
if (isUserOnline(event, commands[0])) {
event.respond(String.format("%s is online, tell him/her directly, please.", commands[0]));
} else {
deferredMessageService.saveDeferredMessage(channelName, userName, commands[0].toLowerCase(), commands[1]);
event.respond("Saved message to " + commands[0]);
}
}
}
} else if (event.getMessage().startsWith(COMMAND_FORGET)) {
int count = deferredMessageService.forgetAllMessages(channelName, userName, userIdent);
event.respond("All "+count+" messages to "+userName+" were deleted");
} else if (event.getMessage().startsWith(COMMAND_READ)) {
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(channelName, userName, userIdent);
deferredMessages.forEach(msg -> {
event.respondPrivateMessage("User "+msg.getSender()+" at "+dt.format(msg.getDtCreated())+" told you: "+msg.getMessage());
deferredMessageService.markMessageWasSent(msg);
});
} else {
this.sendDeferredMessage(event);
}
} else if (event.getMessage().startsWith(COMMAND_FORGET)) {
int count = deferredMessageService.forgetAllMessages(channelName, userName, userIdent);
event.respond("All "+count+" messages to "+userName+" were deleted");
} else if (event.getMessage().startsWith(COMMAND_READ)) {
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(channelName, userName, userIdent);
deferredMessages.forEach(msg -> {
event.respondPrivateMessage("User "+msg.getSender()+" at "+dt.format(msg.getDtCreated())+" told you: "+msg.getMessage());
deferredMessageService.markMessageWasSent(msg);
});
} else {
this.sendDeferredMessage(event);
}
}
@ -128,16 +130,17 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter implements
private void sendDeferredMessage(final MessageEvent event) {
String userIdent = event.getUser().getNick() + "!" + event.getUser().getLogin() + "@" + event.getUser().getHostname();
if (event.getUser() != null) {
String userIdent = event.getUser().getNick() + "!" + event.getUser().getLogin() + "@" + event.getUser().getHostname();
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase(), userIdent);
if (deferredMessages != null && deferredMessages.size() > 0) {
DeferredMessage msg = deferredMessages.get(0);
String more = "" + (deferredMessages.size() > 1 ? " ("+(deferredMessages.size()-1)+" message/-s more)" : "");
event.respond("User "+msg.getSender()+" at "+dt.format(msg.getDtCreated())+" told you"+more+": "+msg.getMessage());
deferredMessageService.markMessageWasSent(msg);
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase(), userIdent);
if (deferredMessages != null && deferredMessages.size() > 0) {
DeferredMessage msg = deferredMessages.get(0);
String more = "" + (deferredMessages.size() > 1 ? " (" + (deferredMessages.size() - 1) + " message/-s more)" : "");
event.respond("User " + msg.getSender() + " at " + dt.format(msg.getDtCreated()) + " told you" + more + ": " + msg.getMessage());
deferredMessageService.markMessageWasSent(msg);
}
}
}
@Override
@ -149,13 +152,14 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter implements
return;
}
String userIdent = event.getUser().getNick() + "!" + event.getUser().getLogin() + "@" + event.getUser().getHostname();
if (event.getUser() != null) {
String userIdent = event.getUser().getNick() + "!" + event.getUser().getLogin() + "@" + event.getUser().getHostname();
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase(), userIdent);
if (deferredMessages != null && deferredMessages.size() > 0) {
event.respond("You have "+deferredMessages.size()+" unread message(-s)");
List<DeferredMessage> deferredMessages = deferredMessageService.getDeferredMessagesForUser(this.getChannelName(event), event.getUser().getNick().toLowerCase(), userIdent);
if (deferredMessages != null && deferredMessages.size() > 0) {
event.respond("You have " + deferredMessages.size() + " unread message(-s)");
}
}
}
@Autowired

View File

@ -61,15 +61,15 @@ public class DuckDuckGoSearchListener extends ImprovedListenerAdapter implements
return;
}
if (!event.getMessage().startsWith(COMMAND)) {
return;
}
isApplicable(event, COMMAND, message -> {
try {
String result = search(message);
event.respond(result);
} catch (Exception e) {
event.respond("error is occurred while searching");
}
});
String message = event.getMessage().replace(COMMAND, "").trim();
String result = search(message);
event.respond(result);
}
private String search(String phrase) throws Exception {

View File

@ -74,10 +74,10 @@ public class GrammarCorrectorListener extends ImprovedListenerAdapter {
private void onCommand(final GenericMessageEvent event) throws Exception {
String message = event.getMessage().replace(COMMAND, "").trim();
String commands[] = message.split(" ", 2);
String[] commands = message.split(" ", 2);
if (commands.length == 2) {
if (commands[0].trim().equalsIgnoreCase("add")) {
String params[] = commands[1].trim().split(">");
String[] params = commands[1].trim().split(">");
if (params.length != 2) {
event.respond(helpMessage());
} else {
@ -85,7 +85,7 @@ public class GrammarCorrectorListener extends ImprovedListenerAdapter {
event.respond("added correction: "+params[0].trim()+" > "+params[1].trim());
}
} else if (commands[0].trim().equalsIgnoreCase("remove")) {
String params[] = commands[1].trim().split(">");
String[] params = commands[1].trim().split(">");
if (params.length == 1) {
// by word
if (grammarCorrectionService.removeAllCorrectionsByWord(commands[1].trim())) {

View File

@ -22,7 +22,7 @@ import java.util.Optional;
@Component
public class HelpListener extends ImprovedListenerAdapter implements DescriptionProvided {
private static final List<String> COMMAND = Arrays.asList("?help", "?h");
private static final List<String> COMMANDS = Arrays.asList("?help", "?h");
private JircBotConfiguration configuration;
private DocumentationProvider documentationProvider;
@ -42,33 +42,17 @@ public class HelpListener extends ImprovedListenerAdapter implements Description
return;
}
answer(event);
isApplicable(event, COMMANDS, message -> answer(event, message));
}
@Override
public void onPrivateMessage(PrivateMessageEvent event) throws Exception {
super.onPrivateMessage(event);
answer(event);
isApplicable(event, COMMANDS, message -> answer(event, message));
}
private void answer(GenericMessageEvent event) {
boolean isHelp = false;
String command = "";
for (String c : COMMAND) {
if (event.getMessage().startsWith(c)) {
isHelp = true;
command = c;
break;
}
}
if (!isHelp) {
return;
}
String message = event.getMessage().replace(command, "").trim();
private void answer(GenericMessageEvent event, String message) {
if (message.isEmpty()) {
event.respond(adviceToFollowMainUrl);
} else {
@ -79,12 +63,12 @@ public class HelpListener extends ImprovedListenerAdapter implements Description
private void answerWithHelp(GenericMessageEvent event, String message) {
String[] words = message.replace(" ", "").split(" ");
if (words.length > 1 || words[0].equalsIgnoreCase("all")) {
event.respond(String.format("help syntax: ?help | ?help <COMMAND> | Commands: %s", documentationProvider.getAllCommands()));
event.respond(String.format("help syntax: ?help | ?help <COMMANDS> | Commands: %s", documentationProvider.getAllCommands()));
} else {
Optional<ListenerDescription.CommandDescription> description = documentationProvider.findByCommand(words[0].toLowerCase());
if (description.isPresent()) {
ListenerDescription.CommandDescription d = description.get();
event.respond(String.format("COMMAND: %s, DESCRIPTION: %s, EXAMPLE: %s", d.getCommand(), d.getDescription(), d.getExample()));
event.respond(String.format("COMMANDS: %s, DESCRIPTION: %s, EXAMPLE: %s", d.getCommand(), d.getDescription(), d.getExample()));
} else {
event.respond(String.format("wrong command %s. %s%s", words[0], adviceToFollowMainUrl.substring(0, 1).toUpperCase(), adviceToFollowMainUrl.substring(1)));
}

View File

@ -61,7 +61,7 @@ public class LinkPreviewListener extends ImprovedListenerAdapter implements Desc
List<String> links = findLink(event.getMessage());
for (String link : links) {
String info = parseLink(link);
if (info != null && !info.isEmpty()) {
if (!info.isEmpty()) {
//event.respond(info);
event.getChannel().send().message(info);
}
@ -70,7 +70,7 @@ public class LinkPreviewListener extends ImprovedListenerAdapter implements Desc
}
public List<String> findLink(String message) {
private List<String> findLink(String message) {
Matcher matcher = REGEX.matcher(message);
List<String> links = new ArrayList<>();
while (matcher.find()) {
@ -84,19 +84,19 @@ public class LinkPreviewListener extends ImprovedListenerAdapter implements Desc
String content = internetAccessor.retrieveContentByLink(link);
String encoding = null; //getCharsetFromHeaders(content.toString());
if (encoding == null) {
encoding = getCharsetFromBody(content.toString());
}
// if (encoding == null) {
// encoding = getCharsetFromBody(content.toString());
// }
String title = "";
if (encoding != null && !encoding.isEmpty()) {
content = internetAccessor.retrieveContentByLinkWithEncoding(link, encoding);
}
// if (encoding != null && !encoding.isEmpty()) {
// content = internetAccessor.retrieveContentByLinkWithEncoding(link, encoding);
// }
title = content.substring(content.indexOf("<title>") + 7, content.indexOf("</title>"));
return "Title: "+title.toString();
return "Title: "+title;
}
@ -115,9 +115,7 @@ public class LinkPreviewListener extends ImprovedListenerAdapter implements Desc
w.flush();
w.close();
String encodedTitle = out.toString();
return encodedTitle;
return out.toString();
}
String decodeTitle(String title, String encoding) throws UnsupportedEncodingException {

View File

@ -4,6 +4,7 @@ import org.pircbotx.hooks.ListenerAdapter;
import org.pircbotx.hooks.events.MessageEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import ru.bvn13.jircbot.bot.ImprovedListenerAdapter;
import ru.bvn13.jircbot.documentation.DescriptionProvided;
import ru.bvn13.jircbot.documentation.DocumentationProvider;
import ru.bvn13.jircbot.documentation.ListenerDescription;
@ -11,7 +12,7 @@ import ru.bvn13.jircbot.documentation.ListenerDescription;
import static ru.bvn13.jircbot.documentation.ListenerDescription.CommandDescription;
@Component
public class PingPongListener extends ListenerAdapter implements DescriptionProvided {
public class PingPongListener extends ImprovedListenerAdapter implements DescriptionProvided {
private static final String COMMAND = "?ping";
@ -23,11 +24,7 @@ public class PingPongListener extends ListenerAdapter implements DescriptionProv
return;
}
if (!event.getMessage().startsWith(COMMAND)) {
return;
}
event.respond("pong!");
isApplicable(event, COMMAND, message -> event.respond("pong!"));
}

View File

@ -60,7 +60,7 @@ public class RegexCheckerListener extends ImprovedListenerAdapter implements Des
return;
}
if (!event.getMessage().startsWith(COMMAND)) {
if (!isApplicable(event, COMMAND)) {
return;
}

View File

@ -59,7 +59,7 @@ public class StatisticsListener extends ImprovedListenerAdapter implements Descr
return;
}
String commands[] = event.getMessage().toLowerCase().split(" ");
String[] commands = event.getMessage().toLowerCase().split(" ");
if (commands.length > 3) {
sendHelp(event);