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.

ModeProcessor.kt 1.3KB

12345678910111213141516171819202122232425262728293031323334
  1. package com.dmdirc.ktirc.messages.processors
  2. import com.dmdirc.ktirc.events.ModeChanged
  3. import com.dmdirc.ktirc.messages.RPL_CHANNELMODEIS
  4. import com.dmdirc.ktirc.messages.RPL_UMODEIS
  5. import com.dmdirc.ktirc.model.IrcMessage
  6. import com.dmdirc.ktirc.model.User
  7. import com.dmdirc.ktirc.util.logger
  8. internal class ModeProcessor : MessageProcessor {
  9. private val log by logger()
  10. override val commands = arrayOf(RPL_CHANNELMODEIS, RPL_UMODEIS, "MODE")
  11. override fun process(message: IrcMessage): List<ModeChanged> {
  12. val isDiscovery = message.command == RPL_CHANNELMODEIS || message.command == RPL_UMODEIS
  13. val paramOffset = if (message.command == RPL_CHANNELMODEIS) 1 else 0
  14. if (message.params.size < paramOffset + 2) {
  15. log.warning { "Discarding MODE line with insufficient parameters: $message" }
  16. return emptyList()
  17. }
  18. return listOf(ModeChanged(
  19. message.metadata,
  20. user = message.sourceUser ?: User("*"),
  21. target = String(message.params[paramOffset]),
  22. modes = String(message.params[paramOffset + 1]),
  23. arguments = message.params.takeLast(message.params.size - paramOffset - 2).map { String(it) }.toTypedArray(),
  24. discovered = isDiscovery))
  25. }
  26. }