package com.integralblue.availability.service.impl;
import java.util.Optional;
import javax.annotation.PostConstruct;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.stereotype.Service;
import com.integralblue.availability.service.SlackMessageService;
import com.ullink.slack.simpleslackapi.SlackSession;
import com.ullink.slack.simpleslackapi.events.SlackMessagePosted;
@ConditionalOnBean(SlackSession.class)
@Service
public class SlackBotServiceImpl {
@Autowired
private SlackSession slackSession;
@Autowired
private SlackMessageService slackMessageService;
@PostConstruct
public void afterPropertiesSet(){
slackSession.addMessagePostedListener( (SlackMessagePosted event, SlackSession session) -> {
// don't pay any attention to messages we sent to avoid infinite loops
if(!event.getSender().getId().equals(session.sessionPersona().getId())){
if(StringUtils.startsWithIgnoreCase(event.getMessageContent(),"<@" + session.sessionPersona().getId() + ">")){
// the message is addressed to this bot
String message = event.getMessageContent().substring(session.sessionPersona().getId().length()+3);
if(message.startsWith(":")){
message = message.substring(1);
}
message = message.trim();
session.sendMessage(event.getChannel(), slackMessageService.respondToMessage(Optional.of(event.getSender()), message), null);
}else if(event.getChannel().isDirect()){
// this is a direct message, so the bot should reply
session.sendMessage(event.getChannel(), slackMessageService.respondToMessage(Optional.of(event.getSender()), event.getMessageContent()), null);
}else if(StringUtils.containsIgnoreCase(event.getMessageContent(),"<@" + session.sessionPersona().getId() + ">")){
// this bot is mentioned, so it should say something
session.sendMessage(event.getChannel(), "How can I help you? You can send messages to @" + session.sessionPersona().getUserName() + " or open a direct message chat. For help, say '@" + session.sessionPersona().getUserName() + "' or send a direct message with the text 'help'", null);
}
}
});
}
}