implemented autorejoin mechanism. in case of bot was kicked

pull/2/head
Vyacheslav N. Boyko 2018-01-27 09:44:15 +03:00
parent 9717263dc0
commit cc8cf8cb42
7 changed files with 103 additions and 40 deletions

View File

@ -5,7 +5,7 @@ After=network.target
[Service]
User=bvn13
WorkingDirectory=/srv/jircbot
ExecStart=/usr/bin/java -jar /srv/jircbot/jircbot-1.0.4.jar
ExecStart=/usr/bin/java -jar /srv/jircbot/jircbot-1.0.5.jar
SuccessExitStatus=143
[Install]

View File

@ -6,7 +6,7 @@
<groupId>ru.bvn13</groupId>
<artifactId>jircbot</artifactId>
<version>1.0.4</version>
<version>1.0.5</version>
<packaging>jar</packaging>

View File

@ -13,6 +13,7 @@ import org.springframework.stereotype.Component;
import ru.bvn13.jircbot.Services.YandexSearchService;
import ru.bvn13.jircbot.config.JircBotConfiguration;
import ru.bvn13.jircbot.listeners.*;
import ru.bvn13.jircbot.listeners.advices.AdviceListener;
import ru.bvn13.jircbot.listeners.calculator.CalculatorListener;
import ru.bvn13.jircbot.listeners.quiz.QuizListener;
@ -72,8 +73,9 @@ public class JircBot extends ListenerAdapter {
.addListener(new AdviceListener())
//.addListener(new LinkPreviewListener())
//.addListener(new HelloOnJoinListener())
.addListener(new BashOrgListener())
.addListener(new QuizListener())
.addListener(new BashOrgListener())
.addListener(new AutoRejoinListener())
.setServers(servers)
.setAutoReconnect(true)
//.addAutoJoinChannel(c.getChannelName()) //Join the official #pircbotx channel

View File

@ -0,0 +1,38 @@
package ru.bvn13.jircbot.listeners;
import org.pircbotx.hooks.ListenerAdapter;
import org.pircbotx.hooks.events.JoinEvent;
import org.pircbotx.hooks.events.KickEvent;
import org.pircbotx.hooks.events.MessageEvent;
import org.pircbotx.hooks.types.GenericMessageEvent;
import ru.bvn13.jircbot.listeners.advices.AdviceEngine;
/**
* Created by bvn13 on 27.01.2018.
*/
public class AutoRejoinListener extends ListenerAdapter {
private Boolean wasKicked = false;
private String offender = "";
@Override
public void onKick(KickEvent event) throws Exception {
if (event.getRecipient().getUserId().equals(event.getBot().getUserBot().getUserId())) {
wasKicked = true;
offender = event.getUser().getNick();
event.getBot().sendIRC().joinChannel(event.getChannel().getName());
}
}
@Override
public void onJoin(JoinEvent event) throws Exception {
if (wasKicked) {
wasKicked = false;
event.getBot().sendIRC().notice(event.getChannel().getName(), ""+offender+", "+ AdviceEngine.getAdvice());
}
}
}

View File

@ -0,0 +1,50 @@
package ru.bvn13.jircbot.listeners.advices;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* Created by bvn13 on 27.01.2018.
*/
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();
try {
URL url = new URL(urlAdvice);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
int status = con.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
con.disconnect();
} catch (Exception e) {
e.printStackTrace();
throw new Exception("не могу получить совет для тебя");
}
try {
JSONParser jsonParser = new JSONParser();
JSONObject json = (JSONObject) jsonParser.parse(content.toString());
return (String) json.get("text");
} catch (Exception e) {
e.printStackTrace();
throw new Exception("почини бота, блеать!");
}
}
}

View File

@ -1,4 +1,4 @@
package ru.bvn13.jircbot.listeners;
package ru.bvn13.jircbot.listeners.advices;
import com.google.common.collect.ImmutableSortedSet;
import org.json.simple.JSONObject;
@ -22,7 +22,6 @@ public class AdviceListener extends ListenerAdapter {
private static final String COMMAND = "?advice";
private static final String urlAdvice = "http://fucking-great-advice.ru/api/random";
@Override
public void onGenericMessage(final GenericMessageEvent event) throws Exception {
@ -37,7 +36,7 @@ public class AdviceListener extends ListenerAdapter {
if (event.getMessage().equalsIgnoreCase(COMMAND)) {
try {
String advice = this.getAdvice();
String advice = AdviceEngine.getAdvice();
event.respond(advice);
} catch (Exception e) {
event.respond(e.getMessage());
@ -57,7 +56,7 @@ public class AdviceListener extends ListenerAdapter {
}
if (this.userIsInList(users, userName)) {
try {
String advice = this.getAdvice();
String advice = AdviceEngine.getAdvice();
String response = "" + userName + ", " + advice;
if (event instanceof MessageEvent) {
((MessageEvent) event).respondChannel(response);
@ -86,37 +85,6 @@ public class AdviceListener extends ListenerAdapter {
return isOnline.get();
}
private String getAdvice() throws Exception {
StringBuffer content = new StringBuffer();
try {
URL url = new URL(urlAdvice);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
int status = con.getResponseCode();
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();
con.disconnect();
} catch (Exception e) {
e.printStackTrace();
throw new Exception("не могу получить совет для тебя");
}
try {
JSONParser jsonParser = new JSONParser();
JSONObject json = (JSONObject) jsonParser.parse(content.toString());
return (String) json.get("text");
} catch (Exception e) {
e.printStackTrace();
throw new Exception("почини бота, блеать!");
}
}
}

View File

@ -3,6 +3,7 @@ package ru.bvn13.jircbot.listeners.calculator;
import lombok.Data;
import net.objecthunter.exp4j.Expression;
import net.objecthunter.exp4j.ExpressionBuilder;
import org.pircbotx.hooks.events.MessageEvent;
import org.pircbotx.hooks.types.GenericMessageEvent;
import ru.bvn13.fsm.Condition;
import ru.bvn13.fsm.Exceptions.FSMException;
@ -204,7 +205,7 @@ public class CalculatorDialog extends FSM {
try {
exp = expressionBuilder.build();
} catch (Exception e) {
event.respond("ERROR: "+e.getMessage());
this.sendNotice("ERROR: "+e.getMessage());
return;
}
}
@ -214,7 +215,7 @@ public class CalculatorDialog extends FSM {
expressionBuilder = null;
exp = null;
} catch (Exception e) {
event.respond("ERROR: "+e.getMessage());
this.sendNotice("ERROR: "+e.getMessage());
if (!this.getPreviousState().getName().equalsIgnoreCase("init")) {
try {
this.prev();
@ -254,6 +255,7 @@ public class CalculatorDialog extends FSM {
this.expression = "";
this.init();
} catch (NotInitedException e) {
this.sendNotice("ERROR: "+e.getMessage());
e.printStackTrace();
}
} else {
@ -305,4 +307,7 @@ public class CalculatorDialog extends FSM {
command.equalsIgnoreCase("done");
}
private void sendNotice(String str) {
event.getBot().sendIRC().notice(((MessageEvent) event).getChannel().getName(), str);
}
}