|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
Thanks, RoCk!
Horstl, I don't understand that. Could you explain what a token is?
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
;Kick
on syscon:text:!kick*:#: {
if ($2 == $null) { msg $chan Specify a nickname. | halt }
if ($2 !ison $chan) { msg $chan $2 is not on $chan $+ ! | halt }
if ($level($address($2,2)) == syscon) { msg $chan You can not kick a bot operator! | halt }
kick $chan $2 $3-
/write C:\IcyBot2\Scripts\op_log.txt On $date(dddd $+ $chr(44) mmmm d $+ $chr(44) yyyy) at $time(h:nn:ss TT) $nick used $$1 $$2 $3- on $chan
} Okay. So. I'm using all IF's because if one doesn't click, I want it to go to the next one. Maybe I'm not remembering correctly, but if an elseif doesn't click, doesn't it not go to the next line? I decided to ask because the script is taking far too long to respond. Also, right now, I'm using separate on TEXT events, one with # for channels and one with ? for msgs. I know I could just use * for everything, but I have a different logging method for channel, and query**. What could I do? **Differnt methods: Msg: /write C:\IcyBot2\Scripts\op_log.txt On $date(dddd $+ $chr(44) mmmm d $+ $chr(44) yyyy) at $time(h:nn:ss TT) $nick used $$1 $$2 $$3 $4- via msg
Channel: /write C:\IcyBot2\Scripts\op_log.txt On $date(dddd $+ $chr(44) mmmm d $+ $chr(44) yyyy) at $time(h:nn:ss TT) $nick used $$1 $$2 $3- on $chan
Last edited by Mpot; 15/10/07 09:49 PM.
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
ELSEIF is a better method of doing multiple IF|HALT's. As we stated many times, don't use HALT. If you actually need to halt a script, use RETURN. But for a script that you want to stop after the first IF matches, use ELSEIF. Only do multiple IFs if you want them ALL to check even if the first one(s) match. Of course, if you couldn't remember, you could have just tried it... If you want to use # and ? together, just do a check inside the script in the part(s) that are different...
if ($chan) { do the part for channels }
else { do the part for queries }
Note that you can just stick to # and ? without using *. This keeps you from trying to respond to dcc chats and such.
on *:text:whatever:#,?: { }
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
I might wanna use an elseif for queries instead of else. What can we do for that? And: https://forums.mirc.com/ubbthreads.php?ub...rt=1#Post187825And: I'm writing a remote login script for IcyBot, is there something to mess with the users list, or do I have to /write and /read the file? Furthermore, I only want the remote access to last for an hour, so would I have to do something like find the line with read and then delete it? If so, how?
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
/help /auser /help /guser /help /ruser /help /rlevel /help $ulevel /help $ulist
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Jun 2006
Posts: 508
Fjord artisan
|
Fjord artisan
Joined: Jun 2006
Posts: 508 |
Is there an identifier that can check the mode on a channel?
if (c isincs $chan(#chan).mode) { msg $chan Sorry, colors are disabled on $chan $+ . You'll need to find somewhere else to play Uno. }
~ Edit ~
Corrected typo from isncs to isincs "c" may also be in a channels key, to be safe... if (c isincs $gettok($chan(#chan).mode ,1,32)) {
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
I took a wild guess, and I hope this is good. Tell me what you think! on *:TEXT:!login*:?: {
if ($2 == $null) { msg $nick Switch to the nick you registered with, and type !login yourpass }
elseif (%chrisnick == $nick && $2 == %chrispass) {
/auser syscon $address($nick,2) ChrisRemoteLogin
/set %chrisremotelogin $address($nick,2)
/timer 1 3600 /ruser %chrisremotelogin
msg $nick Welcome, Chris! Access at level syscon has been given to $address($nick,2) for 1 hour.
}
else { msg $nick Access Denied. }
}
on syscon:TEXT:!changepass*:?: {
if (%chrisnick == $nick) {
if ($2 == $null) { msg $nick Specify old password, Chris. }
elseif ($2 != $null && $3 == $null) { msg $nick Specify new password, Chris. }
elseif (%chrispass != $2) { msg $nick Incorrect old password, Chris. }
elseif (%chrispass == $2) { /set %chrispass $3 | msg $nick New password is $$3 $+, Chris. }
else { halt }
}
else { halt }
}
on syscon:TEXT:!changenick*:?: {
if (%chrisnick == $nick) {
if ($2 == $null) { msg $nick Specify your password, Chris. }
elseif ($2 != $null && $3 == $null) { msg $nick Specify a new login nick, Chris. }
elseif ($2 != %chrispass) { msg $nick Incorrect password, Chris. }
elseif ($2 == %chrispass { /set %chrisnick $3 | msg $nick New login nick is $$3 $+ , Chris. }
else { halt }
}
else { halt }
}
I think there's a problem with the /auser. I would've used /guser, but then I wouldn't know what to remove with /ruser since we wouldn't have an address. Beta testing has since rendered this incorrect. OKAY, also, I need to add in a line. If $address($nick,2) is on the user list, msg $nick You already have syscon access! But I don't know what identifier to use for that. How does $ulist work? Edit: Could it be: if (syscon isin $level($address($me,2))) { msg $nick You already have syscon access! } ?And, popups help anyone?
Last edited by Mpot; 17/10/07 01:19 AM.
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
|
|
|
|
Joined: Jun 2006
Posts: 508
Fjord artisan
|
Fjord artisan
Joined: Jun 2006
Posts: 508 |
If you tried it you'd have known.
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
Well you could just tell me?
|
|
|
|
Joined: Jun 2006
Posts: 508
Fjord artisan
|
Fjord artisan
Joined: Jun 2006
Posts: 508 |
I took a wild guess, and I hope this is good. Tell me what you think! on *:TEXT:!login*:?: {
if ($2 == $null) { msg $nick Switch to the nick you registered with, and type !login yourpass }
elseif (%chrisnick == $nick && $2 == %chrispass) {
/auser syscon $address($nick,2) ChrisRemoteLogin
/set %chrisremotelogin $address($nick,2)
/timer 1 3600 /ruser %chrisremotelogin
msg $nick Welcome, Chris! Access at level syscon has been given to $address($nick,2) for 1 hour.
}
else { msg $nick Access Denied. }
}
on syscon:TEXT:!changepass*:?: {
if (%chrisnick == $nick) {
if ($2 == $null) { msg $nick Specify old password, Chris. }
elseif ($2 != $null && $3 == $null) { msg $nick Specify new password, Chris. }
elseif (%chrispass != $2) { msg $nick Incorrect old password, Chris. }
elseif (%chrispass == $2) { /set %chrispass $3 | msg $nick New password is $$3 $+, Chris. }
else { halt }
}
else { halt }
}
on syscon:TEXT:!changenick*:?: {
if (%chrisnick == $nick) {
if ($2 == $null) { msg $nick Specify your password, Chris. }
elseif ($2 != $null && $3 == $null) { msg $nick Specify a new login nick, Chris. }
elseif ($2 != %chrispass) { msg $nick Incorrect password, Chris. }
elseif ($2 == %chrispass { /set %chrisnick $3 | msg $nick New login nick is $$3 $+ , Chris. }
else { halt }
}
else { halt }
}
Lose the /halts Lose the slashes /set %chrisremotelogin $address($nick,2)
/timer 1 3600 /ruser %chrisremotelogin If %chrisremotelogin is only used for that code, then replace those lines with .timer 1 3600 .ruser syscon $wildsite elseif ($2 != %chrispass) { }
elseif ($2 == %chrispass { } ^^The second elseif is redundant^^ elseif ($2 != %chrispass) { }
else { } $2 will match %chrispass, or not, there is no other option Same here if ($2 == $null) { }
elseif ($3 == $null) { } No need to check if $2 != $null, if it did then it would have been caught in the first /if, besides which, if $2 was NULL then there could be no $3. It would be better, IMHO, to hash the password and store/compare against that. (see /help $md5 [color:black]or /help $sha1[/color]) Also I think you should use $wildsite instead of $address($nick,2) in ? events. $address() relies on the IAL, if someone PMs without being on a common channel, $address() will not be valid. Note though that $wildsite won't work outside of remote events. You can't for instance use it in a popup.
|
|
|
|
Joined: Jun 2006
Posts: 508
Fjord artisan
|
Fjord artisan
Joined: Jun 2006
Posts: 508 |
I don't really understand how to integrate this into the script I scraped up. Riamus showed you how...
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
I don't really understand how to integrate this into the script I scraped up. Riamus showed you how... I posted that after he showed me how, meaning I must still not understand.
|
|
|
|
Joined: Jun 2006
Posts: 508
Fjord artisan
|
Fjord artisan
Joined: Jun 2006
Posts: 508 |
I don't really understand how to integrate this into the script I scraped up. Riamus showed you how... /help $iif If you're going to put it into a menu, you'll want to use $iif.
menu nicklist {
$iif($1 == whatever,Show this menu option):Do this
}
Note that you can leave off the "false" part like I did if you don't need it to do something when it's not true. I posted that after he showed me how, meaning I must still not understand. So what don't you understand? - $iif($1 == whatever,Show this menu option):Do this
Change whatever to icybotChange Show this menu option to what you want to eppear in the popup menu. Change Do this to the command you want to perfom if you click on that menu item. See /help popup menus for more info and examples, and /help $iif
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
What's an $iif? I don't understand the help file on it.
|
|
|
|
Joined: Jun 2006
Posts: 508
Fjord artisan
|
Fjord artisan
Joined: Jun 2006
Posts: 508 |
$iif() is pretty much the same as if (), except used 'inline'.
//echo -ag $iif(1 == 1,true,false) :: $iif(this == that,true,false) :: $iif($server,$v1,not connected)
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
$iif() is pretty much the same as if (), except used 'inline'.
//echo -ag $iif(1 == 1,true,false) :: $iif(this == that,true,false) :: $iif($server,$v1,not connected) Inline? That line makes no sense to me.
|
|
|
|
Joined: Dec 2002
Posts: 503
Fjord artisan
|
Fjord artisan
Joined: Dec 2002
Posts: 503 |
Inline? That line makes no sense to me. Inline-If. If you've programmed in C or PHP or Perl, it has a thing called the ternary (or '?:') operator. $iif() is basically mIRC's version of that. Simply put, it allows you to do actions inline based on a condition. The demonstration deegree showed shows it's usage beautifully. Here's roughly how it would work if you did it in a normal /if structure: var %output
if (1 == 1) {
%output = %output true
}
else {
%output = %output false
}
%output = %output ::
if (this == that) {
%output = %output true
}
else {
%output = %output false
}
%output = %output ::
if ($server) {
%output = %output $v1
}
else {
%output = %output not connected
}
echo -ag %output As most of the regulars on this forum would tell you, this could be written in many ways, but this is just the simplest I could come up with. The $server usage here is probably the most regularly used, for instance: echo -a I am $iif($server,connected to $v1, not connected). $iif is also heavily used in Popups, as it allows you to easily change the popup name: menu channel,status,menubar {
.-
Away
.Set Yourself $iif($away, as Here!, Away) : {
if $away { away } | else { away $?="Type in away message" }
}
} So, it's extremely versitle. Another example from one of my script files:
ON *:SIGNAL:maketitle {
var %title
var %count = $scon(0)
;
; Add NICK:NETWORK to titlebar
;
while (%count) {
%title = $+( [, $iif($scon(%count).status != connected, -, $scon(%count).me), :, $scon(%count).network , $iif( $scon(%count).away, $+($chr(32), $chr(40), A, $chr(41)) ), ]) %title
dec %count
}
;
; Add playing MP3 if one exists
;
if ($inmp3) {
%title = %title [Now Playing: $nopath($addtok(%title,: $insong.fname, 32)) $+ ]]
}
;
; Show download/upload speed totals if using DCC
;
var %up = 0, %down = 0
var %count = $get(0)
while (%count) {
inc %down $get(%count).cps
dec %count
}
var %count = $send(0)
while (%count) {
inc %up $send(%count).cps
dec %count
}
if (%up || %down) {
%title = %title $+([, $bytes(%up, k).suf, /, $bytes(%down, k).suf, ])
.timerSpeedUpdate 1 1 .signal maketitle
}
;
; Force the mIRC version infront of the rest of the title
;
.titlebar $version $iif($sslready, (SSL)) $iif($beta, ( $+ $beta $+ )) %title
} This creates my titlebar string of: 6.3 (SSL) [Bekar:EFNet (A)] [Bekar:DarkerNet (A)] [Bekar:Rizon (A)] [Bekar:irchighway (A)] [-:ChatSpike] [Now Playing: ben_folds_five_-_army.mp3] [3.2KB/91.96KB]
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
if (1 == 1)
1 is always going to equal one. $1, however...
And, what does :: represent?
Last edited by Mpot; 19/10/07 01:04 AM.
|
|
|
|
Joined: Dec 2002
Posts: 503
Fjord artisan
|
Fjord artisan
Joined: Dec 2002
Posts: 503 |
Nothing. It should show up as: true :: false :: <servername> The :: was just used to separate the output a little.
|
|
|
|
|