|
|
|
Joined: Mar 2009
Posts: 6
Nutrimatic drinks dispenser
|
OP
Nutrimatic drinks dispenser
Joined: Mar 2009
Posts: 6 |
I know I'm very bad script writer but how I can make this work correctly ?
on *:text:*:#: { $read(urls.txt) { $ifmatch { /mode $chan +b $nick | /kick # $nick No Advertiseing ! } } }
That works, but not right.. Some1 say some url my bot kicks hime/her.. And I want that my bot reads that text file I specified and kick if the url is there..
|
|
|
|
Joined: Aug 2004
Posts: 7,252
Hoopy frood
|
Hoopy frood
Joined: Aug 2004
Posts: 7,252 |
on *:text:*:#:{
if $read(urls.txt,w,$+(*,$1,*)) {
.ban -k $chan $nick No advertising
}
} This will check the text file for a match to the first word entered. There are excellent regex methods of restricting the match text section of the ON TEXT event to just a URL format. Then the actual URL can be checked, no matter if the URL is the first word or not. Unfortunately I'm still in the process of waking up and not thinking straight enough to provide the regex.
Last edited by RusselB; 18/03/09 12:57 PM.
|
|
|
|
Joined: Jul 2006
Posts: 4,187
Hoopy frood
|
Hoopy frood
Joined: Jul 2006
Posts: 4,187 |
Regex is great when you want to match any link, here he want to match only link that are in his file.
#mircscripting @ irc.swiftirc.net == the best mIRC help channel
|
|
|
|
Joined: Aug 2004
Posts: 7,252
Hoopy frood
|
Hoopy frood
Joined: Aug 2004
Posts: 7,252 |
Code modified to allow for any of the examples that you posted. Remember that the URL in the text file must match that of the URL that is posted in the channel. The bot does nothing in this case, since you don't have http://haveaniceday.org in your text file (according to the samples you provided).
|
|
|
|
Joined: Nov 2006
Posts: 1,559
Hoopy frood
|
Hoopy frood
Joined: Nov 2006
Posts: 1,559 |
As an alternative, the script below will capture forbidden urls inside messages without the need to specify possile variations of the protocoll for each. It's the best method using $read for this task I can think of atm, though there may be a bether one, and $read isn't the best choice for this kind of matching at all. As long as you don't have an excessivly long list of urls, it may be sufficient. Put all forbidden "urls" inside a textfile named "forbiddenurls.txt" located in your mirc main directory, each on a separate line. DON'T add the protocol like http:// or host (www.) there, start at the domain part. You may use wildcards. Examples: for "www.google.com" add: google.com for "https://forums.mirc.com" add: forums.mirc.com The script will check all words that contain either the protocol "http://", "https://" "ftp://", or "www.". If any line in the textfile matches the text following the protocol, it will issue the kickban. Example: If you have e.g. in the textfile the line: test123.com It will ban for messages: "www.test123.com" "Gratis testing? >http://www.test123.com<" "check out http://test123.com/tests/something" It won't ban for: "www.anothertest123.com" "I really like test123.com" on @*:text:*:#YOURCHAN: { urlcheck $1- }
on @*:action:*:#YOURCHAN: { urlcheck $1- }
alias -l urlcheck {
noop $regex($strip($1-),/(?:(?:http|https|ftp):\/\/|www\.)(?:www\.)?(\S+)/gi)
var %a = 1
while ($regml(%a)) {
var %b = 1
while ($read(forbiddenurls.txt,%b)) {
if ($+($v1,*) iswm $regml(%a)) {
ban -k $chan $nick 1 No advertising!
return
}
inc %b
}
inc %a
}
} (the regex is far from perfect, but it should work)
|
|
|
|
Joined: Mar 2009
Posts: 6
Nutrimatic drinks dispenser
|
OP
Nutrimatic drinks dispenser
Joined: Mar 2009
Posts: 6 |
As an alternative, the script below will capture forbidden urls inside messages without the need to specify possile variations of the protocoll for each. It's the best method using $read for this task I can think of atm, though there may be a bether one, and $read isn't the best choice for this kind of matching at all. As long as you don't have an excessivly long list of urls, it may be sufficient. Put all forbidden "urls" inside a textfile named "forbiddenurls.txt" located in your mirc main directory, each on a separate line. DON'T add the protocol like http:// or host (www.) there, start at the domain part. You may use wildcards. Examples: for "www.google.com" add: google.com for "https://forums.mirc.com" add: forums.mirc.com The script will check all words that contain either the protocol "http://", "https://" "ftp://", or "www.". If any line in the textfile matches the text following the protocol, it will issue the kickban. Example: If you have e.g. in the textfile the line: test123.com It will ban for messages: "www.test123.com" "Gratis testing? >http://www.test123.com<" "check out http://test123.com/tests/something" It won't ban for: "www.anothertest123.com" "I really like test123.com" on @*:text:*:#YOURCHAN: { urlcheck $1- }
on @*:action:*:#YOURCHAN: { urlcheck $1- }
alias -l urlcheck {
noop $regex($strip($1-),/(?:(?:http|https|ftp):\/\/|www\.)(?:www\.)?(\S+)/gi)
var %a = 1
while ($regml(%a)) {
var %b = 1
while ($read(forbiddenurls.txt,%b)) {
if ($+($v1,*) iswm $regml(%a)) {
ban -k $chan $nick 1 No advertising!
return
}
inc %b
}
inc %a
}
} (the regex is far from perfect, but it should work) Just this I ment. Because I don't need script which ban all who say some url, ONLY them who say URL which is in text file. I'll test this script later today.
|
|
|
|
Joined: Jul 2007
Posts: 1,129
Hoopy frood
|
Hoopy frood
Joined: Jul 2007
Posts: 1,129 |
If you want the exact match for url links that you specified in your urls.txt, this should do it: on *:TEXT:*:#: {
var %x = $lines(urls.txt)
while (%x) {
if ($read(urls.txt,%x) isin $1-) {
ban -k # $nick 2 $v1 is forbidden to advertise!
}
dec %x
}
}
|
|
|
|
Joined: Jul 2006
Posts: 4,187
Hoopy frood
|
Hoopy frood
Joined: Jul 2006
Posts: 4,187 |
This code is very inefficient :/, check what was already given using $read(file,w,)
#mircscripting @ irc.swiftirc.net == the best mIRC help channel
|
|
|
|
Joined: Jul 2007
Posts: 1,129
Hoopy frood
|
Hoopy frood
Joined: Jul 2007
Posts: 1,129 |
Wims, I did try Russel's before I posted mine. Russel's will kick on anything beginning with www or http with or without a dot by them. And it won't trigger anything if one posts: welcome to http://www.blah.com or just welcome to www.blah.com without http://, meaning to start with a sentence with an url in it.
|
|
|
|
Joined: Jul 2006
Posts: 4,187
Hoopy frood
|
Hoopy frood
Joined: Jul 2006
Posts: 4,187 |
I'm talking about your method, not the code itself
#mircscripting @ irc.swiftirc.net == the best mIRC help channel
|
|
|
|
Joined: Jul 2007
Posts: 1,129
Hoopy frood
|
Hoopy frood
Joined: Jul 2007
Posts: 1,129 |
Rather than busting my chops, could you kindly show me your version of efficient method looks like?
|
|
|
|
Joined: Jul 2006
Posts: 4,187
Hoopy frood
|
Hoopy frood
Joined: Jul 2006
Posts: 4,187 |
The one RusselB used in his first post, with $read ,w, I'm just saying that you're not using a good way of doing something, that's all
#mircscripting @ irc.swiftirc.net == the best mIRC help channel
|
|
|
|
Joined: Jul 2007
Posts: 1,129
Hoopy frood
|
Hoopy frood
Joined: Jul 2007
Posts: 1,129 |
Wims, no offense. But you're not being forthcoming to point out the right way of going at this, and you're keeping me baffled.
|
|
|
|
Joined: Jul 2006
Posts: 4,187
Hoopy frood
|
Hoopy frood
Joined: Jul 2006
Posts: 4,187 |
No offense I'm saying you're using an inefficient method because you're doing a /while on each line in the file whereas the ,w, parameter of $read already do this itself. But I agree that the way you're checking for a match isn't the same as $read(,w,), I should not have compared the two situation sorry.
Last edited by Wims; 19/03/09 12:24 AM.
#mircscripting @ irc.swiftirc.net == the best mIRC help channel
|
|
|
|
Joined: Mar 2009
Posts: 6
Nutrimatic drinks dispenser
|
OP
Nutrimatic drinks dispenser
Joined: Mar 2009
Posts: 6 |
Where I should put that text file ? I tried both of those scripts, nothing happend.. Wtf I'm doing wrong with this ?
|
|
|
|
Joined: Jul 2007
Posts: 1,129
Hoopy frood
|
Hoopy frood
Joined: Jul 2007
Posts: 1,129 |
Make sure the text file is placed in mirc's directory, and the links you wish to kick are jotted down in the text file one per line.
|
|
|
|
Joined: Mar 2009
Posts: 6
Nutrimatic drinks dispenser
|
OP
Nutrimatic drinks dispenser
Joined: Mar 2009
Posts: 6 |
I give up.. I've tried all the scripts on this page, nothing happened.. My bot didn't kick user who say url specified on urls.txt. My bot is running on the lates mIRC so I can't understoot whats wrong..
I think I've to do script like this:
on *:text:*http*:#: { /mode # $nick +b { -k Do not advertise } }
I even don't know will that work, but I'll try.. I hate that ppl are advertising on my channel!
|
|
|
|
Joined: Jul 2007
Posts: 1,129
Hoopy frood
|
Hoopy frood
Joined: Jul 2007
Posts: 1,129 |
Give this one a shot: on *:TEXT:*:#: {
if ($regex($1-,/(?<=^| )((?>[a-zA-Z-0-9]{3,8}:\/\/|www\.)\S+)/g)) || ($regex($1-,/(\.[a-zA-Z-0-9]{3,8}))) {
ban -k $chan $nick 2 Do not advertise!
}
}
Last edited by Tomao; 26/03/09 09:35 PM.
|
|
|
|
Joined: Nov 2006
Posts: 1,559
Hoopy frood
|
Hoopy frood
Joined: Nov 2006
Posts: 1,559 |
At trying my suggestion, did you - put a file "forbiddenurls.txt" in the main directory of the mIRC serving as your bot ( //echo -a $mircdir in the bot client) - add url entries to this file as described: without http or www or the like - replace "#YOURCHAN" in the code (2 instances) with the actual channel name or channel names - make sure the bot running the script was @ in this channel ?
|
|
|
|
|
|
|
|