Replaced 'underscore' with 'lodash'.
[KiwiIRC.git] / server / clientcommands.js
1 var _ = require('lodash');
2
3
4
5
6 var ClientCommands = function (client) {
7 this.client = client;
8 };
9 module.exports = ClientCommands;
10
11 ClientCommands.prototype.run = function (command, args, irc_connection, callback) {
12 // Do we have a function to handle this command?
13 if (!listeners[command.toUpperCase()]) {
14 return;
15 }
16
17 return listeners[command.toUpperCase()](args, irc_connection, callback);
18 };
19
20
21
22
23 var listeners = {
24 PRIVMSG: function (args, irc_connection, callback) {
25 if (args.target && (args.msg)) {
26 // TODO: Enable plugin support here again
27 //obj = kiwi.kiwi_mod.run('msgsend', args, {websocket: websocket});
28 //if (obj !== null) {
29 irc_connection.write('PRIVMSG ' + args.target + ' :' + args.msg, callback);
30 //}
31 }
32 },
33
34
35 CTCP: function (args, irc_connection, callback) {
36 if ((args.target) && (args.type)) {
37 if (args.request) {
38 irc_connection.write('PRIVMSG ' + args.target + ' :' + String.fromCharCode(1) + args.type.toUpperCase() + ' ' + args.params + String.fromCharCode(1), callback);
39 } else {
40 irc_connection.write('NOTICE ' + args.target + ' :' + String.fromCharCode(1) + args.type.toUpperCase() + ' ' + args.params + String.fromCharCode(1), callback);
41 }
42 }
43 },
44
45
46 RAW: function (args, irc_connection, callback) {
47 irc_connection.write(args.data, callback);
48 },
49
50
51 JOIN: function (args, irc_connection, callback) {
52 if (args.channel) {
53 channels = args.channel.split(",");
54 keys = (args.key) ? args.key.split(",") : [];
55 _.each(channels, function (chan, index) {
56 irc_connection.write('JOIN ' + chan + ' ' + (keys[index] || ''), callback);
57 });
58 }
59 },
60
61
62 PART: function (args, irc_connection, callback) {
63 if (args.channel) {
64 _.each(args.channel.split(","), function (chan) {
65 irc_connection.write('PART ' + chan, callback);
66 });
67 }
68 },
69
70
71 TOPIC: function (args, irc_connection, callback) {
72 if (args.channel) {
73 if (args.topic) {
74 irc_connection.write('TOPIC ' + args.channel + ' :' + args.topic, callback);
75 } else {
76 irc_connection.write('TOPIC ' + args.channel, callback);
77 }
78 }
79 },
80
81
82 KICK: function (args, irc_connection, callback) {
83 if ((args.channel) && (args.nick)) {
84 irc_connection.write('KICK ' + args.channel + ' ' + args.nick + ':' + args.reason, callback);
85 }
86 },
87
88
89 QUIT: function (args, irc_connection, callback) {
90 websocket.ircConnection.end('QUIT :' + args.message + '\r\n');
91 websocket.sentQUIT = true;
92 websocket.ircConnection.destroySoon();
93 websocket.disconnect();
94 },
95
96
97 NOTICE: function (args, irc_connection, callback) {
98 if ((args.target) && (args.msg)) {
99 irc_connection.write('NOTICE ' + args.target + ' :' + args.msg, callback);
100 }
101 },
102
103
104 MODE: function (args, irc_connection, callback) {
105 if ((args.target) && (args.mode)) {
106 irc_connection.write('MODE ' + args.target + ' ' + args.mode + ' ' + args.params, callback);
107 }
108 },
109
110
111 NICK: function (args, irc_connection, callback) {
112 if (args.nick) {
113 irc_connection.write('NICK ' + args.nick, callback);
114 }
115 },
116
117
118 KIWI: function (args, irc_connection, callback) {
119 if ((args.target) && (args.data)) {
120 irc_connection.write('PRIVMSG ' + args.target + ': ' + String.fromCharCode(1) + 'KIWI ' + args.data + String.fromCharCode(1), callback);
121 }
122 }
123 };