Navigation Menu

Skip to content
This repository has been archived by the owner on Aug 18, 2020. It is now read-only.

Commit

Permalink
Added more complex class library
Browse files Browse the repository at this point in the history
  • Loading branch information
Renxiem committed Sep 12, 2018
1 parent ec5842e commit d224e9f
Showing 1 changed file with 30 additions and 12 deletions.
Expand Up @@ -3,7 +3,7 @@ package org.codeoverflow.chatoverflow.service.twitch.impl
import java.util.Calendar
import java.util.function.Consumer

import org.codeoverflow.chatoverflow.api.io.input.chat.{ChatMessage, TwitchChatInput}
import org.codeoverflow.chatoverflow.api.io.input.chat._
import org.codeoverflow.chatoverflow.service.Connection
import org.codeoverflow.chatoverflow.service.twitch.TwitchConnector
import org.pircbotx.hooks.events.{MessageEvent, UnknownEvent}
Expand All @@ -16,12 +16,14 @@ import scala.collection.mutable.ListBuffer
*/
class TwitchChatInputImpl extends Connection[TwitchConnector] with TwitchChatInput {

private val messages: ListBuffer[ChatMessage] = ListBuffer[ChatMessage]()
private val privateMessages: ListBuffer[ChatMessage] = ListBuffer[ChatMessage]()
private val messages: ListBuffer[TwitchChatMessage] = ListBuffer[TwitchChatMessage]()
private val privateMessages: ListBuffer[TwitchChatMessage] = ListBuffer[TwitchChatMessage]()
private val whisperRegex = """^:([^!]+?)!.*?:(.*)$""".r
private val wholeEmoticonRegex = """(\d+):([\d,-]+)""".r
private val emoticonRegex = """(\d+)-(\d+)""".r

private val messageHandler = ListBuffer[Consumer[ChatMessage]]()
private val privateMessageHandler = ListBuffer[Consumer[ChatMessage]]()
private val messageHandler = ListBuffer[Consumer[TwitchChatMessage]]()
private val privateMessageHandler = ListBuffer[Consumer[TwitchChatMessage]]()

override def init(): Unit = {

Expand All @@ -32,9 +34,25 @@ class TwitchChatInputImpl extends Connection[TwitchConnector] with TwitchChatInp
}

private def onMessage(event: MessageEvent): Unit = {
val message = event.getMessage
val color = if (event.getV3Tags.get("color").contains("#")) event.getV3Tags.get("color") else ""
val isSub = if (event.getV3Tags.get("subscriber") == "1") true else false
val msg: ChatMessage = new ChatMessage(event.getMessage, event.getUser.getNick, event.getTimestamp, isSub, color)
val subscriber = event.getV3Tags.get("subscriber") == "1"
val moderator = event.getV3Tags.get("mod") == "1"
val broadcaster = event.getV3Tags.get("badges").contains("broadcaster/1")
val premium = event.getV3Tags.get("badges").contains("premium/1")
val author = new TwitchChatMessageAuthor(event.getUser.getNick, broadcaster, moderator, subscriber, premium)
val channel = new Channel(event.getChannelSource)
val emoticons = new java.util.ArrayList[ChatEmoticon]()
wholeEmoticonRegex.findAllMatchIn(event.getV3Tags.get("emotes")).foreach(matchedElement => {
val id = matchedElement.group(1)
emoticonRegex.findAllMatchIn(matchedElement.group(2)).foreach(matchedElement => {
val index = matchedElement.group(1).toInt
val regex = message.substring(index, matchedElement.group(2).toInt + 1)
val emoticon = new TwitchChatEmoticon(regex, id, index)
emoticons.add(emoticon)
})
})
val msg = new TwitchChatMessage(author, message, event.getTimestamp, channel, emoticons, color)

messageHandler.foreach(consumer => consumer.accept(msg))
messages += msg
Expand All @@ -47,30 +65,30 @@ class TwitchChatInputImpl extends Connection[TwitchConnector] with TwitchChatInp
val name = matchedElement.get.group(1)
val message = matchedElement.get.group(2)
val timestamp = event.getTimestamp
val msg: ChatMessage = new ChatMessage(message, name, timestamp)
val msg = new TwitchChatMessage(new TwitchChatMessageAuthor(name), message, timestamp, null)

privateMessageHandler.foreach(consumer => consumer.accept(msg))
privateMessages += msg
}
}

override def
getLastMessages(lastMilliseconds: Long): java.util.List[ChatMessage] = {
getLastMessages(lastMilliseconds: Long): java.util.List[TwitchChatMessage] = {
val currentTime = Calendar.getInstance.getTimeInMillis

messages.filter(_.getTimestamp > currentTime - lastMilliseconds).toList.asJava
}


override def getLastPrivateMessages(lastMilliseconds: Long): java.util.List[ChatMessage] = {
override def getLastPrivateMessages(lastMilliseconds: Long): java.util.List[TwitchChatMessage] = {
val currentTime = Calendar.getInstance.getTimeInMillis

privateMessages.filter(_.getTimestamp > currentTime - lastMilliseconds).toList.asJava
}

override def registerMessageHandler(handler: Consumer[ChatMessage]): Unit = messageHandler += handler
override def registerMessageHandler(handler: Consumer[TwitchChatMessage]): Unit = messageHandler += handler

override def registerPrivateMessageHandler(handler: Consumer[ChatMessage]): Unit = privateMessageHandler += handler
override def registerPrivateMessageHandler(handler: Consumer[TwitchChatMessage]): Unit = privateMessageHandler += handler

override def setChannel(channel: String): Unit = sourceConnector.setChannel(channel)
}

0 comments on commit d224e9f

Please sign in to comment.