Merge branch 'develop'

# Conflicts:
#	pom.xml
pull/6/head
bvn13 2019-03-10 16:46:45 +03:00
commit 1f4bec7287
25 changed files with 215 additions and 40 deletions

14
pom.xml
View File

@ -6,19 +6,19 @@
<groupId>ru.bvn13</groupId>
<artifactId>jircbot</artifactId>
<version>2.0.8</version>
<version>${bot.version}</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.6.RELEASE</version>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<bot.version>2.0.7</bot.version>
<bot.version>2.0.8</bot.version>
<java.version>1.8</java.version>
@ -74,10 +74,7 @@
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<!-- Dependencies for Database, Hibernate and ORM -->
<dependency>
@ -87,10 +84,12 @@
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.7.6</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
@ -111,6 +110,7 @@
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>5.1.0.Final</version>
</dependency>

View File

@ -3,17 +3,11 @@ package ru.bvn13.jircbot;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import ru.bvn13.jircbot.bot.JircBot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@EnableAutoConfiguration//(exclude={DataSourceAutoConfiguration.class})
@ComponentScan("ru.bvn13.jircbot")
public class MainApp {
private static final Logger logger = LoggerFactory.getLogger(MainApp.class);

View File

@ -91,6 +91,9 @@ public class JircBot extends ListenerAdapter {
@Autowired
private GoogleSearchListener googleSearchListener;
@Autowired
private DuckDuckGoSearchListener duckDuckGoSearchListener;
@Autowired
private LoggerListener loggerListener;
@ -159,7 +162,8 @@ public class JircBot extends ListenerAdapter {
.addListener(linkPreviewListener)
.addListener(helloOnJoinListener)
.addListener(grammarCorrectorListener)
.addListener(googleSearchListener)
//.addListener(googleSearchListener)
.addListener(duckDuckGoSearchListener)
.addListener(loggerListener)
// not tested

View File

@ -115,6 +115,8 @@ public class AdminListener extends ImprovedListenerAdapter implements Descriptio
@Override
public void onJoin(JoinEvent event) throws Exception {
super.onJoin(event);
if (event.getChannel().getName().startsWith("#")) {
if (event.getUser().getNick().equals(event.getBot().getNick())) {
event.getBot().sendRaw().rawLineNow("MODE " + event.getBot().getUserBot().getNick() + " +B");
@ -129,6 +131,8 @@ public class AdminListener extends ImprovedListenerAdapter implements Descriptio
@Override
public void onMessage(MessageEvent event) throws Exception {
super.onMessage(event);
Config config = getBotConfig(event);
if (config == null) {
return;
@ -187,6 +191,8 @@ public class AdminListener extends ImprovedListenerAdapter implements Descriptio
@Override
public void onPrivateMessage(PrivateMessageEvent event) throws Exception {
super.onPrivateMessage(event);
Config config = getBotConfig(event);
if (config == null) {
return;

View File

@ -27,6 +27,8 @@ public class AutoRejoinListener extends ImprovedListenerAdapter {
@Override
public void onKick(KickEvent event) throws Exception {
super.onKick(event);
if (!channelSettingsService.getChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), event.getChannel().getName()).getAutoRejoinEnabled()) {
return;
}
@ -42,6 +44,8 @@ public class AutoRejoinListener extends ImprovedListenerAdapter {
@Override
public void onJoin(JoinEvent event) throws Exception {
super.onJoin(event);
if (!channelSettingsService.getChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), event.getChannel().getName()).getAutoRejoinEnabled()) {
return;
}

View File

@ -53,12 +53,13 @@ public class BashOrgListener extends ImprovedListenerAdapter implements Descript
@Override
public void onMessage(final MessageEvent event) throws Exception {
super.onMessage(event);
if (!channelSettingsService.getChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), getChannelName(event)).getBashOrgEnabled()) {
return;
}
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}
@ -78,7 +79,7 @@ public class BashOrgListener extends ImprovedListenerAdapter implements Descript
private String getDataFromConnection(HttpURLConnection con) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream(), "windows-1251"));
String inputLine;
StringBuffer response = new StringBuffer();
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);

View File

@ -72,12 +72,13 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter implements
@Override
public void onMessage(final MessageEvent event) throws Exception {
super.onMessage(event);
if (!channelSettingsService.getChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), getChannelName(event)).getDeferredMessagesEnabled()) {
return;
}
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}
@ -144,7 +145,9 @@ public class DeferredMessagesListener extends ImprovedListenerAdapter implements
@Override
public void onJoin(JoinEvent event) throws Exception {
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
super.onJoin(event);
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -0,0 +1,80 @@
package ru.bvn13.jircbot.listeners;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
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.bot.JircBot;
import ru.bvn13.jircbot.database.services.ChannelSettingsService;
import ru.bvn13.jircbot.services.InternetAccessor;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
@Component
public class DuckDuckGoSearchListener extends ImprovedListenerAdapter {
private static final String COMMAND = "?s";
@Autowired
private InternetAccessor internetAccessor;
@Autowired
private ChannelSettingsService channelSettingsService;
@Override
public void onMessage(MessageEvent event) throws Exception {
super.onMessage(event);
if (!channelSettingsService.getChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), this.getChannelName(event)).getGoogleSearchEnabled()) {
return;
}
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}
if (!event.getMessage().startsWith(COMMAND)) {
return;
}
String message = event.getMessage().replace(COMMAND, "").trim();
String result = search(message);
event.respond(result);
}
private String search(String phrase) throws Exception {
String encodedPhrase = URLEncoder.encode(phrase.replaceAll(" ", "+"), "utf-8");
//String link = "https://duckduckgo.com/?q="+encodedPhrase;
//String queryPage = internetAccessor.retrieveContentByLink(link);
String link = "https://duckduckgo.com/lite/";
Map<String, String> data = new HashMap<>();
data.put("q", phrase);
String queryPage = internetAccessor.sendPost(link, data);
Document doc = Jsoup.parse(queryPage);
Element linkElement = doc.select("a.result-link").first();
if (linkElement != null) {
String linkUrl = linkElement.attr("href");
Element descrElement = doc.select(".result-snippet").first();
String description = descrElement.text();
return String.format("%s / %s", URLDecoder.decode(linkUrl, "utf-8"), description);
} else {
return "not found";
}
}
}

View File

@ -25,7 +25,9 @@ public class GoogleDoodleListener extends ListenerAdapter {
@Override
public void onGenericMessage(final GenericMessageEvent event) throws Exception {
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
super.onGenericMessage(event);
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -60,11 +60,13 @@ public class GoogleSearchListener extends ImprovedListenerAdapter implements Des
@Override
public void onMessage(final MessageEvent event) throws Exception {
super.onMessage(event);
if (!channelSettingsService.getChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), this.getChannelName(event)).getGoogleSearchEnabled()) {
return;
}
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -38,11 +38,13 @@ public class GrammarCorrectorListener extends ImprovedListenerAdapter {
@Override
public void onMessage(final MessageEvent event) throws Exception {
super.onMessage(event);
if (!channelSettingsService.getChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), this.getChannelName(event)).getGrammarCorrectionEnabled()) {
return;
}
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -26,13 +26,15 @@ public class HelloOnJoinListener extends ImprovedListenerAdapter implements Desc
@Override
public void onJoin(final JoinEvent event) throws Exception {
super.onJoin(event);
ChannelSettings channelSettings = channelSettingsService.getChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), getChannelName(event));
if (!channelSettings.getHelloOnJoinEnabled()) {
return;
}
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -50,11 +50,13 @@ public class LinkPreviewListener extends ImprovedListenerAdapter implements Desc
@Override
public void onMessage(final MessageEvent event) throws Exception {
super.onMessage(event);
if (!channelSettingsService.getChannelSettings(JircBot.extractServer(event.getBot().getServerHostname()), getChannelName(event)).getLinkPreviewEnabled()) {
return;
}
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -63,6 +63,8 @@ public class LoggerListener extends ImprovedListenerAdapter implements Descripti
@Override
public void onJoin(JoinEvent event) throws Exception {
super.onJoin(event);
if (!isEnabled(event)) return;
synchronized (onlineUsers) {
@ -82,6 +84,8 @@ public class LoggerListener extends ImprovedListenerAdapter implements Descripti
@Override
public void onPart(PartEvent event) throws Exception {
super.onPart(event);
if (!isEnabled(event)) return;
log(event.getBot().getServerHostname(), event.getChannel().getName(), "User " + event.getUser().getNick() + " quit (" + event.getReason() + ")");
synchronized (onlineUsers) {
@ -96,6 +100,8 @@ public class LoggerListener extends ImprovedListenerAdapter implements Descripti
@Override
public void onQuit(QuitEvent event) throws Exception {
super.onQuit(event);
List<String> channels = new ArrayList<>();
synchronized (onlineUsers) {
for (String channelName : onlineUsers.keySet()) {
@ -112,6 +118,8 @@ public class LoggerListener extends ImprovedListenerAdapter implements Descripti
@Override
public void onKick(KickEvent event) throws Exception {
super.onKick(event);
if (!isEnabled(event)) return;
if (onlineUsers.containsKey(event.getChannel().getName())) {
@ -122,12 +130,16 @@ public class LoggerListener extends ImprovedListenerAdapter implements Descripti
@Override
public void onMessage(MessageEvent event) throws Exception {
super.onMessage(event);
if (!isEnabled(event)) return;
log(event.getBot().getServerHostname(), event.getChannel().getName(), event.getUser().getNick(), event.getMessage());
}
@Override
public void onNickChange(NickChangeEvent event) throws Exception {
super.onNickChange(event);
List<String> channels = new ArrayList<>();
for (String channelName : onlineUsers.keySet()) {
Set<String> users = onlineUsers.get(channelName);
@ -142,24 +154,32 @@ public class LoggerListener extends ImprovedListenerAdapter implements Descripti
@Override
public void onNotice(NoticeEvent event) throws Exception {
super.onNotice(event);
if (!isEnabled(event)) return;
log(event.getBot().getServerHostname(), event.getChannel().getName(), event.getMessage());
}
@Override
public void onTopic(TopicEvent event) throws Exception {
super.onTopic(event);
if (!isEnabled(event)) return;
log(event.getBot().getServerHostname(), event.getChannel().getName(), ""+event.getUser().getNick()+" set topic: "+event.getTopic());
}
@Override
public void onAction(ActionEvent event) throws Exception {
super.onAction(event);
if (!isEnabled(event)) return;
log(event.getBot().getServerHostname(), event.getChannel().getName(), "*"+event.getUser().getNick()+" "+event.getAction());
}
@Override
public void onOutput(OutputEvent event) throws Exception {
super.onOutput(event);
if (!isEnabled(JircBot.extractServer(event.getBot().getServerHostname()), event.getLineParsed().get(1))) return;
switch (event.getLineParsed().get(0)) {
case "PRIVMSG" :

View File

@ -17,8 +17,9 @@ public class PingPongListener extends ListenerAdapter implements DescriptionProv
@Override
public void onMessage(final MessageEvent event) throws Exception {
super.onMessage(event);
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -49,6 +49,7 @@ public class RegexCheckerListener extends ImprovedListenerAdapter implements Des
@Override
public void onMessage(final MessageEvent event) throws Exception {
super.onMessage(event);
//TODO: rework with FSM
@ -56,7 +57,7 @@ public class RegexCheckerListener extends ImprovedListenerAdapter implements Des
return;
}
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -54,6 +54,7 @@ public class StatisticsListener extends ImprovedListenerAdapter implements Descr
@Override
public void onMessage(MessageEvent event) throws Exception {
super.onMessage(event);
if (!event.getMessage().startsWith(COMMAND)) {
return;

View File

@ -28,8 +28,9 @@ public class YandexSearchListener extends ListenerAdapter {
@Override
public void onGenericMessage(final GenericMessageEvent event) throws Exception {
super.onGenericMessage(event);
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -15,7 +15,7 @@ public class AdviceEngine {
private static final String urlAdvice = "http://fucking-great-advice.ru/api/random";
public static String getAdvice() throws Exception {
StringBuffer content = new StringBuffer();
StringBuilder content = new StringBuilder();
try {
URL url = new URL(urlAdvice);
HttpURLConnection con = (HttpURLConnection) url.openConnection();

View File

@ -38,7 +38,7 @@ public class AdviceListener extends ImprovedListenerAdapter {
return;
}
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -27,7 +27,7 @@ public class CalculatorListener extends ImprovedListenerAdapter {
return;
}
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -22,7 +22,7 @@ public class QuizEngine {
private String getDataFromConnection(HttpsURLConnection con) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);

View File

@ -31,7 +31,7 @@ public class QuizListener extends ImprovedListenerAdapter {
return;
}
if (event.getUser().getUserId().equals(event.getBot().getUserBot().getUserId())) {
if (event.getUser() != null && event.getBot().getUserBot().getNick().equals(event.getUser().getNick())) {
return;
}

View File

@ -1,14 +1,17 @@
package ru.bvn13.jircbot.services;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;
import java.io.OutputStream;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.StringJoiner;
import java.util.stream.Collectors;
/**
* Created by bvn13 on 06.02.2018.
@ -38,7 +41,7 @@ public class InternetAccessor {
private String getLastUrl_http(String link) {
String url = ""+link;
StringBuffer content = new StringBuffer();
StringBuilder content = new StringBuilder();
URL resourceUrl, base, next;
HttpURLConnection conn;
String location = link;
@ -84,7 +87,7 @@ public class InternetAccessor {
private String getLastUrl_https(String link) {
String url = ""+link;
StringBuffer content = new StringBuffer();
StringBuilder content = new StringBuilder();
URL resourceUrl, base, next;
HttpsURLConnection conn;
String location = link;
@ -130,7 +133,7 @@ public class InternetAccessor {
private String retrieveContentByLinkWithEncoding_http(String link, String encoding) {
String url = ""+link;
StringBuffer content = new StringBuffer();
StringBuilder content = new StringBuilder();
URL resourceUrl, base, next;
HttpURLConnection conn;
String location = null;
@ -186,7 +189,7 @@ public class InternetAccessor {
private String retrieveContentByLinkWithEncoding_https(String link, String encoding) {
String url = ""+link;
StringBuffer content = new StringBuffer();
StringBuilder content = new StringBuilder();
URL resourceUrl, base, next;
HttpsURLConnection conn;
String location = null;
@ -240,4 +243,49 @@ public class InternetAccessor {
return "";
}
public String sendPost(String link, Map<String, String> data) throws Exception {
URL url = new URL(link);
URLConnection con = url.openConnection();
HttpURLConnection http = (HttpURLConnection)con;
http.setRequestMethod("POST"); // PUT is another valid option
http.setDoOutput(true);
data.put("kl", "us-en");
http.setRequestProperty("user-agent", "Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36");
http.setRequestProperty("origin", "https://duckduckgo.com");
http.setRequestProperty("referer", "https://duckduckgo.com/");
StringJoiner sj = new StringJoiner("&");
for(Map.Entry<String,String> entry : data.entrySet()) {
sj.add(URLEncoder.encode(entry.getKey(), "UTF-8") + "=" + URLEncoder.encode(entry.getValue(), "UTF-8"));
}
byte[] out = sj.toString().getBytes(StandardCharsets.UTF_8);
int length = out.length;
http.setFixedLengthStreamingMode(length);
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
http.connect();
try(OutputStream os = http.getOutputStream()) {
os.write(out);
}
int responseCode = http.getResponseCode();
if (responseCode >= 200 && responseCode < 400) {
StringBuilder answer = new StringBuilder();
BufferedReader in = new BufferedReader(new InputStreamReader(http.getInputStream(), "UTF-8"));
String inputLine;
while ((inputLine = in.readLine()) != null) {
answer.append(inputLine);
}
in.close();
http.disconnect();
return answer.toString();
} else {
return http.getResponseMessage();
}
}
}

View File

@ -15,7 +15,8 @@
<logger name="ru.bvn13.jircbot" level="WARN"/>
<logger name="ru.bvn13.jircbot.listeners" level="ALL"/>
<logger name="ru.bvn13.jircbot.listeners.calculator" level="ALL"/>
<!--<logger name="ru.bvn13.jircbot.listeners.calculator" level="ALL"/>-->
<!--<logger name="ru.bvn13.jircbot.listeners.DuckDuckGoSearchListener" level="ALL"/>-->
<logger name="org.pircbotx" level="WARN"/>
<!--<logger name="org.hibernate.SQL" level="WARN"/>-->