浏览代码

channel invite mode/list

tags/v0.1.0
Jeremy Latt 10 年前
父节点
当前提交
04c30c8c9b
共有 2 个文件被更改,包括 33 次插入14 次删除
  1. 23
    12
      irc/channel.go
  2. 10
    2
      irc/client_lookup_set.go

+ 23
- 12
irc/channel.go 查看文件

@@ -323,29 +323,40 @@ func (channel *Channel) applyModeMember(client *Client, mode ChannelMode,
323 323
 	return false
324 324
 }
325 325
 
326
-func (channel *Channel) applyModeMask(client *Client, mode ChannelMode, op ModeOp, mask string) bool {
327
-	if !channel.ClientIsOperator(client) {
328
-		client.ErrChanOPrivIsNeeded(channel)
329
-		return false
326
+func (channel *Channel) ShowMaskList(client *Client, mode ChannelMode) {
327
+	for lmask := range channel.lists[mode].masks {
328
+		client.RplMaskList(mode, channel, lmask)
330 329
 	}
330
+	client.RplEndOfMaskList(mode, channel)
331
+}
331 332
 
333
+func (channel *Channel) applyModeMask(client *Client, mode ChannelMode, op ModeOp,
334
+	mask string) bool {
332 335
 	list := channel.lists[mode]
333 336
 	if list == nil {
334 337
 		// This should never happen, but better safe than panicky.
335 338
 		return false
336 339
 	}
337 340
 
341
+	if (op == List) || (mask == "") {
342
+		channel.ShowMaskList(client, mode)
343
+		return false
344
+	}
345
+
346
+	if !channel.ClientIsOperator(client) {
347
+		client.ErrChanOPrivIsNeeded(channel)
348
+		return false
349
+	}
350
+
338 351
 	if op == Add {
339
-		list.Add(mask)
340
-	} else if op == Remove {
341
-		list.Remove(mask)
352
+		return list.Add(mask)
342 353
 	}
343 354
 
344
-	for lmask := range channel.lists[mode].masks {
345
-		client.RplMaskList(mode, channel, lmask)
355
+	if op == Remove {
356
+		return list.Remove(mask)
346 357
 	}
347
-	client.RplEndOfMaskList(mode, channel)
348
-	return true
358
+
359
+	return false
349 360
 }
350 361
 
351 362
 func (channel *Channel) applyMode(client *Client, change *ChannelModeChange) bool {
@@ -353,7 +364,7 @@ func (channel *Channel) applyMode(client *Client, change *ChannelModeChange) boo
353 364
 	case BanMask, ExceptMask, InviteMask:
354 365
 		return channel.applyModeMask(client, change.mode, change.op, change.arg)
355 366
 
356
-	case Moderated, NoOutside, OpOnlyTopic, Persistent, Private:
367
+	case InviteOnly, Moderated, NoOutside, OpOnlyTopic, Persistent, Private:
357 368
 		return channel.applyModeFlag(client, change.mode, change.op)
358 369
 
359 370
 	case Key:

+ 10
- 2
irc/client_lookup_set.go 查看文件

@@ -194,14 +194,22 @@ func NewUserMaskSet() *UserMaskSet {
194 194
 	}
195 195
 }
196 196
 
197
-func (set *UserMaskSet) Add(mask string) {
197
+func (set *UserMaskSet) Add(mask string) bool {
198
+	if set.masks[mask] {
199
+		return false
200
+	}
198 201
 	set.masks[mask] = true
199 202
 	set.setRegexp()
203
+	return true
200 204
 }
201 205
 
202
-func (set *UserMaskSet) Remove(mask string) {
206
+func (set *UserMaskSet) Remove(mask string) bool {
207
+	if !set.masks[mask] {
208
+		return false
209
+	}
203 210
 	delete(set.masks, mask)
204 211
 	set.setRegexp()
212
+	return true
205 213
 }
206 214
 
207 215
 func (set *UserMaskSet) Match(userhost string) bool {

正在加载...
取消
保存