mirror of https://github.com/bvn13/JIrcBot.git
changed logs uri, implemented admin bot control via commands
parent
18b8f8bbe7
commit
a834ba1f68
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"version" : "1.0",
|
||||
"connections" : [
|
||||
{
|
||||
"enabled" : true,
|
||||
"server" : "irc.freenode.net",
|
||||
"port" : 6667,
|
||||
"channelsNames" : ["#voidforum"],
|
||||
"botName" : "jircbot-test"
|
||||
"botName" : "jircbot-test",
|
||||
"masterNick" : "bvn13"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -5,7 +5,7 @@ After=network.target
|
|||
[Service]
|
||||
User=bvn13
|
||||
WorkingDirectory=/srv/jircbot
|
||||
ExecStart=/usr/bin/java -jar /srv/jircbot/jircbot-1.1.6.jar
|
||||
ExecStart=/usr/bin/java -jar /srv/jircbot/jircbot-1.1.7.jar
|
||||
SuccessExitStatus=143
|
||||
|
||||
[Install]
|
||||
|
|
2
pom.xml
2
pom.xml
|
@ -6,7 +6,7 @@
|
|||
|
||||
<groupId>ru.bvn13</groupId>
|
||||
<artifactId>jircbot</artifactId>
|
||||
<version>1.1.6</version>
|
||||
<version>1.1.8</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
|
||||
|
|
|
@ -82,6 +82,9 @@ public class JircBot extends ListenerAdapter {
|
|||
@Autowired
|
||||
private LoggerListener loggerListener;
|
||||
|
||||
@Autowired
|
||||
private AdminListener adminListener;
|
||||
|
||||
@PostConstruct
|
||||
public void postConstruct() {
|
||||
this.executorService = Executors.newSingleThreadScheduledExecutor();
|
||||
|
@ -112,6 +115,7 @@ public class JircBot extends ListenerAdapter {
|
|||
String.format("%s/%s", c.getServer(), "1"),
|
||||
new PircBotX(templateConfig
|
||||
.setName(c.getBotName())
|
||||
.addListener(adminListener)
|
||||
.addListener(pingPongListener)
|
||||
.addListener(calculatorListener)
|
||||
.addListener(regexCheckerListener)
|
||||
|
|
|
@ -48,8 +48,6 @@ public class JircBotConfiguration {
|
|||
Object jsonObj = parser.parse(reader);
|
||||
JSONObject jsonObject = (JSONObject) jsonObj;
|
||||
|
||||
logger.debug("CONFIG VERSION: "+jsonObject.get("version"));
|
||||
|
||||
JSONArray settings = (JSONArray) jsonObject.get("connections");
|
||||
|
||||
Iterator<JSONObject> iterator = settings.iterator();
|
||||
|
@ -99,6 +97,8 @@ public class JircBotConfiguration {
|
|||
|
||||
//config.setChannelName((String);
|
||||
config.setBotName((String)data.get("botName"));
|
||||
|
||||
config.setMasterNick((String)data.get("masterNick"));
|
||||
return config;
|
||||
}
|
||||
|
||||
|
|
|
@ -14,72 +14,49 @@ import javax.persistence.UniqueConstraint;
|
|||
*/
|
||||
@Entity
|
||||
@Table(name = "channel_settings", uniqueConstraints = {@UniqueConstraint(columnNames = {"channelName"}, name = "uniq_channel_settings_channel_name")})
|
||||
@Getter @Setter
|
||||
public class ChannelSettings extends BaseModel {
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false)
|
||||
private String channelName;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false)
|
||||
private Boolean calculatorEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false)
|
||||
private Boolean regexCheckerEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false)
|
||||
private Boolean advicesEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false)
|
||||
private Boolean quizEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false)
|
||||
private Boolean bashOrgEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false)
|
||||
private Boolean autoRejoinEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false)
|
||||
private Boolean linkPreviewEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false)
|
||||
private Boolean helloOnJoinEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false)
|
||||
private Boolean deferredMessagesEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false, columnDefinition = "Boolean DEFAULT False")
|
||||
private Boolean grammarCorrectionEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false, columnDefinition = "Boolean DEFAULT False")
|
||||
private Boolean googleSearchEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false, columnDefinition = "Boolean DEFAULT False")
|
||||
private Boolean loggingEnabled = false;
|
||||
|
||||
@Column(nullable = false, columnDefinition = "varchar(255) default ''")
|
||||
private String onJoinMessage = "";
|
||||
|
||||
}
|
||||
|
|
|
@ -19,4 +19,8 @@ public interface IrcMessageRepository extends JpaRepository<IrcMessage, Long> {
|
|||
@Query("SELECT m FROM IrcMessage m WHERE m.serverHost = :serverHost AND (m.channelName = CONCAT('#', :channelName) OR m.channelName = CONCAT('##', :channelName)) AND m.dtCreated >= :dtFrom AND m.dtCreated <= :dtTo ORDER BY m.dtCreated")
|
||||
List<IrcMessage> findAllByServerHostAndChannelNameAndDay(@Param("serverHost") String serverHost, @Param("channelName") String channelName, @Param("dtFrom") Date dtFrom, @Param("dtTo") Date dtTo);
|
||||
|
||||
@Query("SELECT m FROM IrcMessage m WHERE m.serverHost = :serverHost AND (m.channelName = :channelName) AND m.dtCreated >= :dtFrom AND m.dtCreated <= :dtTo ORDER BY m.dtCreated")
|
||||
List<IrcMessage> findAllByServerHostAndRealChannelNameAndDay(@Param("serverHost") String serverHost, @Param("channelName") String channelName, @Param("dtFrom") Date dtFrom, @Param("dtTo") Date dtTo);
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -19,9 +19,21 @@ public class ChannelSettingsService {
|
|||
if (settings == null) {
|
||||
settings = new ChannelSettings();
|
||||
settings.setChannelName(channelName);
|
||||
channelSettingsRepository.save(settings);
|
||||
}
|
||||
return settings;
|
||||
}
|
||||
|
||||
public void creaateChannelSettings(String channelName) {
|
||||
ChannelSettings settings = channelSettingsRepository.getFirstByChannelName(channelName);
|
||||
if (settings == null) {
|
||||
settings = new ChannelSettings();
|
||||
settings.setChannelName(channelName);
|
||||
channelSettingsRepository.save(settings);
|
||||
}
|
||||
}
|
||||
|
||||
public void save(ChannelSettings settings) {
|
||||
channelSettingsRepository.save(settings);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -40,19 +40,21 @@ public class IrcMessageService {
|
|||
LocalDateTime dtFrom = localDateTime.with(LocalTime.MIN);
|
||||
LocalDateTime dtTo = localDateTime.with(LocalTime.MAX);
|
||||
|
||||
return ircMessageRepository.findAllByServerHostAndChannelNameAndDay(
|
||||
String realChannelName = channelName;
|
||||
String prefix = "";
|
||||
while (realChannelName.substring(0, 1).equals("_")) {
|
||||
prefix += "#";
|
||||
realChannelName = realChannelName.substring(1);
|
||||
}
|
||||
realChannelName = prefix + realChannelName;
|
||||
|
||||
return ircMessageRepository.findAllByServerHostAndRealChannelNameAndDay(
|
||||
serverHost,
|
||||
channelName,
|
||||
realChannelName,
|
||||
DateTimeUtility.localDateTimeToDate(dtFrom),
|
||||
DateTimeUtility.localDateTimeToDate(dtTo)
|
||||
);
|
||||
|
||||
/*return ircMessageRepository.findAllByServerHostAndChannelNameAndDtCreatedGreaterThanEqualAndDtCreatedIsLessThanEqual(
|
||||
serverHost,
|
||||
channelName,
|
||||
DateTimeUtility.localDateTimeToDate(dtFrom),
|
||||
DateTimeUtility.localDateTimeToDate(dtTo)
|
||||
);*/
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,184 @@
|
|||
package ru.bvn13.jircbot.listeners;
|
||||
|
||||
import org.pircbotx.hooks.events.JoinEvent;
|
||||
import org.pircbotx.hooks.events.PrivateMessageEvent;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.bvn13.jircbot.bot.ImprovedListenerAdapter;
|
||||
import ru.bvn13.jircbot.config.JircBotConfiguration;
|
||||
import ru.bvn13.jircbot.database.entities.ChannelSettings;
|
||||
import ru.bvn13.jircbot.database.services.ChannelSettingsService;
|
||||
import ru.bvn13.jircbot.model.Config;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
/**
|
||||
* Created by bvn13 on 27.03.2018.
|
||||
*/
|
||||
@Component
|
||||
public class AdminListener extends ImprovedListenerAdapter {
|
||||
|
||||
private static final String COMMAND = "?";
|
||||
|
||||
@Autowired
|
||||
private JircBotConfiguration configuration;
|
||||
|
||||
@Autowired
|
||||
private ChannelSettingsService channelSettingsService;
|
||||
|
||||
@Override
|
||||
public void onJoin(JoinEvent event) throws Exception {
|
||||
if (event.getChannel().getName().startsWith("#")) {
|
||||
channelSettingsService.creaateChannelSettings(event.getChannel().getName());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrivateMessage(PrivateMessageEvent event) throws Exception {
|
||||
|
||||
AtomicReference<Config> aConfig = new AtomicReference<>(null);
|
||||
|
||||
configuration.getConnections().forEach(c -> {
|
||||
|
||||
if (sameServer(event.getUser().getServer(), c.getServer())) {
|
||||
aConfig.set(c);
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
if (aConfig.get() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Config config = aConfig.get();
|
||||
|
||||
if (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);
|
||||
|
||||
if (commands.length != 2) {
|
||||
event.respondPrivateMessage("Wrong command");
|
||||
return;
|
||||
}
|
||||
|
||||
switch (commands[0].toLowerCase()) {
|
||||
case "join" :
|
||||
event.getBot().sendIRC().joinChannel(commands[1]); event.respondPrivateMessage("done"); break;
|
||||
case "leave" :
|
||||
event.getBot().sendRaw().rawLine("PART "+commands[1]); event.respondPrivateMessage("done"); break;
|
||||
case "cmd" :
|
||||
event.getBot().sendRaw().rawLine(command); event.respondPrivateMessage("done"); break;
|
||||
case "set" :
|
||||
try {
|
||||
String args[] = commands[1].split(" ", 3); // set, channel, mode/hello-message
|
||||
changeSettings(args[1], args[0], args[2]);
|
||||
event.respondPrivateMessage("done");
|
||||
} catch (Exception e) {
|
||||
event.respondPrivateMessage(e.getMessage());
|
||||
}
|
||||
break;
|
||||
default:
|
||||
event.respondPrivateMessage("Command not supported");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private boolean sameServer(String s1, String s2) {
|
||||
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])
|
||||
&& d1[d1.length - 2].equals(d2[d2.length - 2])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void changeSettings(String channelName, String set, String modeStr) {
|
||||
if (set.equals("hello-message") || set.equals("hello-msg")) {
|
||||
ChannelSettings settings = channelSettingsService.getChannelSettings(channelName);
|
||||
settings.setOnJoinMessage(modeStr);
|
||||
channelSettingsService.save(settings);
|
||||
} else {
|
||||
if (!modeStr.equals("off") && !modeStr.equals("on")) {
|
||||
throw new RuntimeException("Wrong mode. Variants: on, off");
|
||||
}
|
||||
|
||||
Boolean mode = modeStr.equals("on");
|
||||
ChannelSettings settings = channelSettingsService.getChannelSettings(channelName);
|
||||
|
||||
switch (set.toLowerCase()) {
|
||||
case "autorejoin":
|
||||
case "auto-rejoin":
|
||||
settings.setAutoRejoinEnabled(mode);
|
||||
break;
|
||||
case "bash":
|
||||
case "bashorg":
|
||||
settings.setBashOrgEnabled(mode);
|
||||
break;
|
||||
case "defferedmessages":
|
||||
case "deffered-messages":
|
||||
settings.setDeferredMessagesEnabled(mode);
|
||||
break;
|
||||
case "gs":
|
||||
case "googlesearch":
|
||||
case "google-search":
|
||||
settings.setGoogleSearchEnabled(mode);
|
||||
break;
|
||||
case "grammar":
|
||||
case "grammarcorrection":
|
||||
case "grammar-correction":
|
||||
settings.setGrammarCorrectionEnabled(mode);
|
||||
break;
|
||||
case "hello":
|
||||
case "helloonjoin":
|
||||
case "hello-on-join":
|
||||
settings.setHelloOnJoinEnabled(mode);
|
||||
break;
|
||||
case "links":
|
||||
case "linkpreview":
|
||||
case "links-preview":
|
||||
settings.setLinkPreviewEnabled(mode);
|
||||
break;
|
||||
case "logging":
|
||||
case "log":
|
||||
settings.setLoggingEnabled(mode);
|
||||
break;
|
||||
case "regex":
|
||||
case "regexp":
|
||||
case "regexchecker":
|
||||
case "regexpchecker":
|
||||
case "regex-checker":
|
||||
case "regexp-checker":
|
||||
settings.setRegexCheckerEnabled(mode);
|
||||
break;
|
||||
case "advice":
|
||||
case "advices":
|
||||
settings.setAdvicesEnabled(mode);
|
||||
break;
|
||||
case "calc":
|
||||
case "calculator":
|
||||
settings.setCalculatorEnabled(mode);
|
||||
break;
|
||||
case "quiz":
|
||||
settings.setQuizEnabled(mode);
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("Setting " + set + " not exist");
|
||||
}
|
||||
|
||||
channelSettingsService.save(settings);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@ 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.database.entities.ChannelSettings;
|
||||
import ru.bvn13.jircbot.database.services.ChannelSettingsService;
|
||||
|
||||
/**
|
||||
|
@ -20,7 +21,9 @@ public class HelloOnJoinListener extends ImprovedListenerAdapter {
|
|||
@Override
|
||||
public void onJoin(final JoinEvent event) throws Exception {
|
||||
|
||||
if (!channelSettingsService.getChannelSettings(getChannelName(event)).getHelloOnJoinEnabled()) {
|
||||
ChannelSettings channelSettings = channelSettingsService.getChannelSettings(getChannelName(event));
|
||||
|
||||
if (!channelSettings.getHelloOnJoinEnabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -28,8 +31,11 @@ public class HelloOnJoinListener extends ImprovedListenerAdapter {
|
|||
return;
|
||||
}
|
||||
|
||||
event.respond("Привет, "+event.getUser().getNick()+"!");
|
||||
//this.sendNotice(event, "Привет, "+event.getUser().getNick()+"!");
|
||||
if (channelSettings.getOnJoinMessage() != null && !channelSettings.getOnJoinMessage().isEmpty()) {
|
||||
event.respond(channelSettings.getOnJoinMessage().replace("%nick%", event.getUser().getNick()));
|
||||
} else {
|
||||
event.respond("Привет, " + event.getUser().getNick() + "!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,10 +1,14 @@
|
|||
package ru.bvn13.jircbot.model;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
//@Getter
|
||||
//@Setter
|
||||
public class Config {
|
||||
|
||||
private Boolean enabled = false;
|
||||
|
@ -17,4 +21,6 @@ public class Config {
|
|||
|
||||
private List<String> channelsNames;
|
||||
|
||||
private String masterNick;
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue