| View previous topic :: View next topic |
| Author |
Message |
Bento Voice
Joined: 29 May 2007 Posts: 5
|
Posted: Tue May 29, 2007 9:39 am Post subject: Users can request the bot for their channel |
|
|
I'm running an online radio station and would like to have a script for my bot so the people in my channel can type !request #channel and the bot checks how many users there are in the channel. if L or Q is in it and if that all meets the requirements the bot will join that channel.
The bot needs to check if:
- There are more than 20 users in the channel
- L or Q is in the channel (Quakenet)
- The requester is op in the requested channel.
Any takers? Would love to see this being made! |
|
| Back to top |
|
 |
r0t3n Owner
Joined: 31 May 2005 Posts: 507 Location: UK
|
Posted: Tue May 29, 2007 10:16 am Post subject: |
|
|
Try metroid's great basic request script:
| Code: | # Basic Request script
# GNU License
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# /* This is a basic request script, It will join the channel, check some settings and stay/part if accepted.
# * This does NOT add other bots to that channel.
# * If you want it to do that, You will have to make it do that yourself :)
# * If you have any questions about this script, feel free to ask me in #v1per on irc.quakenet.org
# * Also, if you find any bugs, the same channel, my nickname is metroid
# * Also, leave my copyright in, If you want to put your own copyright in MY script, Make your own script completely from scratch.
# */
# /* Installing the request script
# * First, put the script into your /home/user/*eggdrop name*/scripts folder.
# * Then at the end of your eggdrop.conf, Put:
# * source scripts/request.tcl
# * Just rehash the bot after you've done this and it should work.
# */
# /* This is a VERY basic idea of what you can use for a request system with eggdrops.
# * It's very flexible as it's really easy to just add whatever you want to it :)
# * Good luck with making your own request script and if you need some help, you can contact me.
# */
namespace eval request {
variable version "1.0"
variable author "metroid"
# Configuration!
# Our homechannel, they can only request here.
variable homechan "#v1per"
# Ammount of people we require.
variable needed "30"
# Do we want a Q or L?
variable service "1"
# Do we send a message to the homechannel when a request fails?
variable tell "1"
# End of Config!
# Do NOT edit anything below these lines
variable busy "0"
bind PUB -|- !request [namespace current]::request
}
proc request::request {nickname hostname handle channel arguments} {
if {[string equal -nocase $channel $request::homechan]} {
if {!$request::busy} {
set chan [lindex [split $arguments] 0]
if {$chan != "" && ![validchan $chan]} {
if {[string index $chan 0] == "#"} {
set request::busy 1
bind RAW -|- 315 [namespace current]::who
utimer 30 [list [namespace current]::timeout $chan]
channel add $chan
set ::info "$nickname $chan"
} else {
putquick "NOTICE $nickname :A channel name starts with an #."
}
} else {
putquick "NOTICE $nickname :You seem to have given an improper syntax for the channel."
}
} else {
putquick "NOTICE $nickname :Sorry, there is already a request in progress."
}
}
}
proc request::who {server raw arguments} {
unbind RAW -|- 315 [namespace current]::who
if {$request::busy} {
if {![info exists ::info]} { return 0 }
set nickname [lindex [split $::info] 0]
set channel [lindex [split $::info] 1]
unset ::info
set request::busy 0
if {![onchan $nickname $channel] || ![isop $nickname $channel]} {
putquick "NOTICE $nickname :You are not on $channel or you aren't opped."
if {$request::tell} {
putquick "PRIVMSG $request::homechan :Request for $channel failed. $nickname is not on $channel or is not opped."
}
channel remove $channel
return 0
}
if {$request::service} {
if {![onchan L $channel] && ![onchan Q $channel]} {
set busy 0
putquick "NOTICE $nickname :Q or L was not found on $channel."
if {$request::tell} {
putserv "PRIVMSG $request::homechan :Request for $channel failed. There is no Q or L on $channel."
}
channel remove $channel
return 0
}
}
if {[llength [chanlist $channel]] < $request::needed} {
putquick "NOTICE $nickname :$channel has less than $request::needed users."
if {$request::tell} {
putserv "PRIVMSG $request::homechan :Request for $channel failed. There are not enough users on $channel (There are [llength [chanlist $channel]] users)."
}
channel remove $channel
return 0
}
# Request is accepted
putquick "NOTICE $nickname :Your request is accepted. I will stay on $channel."
putquick "PRIVMSG $request::home :Request from $nickname for $channel was accepted. The channel has [llength [chanlist $channel]] users."
if {![validuser [nick2hand $nickname]]} {
adduser $nickname *![getchanhost $nickname]
chattr $nickname |+n $channel
} else {
chattr [nick2hand $nickname] |+n $channel
}
}
}
proc request::timeout {chan} {
if {[validchan $chan] && ![botonchan $chan]} {
channel remove $chan
putquick "PRIVMSG $request::homechan :Request for $chan failed. Bot cannot join $chan."
if {[info exists ::info]} { unset ::info }
}
}
proc request::version {} {
putlog "Basic Request script version: $request::version by $request::author was loaded successfully."
}
request::version |
_________________ r0t3n @ #r0t3n @ Quakenet |
|
| Back to top |
|
 |
Bento Voice
Joined: 29 May 2007 Posts: 5
|
Posted: Tue May 29, 2007 10:39 am Post subject: |
|
|
| Will give it a shot, tnx! |
|
| Back to top |
|
 |
Bento Voice
Joined: 29 May 2007 Posts: 5
|
Posted: Tue May 29, 2007 10:42 am Post subject: |
|
|
Okay this is a good start. What i'm trying to do here:
Ive got 2 eggdrops.
I want 1 eggdrop to check the requirements and if they are met, the bot stays in the channel. If the 1st eggdrop (the one which checks requirements) is in 19 channels (20 is the max on Quakenet) the 1st eggdrop should check the requirements in the channel, then part the channel and say to the 2nd eggdrop to join the channel he just checked.
Pls reply if u dont understand what i mean. |
|
| Back to top |
|
 |
r0t3n Owner
Joined: 31 May 2005 Posts: 507 Location: UK
|
Posted: Tue May 29, 2007 12:18 pm Post subject: |
|
|
A better way is to have 3 eggdrops, one dedicated to the requests, and 2 dedicated for the radio script.
Or, with a few mod's you can make a !request botnick #channel of which the botnick selected would carry out the request. _________________ r0t3n @ #r0t3n @ Quakenet |
|
| Back to top |
|
 |
Bento Voice
Joined: 29 May 2007 Posts: 5
|
Posted: Tue May 29, 2007 12:21 pm Post subject: |
|
|
3 eggdrops is fine i guess, i should be able to get that running. but then i would still need the script  |
|
| Back to top |
|
 |
Bento Voice
Joined: 29 May 2007 Posts: 5
|
Posted: Sat Jun 02, 2007 7:01 am Post subject: |
|
|
| Anyone? |
|
| Back to top |
|
 |
