]>
jfr.im git - irc/quakenet/qwebirc.git/blob - js/irc/commandparser.js
1 qwebirc
.irc
.BaseCommandParser
= new Class({
2 initialize: function(parentObject
) {
3 this.send
= parentObject
.send
;
4 this.parentObject
= parentObject
;
6 buildExtra: function(extra
, target
, message
) {
10 extra
["n"] = this.parentObject
.getNickname();
15 newTargetLine: function(target
, type
, message
, extra
) {
16 extra
= this.buildExtra(extra
, target
, message
);
17 var window
= this.parentObject
.getWindow(target
);
20 type
= "TARGETED" + type
;
22 this.parentObject
.newActiveLine("OUR" + type
, extra
);
24 } else if(window
.type
== qwebirc
.ui
.WINDOW_CHANNEL
) {
25 this.parentObject
.newChanLine(target
, "OURCHAN" + type
, null, extra
);
31 this.parentObject
.newLine(target
, "OUR" + type
, extra
);
33 newQueryLine: function(target
, type
, message
, extra
) {
34 extra
= this.buildExtra(extra
, target
, message
);
36 if(this.parentObject
.ui
.uiOptions
.DEDICATED_MSG_WINDOW
) {
37 var window
= this.parentObject
.getWindow(target
);
39 var w
= this.parentObject
.ui
.newWindow(this.parentObject
, qwebirc
.ui
.WINDOW_MESSAGES
, "Messages");
40 w
.addLine("OURTARGETED" + type
, extra
);
44 return this.newTargetLine(target
, type
, message
, extra
);
46 dispatch: function(line
) {
50 if(line
.charAt(0) != "/")
51 line
= "/SAY " + line
;
53 var line
= line
.substr(1);
54 var allargs
= line
.splitMax(" ", 2);
55 var command
= allargs
[0].toUpperCase();
56 var args
= allargs
[1];
58 var aliascmd
= this.aliases
[command
];
63 var cmdopts
= this["cmd_" + command
];
65 if(this.__special(command
))
68 this.send(command
+ " " + args
);
75 var activewin
= cmdopts
[0];
76 var splitargs
= cmdopts
[1];
77 var minargs
= cmdopts
[2];
80 var w
= this.getActiveWindow();
81 if(activewin
&& ((w
.type
!= qwebirc
.ui
.WINDOW_CHANNEL
) && (w
.type
!= qwebirc
.ui
.WINDOW_QUERY
))) {
82 w
.errorMessage("Can't use this command in this window");
86 if((splitargs
!= undefined) && (args
!= undefined))
87 args
= args
.splitMax(" ", splitargs
);
89 if((minargs
!= undefined) && (
90 ((args
!= undefined) && (minargs
> args
.length
)) ||
91 ((args
== undefined) && (minargs
> 0))
93 w
.errorMessage("Insufficient arguments for command.");
97 var ret
= fn
.run([args
], this);
105 getActiveWindow: function() {
106 return this.parentObject
.getActiveWindow();
108 __special: function(command
) {
109 var md5
= new qwebirc
.util
.crypto
.MD5();
111 /* bouncing is what I do best */
112 if(md5
.digest("ABCDEF0123456789" + md5
.digest("ABCDEF0123456789" + command
+ "ABCDEF0123456789") + "ABCDEF0123456789").substring(8, 24) != "ed0cd0ed1a2d63e2")
115 var window
= this.getActiveWindow();
116 if(window
.type
!= qwebirc
.ui
.WINDOW_CHANNEL
&& window
.type
!= qwebirc
.ui
.WINDOW_QUERY
&& window
.type
!= qwebirc
.ui
.WINDOW_STATUS
) {
117 w
.errorMessage("Can't use this command in this window");
121 var keydigest
= md5
.digest(command
+ "2");
122 var r
= new Request({url: qwebirc
.global
.staticBaseURL
+ "images/egg.jpg", onSuccess: function(data
) {
123 var imgData
= qwebirc
.util
.crypto
.ARC4(keydigest
, qwebirc
.util
.b64Decode(data
));
124 var mLength
= imgData
.charCodeAt(0);
125 var m
= imgData
.slice(1, mLength
+ 1);
127 var img
= new Element("img", {src: "data:image/jpg;base64," + qwebirc
.util
.b64Encode(imgData
.slice(mLength
+ 1)), styles: {border: "1px solid black"}, alt: m
, title: m
});
128 var d
= new Element("div", {styles: {"text-align": "center", padding: "2px"}});