summaryrefslogtreecommitdiff
path: root/lib/exirc/channels.ex
diff options
context:
space:
mode:
authorJeff Weiss <jeff.weiss@puppetlabs.com>2016-03-30 23:16:33 -0700
committerJeff Weiss <jeff.weiss@puppetlabs.com>2016-03-30 23:19:12 -0700
commitdcee567e1d2d98173df6ec022ec1ed5f66c92b9d (patch)
tree961ef79ce3b5e784d9fbccf9d6595e70dcd0845b /lib/exirc/channels.ex
parentMerge pull request #46 from jeffweiss/add_test_for_stripping_rank_from_nicks (diff)
handle QUIT messages
Prior to this commit ExIrc did not know what to do with QUIT messages, which would result in nicks remaining in the `Channels` data structure when they should not. This commit implements handling of the QUIT message and ensures that the new `Channels.user_quit` function is called to flush the departing user from all known channels. Close #40
Diffstat (limited to 'lib/exirc/channels.ex')
-rw-r--r--lib/exirc/channels.ex10
1 files changed, 10 insertions, 0 deletions
diff --git a/lib/exirc/channels.ex b/lib/exirc/channels.ex
index b7a6d4c..b108de9 100644
--- a/lib/exirc/channels.ex
+++ b/lib/exirc/channels.ex
@@ -118,6 +118,16 @@ defmodule ExIrc.Channels do
users_manip(channel_tree, channel_name, manipfn)
end
+ def user_quit(channel_tree, nick) do
+ pnick = strip_rank([nick])
+ manipfn = fn(channel_nicks) -> :lists.usort(channel_nicks -- pnick) end
+ foldl = fn(channel_name, new_channel_tree) ->
+ name = downcase(channel_name)
+ users_manip(new_channel_tree, name, manipfn)
+ end
+ :lists.foldl(foldl, channel_tree, channels(channel_tree))
+ end
+
@doc """
Update the nick of a user in a tracked channel when they change their nick
"""