|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
im not sure if you guys are familiar with zbot (some irc networks have this script(?) in their chanservs if you dont know what im talking about, basically what it does is you type this: !learn definition thedefinitiongoeshere example: !learn mIRC the site for mIRC is www.mirc.comonce thats done it saves it (somewhere) so whenever one of your channel's user do ? mIRC the following happens <bot> the site for mIRC is www.mirc.com!learn is the command mIRC is the keyword "the site for mIRC is www.mirc.com" is the definition ..ok my question is ..i know its possible to make a script to do this in mIRC (instead of the networks chanserv) is there something like this out there ? (for download) if not, would it be too difficult to script? (i have very little scripting knowledge, i just started) can someone help me out here? point me to the right direction? thanks in advance
Last edited by Sukai; 22/09/06 02:24 AM.
|
|
|
|
Joined: Mar 2004
Posts: 210
Fjord artisan
|
Fjord artisan
Joined: Mar 2004
Posts: 210 |
can someone help me out here? point me to the right direction? There are a few mIRC quote databases you might be able to adapt. (if you use Google, MIRC database and mIRC database aren't the same thing in the returns you get - MIRC is a medical database.)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
i guess i could try that dont know if i can do it tho
|
|
|
|
Joined: Jan 2006
Posts: 108
Vogon poet
|
Vogon poet
Joined: Jan 2006
Posts: 108 |
A bit of googling explains what ZBOT is, Its an info bot module for Anope irc services. So I would search for an info bot script for mIRC. Must be thousands out there somewhere. Good luck Fire
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
this is hard im reading up on mirc's help file ..to see if any variables/comands etc can help me out
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
So in other words, it's an infobot. And yes it's possible, i've made something like that in the past. Virtually anything is possible when it comes to mIRC. Simply message it: this is that, then have it write the information to a file something like we'll assume $1- is "this entry is that info"
on *:text:*:#: {
if ($findtok($1-,is,1,32)) {
var %text = $1-
%text = $reptok(%text,is,=>,1,32)
write learnt.txt %text
;write this to a file: this entry => that info
;after it's done writing verify that the data did write to the file and if so have it tell you "ok".
if ($read(learnt.txt,w,%text)) { msg $chan ok }
else { msg $chan I pooped my pants }
}
}
the above method for finding is is a bit old, but it's fast and works. Trigger it by using an on text event: or if your socketing, which you should be just having it match the first information on the left side of the =>. Say in your file learnt.txt you have these lines. this entry => that info worms => live in dirt Search the file for a beginning line that matches the string "this entry*". If found return that line. Assume you say in the room "this entry".
on *:text:*:#: {
var %text = $read(learnt.txt, w, $1- $+ *)
;if "this entry*" is found at the beginning of a line,
if (%text) {
var %split=> = $calc($findtok(%text,=>,1,32) +1)
msg $chan hmm, $gettok(%text,%split=> $+ -,32)
}
}
Here's how the conversation would go: <you> this entry <bot> hmm, that info Hope this info helps get you started. I didn't test any of this so if it doesn't work right, play with it some.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
i used your code snippet with a few changes
it records the info just fine
but it doesnt respond back when i type the keyword, using your example
if i type "this entry"
it doesnt reply at all
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
The fastest method would probably be hash tables:
alias -l CreateHelp {
hmake Help 100
if ($isfile(Help.hsh)) { hload Help Help.hsh }
}
on *:start: {
CreateHelp
}
on *:text:*:#: {
if ($1 == !learn) {
if ($hget(Help) == $null) { CreateHelp }
hadd Help $2-
hsave Help Help.hsh
}
elseif ($1 == $chr(63)) {
var %data = $hget(Help,test)
if (%data == $null) { msg $chan No help available on that item. }
else {
msg $chan %data
}
}
} Ok, this is not tested, but should work fine. If not, let me know and I'll see what is going on with it. It will be very fast and easy to use. As you asked, here are the uses of it: !learn keyword description ? keyword If you want it to respond to !help or something instead of ?, then replace $chr(63) in the script with !help or whatever you're going to use. I used ? since that was what you said the bot used. Keep in mind that I did this for one-word keywords because that's what you were giving as an example. If you want multiple-word keywords, let me know and I can easily edit it.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
the !learn keyword definitionhere
isnt working :~(
EDITED: ok nevermind, its making the keyword/definition ..it seems the problem is in the ? keyword portion of the code
i get the "No help available on that item." message everytime
Last edited by Sukai; 22/09/06 02:09 PM.
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Heh, Riamus2 you are obsessed with hash tables . There's only 1 drawback to the hash table item definition thing. the item can only be 1 word. Sukai When I gave you the examples I separated them, all in all they should be under the same on text event:
on *:text:*:#: {
var %text = $read(learnt.txt, w, $1- $+ *)
;if "this entry*" is found at the beginning of a line,
if (%text) {
var %split=> = $calc($findtok(%text,=>,1,32) +1)
msg $chan hmm, $gettok(%text,%split=> $+ -,32)
}
if ($findtok($1-,is,1,32)) {
var %text = $1-
%text = $reptok(%text,is,=>,1,32)
write learnt.txt %text
;write this to a file: this entry => that info
;after it's done writing verify that the data did write to the file and if so have it tell you "ok".
if ($read(learnt.txt,w,%text)) { msg $chan ok }
else { msg $chan I pooped my pants }
}
}
If 2 of the same events exist inside of a remote script file, the first one is evaluated and the second is ignored. K I just tested this myself and it works: [11:03:32] <brandon> this is a test [11:03:32] <@Scorpwanna> ok [11:03:47] <brandon> this [11:03:47] <@Scorpwanna> hmm, a test [11:04:06] <brandon> this script is awesome [11:04:06] <@Scorpwanna> ok [11:04:09] <brandon> this script [11:04:09] <@Scorpwanna> hmm, awesome
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
on *:text:*:#: {
if ($1 == ?) {
var %text = $2- =>
%text = $read(learnt.txt, w, %text $+ *)
;if "this entry*" is found at the beginning of a line,
if (%text) {
var %split=> = $calc($findtok(%text,=>,1,32) +1)
msg $chan hmm, $gettok(%text,%split=> $+ -,32)
}
}
if ($1 == !learn) {
if ($findtok($2-,is,1,32)) {
var %text = $2-
%text = $reptok(%text,is,=>,1,32)
write learnt.txt %text
;write this to a file: this entry => that info
;after it's done writing verify that the data did write to the file and if so have it tell you "ok".
if ($read(learnt.txt,w,%text)) { msg $chan ok }
else { msg $chan I pooped my pants }
}
}
}
[11:11:23] <brandon> !learn this bathroom is full [11:11:23] <@Scorpwanna> ok [11:11:28] <brandon> ? this bathroom [11:11:28] <@Scorpwanna> hmm, full [11:12:14] <brandon> !learn whoa whoa whoa whoa Lois this is not my drinking glass! [11:12:14] <@Scorpwanna> ok [11:12:27] <brandon> ? whoa whoa whoa whoa Lois this [11:12:27] <@Scorpwanna> hmm, not my drinking glass! Course this is just a sample. It will have flaws, but that's for you to figure out .
Last edited by Scorpwanna; 22/09/06 04:24 PM.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
both versions work great
but instead of having the second event ignored cant it just be appended to the first event ( add a comma then have it follow afterwards) OR show both in two different sentences?
EDITED: i also found out what was wrong with the hash table version of this script
instead of having var %data = $hget(Help,test)
it should of been var %data = $hget(help,$2-)
that worked
Last edited by Sukai; 22/09/06 04:26 PM.
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Hi, I just edited the post to take out a var infront of a line. So check out what I just changed. Test it for your self. Yes append. I showed you an appended one up a few posts.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
i entered several entries of "cool"
it doesnt show them all or append, only shows the first "cool" entry made
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Hrm, you've just inspired me to add something like this to a socketbot i have. Thanks. Yep, first come first serve. To append data, i'd say you'd need to have it take what's there already, and (if you use mine) addon to the nth line of text. Infobot use to have this "is also" trigger which if said would append the data to the already existing data. Like: <nick> cow tipping is fun <bot> ok <nick> cow tipping is also a way to be mean to cows <bot> ok <nick> cow tipping <bot> hmm, cow tipping is fun or a way to be mean to cows
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
i see
hrmmz, i have no idea how to approach this to be honest
EDITED: the thing is with the is also trigger
people wont know if the keyword already has a definition so if add a new defintion to that keyword ..they would never notice it unless later on they did a ? keyword
Last edited by Sukai; 22/09/06 04:39 PM.
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
I see, might be best to just have it go right ahead and append, and if it does update itself, have it message back to the channel. "Updated entry for blah." Question is, would you want it to overwrite the data completely, or add it to the data that already exists? I'll work with it . Not gunna leave you in the woods by yourself.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
thank you to answer your question, why not both? ...something else came to mind, like ...what if we wanted to replace the whole entry itself? !replace keyword definitionhereblahblah i think that would also be a good feature (im thinking ZBOT for anope irc servers) if i remember correctly it was in this format !<command> <keyword> <entrydefintion> the commands for it was !append (to add something to an already existing entry), !replace (completely replaces the entry), !delete (deletes the entry), !learn (creates an entry), !set (view who edited or created the entry) that would be awesome but a bit time consuming i would think anyway thanks for taking the time to help me really appreciate it
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Sounds like great fun, I'll do it! heh Edited: Try this out.
on *:text:*:#: {
if ($1 == ?) {
var %text = $2- =>
%text = $read(learnt.txt, w, %text $+ *)
;if "this entry*" is found at the beginning of a line,
if (%text) {
var %term = $reptok(%text,=>,is,1,32)
msg $chan hmm, %term
}
}
if ($1 == !append) {
var %islocation = $findtok($2-,is,1,32)
if (%islocation) {
var %text = $2-
%text = $reptok(%text,is,=>,1,32)
var %newentry = $gettok(%text,1- $+ %islocation,32)
var %findentry = $read(learnt.txt,w,%newentry $+ *)
var %foundentry = $gettok(%findentry,1- $+ %islocation,32)
if (%newentry == %foundentry) {
var %append = $gettok(%text,$calc(%islocation +1) $+ -,32)
write -l $+ $readn learnt.txt %findentry or %append
msg $chan Appended data.
}
}
}
if ($1 == !replace) {
var %islocation = $findtok($2-,is,1,32)
if (%islocation) {
var %text = $2-
%text = $reptok(%text,is,=>,1,32)
write -l $+ $readn learnt.txt %text
msg $chan Replaced entry.
}
}
if ($1 == !learn) {
var %islocation = $findtok($2-,is,1,32)
if (%islocation) {
var %text = $2-
%text = $reptok(%text,is,=>,1,32)
var %newentry = $gettok(%text,1- $+ %islocation,32)
var %findentry = $read(learnt.txt,w,%newentry $+ *)
var %foundentry = $gettok(%findentry,1- $+ %islocation,32)
if (%newentry == %foundentry) {
msg $chan Already have something for that.
}
else {
write learnt.txt %text
;write this to a file: this entry => that info
;after it's done writing verify that the data did write to the file and if so have it tell you "ok".
if ($read(learnt.txt,w,%text)) { msg $chan ok }
else { msg $chan I pooped my pants }
}
}
}
}
[12:42:53] <Sporc> !learn variable is a percent [12:42:53] <@Scorpwanna> ok [12:43:13] <Sporc> !learn variable is yo momma [12:43:13] <@Scorpwanna> Already have something for that. [12:43:25] <Sporc> !replace variable is yo momma [12:43:25] <@Scorpwanna> Replaced entry. [12:43:50] <Sporc> !append variable is bringing down the house [12:43:50] <@Scorpwanna> Appended data. [12:43:57] <Sporc> ? variable [12:43:57] <@Scorpwanna> hmm, variable is yo momma or bringing down the house
Last edited by Scorpwanna; 22/09/06 05:46 PM.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
LOL your too nice im reading over the /help file in mirc to better understand some of the stuff used in here
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
that seems to work pretty well
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
I was once where you are, and never recieved the help I could of then. So I feel obligated to help you out .
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
haha your awesome
and whoever didnt help you sucks :~(
thanks you really helped me out but i wondering if its not too much trouble (so i can better understand what you did here ...i understand some of it) could you explain what each line does some what ?
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Sure I'll give it a shot in my next post. But right now i'm making the !delete function .
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
on *:text:*:#: {
if ($1 == ?) {
var %text = $2- =>
%text = $read(learnt.txt, w, %text $+ *)
;if "this entry*" is found at the beginning of a line,
if (%text) {
var %term = $reptok(%text,=>,is,1,32)
msg $chan hmm, %term
}
}
if ($1 == !append) {
var %islocation = $findtok($2-,is,1,32)
if (%islocation) {
var %text = $2-
%text = $reptok(%text,is,=>,1,32)
var %newentry = $gettok(%text,1- $+ %islocation,32)
var %findentry = $read(learnt.txt,w,%newentry $+ *)
var %foundentry = $gettok(%findentry,1- $+ %islocation,32)
if (%newentry == %foundentry) {
var %append = $gettok(%text,$calc(%islocation +1) $+ -,32)
write -l $+ $readn learnt.txt %findentry or %append
msg $chan Appended data.
}
}
}
if ($1 == !replace) {
var %islocation = $findtok($2-,is,1,32)
if (%islocation) {
var %text = $2-
%text = $reptok(%text,is,=>,1,32)
var %newentry = $gettok(%text,1- $+ %islocation,32)
var %findentry = $read(learnt.txt,w,%newentry $+ *)
var %foundentry = $gettok(%findentry,1- $+ %islocation,32)
if (%newentry == %foundentry) {
var %replace = $gettok(%text,$calc(%islocation +1) $+ -,32)
write -l $+ $readn learnt.txt %newentry %replace
msg $chan Replaced entry.
}
}
}
if ($1 == !learn) {
var %islocation = $findtok($2-,is,1,32)
if (%islocation) {
var %text = $2-
%text = $reptok(%text,is,=>,1,32)
var %newentry = $gettok(%text,1- $+ %islocation,32)
var %findentry = $read(learnt.txt,w,%newentry $+ *)
var %foundentry = $gettok(%findentry,1- $+ %islocation,32)
if (%newentry == %foundentry) {
msg $chan Already have something for that.
}
else {
write learnt.txt %text
;write this to a file: this entry => that info
;after it's done writing verify that the data did write to the file and if so have it tell you "ok".
if ($read(learnt.txt,w,%text)) { msg $chan ok }
else { msg $chan I pooped my pants }
}
}
}
if ($1 == !delete) {
var %text = $2- =>
%text = $read(learnt.txt, w, %text $+ *)
if (%text) {
write -dl $+ $readn learnt.txt
msg $chan Deleted entry.
}
else { msg $chan Info does not exist to delete }
}
}
[13:04:12] <Sporc> !delete variable [13:04:12] <@Scorpwanna> Deleted entry. [13:04:19] <Sporc> !delete variable [13:04:19] <@Scorpwanna> Info does not exist to delete
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Ok, this may take me a while so I'm going to go ahead and post this here edit the post to then describe what each line does: on *:text:*:#: { on "anylevel" "text" "anytext" "anychannel" if ($1 == ?) { if the first word is a question mark var %text = $2- => create the temporary variable %text which equals the second word to the end and add to it a => %text = $read(learnt.txt, w, %text $+ *) reads learnt.txt for a line beginning with %text (plus our =>) and anything after it. using a => makes sure it finds the right line info because only 1 line will be exactly what it's looking for. ;if "this entry*" is found at the beginning of a line, if (%text) { if %text exists/is found/is not empty but is actually something var %term = $reptok(%text,=>,is,1,32) create the temporary variable %term and replace the first => found with the word "is". Since we added it to make sure it searched and found exactly what we wanted, we don't need it anymore so we change it back to "is". The tokens as they are called in this example separated by the character 32 (which is a space) so every word is a token because it's separated by a space msg $chan hmm, %term message to the active channel hmm, %term information it found } } if ($1 == !append) { if the first word is !append var %islocation = $findtok($2-,is,1,32) create temporary variable %islocation to find where "is" is we use $findtok to search the "second word to the end" for the word "is" only looking for the "first" one and separate the information using character 32/a space When found returns it's position in the text. if (%islocation) { if %islocation is found, not empty etc... var %text = $2- create temporary varilable %text from the second word until the end of the sentance %text = $reptok(%text,is,=>,1,32) we update the %text variable into: replace "in the text" the first "is" with "=>" separating the text by a space character 32 that way we transform the %text with is, into the %text with => var %newentry = $gettok(%text,1- $+ %islocation,32) create temporary variable %newentry, get the tokens (words in this case) in %text, from first word until where %islocation/"is" was found. Returns the text entry only until where is was found. "the information =>" (remembering we replaced is with => instead of "the information => found" var %findentry = $read(learnt.txt,w,%newentry $+ *) create temporary variable %findentry which reads learnt.txt searching for a line beginning with the data %newentry returns So it searches for a line beginning with "the information =>" and returns "the information => found" var %foundentry = $gettok(%findentry,1- $+ %islocation,32) create temporary variable %foundentry get the tokens (words in this case) from the first word until where %islocation/"is" was found. Returns the text entry only until where is was found. "the information =>". You may be saying that this looks familiar to %newentry, only difference is, one is reading text from the text you supply, one is reading from a file. if (%newentry == %foundentry) { if %newentry is equal to %foundentry (if "the information =>" is equal to "the information =>" use the functions within the { }'s var %append = $gettok(%text,$calc(%islocation +1) $+ -,32) create temporary variable %append, get the tokens (words in this case) starting from %islocation plus 1 (making it skip showing the => in the results all the way to the end of the new information. Separated by a space/character 32. so instead of returning "=> the new info" it returns "the new info" write -l $+ $readn learnt.txt %findentry or %append write "on line $readn" (the line read in a text file during this operation) to the file "learnt.txt" "%findentry" (which returned "the information => found") and add to the end of it "or %append" (which returned "the new info") the updated line written is "the information => found or the new info" msg $chan Appended data. messages the active channel "Appended data." } } } if ($1 == !replace) { if the first word is !replace var %islocation = $findtok($2-,is,1,32) again we search for the first is location in the text starting from the second word until the end if (%islocation) { if %islocation is found, not empty etc... var %text = $2- create temporary varilable %text from the second word until the end of the sentance %text = $reptok(%text,is,=>,1,32) we update the %text variable into: replace "in the text" the first "is" with "=>" separating the text by a space character 32 that way we transform the %text with is, into the %text with =>. Which returns "the information => the new info" var %newentry = $gettok(%text,1- $+ %islocation,32) var %findentry = $read(learnt.txt,w,%newentry $+ *) var %foundentry = $gettok(%findentry,1- $+ %islocation,32) if (%newentry == %foundentry) { var %replace = $gettok(%text,$calc(%islocation +1) $+ -,32) does the same as the above does for append but! write -l $+ $readn learnt.txt %newentry %replace instead of appending, it overwrites the entire line with the new data, without saving the old with it. msg $chan Replaced entry. messages the active channel Replaced entry. } } } if ($1 == !learn) { if the first word is !learn var %islocation = $findtok($2-,is,1,32) again find the location of is if (%islocation) { yada yada yada var %text = $2- create temp variable %text using the second word until the end %text = $reptok(%text,is,=>,1,32) var %newentry = $gettok(%text,1- $+ %islocation,32) var %findentry = $read(learnt.txt,w,%newentry $+ *) var %foundentry = $gettok(%findentry,1- $+ %islocation,32) if (%newentry == %foundentry) { same as above but! if it's found it tells you it already exists rather than doing anything about it. msg $chan Already have something for that. messages active channel "Already have something for that. } else { if the %newentry isn't %foundentry or default to using this write learnt.txt %text write to a new line in learnt.txt "the information => the info" ;write this to a file: this entry => that info ;after it's done writing verify that the data did write to the file and if so have it tell you "ok". remark lines in mirc if ($read(learnt.txt,w,%text)) { msg $chan ok } reads learnt.txt for a line matching "the information => the info" if it exists and matches, messages active channel ok, verifying that it learned the information else { msg $chan I pooped my pants } if it failed to write the information successfully it messages the active channel that it pooped it's pants } } } if ($1 == !delete) { if the first word is !delete var %text = $2- => create the temporary variable %text which equals the second word to the end and add to it a => %text = $read(learnt.txt, w, %text $+ *) update the variable %text with the information found from reading learnt.txt for a line beginning with "the information =>" if (%text) { if found/exists/is not empty... write -dl $+ $readn learnt.txt use write to delete the line read during the $read operation, removing the entry from the learnt.txt file. msg $chan Deleted entry. message active channel "Deleted entry. } else { msg $chan Info does not exist to delete } if not found/edists/or is empty(nothing returned) message the active channel "Info does not exists to delete" } } Hope that helps you understand more about mirc .
Last edited by Scorpwanna; 22/09/06 07:01 PM.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
thanks alot
REALLY appreciate it
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
You're welcome.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
man you should teach web programming at college or something LOL
i thought of another idea to go along with this script
would it be possible to add a
!last 100
command or something? (to list the most recent 100 keywords added for easy reference)
and a !listall ? (to list all keyword entries)
Last edited by Sukai; 22/09/06 07:48 PM.
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Yes that could be possible. However, I can't work on it much more today, maybe later though. But, I'll give it a shot . hrm a ("!last" 100), perhaps it would be good to use a hash table for this, or a separate file just for that info. "!listall ?" can be achieved by just having it return every line of text from the file before the separateor =>. Possibly using a whileloop, but depending on how much data there is, it would take a while to get the data ready. I'll look into it later this evening . Nah I never could teach at a college. I had a good teacher when I first started learning mIRC. Once I got use to how it's coding worked it sort of caught on over the years. It gets easier once you've started projects. Best way to learn, is to get an idea of something to make happen, and go for it.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
i say you can :P
thanks for all your help mannn i ll look into adding new stuff to this script (or at least try to x.x)
practice makes perfect right ? haha
cya later this evening then! thanks again
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
I dunno if this is what you mean by a !listall command. But I like it.
if ($1 == !listall) {
if ($2 == stop) { play stop }
else { play $chan learnt.txt }
}
Will have the bot read back the learnt.txt file to the channel typing !listall stop stops it.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
something like that
i was thinking making it show only the keyword (not the definition) in this format
example:
<bot> entry1, entry2, blah, it goes on, number2, chickens, entry1, entry2, blah, it goes on, number2, chickens, entry1, entry2, blah, it goes on, number2, chickens, entry1, entry2, blah, it goes on, number2, chickens, entry1, entry2, blah, it goes on, number2, chickens,
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Ahh, ok. So we wouldn't need the play option, play plays back a files contents to the chat. I had made this just now:
if ($1 == !last) {
var %last = $2
if (%last isnum) {
var %lines = $lines(learnt.txt)
var %startat $calc(%lines - %last +1)
play -f $+ %startat $chan learnt.txt
}
else { msg $chan no number specified }
}
But I see where you're going with this.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
that works better
but is there anyway to make it show only the keyword? in the format i showed in the previous post
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
if ($1 == !listall) {
var %i = 1
var %lines = $lines(learnt.txt)
var %result
while (%i <= %lines) {
var %line = $read(learnt.txt,%i)
var %islocation = $findtok(%line,=>,1,32)
var %keyword = $gettok(%line,1- $+ $calc(%islocation -1),32)
if (%result) { %result = %result $+ , %keyword }
else { %result = %keyword }
inc %i
}
msg $chan %result
}
Explained: if ($1 == !listall) { if first word equals !listall var %i = 1 create temporary variable %i equaling 1 (needed for the loop below) var %lines = $lines(learnt.txt) create temporary variable %lines which returns the total lines in the learnt.txt file for this sample lets say %lines equals 12 var %result create temporary variable %result for use later on while (%i <= %lines) { whileloop if %i (1) is less than or equal to %lines (12) var %line = $read(learnt.txt,%i) create temporary variable %line having it read learnt.txt line %i (1) to start var %islocation = $findtok(%line,=>,1,32) create temporary variable %islocation to get the location of => var %keyword = $gettok(%line,1- $+ $calc(%islocation -1),32) create temporary variable %keyword to return just the keyword of the %line + %islocation results. Returns "word" and not "word =>" if (%result) { %result = %result $+ , %keyword } if %result is true/is something/not empty/etc... update the variable with the information it already has plus the new %keyword else { %result = %keyword } else if %result is false/is nothing update %result with %keyword inc %i increase the variable %i plus 1, %i was 1 now it's 2 the loop then goes back to the start and performs the same routine replacing %i = 1 with %i = 2 } msg $chan %result when the loop is completed message active channel the results } results will show as follows: <nick> this entry, apple, grey matter, red, spoon, PIM, word, words, ammo, pistol now to create the !last num thing
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
if ($1 == !last) {
var %last = $2
if (%last isnum) {
var %lines = $lines(learnt.txt)
var %i = $calc(%lines - %last +1)
var %result
while (%i <= %lines) {
var %line = $read(learnt.txt,%i)
var %islocation = $findtok(%line,=>,1,32)
var %keyword = $gettok(%line,1- $+ $calc(%islocation -1),32)
if (%result) { %result = %result $+ , %keyword }
else { %result = %keyword }
inc %i
}
msg $chan Results: %result
}
else { msg $chan no number specified }
}
The above will seem familiar to the !listall except all it does is start on a particular line . I'll explain some: var %last = $2 create a temporary variable for %last which is a number you provide after "!last" var %i = $calc(%lines - %last +1) create a temporary variable taking the total %lines minus the %last (the number you provide this gets us the remaining lines) and add 1 to it. Adding one shifts it down 1 line, to start on the line we want to begin at.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
haha looks great so far, awesome
i think i just ran out of ideas o_o;;
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Well, that should be enough to get you started. Just review over it, and try things out yourself. Bug check it etc... Never hold back asking a question on here, there's always an answer .
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
thanks Scorpwanna i ll keep you updated if i make any changes, oh and let me know how your socketbot turns out
for now i go
bye and thanks again
Last edited by Sukai; 22/09/06 10:06 PM.
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Scorpwanna, hash tables are very easy to use with multiple words if needed. As I stated in my original post, I could easily add that if he wanted it added. They are definitely faster than reading the data and the script can be much smaller. Sukai: Ok, you're right that I forgot about the test I was doing and didn't change it. Here's the update including the other information you asked for. If you need anything else added, just let me know.
alias -l CreateHelp {
hmake Help 100
if ($isfile(Help.hsh)) { hload Help Help.hsh }
}
on *:start: {
CreateHelp
}
on *:text:*:#: {
if ($1 != !learn && $1 != !replace && $1 != !append && $1 != !delete && $1 != $chr(63)) { return }
if (!$2) { msg $chan Please include a keyword with the command | return }
if ($hget(Help) == $null) { CreateHelp }
if ($1 == !learn) {
if ($hget(Help,$2)) { msg $chan That keyword is already used. Please choose another, or use !replace or !append. | return }
msg $chan Learned $3-
hadd Help $2-
}
elseif ($1 == $chr(63)) {
var %data = $hget(Help,$2-)
if (%data == $null) { msg $chan No help available on that item. }
else {
msg $chan %data
}
}
elseif ($1 == !replace) {
if ($hget(Help,$2)) {
msg $chan Replaced $hget(Help,$2).data with $2-
hadd Help $2-
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !append) {
if ($hget(Help,$2)) {
msg $chan Appended $3- to $hget(Help,$2).data
hadd Help $2 $hget(Help,$2) $3-
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !delete) {
if ($hget(Help,$2)) {
msg $chan Deleted $2 -- $hget(Help,$2).data
hdel Help $2
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
hsave Help Help.hsh
} USE: !learn keyword description !replace keyword new_description !append keyword new_part_of_description !delete keyword ? keyword I didn't include !set as I'd have to redo a little of the hash table's data on the script. If you really want it, I can add it easily enough. Scorpwanna did have a good idea of listing the keywords, though if there are too many of them, this can be a problem. If you want that feature, it is also really easy to add with a hash table. Note that I would also recommend making these commands only available to certain people. Otherwise, some malicious person could come through and either add all kinds of fake stuff or delete everything you have. And, feel free to edit or remove the msg lines that tell the channel what happened if you don't like them. And adding color would probably look good as well.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Scorpwanna, hash tables are very easy to use with multiple words if needed. Ahh, multiple words for item? Cool could you show me how that's done? I've always wanted to use hash tables but never could get it right. Yeah, hash from what i've seen is faster. Storing the information in memory is always a plus for speed. They should be aware that if using hash, they might need to save the hash to a file every so often incase mIRC or their computer crashes/gets shut off. Yeah the listing, was what they wanted, that would really be a huge list over time, causing problems later on. I wouldn't use it myself, but hey it's what they wanted . As far as hash tables I always had a problem with: hadd "switch" item data Item would always have to be 1 word. I tryed using quotes around the item area and everything and never was able to do it. I had always thought maybe the only way was to replace the spaces with . or _'s How do I make it multiple? hadd "switch" "item with multiple words" "data"
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
LOL oiiii
now i dont know which one to use
both got its pros
x___x im so confused
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Scorpwanna, Yes, you need to replace $chr(32) (spaces) with another character that you're not planning on using... usually you'd pick a character like Þ -- $chr(222) -- as you're unlikely to ever use that in your commands. You can use _ or . if you like, but it could be an issue if you want to use those in your keywords.
It may seem like replacing isn't ideal, but it's really easy and works without a problem and the user doesn't need to do anything special if you automatically use $replace rather than make them do it when using the command.
One thing to keep in mind however you do it... if you want to use more than one word, then you really need to have some kind of character that designates what is the keyword and what isn't when using the commands...
!learn this is the keyword this is the description
That won't work because there isn't any way to know what is the keyword and what is the description.
!learn this is the keyword = this is the description
That would work because you have something to denote what the keyword is. But you have to use a character that will never be in the keyword, so again, it's good to choose something like Þ to prevent that problem.
============
Sukai, What would you like to include besides what I've already done? Do you want multiple words? You can do them already by using _'s or something else instead of spaces, or I can add it so you can do it with spaces. Just remember that you need a character in your commands between the keyword and the description (see above).
Do you want to list the keywords? Do you want the !set command? Is there anything else?
The nice thing with hash tables, besides speed, is that they are very easy to modify how they work.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Ahh yeah, I figured replacing would be needed. Hrm, I think a good char would be 160 the invisible space. Only accessible using alt+0160 or $chr(160) and I don't know many users that would use that. Thanks Riamus2
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
maybe something that tells you who was the last person who altered or created the specific keyword?
?whoset mirc <bot>mirc was set by Sukai
or something
its not really necessary but it would be a cool feature to have
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Ok, here's an update to allow inclusion of who changed the keyword last. I'm going to use !whoset instead of ?whoset to keep it matching the rest of the commands. You can always change it if you want to. Keep in mind that this will require you to clear your current hash file and start fresh if you've already used this script because it is now storing the nicks. To do so, you'll want to type: /hfree Help /remove Help.hsh Then, you can use the updated script.
alias -l CreateHelp {
hmake Help 100
if ($isfile(Help.hsh)) { hload Help Help.hsh }
}
on *:start: {
CreateHelp
}
on *:text:*:#: {
if ($1 != !learn && $1 != !replace && $1 != !append && $1 != !delete && $1 != !whoset && $1 != $chr(63)) { return }
if (!$2) { msg $chan Please include a keyword with the command | return }
if ($hget(Help) == $null) { CreateHelp }
if ($1 == !learn) {
if ($hget(Help,$2)) { msg $chan That keyword is already used. Please choose another, or use !replace or !append. | return }
msg $chan Learned $3-
hadd Help $2 $nick $3-
}
elseif ($1 == $chr(63)) {
var %data = $gettok($hget(Help,$2),2-,32)
if (%data == $null) { msg $chan No help available on that item. }
else {
msg $chan %data
}
}
elseif ($1 == !replace) {
if ($hget(Help,$2)) {
msg $chan Replaced $gettok($hget(Help,$2),2-,32) with $2-
hadd Help $2 $nick $3-
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !append) {
if ($hget(Help,$2)) {
msg $chan Appended $3- to $hget(Help,$2)
hadd Help $2 $nick $gettok($hget(Help,$2),2-,32) $3-
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !delete) {
if ($hget(Help,$2)) {
msg $chan Deleted $2 -- $gettok($hget(Help,$2),2-,32)
hdel Help $2
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !whoset) {
if ($hget(Help,$2)) {
msg $chan $gettok($hget(Help,$2),1,32) was the last person to update $2 $+ .
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
hsave Help Help.hsh
} USE: !learn keyword description !replace keyword new_description !append keyword new_part_of_description !delete keyword !whoset keyword ? keyword Need anything else that I listed? And I still would recommend limiting this to specific users. If you want to do that, let me know. The easiest way would be to add them to your user list and then set the on text to only trigger for that user level. Then we'd just pull the viewing trigger out of that on text and put it on its own. It's up to you. *EDIT* Updated after realizing I forgot to change some things after adding !whoset support.
Last edited by Riamus2; 23/09/06 02:15 AM.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Oh, Scorpwanna, I am saving the hash file anytime it's updated... originally, it was saved inside the command's IF section and now it's saved at the very end to cut down on the number of lines. I always make sure to have hash files saved. And, I agree that $chr(160) is a really good character for replacing spaces with hash tables.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
And I still would recommend limiting this to specific users. If you want to do that, let me know. The easiest way would be to add them to your user list and then set the on text to only trigger for that user level. Then we'd just pull the viewing trigger out of that on text and put it on its own. It's up to you.
i dont think its necessary the channel is private only a few of us in there lol, but the scripts looks awesome i really dont know what else can be improved to be honest
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Ok, well let me know if you want something added or changed. Like I said, most hash table stuff is easy to modify when you know how to use them. Learning them can be confusing at first, but they are very powerful when you know them. BTW, I updated it above... I forgot to change some things after adding !whoset support. If you tried the above code, you'd have noticed the nick appearing where it shouldn't. That's fixed now.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
AAHH sorry man but i just thought of one thing the !listall and !last feature scorpwanna had !listall ( lists every key word in this fashion <bot> entry1, entry2, entry3, etc it does not include the definitions only the keyword ) and !last N replace N with 10 or 20 or 100 whatever, it ll list the (example) 10 most recently added keywords hope thatd not to difficult to alter
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
alias -l CreateHelp {
hmake Help 100
if ($isfile(Help.hsh)) { hload Help Help.hsh }
}
on *:start: {
CreateHelp
}
on *:text:*:#: {
if ($1 != !learn && $1 != !replace && $1 != !append && $1 != !delete && $1 != !whoset && $1 != !listall && $1 != !last && $1 != $chr(63)) { return }
if ($hget(Help) == $null) { CreateHelp }
if ($1 == !listall) {
var %list.cnt = 1
var %line.cnt = 1
while (%list.cnt <= $hget(Help,0).item) {
if ($len(%list [ $+ [ %line.cnt ] ]) > 300) { inc %line.cnt }
var %list. $+ %line.cnt = %list [ $+ [ %line.cnt ] ] $+ , $+ $hget(Help,%list.cnt).item
inc %list.cnt
}
var %list.cnt = 1
while (%list.cnt <= %line.cnt) {
msg $chan $right(%list [ $+ [ %line.cnt ] ],-1)
}
return
}
if (!$2) { msg $chan Please include a keyword with the command | return }
if ($1 == !learn) {
if ($hget(Help,$2)) { msg $chan That keyword is already used. Please choose another, or use !replace or !append. | return }
msg $chan Learned $3-
hadd Help $2 $nick $3-
}
elseif ($1 == $chr(63)) {
var %data = $gettok($hget(Help,$2),2-,32)
if (%data == $null) { msg $chan No help available on that item. }
else {
msg $chan %data
}
}
elseif ($1 == !replace) {
if ($hget(Help,$2)) {
msg $chan Replaced $gettok($hget(Help,$2),2-,32) with $2-
hadd Help $2 $nick $3-
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !append) {
if ($hget(Help,$2)) {
msg $chan Appended $3- to $hget(Help,$2)
hadd Help $2 $nick $gettok($hget(Help,$2),2-,32) $3-
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !delete) {
if ($hget(Help,$2)) {
msg $chan Deleted $2 -- $gettok($hget(Help,$2),2-,32)
hdel Help $2
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !whoset) {
if ($hget(Help,$2)) {
msg $chan $gettok($hget(Help,$2),1,32) was the last person to update $2 $+ .
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !last) {
if ($2 !isnum) { msg $chan You need to enter a number with that command. | return }
var %list.cnt = $calc($hget(Help,0).item - $2)
if (%list.cnt < 1) { var %list.cnt = 1 }
var %line.cnt = 1
while (%list.cnt <= $hget(Help,0).item) {
if ($len(%list [ $+ [ %line.cnt ] ]) > 300) { inc %line.cnt }
var %list. $+ %line.cnt = %list [ $+ [ %line.cnt ] ] $+ , $+ $hget(Help,%list.cnt).item
inc %list.cnt
}
var %list.cnt = 1
while (%list.cnt <= %line.cnt) {
msg $chan $right(%list [ $+ [ %line.cnt ] ],-1)
inc %list.cnt
}
}
hsave Help Help.hsh
} USE: !learn keyword description !replace keyword new_description !append keyword new_part_of_description !delete keyword !whoset keyword !listall !last number ? keyword Ok, I didn't test this, but it should work. If not, let me know. You may want to adjust the 300's for each of those commands to something higher or lower. That's the *approximate* number of characters you want per line when listing all of your commands. What will happen is that it will display about that many characters' worth of keywords, then go to the next line and keep doing more lines until it reaches the end of the keywords. Keep in mind that if you have enough keywords to send more than 5 or so lines, you'll get flooded off. This is done so you don't try displaying more characters than the network allows on a single line and also prevents you from making the variable length too long.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
unfortunately the !last n and !listall isnt working :~(
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Sorry.. fixed the !listall. As for !last... I forgot that hash tables never put things in the right order unless you use numbers for the items. If you want a !last command, I can have it write the keywords to a file and then read in the last N keywords for you. Or, I can possibly set it up to work with /filter and put numbers in front of the item names and sort them. Up to you if you want that command.
alias -l CreateHelp {
hmake Help 100
if ($isfile(Help.hsh)) { hload Help Help.hsh }
}
on *:start: {
CreateHelp
}
on *:text:*:#: {
if ($1 != !learn && $1 != !replace && $1 != !append && $1 != !delete && $1 != !whoset && $1 != !listall && $1 != !last && $1 != $chr(63)) { return }
if ($hget(Help) == $null) { CreateHelp }
if ($1 == !listall) {
var %list.cnt = 1
var %line.cnt = 1
while (%list.cnt <= $hget(Help,0).item) {
if ($len(%list [ $+ [ %line.cnt ] ]) > 300) { inc %line.cnt }
var %list. $+ %line.cnt %list. [ $+ [ %line.cnt ] ] $+ , $+ $hget(Help, [ %list.cnt ] ).item
inc %list.cnt
}
var %list.cnt = 1
while (%list.cnt <= %line.cnt) {
msg $chan $right(%list. [ $+ [ %line.cnt ] ],-1)
inc %list.cnt
}
return
}
if (!$2) { msg $chan Please include a keyword with the command | return }
if ($1 == !learn) {
if ($hget(Help,$2)) { msg $chan That keyword is already used. Please choose another, or use !replace or !append. | return }
msg $chan Learned $3-
hadd Help $2 $nick $3-
}
elseif ($1 == $chr(63)) {
var %data = $gettok($hget(Help,$2),2-,32)
if (%data == $null) { msg $chan No help available on that item. }
else {
msg $chan %data
}
}
elseif ($1 == !replace) {
if ($hget(Help,$2)) {
msg $chan Replaced $gettok($hget(Help,$2),2-,32) with $2-
hadd Help $2 $nick $3-
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !append) {
if ($hget(Help,$2)) {
msg $chan Appended $3- to $hget(Help,$2)
hadd Help $2 $nick $gettok($hget(Help,$2),2-,32) $3-
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !delete) {
if ($hget(Help,$2)) {
msg $chan Deleted $2 -- $gettok($hget(Help,$2),2-,32)
hdel Help $2
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !whoset) {
if ($hget(Help,$2)) {
msg $chan $gettok($hget(Help,$2),1,32) was the last person to update $2 $+ .
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
hsave Help Help.hsh
}
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
in the !listall
say if the amount of keywords is too much to be displayed in one line ( in mirc theres a limit to how much you can type in one line)
will it continue displaying into a second line ?
if the keyword/definition database grows (into the hundredths) it may not display it all, if its limited to one line only
Last edited by Sukai; 23/09/06 06:34 PM.
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Yes. Read what I wrote in the first post that included !listall. I mentioned possibly needing to change 300 to another number if it's too short of a line or too long of a line. I also mentioned that if you get too many (more than 5 lines or so), you'll probably be flooded off.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Riamus2 is right, to much text all at once and you could flood off a server. If your still wanting to keep the listall command, you might want to make it a dcc chat connection to a user and then have it send the information that way. In a dcc chat you're not bound by flooding off. Though I'm not saying the listall command is a bad one, but over time that could be a large amount of text to shell out all at once. Oh and Riamus2 , now I know why you love hash tables so much, they are kick ass. I've been modifying an old socketbot to act more like an infobot using hash tables for the info. Very nice results.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
sorry Riamus2 i must of overlooked it, but well what if its made to delay between the lines ? most networks kick you off because you typed too many lines too fast (at least thats what they do over at QuakeNet)
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Hrm, you could have it dump the learned keywords to a file (using some mirc magic) then have it use the play command to play back one line at a time using the play delay. Say for example, you want it only to put 10 keywords on a line at a time. keyword, keyword, keyword etc... until 10 make a new line keyword, keyword, keyword etc... would use a while loop to start the 10 count over anyway. It would write the info to the file once it reaches 10, they use play to play it back without flooding. Course that could take some coding.
var %i = 1
var %i2 = 1
var %totalhash = $hget() etc.... for the number of total entries
var %writetoline
while (%i <= %totalhash) {
%writetoline = %writetoline $hget(table,%i).item
if (%i2 == 10) {
write templistall.txt %writetoline
%writetoline = ""
%i2 = 0
}
inc %i
inc %i2
}
then use: play $chan/$nick templistall.txt
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Good idea, Scorpwanna, but a hidden custom window would avoid the need for writing to a file and would allow you to /play from it. I'll see about adding that to it maybe tomorrow. Remind me.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
Oh and Riamus2 , now I know why you love hash tables so much, they are kick ass. I've been modifying an old socketbot to act more like an infobot using hash tables for the info. Very nice results. Heh. Yeah, they really are useful. I have a nice card dealing hash table script that I made that deals out cards and include colors (white background and red/black based on suit). I made it for my Cribbage script I'm working on. I kind of put that on hold, though... along with my Scattergories script. I should finish those... My monopoly script is also on hold, but from much longer ago. Oh well. I haven't released to many scripts... a few are on my site (Weather script, Dictionary script, $DateXpander (do a search here for info on that if you want)) and a few were released on the invision forum (Kick/Ban window, Playlist script for Invision, etc.), but otherwise I've not really released much. Btw, you don't have to include "2" when saying my nick. It's only there because I forgot my password for Riamus and had a different e-mail, so couldn't retrieve it.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Sep 2006
Posts: 31
Ameglian cow
|
OP
Ameglian cow
Joined: Sep 2006
Posts: 31 |
you guys are awesome!, really helped me out how did you guys learn mirc scripting? played with it? any good tutorials or sites? i only know of here and www.mircscripts.org
|
|
|
|
Joined: Sep 2003
Posts: 261
Fjord artisan
|
Fjord artisan
Joined: Sep 2003
Posts: 261 |
Ahh I gotcha, yeah same deal with me and my nickname on the scifi.com board. Yeah, i've got scripts laying around almost done or half way done that I never finish. I think the only one i ever finished completely was the huge mp3player script I created with the help of a few people's ideas. But that was years ago, I took a break from mirc scripting to learn some perl and a bit of php. Just recently started back up with mirc stuff, all these languages can get confuseing at times. Sukai I never could find a tutorial that would match the mirc help file. I got started by a friend I met in chat teaching me simple on text events. First thing i ever made myself was a bot. Best way to learn is just get an idea, and think about how each thing of that idea is going to work. If you can't figure it out ask questions.
We don't just write the scripts, we put them to the test! (ScriptBusters)
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
sorry Riamus2 i must of overlooked it, but well what if its made to delay between the lines ? most networks kick you off because you typed too many lines too fast (at least thats what they do over at QuakeNet) Sorry I didn't get to this right away. This should give you your delay. Apparently, I was wrong... you can't play a custom window. Well, you can by using an alias, but it still wants a filename. So, here's writing it to a file and playing that. Note that I changed the RED part from what it used to be and I added the GREEN part. Nothing else has changed.
alias -l CreateHelp {
hmake Help 100
if ($isfile(Help.hsh)) { hload Help Help.hsh }
}
on *:start: {
CreateHelp
}
on *:text:*:#: {
if ($1 != !learn && $1 != !replace && $1 != !append && $1 != !delete && $1 != !whoset && $1 != !listall && $1 != !last && $1 != $chr(63)) { return }
if ($hget(Help) == $null) { CreateHelp }
if ($1 == !listall) {
var %list.cnt = 1
var %line.cnt = 1
while (%list.cnt <= $hget(Help,0).item) {
if ($len(%list [ $+ [ %line.cnt ] ]) > 300) { inc %line.cnt }
var %list. $+ %line.cnt %list. [ $+ [ %line.cnt ] ] $+ , $+ $hget(Help, [ %list.cnt ] ).item
inc %list.cnt
}
var %list.cnt = 1
while (%list.cnt <= %line.cnt) {
[color:red]write list.tmp [/color]$right(%list. [ $+ [ %line.cnt ] ],-1)
inc %list.cnt
}
[color:green]play $chan list.tmp 1500
.remove list.tmp[/color]
return
}
if (!$2) { msg $chan Please include a keyword with the command | return }
if ($1 == !learn) {
if ($hget(Help,$2)) { msg $chan That keyword is already used. Please choose another, or use !replace or !append. | return }
msg $chan Learned $3-
hadd Help $2 $nick $3-
}
elseif ($1 == $chr(63)) {
var %data = $gettok($hget(Help,$2),2-,32)
if (%data == $null) { msg $chan No help available on that item. }
else {
msg $chan %data
}
}
elseif ($1 == !replace) {
if ($hget(Help,$2)) {
msg $chan Replaced $gettok($hget(Help,$2),2-,32) with $2-
hadd Help $2 $nick $3-
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !append) {
if ($hget(Help,$2)) {
msg $chan Appended $3- to $hget(Help,$2)
hadd Help $2 $nick $gettok($hget(Help,$2),2-,32) $3-
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !delete) {
if ($hget(Help,$2)) {
msg $chan Deleted $2 -- $gettok($hget(Help,$2),2-,32)
hdel Help $2
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
elseif ($1 == !whoset) {
if ($hget(Help,$2)) {
msg $chan $gettok($hget(Help,$2),1,32) was the last person to update $2 $+ .
}
else msg $chan No such keyword ( $+ $2 $+ ).
}
hsave Help Help.hsh
}
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Oct 2004
Posts: 8,330
Hoopy frood
|
Hoopy frood
Joined: Oct 2004
Posts: 8,330 |
you guys are awesome!, really helped me out how did you guys learn mirc scripting? played with it? any good tutorials or sites? i only know of here and www.mircscripts.org I learned by doing it. Back in 2001, I started running TrivBot 2000 and after not very long, I realized that I wanted it to do more than it did. So, I started looking at the scripting and tried to figure out how to make it do what I wanted. Now our trivia bot is more advanced than any other trivia bot I've ever seen and it has around 10,000 questions specifically about old (classic) games for PC, console, and handheld. Of course, I have a lot of prior programming knowledge, so the scripting language isn't really that hard to figure out (or at least get a general idea of what is happening) with that prior knowledge. I was on Dalnet at the time and it had 2 good #scripting channels... #scripthelp and #scripting, or something like that. I have no idea if those are the correct names or if they are still around. Anyhow, I always went there to ask questions. As I got more involved with scripting, I started looking at other peoples' scripts to see how they worked. Combining that with mIRC's help file and this forum and the scripting channels, I have been able to figure out what I wanted to do without too much difficulty. The real trick is this... 1) You need to really *want* to learn it. Otherwise, you won't put in enough effort and it will just be a waste of your time to try. 2) You need to script regularly (or at least play around with scripts, even if you're not writing new ones). When learning any language (computer or human), you learn through use. If you rarely use it, you won't succeed. I would love to relearn C++ (I haven't used it in so long that I forgot most of it), but I don't really have any need for writing programs in it, so learning it isn't really possible --- without needing to use it, I have no incentive to learn it and I don't get enough practice using it. With mIRC, I use it almost every day, so I'm always finding things that I can script or improve or change in scripts, so I have plenty of practice. 3) Learn to use the help file. Many people complain about it because it really isn't all that user friendly. However, it is a GREAT source of information if you know how to use it properly so that you can find what you are looking for. 4) Get some simple scripts from mircscripts.org and see how they do what they do. See if you can edit them to do something else. Start with simple things like on TEXT triggers. Try something like having the script send a message to anyone who says hello. As you progress, you can pick up more difficult scripts... but if you try to skip the easy scripts because you think they are "kid stuff", then you'll never really get very far. 5) Once you have a handle on the easier scripting skills, start paying attention to what people here are writing. Don't start answering scripting questions unless you're sure you know how to do it, but just read the answers others give. If the question is about sockets, for example, and you think you want to try to learn how to use sockets, then look at how the script in the answer looks and try to see how it works. Then start looking at other socket answers in the forum to see similarities. Try changing some things to see if you can make it do something different. Eventually, you can try writing your own. Keep in mind that sockets is advanced and I just used it as an example. The idea is that you see how people do something and then try to make it work for yourself. 6) Ask questions!! However, if you are learning to script, don't just ask if someone can write a script for you. Even just saying, "How can I make a script do ____?" will usually get you a script for an answer. That isn't what you want. Instead, ask the question, but include what you've already tried to create. And make sure to point out that you are trying to learn to do it yourself so that, hopefully, you'll get a good explanation on how to do it.
Invision Support #Invision on irc.irchighway.net
|
|
|
|
Joined: Mar 2003
Posts: 612
Fjord artisan
|
Fjord artisan
Joined: Mar 2003
Posts: 612 |
7) remember your scripts do what you tell them to do, not what you want them to do.... btk
billythekid
|
|
|
|
|