v0.4 release
This commit is contained in:
parent
cd1e70838c
commit
9fe3b5e11b
16 changed files with 223 additions and 51 deletions
25
ConfigurationExamples/mongoDriverExample.config
Normal file
25
ConfigurationExamples/mongoDriverExample.config
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"serverName": "irc.tomsk.net",
|
||||||
|
"serverPort": 6666,
|
||||||
|
"serverPass": "",
|
||||||
|
"channels": [
|
||||||
|
"#lpr"
|
||||||
|
],
|
||||||
|
"userNick": "InnaBot",
|
||||||
|
"userIdent": "rusnet",
|
||||||
|
"userRealName": "IRCBot",
|
||||||
|
"userNickPass": "",
|
||||||
|
"userNickAuthStyle": "rusnet",
|
||||||
|
"userMode": "x",
|
||||||
|
"rejoinOnKick": true,
|
||||||
|
"logDriver": "MongoDB",
|
||||||
|
"logDriverParameters": [
|
||||||
|
"192.168.1.186:27017",
|
||||||
|
"irc",
|
||||||
|
"mongo_user_name",
|
||||||
|
"mongo_password"
|
||||||
|
],
|
||||||
|
"botAdministratorPassword": "very_secret_password",
|
||||||
|
"chanelConfigurationsPath": "/home/USERNAME/TSV_CONF_FOLDER/",
|
||||||
|
"applicationLogDir": "/tmp/appLogs"
|
||||||
|
}
|
|
@ -16,6 +16,7 @@ Another one IRC bot in deep-deep beta.
|
||||||
"logDriver" could be "Files", "SQLite" or "Zero"
|
"logDriver" could be "Files", "SQLite" or "Zero"
|
||||||
* Files - log everything to files using /yourPathSet/serverName/#chanelName_YYYY-MM-DD.txt format.
|
* Files - log everything to files using /yourPathSet/serverName/#chanelName_YYYY-MM-DD.txt format.
|
||||||
* SQLite - use /yourPathSet/server.db (or /yourPathSet/yourFileName.db) sqlite file.
|
* SQLite - use /yourPathSet/server.db (or /yourPathSet/yourFileName.db) sqlite file.
|
||||||
|
* MongoDB - write files to MongoDB. See ConfigurationExamples folder.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
Source code spreads under the GNU General Public License v3 or higher. Please see LICENSE file.
|
Source code spreads under the GNU General Public License v3 or higher. Please see LICENSE file.
|
||||||
|
@ -31,7 +32,7 @@ Used libraries:
|
||||||
- [ ] Code refactoring
|
- [ ] Code refactoring
|
||||||
- [ ] QA: good regression testing
|
- [ ] QA: good regression testing
|
||||||
- [x] CI/CD Jenkins
|
- [x] CI/CD Jenkins
|
||||||
- [ ] Suppress messages from server or handle them separately from selected worker
|
- [x] Suppress messages from server or handle them separately from selected worker
|
||||||
- [ ] Logs backend workers as threads (SQLite and co. are too slow)
|
- [ ] Logs backend workers as threads (SQLite and co. are too slow)
|
||||||
- [x] Logs backend worker for mongodb
|
- [x] Logs backend worker for mongodb
|
||||||
- [ ] Logs backend worker for redis/redis node
|
- [ ] Logs backend worker for redis/redis node
|
||||||
|
@ -44,4 +45,4 @@ Used libraries:
|
||||||
- [ ] ncurses-like or/and GUI configuration files (server/chanel setting) editor
|
- [ ] ncurses-like or/and GUI configuration files (server/chanel setting) editor
|
||||||
- [ ] CTCP support for using @ 'ChanelCommander'
|
- [ ] CTCP support for using @ 'ChanelCommander'
|
||||||
- [ ] Access roles support (i.e. delegating some rights to another users)
|
- [ ] Access roles support (i.e. delegating some rights to another users)
|
||||||
- [ ] Logs for application
|
- [ ] Logs for application (partly implemented)
|
|
@ -16,6 +16,7 @@ public class StorageFile {
|
||||||
private final String[] logDriverParameters;
|
private final String[] logDriverParameters;
|
||||||
private final String botAdministratorPassword;
|
private final String botAdministratorPassword;
|
||||||
private final String chanelConfigurationsPath;
|
private final String chanelConfigurationsPath;
|
||||||
|
private final String applicationLogDir;
|
||||||
|
|
||||||
public String getServerName() { return serverName; }
|
public String getServerName() { return serverName; }
|
||||||
public int getServerPort() { return serverPort; }
|
public int getServerPort() { return serverPort; }
|
||||||
|
@ -32,6 +33,7 @@ public class StorageFile {
|
||||||
public String[] getLogDriverParameters() { return logDriverParameters; }
|
public String[] getLogDriverParameters() { return logDriverParameters; }
|
||||||
public String getBotAdministratorPassword() { return botAdministratorPassword; }
|
public String getBotAdministratorPassword() { return botAdministratorPassword; }
|
||||||
public String getChanelConfigurationsPath() { return chanelConfigurationsPath; }
|
public String getChanelConfigurationsPath() { return chanelConfigurationsPath; }
|
||||||
|
public String getApplicationLogDir() { return applicationLogDir; }
|
||||||
|
|
||||||
public StorageFile(String serverName,
|
public StorageFile(String serverName,
|
||||||
int serverPort,
|
int serverPort,
|
||||||
|
@ -47,7 +49,8 @@ public class StorageFile {
|
||||||
String logDriver,
|
String logDriver,
|
||||||
String[] logDriverParameters,
|
String[] logDriverParameters,
|
||||||
String botAdministratorPassword,
|
String botAdministratorPassword,
|
||||||
String chanelConfigurationsPath){
|
String chanelConfigurationsPath,
|
||||||
|
String applicationLogDir){
|
||||||
this.serverName = serverName;
|
this.serverName = serverName;
|
||||||
this.serverPort = serverPort;
|
this.serverPort = serverPort;
|
||||||
this.serverPass = serverPass;
|
this.serverPass = serverPass;
|
||||||
|
@ -63,5 +66,6 @@ public class StorageFile {
|
||||||
this.logDriverParameters = logDriverParameters;
|
this.logDriverParameters = logDriverParameters;
|
||||||
this.botAdministratorPassword = botAdministratorPassword;
|
this.botAdministratorPassword = botAdministratorPassword;
|
||||||
this.chanelConfigurationsPath = chanelConfigurationsPath;
|
this.chanelConfigurationsPath = chanelConfigurationsPath;
|
||||||
|
this.applicationLogDir = applicationLogDir;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -78,7 +78,8 @@ public class StorageReader {
|
||||||
"Files",
|
"Files",
|
||||||
new String[] {System.getProperty("user.home")},
|
new String[] {System.getProperty("user.home")},
|
||||||
"pswd",
|
"pswd",
|
||||||
System.getProperty("user.home")
|
System.getProperty("user.home"),
|
||||||
|
"/var/logs/"
|
||||||
);
|
);
|
||||||
|
|
||||||
Gson writingStorageObject = new GsonBuilder().setPrettyPrinting().create();
|
Gson writingStorageObject = new GsonBuilder().setPrettyPrinting().create();
|
||||||
|
|
|
@ -4,17 +4,20 @@ import java.util.HashMap;
|
||||||
|
|
||||||
public class BotDriver {
|
public class BotDriver {
|
||||||
private static HashMap<String, String[][]> serverDriver = new HashMap<>();
|
private static HashMap<String, String[][]> serverDriver = new HashMap<>();
|
||||||
|
|
||||||
|
private static HashMap<String, BotSystemWorker> systemLogWorkerMap = new HashMap<>();
|
||||||
/**
|
/**
|
||||||
* Define driver for desired server
|
* Define driver for desired server
|
||||||
* */
|
* */
|
||||||
// TODO: add proxy worker for using with multiple drivers
|
// TODO: add proxy worker for using with multiple drivers
|
||||||
public static synchronized boolean setLogDriver(String serverName, String driver, String[] driverParams){
|
public static synchronized boolean setLogDriver(String serverName, String driver, String[] driverParams, String applicationLogDir){
|
||||||
if (!driver.isEmpty() && driverParams != null && driverParams.length > 0 && driverParams[0] != null && !driverParams[0].isEmpty()) {
|
if (!driver.isEmpty() && driverParams != null && driverParams.length > 0 && driverParams[0] != null && !driverParams[0].isEmpty()) {
|
||||||
String[][] drvAndParams = {
|
String[][] drvAndParams = {
|
||||||
{driver},
|
{driver},
|
||||||
driverParams
|
driverParams
|
||||||
};
|
};
|
||||||
serverDriver.put(serverName, drvAndParams);
|
serverDriver.put(serverName, drvAndParams);
|
||||||
|
systemLogWorkerMap.put(serverName, new BotSystemWorker(serverName, applicationLogDir));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -45,9 +48,12 @@ public class BotDriver {
|
||||||
return new BotZeroWorker();
|
return new BotZeroWorker();
|
||||||
}
|
}
|
||||||
// If channel found that it's impossible to use defined worker from user settings and asking for use ZeroWorker
|
// If channel found that it's impossible to use defined worker from user settings and asking for use ZeroWorker
|
||||||
public static synchronized Worker getZeroWorker(){
|
public static synchronized Worker getZeroWorker(){ return new BotZeroWorker(); }
|
||||||
return new BotZeroWorker();
|
|
||||||
|
public static synchronized BotSystemWorker getSystemWorker(String serverName){
|
||||||
|
return systemLogWorkerMap.get(serverName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Worker validateConstancy(Worker worker, String srv, String chan){ // synchronized?
|
private static Worker validateConstancy(Worker worker, String srv, String chan){ // synchronized?
|
||||||
if (worker.isConsistent()){
|
if (worker.isConsistent()){
|
||||||
return worker;
|
return worker;
|
||||||
|
|
|
@ -40,7 +40,7 @@ public class BotFilesWorker implements Worker {
|
||||||
return; // consistent = false;
|
return; // consistent = false;
|
||||||
}
|
}
|
||||||
if (!dir.exists()) {
|
if (!dir.exists()) {
|
||||||
System.out.println("BotFilesWorker (@"+server+")->constructor() failed:\n\tUnable to create directory to store files: " + dirLocation); //TODO: notify requester
|
System.out.println("BotFilesWorker (@"+server+")->constructor() failed:\n\tUnable to create directory to store files: " + dirLocation);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,8 +25,6 @@ public class BotMongoWorker implements Worker { //TODO consi
|
||||||
private MongoCollection<Document> collection;
|
private MongoCollection<Document> collection;
|
||||||
private boolean consistent = false;
|
private boolean consistent = false;
|
||||||
|
|
||||||
private boolean isItSystemThread = false;
|
|
||||||
|
|
||||||
public BotMongoWorker(String ircServer, String[] driverParameters, String channel){
|
public BotMongoWorker(String ircServer, String[] driverParameters, String channel){
|
||||||
this.ircServer = ircServer;
|
this.ircServer = ircServer;
|
||||||
|
|
||||||
|
@ -49,9 +47,6 @@ public class BotMongoWorker implements Worker { //TODO consi
|
||||||
else
|
else
|
||||||
return; // consistent = false
|
return; // consistent = false
|
||||||
|
|
||||||
if (channel.equals("system")) // Set ircServer variable only if it's 'system' log thread.
|
|
||||||
this.isItSystemThread = true;
|
|
||||||
|
|
||||||
if (!serversMap.containsKey(ircServer)){
|
if (!serversMap.containsKey(ircServer)){
|
||||||
/* // Leave this validations for better times.
|
/* // Leave this validations for better times.
|
||||||
CommandListener mongoCommandListener = new CommandListener() {
|
CommandListener mongoCommandListener = new CommandListener() {
|
||||||
|
@ -132,6 +127,25 @@ public class BotMongoWorker implements Worker { //TODO consi
|
||||||
consistent = false;
|
consistent = false;
|
||||||
// no need to close() obviously
|
// no need to close() obviously
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (consistent){
|
||||||
|
ThingToCloseOnDie thing = new ThingToCloseOnDie() {
|
||||||
|
@Override
|
||||||
|
public void die() {
|
||||||
|
if (serversMap.containsKey(ircServer)) {
|
||||||
|
try {
|
||||||
|
serversMap.get(ircServer).close();
|
||||||
|
serversMap.remove(ircServer);
|
||||||
|
}catch (Exception e){
|
||||||
|
System.out.println("ThingToCloseOnDie: something went wrong when tried to close MongoDB connection\t\n"+e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
BotDriver.getSystemWorker(ircServer).registerInSystemWorker(thing);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -194,13 +208,6 @@ public class BotMongoWorker implements Worker { //TODO consi
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
// If ircServer != null then it's system thread and when it's interrupted we have to close connection to DB for used server
|
|
||||||
// And remove it from HashMap
|
|
||||||
if (this.isItSystemThread && serversMap.containsKey(ircServer)) {
|
|
||||||
serversMap.get(ircServer).close();
|
|
||||||
serversMap.remove(ircServer);
|
|
||||||
//System.out.println("BotMongoWorker (@"+this.ircServer+")->close()"); // expected exit
|
|
||||||
}
|
|
||||||
consistent = false;
|
consistent = false;
|
||||||
}
|
}
|
||||||
private void close(String server) {
|
private void close(String server) {
|
||||||
|
|
106
src/main/java/InnaIrcBot/LogDriver/BotSystemWorker.java
Normal file
106
src/main/java/InnaIrcBot/LogDriver/BotSystemWorker.java
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
package InnaIrcBot.LogDriver;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
public class BotSystemWorker implements SystemWorker{
|
||||||
|
|
||||||
|
private FileWriter fileWriter;
|
||||||
|
private DateTimeFormatter dateFormat;
|
||||||
|
private ThingToCloseOnDie thingToCloseOnDie; // call .die() method of this classes when this (system log class) dies.
|
||||||
|
|
||||||
|
String ircServer;
|
||||||
|
|
||||||
|
private boolean consistent = false;
|
||||||
|
|
||||||
|
public BotSystemWorker(String ircServer, String appLogDir){
|
||||||
|
this.ircServer = ircServer;
|
||||||
|
this.dateFormat = DateTimeFormatter.ofPattern("HH:mm:ss");
|
||||||
|
|
||||||
|
|
||||||
|
if (appLogDir.isEmpty()) {
|
||||||
|
if (System.getProperty("os.name").toLowerCase().startsWith("win")) {
|
||||||
|
appLogDir = System.getProperty("user.home")+ File.separator
|
||||||
|
+"AppData"+File.separator
|
||||||
|
+"Local"+File.separator
|
||||||
|
+"InnaIrcBot"+File.separator;
|
||||||
|
} else {
|
||||||
|
appLogDir = "/var/log/innaircbot/";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!appLogDir.endsWith(File.separator))
|
||||||
|
appLogDir = appLogDir+File.separator;
|
||||||
|
|
||||||
|
appLogDir = appLogDir+ircServer;
|
||||||
|
File logFile = new File(appLogDir);
|
||||||
|
try {
|
||||||
|
logFile.getParentFile().mkdirs();
|
||||||
|
} catch (SecurityException e){
|
||||||
|
System.out.println("BotSystemWorker (@"+ircServer+")->constructor() failed. Unable to create sub-directory(-ies) to store logs file ("+appLogDir+"):\n\t"+e);
|
||||||
|
return; // Consistent = false
|
||||||
|
}
|
||||||
|
if (!logFile.getParentFile().exists()) {
|
||||||
|
System.out.println("BotSystemWorker (@"+ircServer+")->constructor() failed:\n\tUnable to create sub-directory(-ies) to store log file: " + appLogDir);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
this.fileWriter = new FileWriter(logFile, true);
|
||||||
|
consistent = true;
|
||||||
|
} catch (IOException oie){
|
||||||
|
System.out.println("BotSystemWorker (@"+ircServer+")->constructor() failed:\n\tUnable to open file to store logs: " + appLogDir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String genDate(){
|
||||||
|
return "["+ LocalTime.now().format(dateFormat)+"] ";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void logAdd(String event, String initiatorArg, String messageArg) {
|
||||||
|
if (consistent) {
|
||||||
|
try {
|
||||||
|
fileWriter.write(genDate() + event + " " + initiatorArg + " " + messageArg + "\n");
|
||||||
|
fileWriter.flush();
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.println("BotSystemWorker (@" + ircServer + ")->logAdd() failed\n\tUnable to write logs of because of internal failure in LocalTime representation.");
|
||||||
|
//this.close();
|
||||||
|
consistent = false;
|
||||||
|
} catch (NullPointerException npe) {
|
||||||
|
System.out.println("BotSystemWorker (@" + ircServer + ")->logAdd() failed\n\tUnable to write logs of because file descriptor already closed/was not opened.");
|
||||||
|
consistent = false;
|
||||||
|
} catch (Exception unknowne) { // ??? No ideas. Just in case. Consider removing.
|
||||||
|
System.out.println("BotSystemWorker (@" + ircServer + ")->logAdd() failed\n\tUnable to write logs of because of exception:\n\t" + unknowne);
|
||||||
|
//this.close();
|
||||||
|
consistent = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
System.out.println(genDate() + event + " " + initiatorArg + " " + messageArg + "\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerInSystemWorker(ThingToCloseOnDie thing){
|
||||||
|
if (this.thingToCloseOnDie == null){ // only one needed
|
||||||
|
this.thingToCloseOnDie = thing;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() {
|
||||||
|
if (thingToCloseOnDie != null)
|
||||||
|
thingToCloseOnDie.die();
|
||||||
|
if (fileWriter != null) {
|
||||||
|
try {
|
||||||
|
fileWriter.close();
|
||||||
|
}
|
||||||
|
catch (java.io.IOException e){
|
||||||
|
System.out.println("BotSystemWorker (@"+ircServer+")->close() failed\n\tUnable to properly close logs file."); // Live with it.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
consistent = false;
|
||||||
|
}
|
||||||
|
}
|
12
src/main/java/InnaIrcBot/LogDriver/SystemWorker.java
Normal file
12
src/main/java/InnaIrcBot/LogDriver/SystemWorker.java
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
package InnaIrcBot.LogDriver;
|
||||||
|
|
||||||
|
public interface SystemWorker {
|
||||||
|
|
||||||
|
void registerInSystemWorker(ThingToCloseOnDie thing);
|
||||||
|
|
||||||
|
void logAdd(String event,
|
||||||
|
String initiatorArg,
|
||||||
|
String messageArg);
|
||||||
|
|
||||||
|
void close();
|
||||||
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
package InnaIrcBot.LogDriver;
|
||||||
|
|
||||||
|
public interface ThingToCloseOnDie {
|
||||||
|
void die();
|
||||||
|
}
|
|
@ -69,7 +69,7 @@ public class DataProvider implements Runnable {
|
||||||
|
|
||||||
public void run(){
|
public void run(){
|
||||||
if (!ableToRun || !this.initConnection(rawStreamReader)
|
if (!ableToRun || !this.initConnection(rawStreamReader)
|
||||||
|| !BotDriver.setLogDriver(serverName, configFile.getLogDriver(), configFile.getLogDriverParameters())) { //Prepare logDriver for using in threads.
|
|| !BotDriver.setLogDriver(serverName, configFile.getLogDriver(), configFile.getLogDriverParameters(), configFile.getApplicationLogDir())) { //Prepare logDriver for using in threads.
|
||||||
this.close();
|
this.close();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ import InnaIrcBot.Commanders.PrivateMsgCommander;
|
||||||
import InnaIrcBot.Config.StorageFile;
|
import InnaIrcBot.Config.StorageFile;
|
||||||
import InnaIrcBot.GlobalData;
|
import InnaIrcBot.GlobalData;
|
||||||
import InnaIrcBot.LogDriver.BotDriver;
|
import InnaIrcBot.LogDriver.BotDriver;
|
||||||
import InnaIrcBot.LogDriver.Worker;
|
import InnaIrcBot.LogDriver.BotSystemWorker;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
@ -18,7 +18,7 @@ import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class SystemConsumer implements Runnable{
|
public class SystemConsumer implements Runnable{
|
||||||
private BufferedReader reader;
|
private BufferedReader reader;
|
||||||
private Worker writerWorker;
|
private BotSystemWorker writerWorker;
|
||||||
private String nick;
|
private String nick;
|
||||||
private String serverName;
|
private String serverName;
|
||||||
private Map<String, PrintWriter> channelsMap;
|
private Map<String, PrintWriter> channelsMap;
|
||||||
|
@ -29,9 +29,8 @@ public class SystemConsumer implements Runnable{
|
||||||
private PrivateMsgCommander commander;
|
private PrivateMsgCommander commander;
|
||||||
|
|
||||||
SystemConsumer(BufferedReader streamReader, String userNick, Map<String, PrintWriter> map, StorageFile storage) {
|
SystemConsumer(BufferedReader streamReader, String userNick, Map<String, PrintWriter> map, StorageFile storage) {
|
||||||
|
//this.writerWorker = BotDriver.getWorker(storage.getServerName(), "system");
|
||||||
this.writerWorker = BotDriver.getWorker(storage.getServerName(), "system");
|
this.writerWorker = BotDriver.getSystemWorker(storage.getServerName());
|
||||||
|
|
||||||
this.nick = userNick;
|
this.nick = userNick;
|
||||||
this.serverName = storage.getServerName();
|
this.serverName = storage.getServerName();
|
||||||
this.channelsMap = map;
|
this.channelsMap = map;
|
||||||
|
@ -76,14 +75,15 @@ public class SystemConsumer implements Runnable{
|
||||||
if (getProxy(dataStrings[0], dataStrings[1], dataStrings[2]))
|
if (getProxy(dataStrings[0], dataStrings[1], dataStrings[2]))
|
||||||
continue; // TODO: check this. Continue is fair?
|
continue; // TODO: check this. Continue is fair?
|
||||||
|
|
||||||
if (dataStrings[0].equals("PRIVMSG") && dataStrings[2].indexOf("\u0001") < dataStrings[2].lastIndexOf("\u0001"))
|
if (dataStrings[0].equals("PRIVMSG") && dataStrings[2].indexOf("\u0001") < dataStrings[2].lastIndexOf("\u0001")) {
|
||||||
replyCTCP(dataStrings[1], dataStrings[2].substring(dataStrings[2].indexOf(":")+1));
|
replyCTCP(simplifyNick(dataStrings[1]), dataStrings[2].substring(dataStrings[2].indexOf(":") + 1));
|
||||||
else if (Pattern.matches("(^[0-9]{3}$)|(^NICK$)|(^JOIN$)", dataStrings[0])){
|
}
|
||||||
|
else if (Pattern.matches("(^[0-9]{3}$)|(^NICK$)|(^JOIN$)|(^QUIT$)", dataStrings[0])){
|
||||||
handleNumeric(dataStrings[0], dataStrings[1], dataStrings[2]);
|
handleNumeric(dataStrings[0], dataStrings[1], dataStrings[2]);
|
||||||
}
|
}
|
||||||
else if (dataStrings[0].equals("PRIVMSG")) {
|
else if (dataStrings[0].equals("PRIVMSG")) {
|
||||||
commander.receiver(dataStrings[1], dataStrings[2].replaceAll("^.+?:", "").trim());
|
commander.receiver(dataStrings[1], dataStrings[2].replaceAll("^.+?:", "").trim());
|
||||||
writerWorker.logAdd("[system]", "PRIVMSG sent to", "commander");
|
writerWorker.logAdd("[system]", "PRIVMSG from "+dataStrings[1]+" received: ", dataStrings[2].replaceAll("^.+?:", "").trim());
|
||||||
}
|
}
|
||||||
else if (dataStrings[0].equals("INNA")) {
|
else if (dataStrings[0].equals("INNA")) {
|
||||||
String[] splitter;
|
String[] splitter;
|
||||||
|
@ -123,30 +123,32 @@ public class SystemConsumer implements Runnable{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void replyCTCP(String sender, String message){
|
private void replyCTCP(String sender, String message){ // got simplified nick
|
||||||
if (message.equals("\u0001VERSION\u0001")){
|
if (message.equals("\u0001VERSION\u0001")){
|
||||||
StreamProvider.writeToStream(serverName,"NOTICE "+simplifyNick(sender)+" :\u0001VERSION "+ GlobalData.getAppVersion()+"\u0001");
|
StreamProvider.writeToStream(serverName,"NOTICE "+sender+" :\u0001VERSION "+ GlobalData.getAppVersion()+"\u0001");
|
||||||
writerWorker.logAdd("[system]", "catch/handled CTCP VERSION from", simplifyNick(sender));
|
writerWorker.logAdd("[system]", "catch/handled CTCP VERSION from", sender);
|
||||||
System.out.println(sender+" "+message);
|
//System.out.println(sender+" "+message);
|
||||||
System.out.println("NOTICE "+simplifyNick(sender)+" \u0001VERSION "+ GlobalData.getAppVersion()+"\u0001");
|
//System.out.println("NOTICE "+sender+" \u0001VERSION "+ GlobalData.getAppVersion()+"\u0001");
|
||||||
}
|
}
|
||||||
else if (message.startsWith("\u0001PING ") && message.endsWith("\u0001")){
|
else if (message.startsWith("\u0001PING ") && message.endsWith("\u0001")){
|
||||||
StreamProvider.writeToStream(serverName,"NOTICE "+simplifyNick(sender)+" :"+message);
|
StreamProvider.writeToStream(serverName,"NOTICE "+sender+" :"+message);
|
||||||
writerWorker.logAdd("[system]", "catch/handled CTCP PING from", simplifyNick(sender));
|
writerWorker.logAdd("[system]", "catch/handled CTCP PING from", sender);
|
||||||
//System.out.println(":"+simplifyNick(sender)+" NOTICE "+sender.substring(0,sender.indexOf("!"))+" "+message);
|
//System.out.println(":"+sender+" NOTICE "+sender.substring(0,sender.indexOf("!"))+" "+message);
|
||||||
}
|
}
|
||||||
else if (message.equals("\u0001CLIENTINFO\u0001")){
|
else if (message.equals("\u0001CLIENTINFO\u0001")){
|
||||||
StreamProvider.writeToStream(serverName,"NOTICE "+simplifyNick(sender)+" :\u0001CLIENTINFO ACTION PING VERSION TIME CLIENTINFO\u0001");
|
StreamProvider.writeToStream(serverName,"NOTICE "+sender+" :\u0001CLIENTINFO ACTION PING VERSION TIME CLIENTINFO\u0001");
|
||||||
writerWorker.logAdd("[system]", "catch/handled CTCP CLIENTINFO from", simplifyNick(sender));
|
writerWorker.logAdd("[system]", "catch/handled CTCP CLIENTINFO from", sender);
|
||||||
//System.out.println(":"+simplifyNick(sender)+" NOTICE "+sender.substring(0,sender.indexOf("!"))+" \u0001CLIENTINFO ACTION PING VERSION TIME CLIENTINFO\u0001");
|
//System.out.println(":"+sender+" NOTICE "+sender.substring(0,sender.indexOf("!"))+" \u0001CLIENTINFO ACTION PING VERSION TIME CLIENTINFO\u0001");
|
||||||
}
|
}
|
||||||
else if (message.equals("\u0001TIME\u0001")){
|
else if (message.equals("\u0001TIME\u0001")){
|
||||||
StreamProvider.writeToStream(serverName,"NOTICE "+simplifyNick(sender)+" :\u0001TIME "+ ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME)+"\u0001");
|
StreamProvider.writeToStream(serverName,"NOTICE "+sender+" :\u0001TIME "+ ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME)+"\u0001");
|
||||||
writerWorker.logAdd("[system]", "catch/handled CTCP TIME from", simplifyNick(sender));
|
writerWorker.logAdd("[system]", "catch/handled CTCP TIME from", sender);
|
||||||
//System.out.println(":"+simplifyNick(sender)+" NOTICE "+sender.substring(0,sender.indexOf("!"))+" \u0001TIME "+ ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME)+"\u0001");
|
//System.out.println(":"+sender+" NOTICE "+sender.substring(0,sender.indexOf("!"))+" \u0001TIME "+ ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME)+"\u0001");
|
||||||
} else
|
|
||||||
writerWorker.logAdd("[system]", "catch CTCP request \""+message+"\" from ", simplifyNick(sender));
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
writerWorker.logAdd("[system]", "catch unknown CTCP request \""+message+"\" from ", sender);
|
||||||
|
}
|
||||||
|
|
||||||
private String simplifyNick(String nick){ return nick.replaceAll("!.*$",""); }
|
private String simplifyNick(String nick){ return nick.replaceAll("!.*$",""); }
|
||||||
|
|
||||||
|
|
||||||
|
@ -204,7 +206,7 @@ public class SystemConsumer implements Runnable{
|
||||||
case "NICK":
|
case "NICK":
|
||||||
if (sender.startsWith(nick+"!")) {
|
if (sender.startsWith(nick+"!")) {
|
||||||
nick = message.trim();
|
nick = message.trim();
|
||||||
writerWorker.logAdd("[system]", "catch/handled own NICK change from:", sender+" to: "+message);
|
writerWorker.logAdd("[system]", "catch own NICK change from:", sender+" to: "+message);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "JOIN":
|
case "JOIN":
|
||||||
|
@ -212,10 +214,11 @@ public class SystemConsumer implements Runnable{
|
||||||
proxyAList.put(message, new ArrayList<>()); // Add new channel name to proxy watch-list
|
proxyAList.put(message, new ArrayList<>()); // Add new channel name to proxy watch-list
|
||||||
proxyAList.get(message).add(eventNum+" "+sender+" "+message); // Add message to array linked
|
proxyAList.get(message).add(eventNum+" "+sender+" "+message); // Add message to array linked
|
||||||
this.proxyRequired = true; // Ask for proxy validators
|
this.proxyRequired = true; // Ask for proxy validators
|
||||||
|
writerWorker.logAdd("[system]", "joined to channel ", "message");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
writerWorker.logAdd("[system]", "catch: "+eventNum+" from: "+sender+" :",message);
|
writerWorker.logAdd("[system]", "catch: "+eventNum+" from: "+sender+" :",message); // TODO: QUIT comes here. Do something.
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@ import InnaIrcBot.LogDriver.Worker;
|
||||||
public class DriverTestFiles {
|
public class DriverTestFiles {
|
||||||
|
|
||||||
public static void main(String[] args){
|
public static void main(String[] args){
|
||||||
if (BotDriver.setLogDriver("irc.tomsk.net", "files", new String[]{"/tmp/logs/"}))
|
if (BotDriver.setLogDriver("irc.tomsk.net", "files", new String[]{"/tmp/logs/"}, "/tmp/appLogs/"))
|
||||||
System.out.println("DRVT_Files: Successful driver initiation");
|
System.out.println("DRVT_Files: Successful driver initiation");
|
||||||
else {
|
else {
|
||||||
System.out.println("DRVT_Files: Failed driver initiation");
|
System.out.println("DRVT_Files: Failed driver initiation");
|
||||||
|
|
|
@ -9,7 +9,8 @@ public class DriverTestMongo {
|
||||||
if (BotDriver.setLogDriver("irc.tomsk.net", "MongoDB", new String[]{"192.168.1.186:27017",
|
if (BotDriver.setLogDriver("irc.tomsk.net", "MongoDB", new String[]{"192.168.1.186:27017",
|
||||||
"irc",
|
"irc",
|
||||||
"loper",
|
"loper",
|
||||||
"password"}))
|
"password"},
|
||||||
|
"/tmp/appLogs/"))
|
||||||
System.out.println("DRVT_Mongo:Successful driver initiation");
|
System.out.println("DRVT_Mongo:Successful driver initiation");
|
||||||
else {
|
else {
|
||||||
System.out.println("DRVT_Mongo:Failed driver initiation");
|
System.out.println("DRVT_Mongo:Failed driver initiation");
|
||||||
|
|
|
@ -6,7 +6,7 @@ import InnaIrcBot.LogDriver.Worker;
|
||||||
public class DriverTestSQLite {
|
public class DriverTestSQLite {
|
||||||
|
|
||||||
public static void main(String[] args){
|
public static void main(String[] args){
|
||||||
if (BotDriver.setLogDriver("irc.tomsk.net", "SQLite", new String[]{"/tmp/logs/mylogs"}))
|
if (BotDriver.setLogDriver("irc.tomsk.net", "SQLite", new String[]{"/tmp/logs/mylogs"}, "/tmp/appLogs/"))
|
||||||
System.out.println("DRVT_SQLite:Successful driver initiation");
|
System.out.println("DRVT_SQLite:Successful driver initiation");
|
||||||
else {
|
else {
|
||||||
System.out.println("DRVT_SQLite:Failed driver initiation");
|
System.out.println("DRVT_SQLite:Failed driver initiation");
|
||||||
|
|
|
@ -19,6 +19,7 @@ public class StorageFileTest {
|
||||||
"",
|
"",
|
||||||
new String[]{null},
|
new String[]{null},
|
||||||
"",
|
"",
|
||||||
|
"",
|
||||||
""
|
""
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue