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 operators speakers
47 topic modes banned invited uninvited
49 "Make an instance of channel object.
50 Arguments are appropriate to channel users, operators, speakers
51 \(+v), topic, modes, banned users, invited users, uninvited users, and
52 the channel key, respectively."
53 (vector users operators speakers topic modes banned invited uninvited))
55 (defun riece-get-channel (name)
56 (let ((symbol (intern-soft (riece-identity-canonicalize-prefix name)
60 (set (intern (riece-identity-canonicalize-prefix name)
62 (riece-make-channel nil nil nil nil nil nil nil nil nil)))))
64 (defun riece-channel-users (channel)
65 "Return the users of CHANNEL."
68 (defun riece-channel-operators (channel)
69 "Return the operators of CHANNEL."
72 (defun riece-channel-speakers (channel)
73 "Return the speakers of CHANNEL."
76 (defun riece-channel-topic (channel)
77 "Return the topic of CHANNEL."
80 (defun riece-channel-modes (channel)
81 "Return the modes of CHANNEL."
84 (defun riece-channel-banned (channel)
85 "Return the banned users of CHANNEL."
88 (defun riece-channel-invited (channel)
89 "Return the invited users of CHANNEL."
92 (defun riece-channel-uninvited (channel)
93 "Return the uninvited users of CHANNEL."
96 (defun riece-channel-key (channel)
97 "Return the key of CHANNEL."
100 (defun riece-channel-set-users (channel value)
101 "Set the users of CHANNEL to VALUE."
102 (aset channel 0 value))
104 (defun riece-channel-set-operators (channel value)
105 "Set the operators of CHANNEL to VALUE."
106 (aset channel 1 value))
108 (defun riece-channel-set-speakers (channel value)
109 "Set the speakers of CHANNEL to VALUE."
110 (aset channel 2 value))
112 (defun riece-channel-set-topic (channel value)
113 "Set the topic of CHANNEL to VALUE."
114 (aset channel 3 value))
116 (defun riece-channel-set-modes (channel value)
117 "Set the modes of CHANNEL to VALUE."
118 (aset channel 4 value))
120 (defun riece-channel-set-banned (channel value)
121 "Set the banned users of CHANNEL to VALUE."
122 (aset channel 5 value))
124 (defun riece-channel-set-invited (channel value)
125 "Set the invited users of CHANNEL to VALUE."
126 (aset channel 6 value))
128 (defun riece-channel-set-uninvited (channel value)
129 "Set the uninvited users of CHANNEL to VALUE."
130 (aset channel 7 value))
132 (defun riece-channel-set-key (channel value)
133 "Set the key of CHANNEL to VALUE."
134 (aset channel 8 value))
136 (defun riece-channel-get-users (name)
137 "Return channel's users as list."
138 (riece-channel-users (riece-get-channel name)))
140 (defun riece-channel-get-operators (name)
141 "Return channel's operators as list."
142 (riece-channel-operators (riece-get-channel name)))
144 (defun riece-channel-get-speakers (name)
145 "Return channel's speakers as list."
146 (riece-channel-speakers (riece-get-channel name)))
148 (defun riece-channel-get-topic (name)
149 "Return channel's topic."
150 (riece-channel-topic (riece-get-channel name)))
152 (defun riece-channel-get-modes (name)
153 "Return channel's modes as list."
154 (riece-channel-modes (riece-get-channel name)))
156 (defun riece-channel-get-banned (name)
157 "Return channel's banned users as list."
158 (riece-channel-banned (riece-get-channel name)))
160 (defun riece-channel-get-invited (name)
161 "Return channel's invited users as list."
162 (riece-channel-invited (riece-get-channel name)))
164 (defun riece-channel-get-uninvited (name)
165 "Return channel's uninvited users as list."
166 (riece-channel-uninvited (riece-get-channel name)))
168 (defun riece-channel-get-key (name)
169 "Return channel's key."
170 (riece-channel-key (riece-get-channel name)))
172 ;;; Functions called from `riece-handle-mode-message':
173 (defun riece-channel-toggle-mode (name mode flag)
174 "Add or remove channel MODE of channel."
175 (let* ((channel (riece-get-channel name))
176 (modes (riece-channel-modes channel)))
178 (unless (memq mode modes)
179 (riece-channel-set-modes channel (cons mode modes)))
180 (if (memq mode modes)
181 (riece-channel-set-modes channel (delq mode modes))))))
183 (defun riece-channel-toggle-banned (name pattern flag)
184 "Add or remove banned PATTERN of channel."
185 (let* ((channel (riece-get-channel name))
186 (banned (riece-channel-banned channel)))
188 (unless (member pattern banned)
189 (riece-channel-set-banned channel (cons pattern banned)))
190 (if (setq pattern (car (member pattern banned)))
191 (riece-channel-set-banned channel (delq pattern banned))))))
193 (defun riece-channel-toggle-invited (name pattern flag)
194 "Add or remove invited PATTERN of channel."
195 (let* ((channel (riece-get-channel name))
196 (invited (riece-channel-invited channel)))
198 (unless (member pattern invited)
199 (riece-channel-set-invited channel (cons pattern invited)))
200 (if (setq pattern (car (member pattern invited)))
201 (riece-channel-set-invited channel (delq pattern invited))))))
203 (defun riece-channel-toggle-uninvited (name pattern flag)
204 "Add or remove uninvited PATTERN to channel."
205 (let* ((channel (riece-get-channel name))
206 (uninvited (riece-channel-uninvited channel)))
208 (unless (member pattern uninvited)
209 (riece-channel-set-uninvited channel (cons pattern uninvited)))
210 (if (setq pattern (car (member pattern uninvited)))
211 (riece-channel-set-uninvited
212 channel (delq pattern uninvited))))))
214 (defun riece-channel-toggle-user (name user flag)
215 "Add or remove an user to channel."
216 (let* ((channel (riece-get-channel name))
217 (users (riece-channel-users channel)))
219 (unless (member user users)
220 (riece-channel-set-users channel (cons user users)))
221 (if (setq user (car (member user users)))
222 (riece-channel-set-users channel (delq user users))))))
224 (defun riece-channel-intern-user (channel user)
225 (unless (setq user (car (member user (riece-channel-users channel))))
227 (message "%s is not a member of channel" user)))
230 (defun riece-channel-toggle-operator (name user flag)
231 "Add or remove an operator to channel."
232 (let* ((channel (riece-get-channel name))
233 (operators (riece-channel-operators channel)))
234 (setq user (riece-channel-intern-user channel user))
236 (unless (memq user operators)
237 (riece-channel-set-operators channel (cons user operators)))
238 (if (setq user (car (memq user operators)))
239 (riece-channel-set-operators channel (delq user operators))))))
241 (defun riece-channel-toggle-speaker (name user flag)
242 "Add or remove an speaker to channel."
243 (let* ((channel (riece-get-channel name))
244 (speakers (riece-channel-speakers channel)))
245 (setq user (riece-channel-intern-user channel user))
247 (unless (memq user speakers)
248 (riece-channel-set-speakers channel (cons user speakers)))
249 (if (setq user (car (memq user speakers)))
250 (riece-channel-set-speakers channel (delq user speakers))))))
252 (defun riece-channel-operator-p (channel user)
253 "Return non-nil, if USER has operator privileges in channel."
254 (memq (riece-channel-intern-user channel user)
255 (riece-channel-operators channel)))
257 (defun riece-channel-speaker-p (channel user)
258 "Return non-nil, if USER is allowed to speak in channel."
259 (memq (riece-channel-intern-user channel user)
260 (riece-channel-speakers channel)))
262 (provide 'riece-channel)
264 ;;; riece-channel.el ends here