1 ;;; riece-channel.el --- a channel object
2 ;; Copyright (C) 1998-2003 Daiki Ueno
4 ;; Author: Daiki Ueno <ueno@unixuser.org>
6 ;; Keywords: IRC, riece
8 ;; This file is part of Riece.
10 ;; This program is free software; you can redistribute it and/or modify
11 ;; it under the terms of the GNU General Public License as published by
12 ;; the Free Software Foundation; either version 2, or (at your option)
15 ;; This program is distributed in the hope that it will be useful,
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ;; GNU General Public License for more details.
20 ;; You should have received a copy of the GNU General Public License
21 ;; along with GNU Emacs; see the file COPYING. If not, write to the
22 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
23 ;; Boston, MA 02111-1307, USA.
27 (require 'riece-options)
28 (require 'riece-globals)
29 (require 'riece-identity)
32 (defun riece-find-channel (name)
33 "Get a channel object named NAME from the server buffer."
34 (let ((symbol (intern-soft (riece-identity-canonicalize-prefix name)
37 (symbol-value symbol))))
39 (defun riece-forget-channel (name)
40 (let ((symbol (intern-soft (riece-identity-canonicalize-prefix name)
44 (unintern (symbol-name symbol) riece-obarray))))
46 (defun riece-make-channel (users topic modes banned invited uninvited key)
47 "Make an instance of channel object.
48 Arguments are appropriate to channel users, topic, modes, banned
49 users, invited users, uninvited users, and the channel key,
51 (vector users topic modes banned invited uninvited))
53 (defun riece-get-channel (name)
54 (let ((symbol (intern-soft (riece-identity-canonicalize-prefix name)
58 (set (intern (riece-identity-canonicalize-prefix name)
60 (riece-make-channel nil nil nil nil nil nil nil)))))
62 (defun riece-channel-users (channel)
63 "Return the users of CHANNEL."
66 (defun riece-channel-topic (channel)
67 "Return the topic of CHANNEL."
70 (defun riece-channel-modes (channel)
71 "Return the modes of CHANNEL."
74 (defun riece-channel-banned (channel)
75 "Return the banned users of CHANNEL."
78 (defun riece-channel-invited (channel)
79 "Return the invited users of CHANNEL."
82 (defun riece-channel-uninvited (channel)
83 "Return the uninvited users of CHANNEL."
86 (defun riece-channel-key (channel)
87 "Return the key of CHANNEL."
90 (defun riece-channel-set-users (channel value)
91 "Set the users of CHANNEL to VALUE."
92 (aset channel 0 value))
94 (defun riece-channel-set-topic (channel value)
95 "Set the topic of CHANNEL to VALUE."
96 (aset channel 1 value))
98 (defun riece-channel-set-modes (channel value)
99 "Set the modes of CHANNEL to VALUE."
100 (aset channel 2 value))
102 (defun riece-channel-set-banned (channel value)
103 "Set the banned users of CHANNEL to VALUE."
104 (aset channel 3 value))
106 (defun riece-channel-set-invited (channel value)
107 "Set the invited users of CHANNEL to VALUE."
108 (aset channel 4 value))
110 (defun riece-channel-set-uninvited (channel value)
111 "Set the uninvited users of CHANNEL to VALUE."
112 (aset channel 5 value))
114 (defun riece-channel-set-key (channel value)
115 "Set the key of CHANNEL to VALUE."
116 (aset channel 6 value))
118 (defun riece-channel-get-users (name)
119 "Return channel's users as list."
120 (riece-channel-users (riece-get-channel name)))
122 (defun riece-channel-get-topic (name)
123 "Return channel's topic."
124 (riece-channel-topic (riece-get-channel name)))
126 (defun riece-channel-get-modes (name)
127 "Return channel's modes as list."
128 (riece-channel-modes (riece-get-channel name)))
130 (defun riece-channel-get-banned (name)
131 "Return channel's banned users as list."
132 (riece-channel-banned (riece-get-channel name)))
134 (defun riece-channel-get-invited (name)
135 "Return channel's invited users as list."
136 (riece-channel-invited (riece-get-channel name)))
138 (defun riece-channel-get-uninvited (name)
139 "Return channel's uninvited users as list."
140 (riece-channel-uninvited (riece-get-channel name)))
142 (defun riece-channel-get-key (name)
143 "Return channel's key."
144 (riece-channel-key (riece-get-channel name)))
146 ;;; Functions called from `riece-handle-mode-message':
147 (defun riece-channel-toggle-mode (name mode flag)
148 "Add or remove channel MODE of channel."
149 (let* ((channel (riece-get-channel name))
150 (modes (riece-channel-modes channel)))
152 (unless (memq mode modes)
153 (riece-channel-set-modes channel (cons mode modes)))
154 (if (memq mode modes)
155 (riece-channel-set-modes channel (delq mode modes))))))
157 (defun riece-channel-toggle-banned (name pattern flag)
158 "Add or remove banned PATTERN of channel."
159 (let* ((channel (riece-get-channel name))
160 (banned (riece-channel-banned channel)))
162 (unless (member pattern banned)
163 (riece-channel-set-banned channel (cons pattern banned)))
164 (if (setq pattern (car (member pattern banned)))
165 (riece-channel-set-banned channel (delq pattern banned))))))
167 (defun riece-channel-toggle-invited (name pattern flag)
168 "Add or remove invited PATTERN of channel."
169 (let* ((channel (riece-get-channel name))
170 (invited (riece-channel-invited channel)))
172 (unless (member pattern invited)
173 (riece-channel-set-invited channel (cons pattern invited)))
174 (if (setq pattern (car (member pattern invited)))
175 (riece-channel-set-invited channel (delq pattern invited))))))
177 (defun riece-channel-toggle-uninvited (name pattern flag)
178 "Add or remove uninvited PATTERN to channel."
179 (let* ((channel (riece-get-channel name))
180 (uninvited (riece-channel-uninvited channel)))
182 (unless (member pattern uninvited)
183 (riece-channel-set-uninvited channel (cons pattern uninvited)))
184 (if (setq pattern (car (member pattern uninvited)))
185 (riece-channel-set-uninvited
186 channel (delq pattern uninvited))))))
188 (defun riece-channel-toggle-user (name user flag)
189 "Add or remove an user to channel."
190 (let* ((channel (riece-get-channel name))
191 (users (riece-channel-users channel)))
193 (unless (riece-identity-assoc user users t)
194 (riece-channel-set-users channel (cons (list user) users)))
195 (if (setq user (riece-identity-assoc user users t))
196 (riece-channel-set-users channel (delq user users))))))
198 (defun riece-channel-toggle-operator (name user flag)
199 "Add or remove an operator to channel."
200 (let* ((channel (riece-get-channel name))
201 (users (riece-channel-users channel)))
202 (setq user (riece-identity-assoc user users t))
205 (setcdr user (cons ?o (cdr user)))
206 (riece-channel-set-users channel (cons (list user ?o) users)))
208 (setcdr user (delq ?o (cdr user)))))))
210 (defun riece-channel-toggle-speaker (name user flag)
211 "Add or remove an speaker to channel."
212 (let* ((channel (riece-get-channel name))
213 (users (riece-channel-users channel)))
214 (setq user (riece-identity-assoc user users t))
217 (setcdr user (cons ?v (cdr user)))
218 (riece-channel-set-users channel (cons (list user ?v) users)))
220 (setcdr user (delq ?v (cdr user)))))))
222 (provide 'riece-channel)
224 ;;; riece-channel.el ends here