|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
I've decided on a project, writing my own bot. I've ran into a few snags. One of them being bot self protections, and another being userlists. The bot is using a userlist with access level syscon for bot operators. However, some of the bot's bot-ops change IPs frequently. I don't know how to write a remote-login for bot-ops, or maybe I should do syscon:$address(botopnick,2}Anyway, this is what I got for the unban: on 1:BAN:#:{
if ($banmask == $address($me,2)) { /mode $chan -b $banmask | halt }
}
EDIT: on * instead of on 1 fixed the unban. Is it possible to do $address($me,*), so that if the ban matches me at all it unbans?
|
|
|
|
Joined: Dec 2002
Posts: 3,547
Hoopy frood
|
Hoopy frood
Joined: Dec 2002
Posts: 3,547 |
For the unban script, you could try:
if ($banmask iswm $ial($me)) { do stuff }
As for the login script, this is a little something i did a little while ago. It can be improved alot, but I have to go to work soon so I can't edit it further, sorry.
menu channel,status {
$iif($dialog(ulst),$style(3)) User List: {
ulst open
}
}
On *:Disconnect: {
ulst save
if ($hget(loggedin_nicks)) hfree $v1
}
On *:Exit: {
ulst save
if ($isfile(loggedin_nicks.hsh)) remove loggedin_nicks.hsh
}
on *:start:{
if (!$hget(ulst)) { .hmake ulst 10 }
if ($exists(ulst.hsh)) { .hload -i ulst ulst.hsh }
}
dialog ulst {
title "User List"
size -1 -1 80 117
option dbu notheme
list 1, 2 2 77 87, size
box "", 2, 1 -2 79 92
button "&Add", 3, 9 92 31 11, flat
button "&Rem", 4, 40 92 31 11, flat
button "&Close", 5, 9 104 62 11, flat ok
}
On *:Dialog:ulst:*:*: {
if ($devent == init) {
var %x = 1
while (%x <= $hget(ulst,0).item) {
did -a $dname 1 $hget(ulst,%x).item
inc %x
}
}
if ($devent == sclick) {
if ($did == 3) {
var %ulst.add = $$input($cr,e,User List - Please add a nickname), %ulst.pw $$input($cr,e,User List - Please add a password)
ulst %ulst.add %ulst.pw
did -a $dname 1 %ulst.add
dialog -v ulst ulst
}
if ($did == 4) {
if (!$did($dname,1).sel) return
ulst -r $did($dname,1).seltext
did -d $dname 1 $didwm($dname,1,$did($dname,1).seltext,1)
}
}
}
alias ulst {
if (!$hget(ulst)) hmake ulst 10
if ($1 == -r) {
if (!$2) echo 2 -a * /ulst: insufficient parameters
elseif (!$hget(ulst,$2)) echo 3 -a * /ulst: $2 not in user list
else { hdel ulst $2 | echo 3 -a * Removed $+($chr(2),$2,$chr(2)) from user list }
}
elseif ($1 == -l) {
if ($hget(ulst,0).item < 1) echo 2 -a * user list empty
else {
echo 2 -a * ulst list:
var %x = 1
while (%x <= $hget(ulst,0).item) {
echo 3 -a $hget(ulst,%x).item
inc %x
}
}
}
elseif ($1 == save) hsave -i ulst ulst.hsh
elseif ($1 == open) dialog $iif($dialog(ulst),-v,-dm) ulst ulst
else {
if (!$2) echo 2 -a * /ulst: insufficient parameters
elseif (!$hget(ulst,$1)) && ($2 isalnum) { hadd ulst $1 $2 | echo 3 -a * Added $+($chr(2),$1,$chr(2)) to user list with password $+($chr(2),$2) }
else { echo 3 -a * /ulst: $1 is already in user list }
}
hsave -i ulst ulst.hsh
}
on 1:Text:login*:?: {
if (!$hfind(ulst, $2)) {
.notice $nick Sorry, your nickname is not in my user user list.
halt
}
if ($hfind(users, $2)) && (!$3) {
.notice $nick You didn't specify a password.
halt
}
if ($hfind(loggedin_nicks, $2)) {
.notice $nick You are already logged in.
halt
}
if ($hfind(ulst, $2)) && ($hget(ulst,$2) == $3) {
.notice $nick Authorisation to user $+($chr(2),$2,$chr(2)) has been accepted, you are now logged in.
hadd -m loggedin_nicks $2 Yes
hsave -i loggedin_nicks loggedin_nicks.hsh
halt
}
if ($hfind(ulst, $2)) && ($hget(users,$2) != $3) {
.notice $nick Password for account $+($chr(2),$2,$chr(2)) is incorrect.
halt
}
if ($hfind(ulst, $2)) && (!$3) {
.notice $nick You didn't specify a password.
halt
}
}
on 1:text:logout*:?: {
if ($2) {
if ($hfind(loggedin_nicks, $2)) {
hdel loggedin_nicks $2
hsave -i loggedin_nicks loggedin_nicks.hsh
.notice $nick You have successfully logged out.
halt
}
if (!$hfind(loggedin_nicks, $2)) && ($hfind(ulst,$2)) {
.notice $nick You are already logged out.
halt
}
}
}
on *:TEXT:*:?: {
;Commands if they're logged in
if ($hfind(loggedin_nicks, $nick)) {
;A simple op me script, commands are sent to query. Change if the ? to # if you want it in channels.
if (opme == $1) && ($me isop $2) mode $2 +o $nick
}
}
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
I can't say I understand how the login script works.
|
|
|
|
Joined: Dec 2002
Posts: 3,547
Hoopy frood
|
Hoopy frood
Joined: Dec 2002
Posts: 3,547 |
It's pretty simple. Open up the dialog, click add. Then enter a username and password when prompted.
Then they type login <User> <Pass>, in a PM with you.
I should have added comments initially, but it is fairly straight forward.
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
if ($chan == #uranme && %uranmeuno == off) { msg $chan Sorry, uno has been disabled on #uranme. | halt }
Will that work? I'm trying to combine two things here. It's part of my bot-op control. Basically, I want it to where if %uranmeuno is off, and the command is triggered on #uranme, then it halts. Can I combine operators like that?
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Yes, you can combine like that.
Regarding "halt", keep in mind two things...
1) If you don't need to halt the script, don't. Halting when it's going to halt on its own is not necessary.
2) If you're just trying to end a script early based on something that happened (an error or not matching something, for example), use RETURN instead of HALT.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
I have a systems control script I've written for my bot. Is there anyway for the bot to write to a op_log.txt file when someone uses one of the commands, logging when the action was done in HH:mm:ss,and noting who ran the command and what channel it was ran on, or if it was done via query? Edit: /write C:/IcyBot2/Scripts/op_log.txt $nick used $$1 on $chan at I just randomly came up with that. I think it should work, but I don't know the timestamp $identifier. ;IcyBot systems control
;IcyBot
on syscon:TEXT:!disable_bot:#:set %icybot off | msg $chan IcyBot's functionality has been disabled. | halt
on syscon:TEXT:!disable_bot:?:set %icybot off | notice $nick IcyBot's functionality has been disabled. | halt
on syscon:TEXT:!enable_bot:#:set %icybot on | msg $chan IcyBot's functionality has been enabled. | halt
on syscon:TEXT:!enable_bot:?:set %icybot on | notice $nick IcyBot's functionality has been enabled. | halt
;Banners
on syscon:TEXT:!disable_banners:#:set %banners off | msg $chan Banners have been disabled. | halt
on syscon:TEXT:!disable_banners:?:set %banners off | notice $nick Banners have been disabled. | halt
on syscon:TEXT:!enable_banners:#:set %banners on | msg $chan Banners have been enabled. | halt
on syscon:TEXT:!enable_banners:?:set %banners on | notice $nick Banners have been enabled. | halt
;8ball
on syscon:TEXT:!disable_8ball:#:set %8ball off | msg $chan 8ball has been disabled. | halt
on syscon:TEXT:!disable_8ball:?:set %8ball off | notice $nick 8ball has been disabled. | halt
on syscon:TEXT:!enable_8ball:#:set %8ball on | msg $chan 8ball has been enabled. | halt
on syscon:TEXT:!enable_8ball:?:set %8ball on | notice $nick 8ball has been enabled. | halt
;Uno
on syscon:TEXT:!disable_uno:#:set %uno off | msg $chan Uno has been disabled. | halt
on syscon:TEXT:!disable_uno:?:set %uno off | notice $nick Uno has been disabled. | halt
on syscon:TEXT:!enable_uno:#:set %uno on | msg $chan Uno has been enabled. | halt
on syscon:TEXT:!enable_uno:?:set %uno on | notice $nick Uno has been enabled. | halt
;Trivia
on syscon:TEXT:!disable_trivia:#:set %trivia off | msg $chan Trivia has been disabled. | halt
on syscon:TEXT:!disable_trivia:?:set %trivia off | notice $nick Trivia has been disabled. | halt
on syscon:TEXT:!enable_trivia:#:set %trivia on | msg $chan Trivia been enabled. | halt
on syscon:TEXT:!enable_trivia:?:set %trivia on | notice $nick Trivia has been enabled. | halt
;Invite
on syscon:TEXT:!disable_invite:#:set %invite off | msg $chan Inviting has been disabled. | halt
on syscon:TEXT:!disable_invite:?:set %invite off | notice $nick Inviting has been disabled. | halt
on syscon:TEXT:!enable_invite:#:set %invite on | msg $chan Inviting been enabled. | halt
on syscon:TEXT:!enable_invite:?:set %invite on | notice $nick Inviting has been enabled. | halt
;Huggle
on syscon:TEXT:!disable_huggle:#:set %huggle off | msg $chan Huggling has been disabled. | halt
on syscon:TEXT:!disable_huggle:?:set %huggle off | notice $nick Huggling has been disabled. | halt
on syscon:TEXT:!enable_huggle:#:set %huggle on | msg $chan Huggling been enabled. | halt
on syscon:TEXT:!enable_huggle:?:set %huggle on | notice $nick Huggling has been enabled. | halt
;Misc
on syscon:TEXT:!disable_misc:#:set %misc off | msg $chan Miscellaneous features have been disabled. | halt
on syscon:TEXT:!disable_misc:?:set %misc off | notice $nick Miscellaneous features have been disabled. | halt
on syscon:TEXT:!enable_misc:#:set %misc on | msg $chan Miscellaneous features have been enabled. | halt
on syscon:TEXT:!enable_misc:?:set %misc on | notice $nick Miscellaneous features have been enabled. | halt
;Timebomb
on syscon:TEXT:!disable_timebomb:#:set %timebomb off | msg $chan Timebomb has been disabled. | halt
on syscon:TEXT:!disable_timebomb:?:set %timebomb off | notice $nick Timebomb has been disabled. | halt
on syscon:TEXT:!enable_timebomb:#:set %timebomb on | msg $chan Timebomb has been enabled. | halt
on syscon:TEXT:!enable_timebomb:?:set %timebomb on | notice $nick Timebomb has been enabled. | halt
;Greet
on syscon:TEXT:!disable_greet:#:set %greet off | msg $chan Greet notices have been disabled. | halt
on syscon:TEXT:!disable_greet:?:set %greet off | notice $nick Greet notices have been disabled. | halt
on syscon:TEXT:!enable_greet:#:set %greet on | msg $chan Greet notices have been enabled. | halt
on syscon:TEXT:!enable_greet:?:set %greet on | notice $nick Greet notices have been enabled. | halt
;Rules
on syscon:TEXT:!disable_rules:#:set %rules off | msg $chan Greet notices have been disabled. | halt
on syscon:TEXT:!disable_rules:?:set %rules off | notice $nick Greet notices have been disabled. | halt
on syscon:TEXT:!enable_rules:#:set %rules on | msg $chan Greet notices have been enabled. | halt
on syscon:TEXT:!enable_rules:?:set %rules on | notice $nick Greet notices have been enabled. | halt
;Bannermaker
on syscon:TEXT:!disable_bannermaker:#:set %bannermaker off | msg $chan Banner making has been disabled. | halt
on syscon:TEXT:!disable_bannermaker:?:set %bannermaker off | notice $nick Banner making has been disabled. | halt
on syscon:TEXT:!enable_bannermaker:#:set %bannermaker on | msg $chan Banner making has been enabled. | halt
on syscon:TEXT:!enable_bannermaker:?:set %bannermaker on | notice $nick Banner making has been enabled. | halt
;HelpSys
on syscon:TEXT:!disable_helpsys:#:set %helpsys off | msg $chan Help system has been disabled. | halt
on syscon:TEXT:!disable_helpsys:?:set %helpsys off | notice $nick Help system has been disabled. | halt
on syscon:TEXT:!enable_helpsys:#:set %helpsys on | msg $chan Help system has been enabled. | halt
on syscon:TEXT:!enable_helpsys:?:set %helpsys on | notice $nick Help system has been enabled. | halt
;OpGreet
on syscon:TEXT:!disable_opgreet:#:set %opgreet off | msg $chan Bot-Op greeting has been disabled. | halt
on syscon:TEXT:!disable_opgreet:?:set %opgreet off | notice $nick Bot-Op greeting has been disabled. | halt
on syscon:TEXT:!enable_opgreet:#:set %opgreet on | msg $chan Banner Bot-Op greeting been enabled. | halt
on syscon:TEXT:!enable_opgreet:?:set %opgreet on | notice $nick Bot-Op greeting has been enabled. | halt
;Bot controls
;Part
on syscon:text:!part*:*:{
if ($2 == $null) { /part $chan | /notice $nick Parted channel. | halt }
if ($2 !ischan ) { /notice $nick I'm already off that channel. | halt }
if ($2 != $null) { /part $2 | /notice $nick Parted channel. | halt }
}
;Join
on syscon:text:!join*:*:{
if ($2 ischan) { /notice $nick I'm already on $2 | halt }
if ($2 !ischan) { /join $2 | /notice $nick Join attempt complete. | halt }
}
; #uranme part
on uranmepart:text:!leave_uranme:*:{
if ($me ischan #uranme) { /part #uranme | /notice $nick Parted #uranme | halt }
if (me !ischan #uranme) { /notice $nick I'm not on #uranme. | halt }
}
Last edited by Mpot; 23/09/07 06:10 PM.
|
|
|
|
Joined: Dec 2002
Posts: 3,547
Hoopy frood
|
Hoopy frood
Joined: Dec 2002
Posts: 3,547 |
;IcyBot systems control
On syscon:Text:!*_*:*: {
var %c = $gettok($1,1,95), %d = $gettok($1,2,95), %t = $target
if (%c == enable) {
if (%d == bot) { set %icybot on | msg $iif(%t ischan,$chan,$nick) IcyBot's functionality has been enabled. }
if (%d == banners) { set %banners on | msg $iif(%t ischan,$chan,$nick) Banners have been enabled. }
if (%d == 8ball) { set %8ball on | msg $iif(%t ischan,$chan,$nick) 8ball has been enabled. }
if (%d == uno) { set %uno on | msg $iif(%t ischan,$chan,$nick) 8ball has been enabled. }
if (%d == trivia) { set %trivia on | msg $iif(%t ischan,$chan,$nick) Trivia has been enabled. }
if (%d == invite) { set %invite on | msg $iif(%t ischan,$chan,$nick) Inviting has been enabled. }
if (%d == huggle) { set %huggle on | msg $iif(%t ischan,$chan,$nick) Huggling has been enabled. }
if (%d == misc) { set %misc on | msg $iif(%t ischan,$chan,$nick) Miscellaneous features have been enabled. }
if (%d == timebomb) { set %timebomb on | msg $iif(%t ischan,$chan,$nick) Timebomb has been enabled. }
if (%d == greet) { set %greet on | msg $iif(%t ischan,$chan,$nick) Greet notices has been enabled. }
if (%d == rules) { set %rules on | msg $iif(%t ischan,$chan,$nick) Rules have been enabled. }
if (%d == bannermaker) { set %bannermaker on | msg $iif(%t ischan,$chan,$nick) Banner making has been enabled. }
if (%d == helpsys) { set %helpsys on | msg $iif(%t ischan,$chan,$nick) Help System has been enabled. }
write op_log.txt At $time(HH:nn:ss) $nick used enable command for %d in $iif(%t ischan,$chan,in private message)
}
if (%c == disable) {
if (%d == bot) { set %icybot off | msg $iif(%t ischan,$chan,$nick) IcyBot's functionality has been disabled. }
if (%d == banners) { set %banners off | msg $iif(%t ischan,$chan,$nick) Banners have been disabled. }
if (%d == 8ball) { set %8ball off | msg $iif(%t ischan,$chan,$nick) 8ball has been disabled. }
if (%d == uno) { set %uno off | msg $iif(%t ischan,$chan,$nick) 8ball has been disabled. }
if (%d == trivia) { set %trivia off | msg $iif(%t ischan,$chan,$nick) Trivia has been disabled. }
if (%d == invite) { set %invite off | msg $iif(%t ischan,$chan,$nick) Inviting has been disabled. }
if (%d == huggle) { set %huggle off | msg $iif(%t ischan,$chan,$nick) Huggling has been disabled. }
if (%d == misc) { set %misc off | msg $iif(%t ischan,$chan,$nick) Miscellaneous features have been disabled. }
if (%d == timebomb) { set %timebomb off | msg $iif(%t ischan,$chan,$nick) Timebomb has been disabled. }
if (%d == greet) { set %greet off | msg $iif(%t ischan,$chan,$nick) Greet notices has been disabled. }
if (%d == rules) { set %rules off | msg $iif(%t ischan,$chan,$nick) Rules have been disabled. }
if (%d == bannermaker) { set %bannermaker off | msg $iif(%t ischan,$chan,$nick) Banner making has been disabled. }
if (%d == helpsys) { set %helpsys off | msg $iif(%t ischan,$chan,$nick) Help System has been disabled. }
write op_log.txt At $time(HH:nn:ss) $nick used disable command for %d in $iif(%t ischan,$chan,in private message)
}
}
I tried to clean the code up a little, it can be improved more but I was just rushing. It's untested, but I think it should work.
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
It would be a bit easier for me to just insert a line into some of the on texts. Would I be able to use for the channel on texts
/write C:\IcyBot2\Scripts\op_log.txt $nick used $$1 on $chan at $time(HH:nn:ss)
and
/write C:\IcyBot2\Scripts\op_log.txt $nick used $$1 on via private msg at $time(HH:nn:ss)
?
EDIT: How can I put in the date, too?
Last edited by Mpot; 23/09/07 06:37 PM.
|
|
|
|
Joined: Dec 2002
Posts: 3,547
Hoopy frood
|
Hoopy frood
Joined: Dec 2002
Posts: 3,547 |
/help $date
Sorry for the vague reply, but it's fairly simple.
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
/write C:\IcyBot2\Scripts\op_log.txt $date(mmm,d,yy) $+ at $time(h,n,s,TT) $+ : $nick used $$1 on $chan | halt
" * Invalid parameters: $date "
What in God's name? -_________-;
|
|
|
|
Joined: Sep 2005
Posts: 2,881
Hoopy frood
|
Hoopy frood
Joined: Sep 2005
Posts: 2,881 |
commas are used to separate $identifier arguments, so the script parser thinks you're passing 3 arguments to $date: "mmm", "d" and "yy", rather than just one: "mmm,d,yy", to fix this set the format to a variable first: var %dateformat = mmm,d,yy, %timeformat = h,n,s,TT
echo -a $date(%dateformat) $time(%timeformat)
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
That shouldn't be so, according to the help file on Time and Date Identifiers.
Last edited by Mpot; 23/09/07 07:15 PM.
|
|
|
|
Joined: Sep 2005
Posts: 2,881
Hoopy frood
|
Hoopy frood
Joined: Sep 2005
Posts: 2,881 |
That shouldn't be so? How not?
$date(dd/mm/yy) is perfectly fine, but $date(dd,mm,yy) is not because , is used to separate arguments in identifiers, so you're passing it 3 different arguments when it only takes one! - a date format.
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
I don't want arguments, I want a date format, and according to that help file, using commas is appropriate. See edit to earlier post, screenshot of file included.
Last edited by Mpot; 23/09/07 07:16 PM.
|
|
|
|
Joined: Sep 2005
Posts: 2,881
Hoopy frood
|
Hoopy frood
Joined: Sep 2005
Posts: 2,881 |
It doesn't say that commas are appropriate anywhere on that page, unless you're talking about the comma in $asctime() which does take two arguments.
|
|
|
|
Joined: Dec 2002
Posts: 2,033
Hoopy frood
|
Hoopy frood
Joined: Dec 2002
Posts: 2,033 |
Just use $date($+(mmm,$chr(44),d,$chr(44),yy)) ?
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
Alright, then why is it working fine with $time but not with $date?
|
|
|
|
Joined: Apr 2007
Posts: 228
Fjord artisan
|
OP
Fjord artisan
Joined: Apr 2007
Posts: 228 |
Blargh, what can I put in this line
/write C:\IcyBot2\Scripts\op_log.txt $time(h,n,s,TT) on $date(mmm,d,yy) $+ : $nick used $$1 on $chan
To make the date and time work properly? I tried changing it to $time first instead of $date first, no good. Just got $time errors. The format I'd like for the time and date can be seen in that line.
|
|
|
|
Joined: Sep 2005
Posts: 2,881
Hoopy frood
|
Hoopy frood
Joined: Sep 2005
Posts: 2,881 |
I told you that earlier. var %dateformat = mmm,d,yy, %timeformat = h,n,s,TT
echo -a $date(%dateformat) $time(%timeformat)
|
|
|
|
|