new commands & cleanup & fixes

This commit is contained in:
Evert Prants 2016-09-27 18:13:24 +03:00
parent ad769155da
commit 11a25c1444
4 changed files with 120 additions and 40 deletions

View File

@ -455,7 +455,8 @@ body {
.message.m_join { .message.m_join {
color: #008000; color: #008000;
} }
.message.m_topic .content { .message.m_topic .content,
.message.m_names .content {
color: #03a9f4; color: #03a9f4;
font-weight: bold; font-weight: bold;
} }

View File

@ -367,7 +367,7 @@ let commands = {
} else if(buffer.type != "channel") { } else if(buffer.type != "channel") {
handler.commandError(buffer, listargs[0].toUpperCase()+': Buffer is not a channel.'); handler.commandError(buffer, listargs[0].toUpperCase()+': Buffer is not a channel.');
} else if(listargs[1]) { } else if(listargs[1]) {
if(listargs[1].indexOf('#')) { if(listargs[1].indexOf('#') != -1) {
let msg = ""; let msg = "";
if(listargs[2]) if(listargs[2])
msg = listargs.slice(2).join(" "); msg = listargs.slice(2).join(" ");
@ -382,17 +382,46 @@ let commands = {
} }
}, description: "[<#channel>|<message>] [message] - Leave the channel. If no channel specified, leave the current buffer.", aliases: ['leave']}, }, description: "[<#channel>|<message>] [message] - Leave the channel. If no channel specified, leave the current buffer.", aliases: ['leave']},
topic: {execute: function(buffer, handler, command, message, listargs) {
if (!listargs[1] && buffer.type == "channel") {
irc.socket.emit("userinput", {command: "topic", server: buffer.server, message: "", arguments: [buffer.name]});
} else if(buffer.type != "channel") {
handler.commandError(buffer, listargs[0].toUpperCase()+': Buffer is not a channel.');
} else if(listargs[1]) {
if(listargs[1].indexOf('#') != -1) {
let msg = "";
if(listargs[2])
msg = listargs.slice(2).join(" ");
irc.socket.emit("userinput", {command: "topic", server: buffer.server, message: msg, arguments: [listargs[1]]});
} else {
if(buffer.type == "channel") {
irc.socket.emit("userinput", {command: "topic", server: buffer.server, message: listargs.slice(1).join(" "), arguments: [buffer.name]});
} else {
handler.commandError(buffer, listargs[0].toUpperCase()+': Buffer is not a channel.');
}
}
}
}, description: "[<#channel>|<topic>] [topic] - Sets/prints the current topic of the channel.", aliases: ['t']},
kick: {execute: function(buffer, handler, command, message, listargs) {
if(buffer.type != "channel")
return handler.commandError(buffer, listargs[0].toUpperCase()+': Buffer is not a channel!');
if(!listargs[1])
return handler.commandError(buffer, listargs[0].toUpperCase()+': Missing parameter <user>!');
irc.socket.emit("userinput", {command: "kick", server: buffer.server, message: listargs.slice(2).join(" "), arguments: [buffer.name, listargs[1]]});
}, description: "<user> <message> - Kick the following user from the channel."},
quit: {execute: function(buffer, handler, command, message, listargs) { quit: {execute: function(buffer, handler, command, message, listargs) {
irc.socket.emit("userinput", {command: "quit", server: buffer.server, message: listargs.slice(1).join(" "), arguments: []}); irc.socket.emit("userinput", {command: "quit", server: buffer.server, message: listargs.slice(1).join(" "), arguments: []});
}, description: "[<message>] - Quit the current server with message.", aliases: ['exit']}, }, description: "[<message>] - Quit the current server with message.", aliases: ['exit']},
privmsg: {execute: function(buffer, handler, command, message, listargs) { msg: {execute: function(buffer, handler, command, message, listargs) {
if(!listargs[1] || !listargs[2]) if(!listargs[1] || !listargs[2])
return handler.commandError(buffer, listargs[0].toUpperCase()+': Missing parameters!'); return handler.commandError(buffer, listargs[0].toUpperCase()+': Missing parameters!');
if(listargs[1] == '*') if(listargs[1] == '*')
listargs[1] = buffer.name; listargs[1] = buffer.name;
irc.socket.emit("userinput", {command: "privmsg", server: buffer.server, message: listargs.slice(2).join(" "), arguments: [listargs[1]]}); irc.socket.emit("userinput", {command: "privmsg", server: buffer.server, message: listargs.slice(2).join(" "), arguments: [listargs[1]]});
}, description: "<target> <message> - Sends a message to target.", aliases: ['msg', 'q', 'query', 'say']}, }, description: "<target> <message> - Sends a message to target.", aliases: ['privmsg', 'q', 'query', 'say']},
notice: {execute: function(buffer, handler, command, message, listargs) { notice: {execute: function(buffer, handler, command, message, listargs) {
if(!listargs[1] || !listargs[2]) if(!listargs[1] || !listargs[2])
@ -410,6 +439,32 @@ let commands = {
irc.socket.emit("userinput", {command: "list", server: buffer.server, message: "", arguments: listargs.splice(1)}); irc.socket.emit("userinput", {command: "list", server: buffer.server, message: "", arguments: listargs.splice(1)});
}, description: "- List all channels on the current server."}, }, description: "- List all channels on the current server."},
nick: {execute: function(buffer, handler, command, message, listargs) {
if(!listargs[1]) {
if(buffer.server != '') {
let mynick = irc.serverData[buffer.server].my_nick;
buffer.addMessage("Your nickname is: <span class='nick'>"+mynick+"</span>", null, "help");
}
return;
}
irc.socket.emit("userinput", {command: "nick", server: buffer.server, message: "", arguments: listargs.splice(1)});
}, description: "- List all channels on the current server.", aliases: ['nickname']},
names: {execute: function(buffer, handler, command, message, listargs) {
let channel = "";
if(!listargs[1]) {
if(buffer.type == 'channel')
channel = buffer.name;
else
return handler.commandError(buffer, '/'+cmd.toUpperCase()+': Buffer is not a channel!');
} else if(listargs[1].indexOf('#') == 0) {
channel = listargs[1];
} else {
return handler.commandError(buffer, '/'+cmd.toUpperCase()+': Invalid channel name!');
}
irc.socket.emit("userinput", {command: "names", server: buffer.server, message: "", arguments: [channel]});
}, description: "- List all users on the current channel.", aliases: ['nicknames']},
quote: {execute: function(buffer, handler, command, message, listargs) { quote: {execute: function(buffer, handler, command, message, listargs) {
irc.socket.emit("userinput", {command: listargs[1], server: buffer.server, message: listargs.slice(2).join(" "), arguments: listargs.splice(2)}); irc.socket.emit("userinput", {command: listargs[1], server: buffer.server, message: listargs.slice(2).join(" "), arguments: listargs.splice(2)});
}, description: "<command> [args] - Send a raw command to the server.", aliases: ['raw']}, }, description: "<command> [args] - Send a raw command to the server.", aliases: ['raw']},
@ -457,7 +512,11 @@ let commands = {
handler.commandError(buffer, '/'+cmd.toUpperCase()+': Unknown command!'); handler.commandError(buffer, '/'+cmd.toUpperCase()+': Unknown command!');
} }
} }
}, description: "<command> - Display help for command"} }, description: "<command> - Display help for command"},
clear: {execute: function(buffer, handler, command, message, listargs) {
buffer.clearMessages();
}, description: "- Clears the current buffer."}
} }
/*********************\ /*********************\
@ -781,12 +840,20 @@ class Buffer {
} }
} }
clearMessages() {
this.messages = [];
if(this.active)
clientdom.letterbox.innerHTML = "";
}
appendMessage(meta) { appendMessage(meta) {
let mesgConstr = composer.message[irc.chatType](meta.time, meta.sender, meta.message, meta.type); let mesgConstr = composer.message[irc.chatType](meta.time, meta.sender, meta.message, meta.type);
if(irc.serverData[this.server]) { if(irc.serverData[this.server]) {
let mynick = irc.serverData[this.server].my_nick;
if((meta.type == "privmsg" || meta.type == "notice" || meta.type == "action") && if((meta.type == "privmsg" || meta.type == "notice" || meta.type == "action") &&
meta.message.indexOf(irc.serverData[this.server].my_nick) != -1) meta.message.toLowerCase().indexOf(mynick.toLowerCase()) != -1 && meta.sender != mynick)
addClass(mesgConstr, "mentioned"); addClass(mesgConstr, "mentioned");
} }
@ -819,8 +886,9 @@ class Buffer {
} else { } else {
this.unreadCount += 1; this.unreadCount += 1;
if(irc.serverData[this.server]) { if(irc.serverData[this.server]) {
let mynick = irc.serverData[this.server].my_nick;
if((type == "privmsg" || type == "notice" || type == "action") && if((type == "privmsg" || type == "notice" || type == "action") &&
message.indexOf(irc.serverData[this.server].my_nick) != -1) message.toLowerCase().indexOf(mynick.toLowerCase()) != -1 && sender != mynick)
console.log("TODO: notify user of mentioned"); console.log("TODO: notify user of mentioned");
} }
} }
@ -1120,10 +1188,9 @@ class InputHandler {
this.historyCaret = 0; this.historyCaret = 0;
this.searchNicknames = []; this.searchNicknames = [];
this.i = -1; this.index = -1;
this.words = []; this.words = [];
this.last = ""; this.last = "";
this.backspace = false;
clientdom.input.onkeyup = (evt) => { clientdom.input.onkeyup = (evt) => {
let key = evt.keyCode || evt.which || evt.charCode || 0; let key = evt.keyCode || evt.which || evt.charCode || 0;
@ -1161,12 +1228,9 @@ class InputHandler {
if (clientdom.input.selectionStart == input.length && word.length) { if (clientdom.input.selectionStart == input.length && word.length) {
// Call the match() function to filter the words. // Call the match() function to filter the words.
this.tabWords = match(word, this.searchNicknames); this.tabWords = match(word, this.searchNicknames);
for(let n in this.tabWords) if(input.indexOf(word) == 0)
this.tabWords[n] += ": "; for(let n in this.tabWords)
} this.tabWords[n] += ": ";
if (this.backspace) {
this.backspace = false;
} }
} }
@ -1236,7 +1300,6 @@ class InputHandler {
} else if(key == 8) { } else if(key == 8) {
this.index = -1; this.index = -1;
this.lastWord = ""; this.lastWord = "";
this.backspace = true;
return; return;
} }
@ -1480,6 +1543,8 @@ class IRCChatWindow {
if(buf == null) if(buf == null)
return; return;
let channelSendNicks = [];
for(let n in nicks) { for(let n in nicks) {
let nick = {nickname: "", prefix: "", modes: []}; let nick = {nickname: "", prefix: "", modes: []};
@ -1487,13 +1552,17 @@ class IRCChatWindow {
nick.prefix = nicks[n].substring(0, 1); nick.prefix = nicks[n].substring(0, 1);
nick.nickname = nicks[n].substring(1); nick.nickname = nicks[n].substring(1);
nick.modes = [objectGetKey(irc.serverData[buf.server].modeTranslation, nick.prefix)]; nick.modes = [objectGetKey(irc.serverData[buf.server].modeTranslation, nick.prefix)];
channelSendNicks.push("<span class='prefix'>{0}</span><span class='nick'>{1}</span>".format(nick.prefix, nick.nickname));
} else { } else {
nick.nickname = nicks[n]; nick.nickname = nicks[n];
channelSendNicks.push("<span class='nick'>{1}</span>".format(nick.prefix, nick.nickname));
} }
buf.nicklist.nickAddObject(nick); buf.nicklist.nickAddObject(nick);
} }
buf.addMessage("Nicks <span class='channel'>{0}</span>: {1}".format(channel, channelSendNicks.join(', ')), null, "names");
if(buf.active) if(buf.active)
buf.nicklist.render(); buf.nicklist.render();
} }
@ -1518,7 +1587,7 @@ class IRCChatWindow {
if(buffer.nicklist.getNickIndex(oldNick) == null) continue; if(buffer.nicklist.getNickIndex(oldNick) == null) continue;
buffer.nicklist.nickChange(oldNick, newNick); buffer.nicklist.nickChange(oldNick, newNick);
buffer.addMessage(oldNick+" is now known as "+newNick, null, "nick"); buffer.addMessage("{0} is now known as {1}".format(oldNick, newNick), null, "nick");
} }
} }
@ -1529,9 +1598,10 @@ class IRCChatWindow {
buf.topicChange(topic); buf.topicChange(topic);
if(changer) if(changer)
buf.addMessage(changer+" set the topic of "+channel+ " to \""+topic+"\"", null, "topic"); buf.addMessage("<span class='nick'>{0}</span> has changed the topic of {1} to \"{2}\"".format(changer, channel, topic),
null, "topic");
else else
buf.addMessage("Topic of "+channel+ " is \""+topic+"\"", null, "topic"); buf.addMessage("Topic of <span class='channel'>{0}</span> is \"{1}\"".format(channel, topic), null, "topic");
} }
handleQuit(server, user, reason) { handleQuit(server, user, reason) {
@ -1544,8 +1614,8 @@ class IRCChatWindow {
if(buffer.nicklist.getNickIndex(user.nickname) == null) continue; if(buffer.nicklist.getNickIndex(user.nickname) == null) continue;
buffer.nicklist.nickRemove(user.nickname); buffer.nicklist.nickRemove(user.nickname);
buffer.addMessage("<span class='hostmask'>"+user.username+"@"+user.hostname+ buffer.addMessage("<span class='hostmask'>{0}@{1}</span> has quit <span class='reason'>{2}</span>".format(user.username,
"</span> has quit <span class='reason'>"+reason+"</span>", user.nickname, "quit"); user.hostname, reason), user.nickname, "quit");
} }
} }
@ -1557,7 +1627,8 @@ class IRCChatWindow {
if(user.nickname == irc.serverData[server].my_nick) if(user.nickname == irc.serverData[server].my_nick)
buffer.setAliveStatus(true); buffer.setAliveStatus(true);
buffer.addMessage("<span class='hostmask'>"+user.username+"@"+user.hostname+"</span> has joined "+channel, user.nickname, "join"); buffer.addMessage("<span class='hostmask'>{0}@{1}</span> has joined <span class='channel'>{2}</span>".format(user.username,
user.hostname, channel), user.nickname, "join");
buffer.nicklist.nickAdd(user.nickname); buffer.nicklist.nickAdd(user.nickname);
} }
@ -1575,10 +1646,10 @@ class IRCChatWindow {
} }
if(kicker) if(kicker)
buffer.addMessage("has kicked <span class='nick'>"+user+"</span> <span class='reason'>"+reason+"</span>", kicker.nickname, "part"); buffer.addMessage("has kicked <span class='nick'>{0}</span> <span class='reason'>{1}</span>".format(user, reason), kicker.nickname, "part");
else else
buffer.addMessage("<span class='hostmask'>"+user.username+"@"+user.hostname+"</span> has left "+ buffer.addMessage("<span class='hostmask'>{0}@{1}</span> has left <span class='channel'>{2}</span>{3}".format(user.username,
channel+(reason != null ? "&nbsp;<span class='reason'>"+reason+"</span>" : ""), user.nickname, "part"); user.hostname, (reason != null ? "&nbsp;<span class='reason'>"+reason+"</span>" : "")), user.nickname, "part");
if(kicker) if(kicker)
buffer.nicklist.nickRemove(user); buffer.nicklist.nickRemove(user);
else else
@ -1596,15 +1667,15 @@ class IRCChatWindow {
if(data.type == "mode_add") { if(data.type == "mode_add") {
buf.nicklist.modeAdded(data.modeTarget, data.mode); buf.nicklist.modeAdded(data.modeTarget, data.mode);
buf.addMessage("set mode <span class='channel'>"+data.target+"</span> <span class='mode'>+"+data.mode+" "+ buf.addMessage("set mode <span class='channel'>{0}</span> <span class='mode'>+{1} {2}</span>".format(data.target,
data.modeTarget+"</span>", data.user.nickname, "mode"); data.mode, data.modeTarget), data.user.nickname, "mode");
} else if(data.type == "mode_del") { } else if(data.type == "mode_del") {
buf.nicklist.modeRemoved(data.modeTarget, data.mode); buf.nicklist.modeRemoved(data.modeTarget, data.mode);
buf.addMessage("set mode <span class='channel'>"+data.target+"</span> <span class='mode'>-"+data.mode+" "+ buf.addMessage("set mode <span class='channel'>{0}</span> <span class='mode'>-{1} {2}</span>".format(data.target,
data.modeTarget+"</span>", data.user.nickname, "mode"); data.mode, data.modeTarget), data.user.nickname, "mode");
} else { } else {
buf.addMessage("set mode <span class='channel'>"+data.target+"</span> <span class='mode'>"+data.message+"</span>", buf.addMessage("set mode <span class='channel'>{0}</span> <span class='mode'>{1}</span>".format(data.target,
data.user.nickname, "mode"); data.message), data.user.nickname, "mode");
} }
} }

View File

@ -383,7 +383,7 @@ body
color: red; color: red;
&.m_join &.m_join
color: green; color: green;
&.m_topic .content &.m_topic .content, &.m_names .content
color: #03A9F4; color: #03A9F4;
font-weight: bold; font-weight: bold;
&.m_motd .content &.m_motd .content

View File

@ -21,13 +21,19 @@ class IRCConnectionHandler {
handleUserLine(data) { handleUserLine(data) {
switch(data.command) { switch(data.command) {
case "topic":
this.conn.write(('{0} {1}'+(data.message != '' ? ' :'+data.message : '')).format(data.command.toUpperCase(), data.arguments[0]));
break;
case "kick": case "kick":
this.conn.write('{0} {1} :{2}'.format(data.command.toUpperCase(), data.arguments.join(' '), data.message));
break;
case "part": case "part":
this.conn.write('{0} {1} :{2}'.format(data.command.toUpperCase(), data.arguments[0], data.message)); this.conn.write('{0} {1} :{2}'.format(data.command.toUpperCase(), data.arguments[0], data.message));
break; break;
case "nick": case "nick":
case "whois": case "whois":
case "who": case "who":
case "names":
case "join": case "join":
this.conn.write('{0} {1}'.format(data.command.toUpperCase(), data.arguments[0])); this.conn.write('{0} {1}'.format(data.command.toUpperCase(), data.arguments[0]));
break; break;
@ -214,6 +220,15 @@ class IRCConnectionHandler {
case "042": case "042":
this.conn.emit('pass_to_client', {type: "server_message", messageType: "regular", message: line.arguments[1] +" "+ line.trailing, server: serverName, from: realServerName}); this.conn.emit('pass_to_client', {type: "server_message", messageType: "regular", message: line.arguments[1] +" "+ line.trailing, server: serverName, from: realServerName});
break; break;
case "401":
case "402":
case "421":
case "482":
case "331":
case "432":
this.conn.emit('pass_to_client', {type: "message", to: null, message: line.arguments[1]+': '+line.trailing,
server: serverName, user: {nickname: realServerName}, messageType: "error"});
break;
case "MODE": case "MODE":
let isChannelMode = false; let isChannelMode = false;
let method = '+'; let method = '+';
@ -247,13 +262,6 @@ class IRCConnectionHandler {
this.conn.write('NICK '+newNick); this.conn.write('NICK '+newNick);
this.conn.config.nickname = newNick; this.conn.config.nickname = newNick;
break; break;
case "401":
case "402":
case "421":
case "432":
this.conn.emit('pass_to_client', {type: "message", to: null, message: line.arguments[1]+': '+line.trailing,
server: serverName, user: {nickname: realServerName}, messageType: "error"});
break;
case "311": case "311":
// start whois queue // start whois queue
list = { list = {