]> jfr.im git - irc/rizon/acid.git/blob - acid/src/main/java/net/rizon/acid/messages/TMode.java
5694efae798577fdc32960a660fbaeb5fcc884f7
[irc/rizon/acid.git] / acid / src / main / java / net / rizon / acid / messages / TMode.java
1 /*
2 * Copyright (C) 2017 Kristina Brooks. All rights reserved.
3 *
4 * Support for TS6 TMODE.
5 * Format is :<SID|UID> TMODE <TS> <CHANNAME> <MODESTRING>
6 */
7
8 package net.rizon.acid.messages;
9
10 import net.rizon.acid.core.Acidictive;
11 import net.rizon.acid.core.Channel;
12 import net.rizon.acid.core.Message;
13 import net.rizon.acid.core.Server;
14 import net.rizon.acid.core.User;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
17
18 public class TMode extends Message
19 {
20 private static final Logger log = LoggerFactory.getLogger(TMode.class);
21
22 public TMode()
23 {
24 super("TMODE");
25 }
26
27 /* common handler */
28 private void handleTsModeChange(String setBy, String[] params) {
29 Channel chan = Channel.findChannel(params[1]);
30 if (chan == null || shouldDropTsMessage(chan.getTS(), params[0]))
31 return;
32
33 String modes = params[2];
34 for (int i = 3; i < params.length; i++)
35 modes += " " + params[i];
36
37 Acidictive.onChanMode(setBy, chan, modes);
38
39 if (chan.size() == 0 && !chan.hasMode('z'))
40 chan.destroy();
41 }
42
43 /*
44 * old implementation handled these in ::on which is redundant since
45 * AcidCore::processMessage already does these lookups, no need to
46 * do them again.
47 */
48
49 @Override
50 public void onUser(User user, String[] params)
51 {
52 handleTsModeChange(user.getNick(), params);
53 }
54
55 @Override
56 public void onServer(Server server, String[] params)
57 {
58 handleTsModeChange(server.getName(), params);
59 }
60 }