r0t3n Owner
Joined: 31 May 2005 Posts: 507 Location: UK
|
Posted: Sat Jun 02, 2007 12:43 pm Post subject: |
|
|
Ok, try this:
The syntax will be: !request <botnick> <#channel>
| Code: | # Basic Request script
# GNU License
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# /* This is a basic request script, It will join the channel, check some settings and stay/part if accepted.
# * This does NOT add other bots to that channel.
# * If you want it to do that, You will have to make it do that yourself :)
# * If you have any questions about this script, feel free to ask me in #v1per on irc.quakenet.org
# * Also, if you find any bugs, the same channel, my nickname is metroid
# * Also, leave my copyright in, If you want to put your own copyright in MY script, Make your own script completely from scratch.
# */
# /* Installing the request script
# * First, put the script into your /home/user/*eggdrop name*/scripts folder.
# * Then at the end of your eggdrop.conf, Put:
# * source scripts/request.tcl
# * Just rehash the bot after you've done this and it should work.
# */
# /* This is a VERY basic idea of what you can use for a request system with eggdrops.
# * It's very flexible as it's really easy to just add whatever you want to it :)
# * Good luck with making your own request script and if you need some help, you can contact me.
# */
namespace eval request {
variable version "1.0"
variable author "metroid"
# Configuration!
# Our homechannel, they can only request here.
variable homechan "#v1per"
# Ammount of people we require.
variable needed "30"
# Do we want a Q or L?
variable service "1"
# Set here all the requestable bots (making sure they are online!)
variable botlist "[list bot1 bot2 bot3 etc]"
# Do we send a message to the homechannel when a request fails?
variable tell "1"
# End of Config!
# Do NOT edit anything below these lines
variable busy "0"
bind PUB -|- !request [namespace current]::request
}
proc request::request {nickname hostname handle channel arguments} {
if {[string equal -nocase $channel $request::homechan]} {
if {!$request::busy} {
set bot [lindex [split $arguments] 0]
set chan [lindex [split $arguments] 1]
if {$bot == ""} {
putserv "NOTICE $nickname :Syntax for request is as follows: $::lastbind <botnick> <#channel>."
return
}
if {[lsearch -exact $request::botlist $bot] == -1} {
putserv "NOTICE $nickname :User '$bot' is not in my botlist for request."
putserv "NOTICE $nickname :These bot's are requestable: [join $request::botlist ", "]"
return
}
if {$chan != "" && ![validchan $chan]} {
if {[string index $chan 0] == "#"} {
set request::busy 1
bind RAW -|- 315 [namespace current]::who
utimer 30 [list [namespace current]::timeout $chan]
channel add $chan
set ::info "$nickname $chan $bot"
} else {
putquick "NOTICE $nickname :A channel name starts with an #."
}
} else {
putquick "NOTICE $nickname :You seem to have given an improper syntax for the channel."
}
} else {
putquick "NOTICE $nickname :Sorry, there is already a request in progress."
}
}
}
proc request::who {server raw arguments} {
unbind RAW -|- 315 [namespace current]::who
if {$request::busy} {
if {![info exists ::info]} { return 0 }
set nickname [lindex [split $::info] 0]
set channel [lindex [split $::info] 1]
set bot [lindex [split $::info] 2]
unset ::info
set request::busy 0
if {![onchan $nickname $channel] || ![isop $nickname $channel]} {
putquick "NOTICE $nickname :You are not on $channel or you aren't opped."
if {$request::tell} {
putquick "PRIVMSG $request::homechan :Request for $channel failed. $nickname is not on $channel or is not opped."
}
channel remove $channel
return 0
}
if {$request::service} {
if {![onchan L $channel] && ![onchan Q $channel]} {
set busy 0
putquick "NOTICE $nickname :Q or L was not found on $channel."
if {$request::tell} {
putserv "PRIVMSG $request::homechan :Request for $channel failed. There is no Q or L on $channel."
}
channel remove $channel
return 0
}
}
if {[llength [chanlist $channel]] < $request::needed} {
putquick "NOTICE $nickname :$channel has less than $request::needed users."
if {$request::tell} {
putserv "PRIVMSG $request::homechan :Request for $channel failed. There are not enough users on $channel (There are [llength [chanlist $channel]] users)."
}
channel remove $channel
return 0
}
# Request is accepted
putquick "NOTICE $nickname :Your request is accepted. $bot will join $channel."
putquick "PRIVMSG $request::home :Request from $nickname for $channel was accepted. The channel has [llength [chanlist $channel]] users."
putquick "PRIVMSG $bot :rjoin $channel $nickname *![getchanhost $nickname]"
}
}
proc request::timeout {chan} {
if {[validchan $chan] && ![botonchan $chan]} {
channel remove $chan
putquick "PRIVMSG $request::homechan :Request for $chan failed. Bot cannot join $chan."
if {[info exists ::info]} { unset ::info }
}
}
proc request::version {} {
putlog "Basic Request script version: $request::version by $request::author was loaded successfully."
}
request::version |
And put this script on your requestable bot(s):
| Code: | bind msg H| rjoin request:dojoin
proc request:dojoin {nickname hostname handle text} {
set channel [lindex [split $text] 0]
set nick [lindex [split $text] 1]
set host [lindex [split $text] 2]
if {![validuser [nick2hand $nick]]} {
adduser $nick $host
chattr $nick |+n $channel
} else {
chattr [nick2hand $nick] |+n $channel
}
putserv "NOTICE $nick :Hello $nick. Im your new bot. Your added to my userlist as '[nick2hand $nick]' with the hostname '$host'. Enjoy!"
} |
Give it a try, not tested so it may or may not work... _________________ r0t3n @ #r0t3n @ Quakenet |
|
| Back to top |
|
 |
Wuff Voice

Joined: 10 Oct 2007 Posts: 7
|
Posted: Thu Nov 08, 2007 5:00 pm Post subject: |
|
|
This script is just what I've been looking for. I've tested it and I works like a charm. Really great script!
I have some requests, for some extra features though. But I'm afraid I havent got the required knowhow to program it myself.
I would love if the script could quarantine a request, if it fails. For example, if a user requests the bot, and the requirements for the channel aren't met, the bot can't be requested for that particular channel for another 15 minutes.
I'm allso looking for another variation of the modification for a botnet. I would like to have a hub bot, that handles all the requests, and joins the requested channels to verify their validity. Then if the channel meets the requirements, the hub bot will send a request to all the leaf bots to join the channel. One leafbot, that hasn't reached it's channel limit, will then join the channel, and the hub bot will leave again, ready to take another request.
So the hub bot acts as a request handler, and as a scout, requesting an availible hub bot to join valid channels.
I really hope someone can help me, at least with some of it, or point me to something similar I can modify or use
Thanks |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|