You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

NoticeProcessor.kt 1.3KB

1234567891011121314151617181920212223242526272829
  1. package com.dmdirc.ktirc.messages.processors
  2. import com.dmdirc.ktirc.events.CtcpReplyReceived
  3. import com.dmdirc.ktirc.events.IrcEvent
  4. import com.dmdirc.ktirc.events.NoticeReceived
  5. import com.dmdirc.ktirc.messages.CTCP_BYTE
  6. import com.dmdirc.ktirc.model.IrcMessage
  7. import com.dmdirc.ktirc.model.User
  8. internal class NoticeProcessor : MessageProcessor {
  9. override val commands = arrayOf("NOTICE")
  10. override fun process(message: IrcMessage) = when {
  11. message.isCtcp() -> handleCtcp(message, message.sourceUser)
  12. else -> listOf(NoticeReceived(message.metadata, message.sourceUser ?: User("*"), String(message.params[0]), String(message.params[1])))
  13. }
  14. private fun handleCtcp(message: IrcMessage, user: User?): List<IrcEvent> {
  15. user ?: return emptyList()
  16. val content = String(message.params[1].sliceArray(1 until message.params[1].size - 1))
  17. val parts = content.split(' ', limit=2)
  18. val body = if (parts.size == 2) parts[1] else ""
  19. return listOf(CtcpReplyReceived(message.metadata, user, String(message.params[0]), parts[0], body))
  20. }
  21. private fun IrcMessage.isCtcp() = params[1].size > 2 && params[1][0] == CTCP_BYTE && params[1][params[1].size - 1] == CTCP_BYTE
  22. }