mirror of https://github.com/bvn13/JIrcBot.git
implemented logging
parent
8ed9452deb
commit
4cecda7c72
30
jircbot.iml
30
jircbot.iml
|
@ -2,7 +2,9 @@
|
|||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="Spring" name="Spring">
|
||||
<configuration />
|
||||
<configuration>
|
||||
<fileset id="fileset" name="Spring Application Context" removed="false" />
|
||||
</configuration>
|
||||
</facet>
|
||||
<facet type="web" name="Web">
|
||||
<configuration>
|
||||
|
@ -32,7 +34,6 @@
|
|||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:1.5.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:1.5.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context:4.3.13.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.13.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:1.5.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:1.5.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:jcl-over-slf4j:1.7.25" level="project" />
|
||||
|
@ -40,9 +41,31 @@
|
|||
<orderEntry type="library" name="Maven: org.slf4j:log4j-over-slf4j:1.7.25" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-core:4.3.13.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.17" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:1.5.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:1.5.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:8.5.23" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-annotations-api:8.5.23" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:8.5.23" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:8.5.23" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hibernate:hibernate-validator:5.3.6.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.validation:validation-api:1.1.0.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.3.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.8.10" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.8.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.8.10" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-web:4.3.13.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:4.3.13.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:4.3.13.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:4.3.13.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-thymeleaf:1.5.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf-spring4:2.1.6.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.thymeleaf:thymeleaf:2.1.6.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: ognl:ognl:3.0.8" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.unbescape:unbescape:1.1.0.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:1.4.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.codehaus.groovy:groovy:2.4.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:1.5.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:1.5.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:4.3.13.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.8.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:1.5.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.tomcat:tomcat-jdbc:8.5.23" level="project" />
|
||||
|
@ -85,7 +108,6 @@
|
|||
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.1.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:1.3.9" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.http-client:google-http-client-jackson2:1.23.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.1.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.google.guava:guava-jdk5:17.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
|
||||
|
|
14
pom.xml
14
pom.xml
|
@ -6,7 +6,7 @@
|
|||
|
||||
<groupId>ru.bvn13</groupId>
|
||||
<artifactId>jircbot</artifactId>
|
||||
<version>1.1.3</version>
|
||||
<version>1.1.4</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
|
||||
|
@ -62,6 +62,18 @@
|
|||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<!--Spring Web-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
<version>${spring.framework.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
<version>${spring.framework.version}</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
<!-- Dependencies for Database, Hibernate and ORM -->
|
||||
|
|
|
@ -79,6 +79,9 @@ public class JircBot extends ListenerAdapter {
|
|||
@Autowired
|
||||
private GoogleSearchListener googleSearchListener;
|
||||
|
||||
@Autowired
|
||||
private LoggerListener loggerListener;
|
||||
|
||||
@PostConstruct
|
||||
public void postConstruct() {
|
||||
this.executorService = Executors.newSingleThreadScheduledExecutor();
|
||||
|
@ -121,6 +124,7 @@ public class JircBot extends ListenerAdapter {
|
|||
.addListener(helloOnJoinListener)
|
||||
.addListener(grammarCorrectorListener)
|
||||
.addListener(googleSearchListener)
|
||||
.addListener(loggerListener)
|
||||
|
||||
// not tested
|
||||
//.addListener(new GoogleDoodleListener(this.config))
|
||||
|
|
|
@ -76,4 +76,10 @@ public class ChannelSettings extends BaseModel {
|
|||
@Column(nullable = false, columnDefinition = "Boolean DEFAULT False")
|
||||
private Boolean googleSearchEnabled = false;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Column(nullable = false, columnDefinition = "Boolean DEFAULT False")
|
||||
private Boolean loggingEnabled = false;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
package ru.bvn13.jircbot.database.entities;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Table;
|
||||
|
||||
/**
|
||||
* Created by bvn13 on 10.03.2018.
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "irc_messages")
|
||||
@Getter @Setter
|
||||
public class IrcMessage extends BaseModel {
|
||||
|
||||
@Column
|
||||
private String channelName;
|
||||
|
||||
@Column
|
||||
private String username;
|
||||
|
||||
@Column
|
||||
private String message;
|
||||
|
||||
|
||||
public IrcMessage(String channelName, String username, String message) {
|
||||
this.channelName = channelName;
|
||||
this.username = username;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public IrcMessage(String channelName, String message) {
|
||||
this.channelName = channelName;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public IrcMessage(String message) {
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
package ru.bvn13.jircbot.database.repositories;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import ru.bvn13.jircbot.database.entities.IrcMessage;
|
||||
|
||||
/**
|
||||
* Created by bvn13 on 10.03.2018.
|
||||
*/
|
||||
public interface IrcMessageRepository extends JpaRepository<IrcMessage, Long> {
|
||||
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package ru.bvn13.jircbot.database.services;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.bvn13.jircbot.database.entities.IrcMessage;
|
||||
import ru.bvn13.jircbot.database.repositories.IrcMessageRepository;
|
||||
|
||||
/**
|
||||
* Created by bvn13 on 10.03.2018.
|
||||
*/
|
||||
@Service
|
||||
public class IrcMessageService {
|
||||
|
||||
@Autowired
|
||||
private IrcMessageRepository ircMessageRepository;
|
||||
|
||||
public void save(IrcMessage message) {
|
||||
ircMessageRepository.save(message);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,126 @@
|
|||
package ru.bvn13.jircbot.listeners;
|
||||
|
||||
import org.pircbotx.hooks.Event;
|
||||
import org.pircbotx.hooks.events.*;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.bvn13.jircbot.bot.ImprovedListenerAdapter;
|
||||
import ru.bvn13.jircbot.database.entities.IrcMessage;
|
||||
import ru.bvn13.jircbot.database.services.ChannelSettingsService;
|
||||
import ru.bvn13.jircbot.database.services.IrcMessageService;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Created by bvn13 on 10.03.2018.
|
||||
*/
|
||||
@Component
|
||||
public class LoggerListener extends ImprovedListenerAdapter {
|
||||
|
||||
@Autowired
|
||||
private ChannelSettingsService channelSettingsService;
|
||||
|
||||
@Autowired
|
||||
private IrcMessageService ircMessageService;
|
||||
|
||||
private Map<String, Set<String>> onlineUsers = new HashMap<>();
|
||||
|
||||
|
||||
|
||||
|
||||
public boolean isEnabled(Event event) throws Exception {
|
||||
return channelSettingsService.getChannelSettings(getChannelName(event)).getLoggingEnabled();
|
||||
}
|
||||
|
||||
public boolean isEnabled(String channelName) throws Exception {
|
||||
return channelSettingsService.getChannelSettings(channelName).getLoggingEnabled();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onJoin(JoinEvent event) throws Exception {
|
||||
if (!isEnabled(event)) return;
|
||||
|
||||
if (!onlineUsers.containsKey(event.getChannel().getName())) {
|
||||
onlineUsers.put(event.getChannel().getName(), new HashSet<>());
|
||||
}
|
||||
Set<String> users = onlineUsers.get(event.getChannel().getName());
|
||||
event.getChannel().getUsers().forEach(user -> {
|
||||
users.add(user.getNick().toLowerCase());
|
||||
});
|
||||
log(event.getChannel().getName(), "User joined: "+event.getUser().getNick());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onQuit(QuitEvent event) throws Exception {
|
||||
List<String> channels = new ArrayList<>();
|
||||
for (String channelName : onlineUsers.keySet()) {
|
||||
Set<String> users = onlineUsers.get(channelName);
|
||||
if (users.contains(event.getUser().getNick().toLowerCase())) {
|
||||
if (isEnabled(channelName)) {
|
||||
log(channelName, "User " + event.getUser().getNick() + " quit (" + event.getReason() + ")");
|
||||
users.remove(event.getUser().getNick().toLowerCase());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onKick(KickEvent event) throws Exception {
|
||||
if (!isEnabled(event)) return;
|
||||
|
||||
if (onlineUsers.containsKey(event.getChannel().getName())) {
|
||||
onlineUsers.get(event.getChannel().getName()).remove(event.getUser().getNick().toLowerCase());
|
||||
}
|
||||
log(event.getChannel().getName(), "User "+event.getRecipient().getNick()+" was kicked by "+event.getUser().getNick()+" by reason: "+event.getReason());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMessage(MessageEvent event) throws Exception {
|
||||
if (!isEnabled(event)) return;
|
||||
|
||||
log(event.getChannel().getName(), event.getUser().getNick(), event.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNickChange(NickChangeEvent event) throws Exception {
|
||||
List<String> channels = new ArrayList<>();
|
||||
for (String channelName : onlineUsers.keySet()) {
|
||||
Set<String> users = onlineUsers.get(channelName);
|
||||
if (users.contains(event.getUser().getNick().toLowerCase())) {
|
||||
if (isEnabled(channelName)) {
|
||||
log(channelName,"User "+event.getOldNick()+" is now known as "+event.getNewNick());
|
||||
users.remove(event.getUser().getNick().toLowerCase());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNotice(NoticeEvent event) throws Exception {
|
||||
if (!isEnabled(event)) return;
|
||||
log(event.getChannel().getName(), event.getMessage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTopic(TopicEvent event) throws Exception {
|
||||
if (!isEnabled(event)) return;
|
||||
log(event.getChannel().getName(), ""+event.getUser().getNick()+" set topic: "+event.getTopic());
|
||||
}
|
||||
|
||||
private void log(String channelName, String username, String message) {
|
||||
IrcMessage msg = new IrcMessage(channelName, username, message);
|
||||
ircMessageService.save(msg);
|
||||
}
|
||||
|
||||
private void log(String channelName, String message) {
|
||||
IrcMessage msg = new IrcMessage(channelName, message);
|
||||
ircMessageService.save(msg);
|
||||
}
|
||||
|
||||
private void log(String message) {
|
||||
IrcMessage msg = new IrcMessage(message);
|
||||
ircMessageService.save(msg);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package ru.bvn13.jircbot.web.controllers;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
|
||||
/**
|
||||
* Created by bvn13 on 10.03.2018.
|
||||
*/
|
||||
@Controller
|
||||
@RequestMapping("/logs")
|
||||
public class IrcLogController {
|
||||
|
||||
@RequestMapping(value = "", method = RequestMethod.GET)
|
||||
public String index() {
|
||||
return "irclog";
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue