Browse Source

Handle userhost-in-names responses

tags/v0.1.0
Chris Smith 5 years ago
parent
commit
36f042ac8f

+ 3
- 1
src/main/kotlin/com/dmdirc/ktirc/events/ChannelStateHandler.kt View File

@@ -52,7 +52,7 @@ class ChannelStateHandler : EventHandler {
52 52
         val modePrefixes = client.serverState.features[ServerFeature.ModePrefixes]!!
53 53
         for (user in event.names) {
54 54
             user.takeWhile { modePrefixes.isPrefix(it) }.let { prefix ->
55
-                channel.users += ChannelUser(user.substring(prefix.length), modePrefixes.getModes(prefix))
55
+                channel.users += ChannelUser(user.nickname(prefix.length), modePrefixes.getModes(prefix))
56 56
             }
57 57
         }
58 58
     }
@@ -68,4 +68,6 @@ class ChannelStateHandler : EventHandler {
68 68
         client.channelState.forEach { it.users -= event.user.nickname }
69 69
     }
70 70
 
71
+    private fun String.nickname(prefixLength: Int) = substring(prefixLength).substringBefore('!')
72
+
71 73
 }

+ 14
- 0
src/test/kotlin/com/dmdirc/ktirc/events/ChannelStateHandlerTest.kt View File

@@ -100,6 +100,20 @@ internal class ChannelStateHandlerTest {
100 100
         assertEquals("", channel.users["cerealKiller"]?.modes)
101 101
     }
102 102
 
103
+    @Test
104
+    fun `ChannelStateHandler adds users with full hosts`() = runBlocking {
105
+        val channel = ChannelState("#thegibson") { CaseMapping.Rfc }
106
+        channelStateMap += channel
107
+        serverState.features[ServerFeature.ModePrefixes] = ModePrefixMapping("ov", "@+")
108
+
109
+        handler.processEvent(ircClient, ChannelNamesReceived("#thegibson", listOf("@zeroCool!dade@root.localhost", "+acidBurn!libby@root.localhost")))
110
+        handler.processEvent(ircClient, ChannelNamesFinished("#thegibson"))
111
+
112
+        assertEquals(2, channel.users.count())
113
+        assertEquals("o", channel.users["zeroCool"]?.modes)
114
+        assertEquals("v", channel.users["acidBurn"]?.modes)
115
+    }
116
+
103 117
     @Test
104 118
     fun `ChannelStateHandler removes state object for local parts`() = runBlocking {
105 119
         val channel = ChannelState("#thegibson") { CaseMapping.Rfc }

Loading…
Cancel
Save