2018-03-10 12:10:10 +03:00
package ru.bvn13.jircbot.listeners ;
import org.pircbotx.hooks.Event ;
import org.pircbotx.hooks.events.* ;
2018-03-21 12:43:44 +03:00
import org.slf4j.Logger ;
import org.slf4j.LoggerFactory ;
2018-03-10 12:10:10 +03:00
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.stereotype.Component ;
import ru.bvn13.jircbot.bot.ImprovedListenerAdapter ;
2018-03-27 16:43:42 +03:00
import ru.bvn13.jircbot.bot.JircBot ;
2018-03-10 12:10:10 +03:00
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 {
2018-03-21 12:43:44 +03:00
2018-03-10 12:10:10 +03:00
@Autowired
private ChannelSettingsService channelSettingsService ;
@Autowired
private IrcMessageService ircMessageService ;
private Map < String , Set < String > > onlineUsers = new HashMap < > ( ) ;
public boolean isEnabled ( Event event ) throws Exception {
2018-03-28 20:47:13 +03:00
return channelSettingsService . getChannelSettings ( JircBot . extractServer ( event . getBot ( ) . getServerHostname ( ) ) , getChannelName ( event ) ) . getLoggingEnabled ( ) ;
2018-03-10 12:10:10 +03:00
}
2018-03-27 16:43:42 +03:00
public boolean isEnabled ( String serverName , String channelName ) throws Exception {
return channelSettingsService . getChannelSettings ( serverName , channelName ) . getLoggingEnabled ( ) ;
2018-03-10 12:10:10 +03:00
}
2018-03-21 13:19:29 +03:00
// @Override
// public void onEvent(Event event) throws Exception {
//
// int a = 0;
//
2018-03-21 13:43:28 +03:00
// if (event instanceof OutputEvent) {
// this.onOutput((OutputEvent) event);
// }
//
2018-03-21 13:19:29 +03:00
// }
2018-03-10 12:10:10 +03:00
@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 ( ) ) ;
} ) ;
2018-03-10 12:25:39 +03:00
log ( event . getBot ( ) . getServerHostname ( ) , event . getChannel ( ) . getName ( ) , "User joined: " + event . getUser ( ) . getNick ( ) ) ;
2018-03-10 12:10:10 +03:00
}
@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 ( ) ) ) {
2018-03-28 20:47:13 +03:00
if ( isEnabled ( JircBot . extractServer ( event . getBot ( ) . getServerHostname ( ) ) , channelName ) ) {
2018-03-10 12:25:39 +03:00
log ( event . getBot ( ) . getServerHostname ( ) , channelName , "User " + event . getUser ( ) . getNick ( ) + " quit (" + event . getReason ( ) + ")" ) ;
2018-03-10 12:10:10 +03:00
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 ( ) ) ;
}
2018-03-10 12:25:39 +03:00
log ( event . getBot ( ) . getServerHostname ( ) , event . getChannel ( ) . getName ( ) , "User " + event . getRecipient ( ) . getNick ( ) + " was kicked by " + event . getUser ( ) . getNick ( ) + " by reason: " + event . getReason ( ) ) ;
2018-03-10 12:10:10 +03:00
}
@Override
public void onMessage ( MessageEvent event ) throws Exception {
if ( ! isEnabled ( event ) ) return ;
2018-03-10 12:34:00 +03:00
log ( event . getBot ( ) . getServerHostname ( ) , event . getChannel ( ) . getName ( ) , event . getUser ( ) . getNick ( ) , event . getMessage ( ) ) ;
2018-03-10 12:10:10 +03:00
}
@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 ( ) ) ) {
2018-03-28 20:47:13 +03:00
if ( isEnabled ( JircBot . extractServer ( event . getBot ( ) . getServerHostname ( ) ) , channelName ) ) {
2018-03-10 12:25:39 +03:00
log ( event . getBot ( ) . getServerHostname ( ) , channelName , "User " + event . getOldNick ( ) + " is now known as " + event . getNewNick ( ) ) ;
2018-03-10 12:10:10 +03:00
users . remove ( event . getUser ( ) . getNick ( ) . toLowerCase ( ) ) ;
}
}
}
}
@Override
public void onNotice ( NoticeEvent event ) throws Exception {
if ( ! isEnabled ( event ) ) return ;
2018-03-10 12:25:39 +03:00
log ( event . getBot ( ) . getServerHostname ( ) , event . getChannel ( ) . getName ( ) , event . getMessage ( ) ) ;
2018-03-10 12:10:10 +03:00
}
@Override
public void onTopic ( TopicEvent event ) throws Exception {
if ( ! isEnabled ( event ) ) return ;
2018-03-10 12:25:39 +03:00
log ( event . getBot ( ) . getServerHostname ( ) , event . getChannel ( ) . getName ( ) , "" + event . getUser ( ) . getNick ( ) + " set topic: " + event . getTopic ( ) ) ;
2018-03-10 12:10:10 +03:00
}
2018-03-21 13:19:29 +03:00
@Override
public void onAction ( ActionEvent event ) throws Exception {
if ( ! isEnabled ( event ) ) return ;
log ( event . getBot ( ) . getServerHostname ( ) , event . getChannel ( ) . getName ( ) , "*" + event . getUser ( ) . getNick ( ) + " " + event . getAction ( ) ) ;
}
2018-03-21 13:43:28 +03:00
@Override
public void onOutput ( OutputEvent event ) throws Exception {
2018-03-28 20:47:13 +03:00
if ( ! isEnabled ( JircBot . extractServer ( event . getBot ( ) . getServerHostname ( ) ) , event . getLineParsed ( ) . get ( 1 ) ) ) return ;
2018-03-21 13:43:28 +03:00
switch ( event . getLineParsed ( ) . get ( 0 ) ) {
case "PRIVMSG" :
case "NOTICE" :
log ( event . getBot ( ) . getServerHostname ( ) , event . getLineParsed ( ) . get ( 1 ) , event . getLineParsed ( ) . get ( 2 ) ) ;
}
}
2018-03-10 12:25:39 +03:00
private void log ( String serverHost , String channelName , String username , String message ) {
IrcMessage msg = new IrcMessage ( serverHost , channelName , username , message ) ;
2018-03-10 12:10:10 +03:00
ircMessageService . save ( msg ) ;
}
2018-03-10 12:25:39 +03:00
private void log ( String serverHost , String channelName , String message ) {
IrcMessage msg = new IrcMessage ( serverHost , channelName , message ) ;
2018-03-10 12:10:10 +03:00
ircMessageService . save ( msg ) ;
}
}