426 lines
19 KiB
Plaintext
426 lines
19 KiB
Plaintext
From jlynch@wilkes1.wilkes.edu Wed Jul 8 02:29:58 1992
|
|
Received: by wilkes1.wilkes.edu (5.57/Ultrix3.0-C)
|
|
id AA15604; Tue, 7 Jul 92 14:31:52 -0400
|
|
Date: Tue, 7 Jul 92 14:31:52 -0400
|
|
From: jlynch@wilkes1.wilkes.edu (Baloo the Bear)
|
|
Message-Id: <9207071831.AA15604@wilkes1.wilkes.edu>
|
|
To: ktso@ws332c.ee.cuhk.hk
|
|
Subject: BotDoc1.2
|
|
Status: R
|
|
|
|
|
|
************************************************************************
|
|
|
|
That Great Ursine of IRC, BalooBear, presents...
|
|
|
|
'||''|. . '||''|.
|
|
|| || ... .||. || || ... ....
|
|
||'''|. .| '|. || || || .| '|. .| '' Version
|
|
|| || || || || || || || || || 1.2
|
|
.||...|' '|..|' '|.' .||...|' '|..|' '|...'
|
|
|
|
The official guide to writing IRC bots !!!!!
|
|
|
|
***********************************************************************
|
|
|
|
Standard Disclaimer Legal Junk
|
|
------------------------------
|
|
BalooBear cannot he held responsible for anything that happens
|
|
as a result of using this document... Use at your own risk!!!!
|
|
|
|
Requirements
|
|
------------
|
|
o UNIX or compatible OS
|
|
o IRCII client
|
|
o A little knowledge of how /on commands work
|
|
o Imagination
|
|
|
|
What is a bot?
|
|
--------------
|
|
A 'bot' is simply a collection of commands (a script) that responds
|
|
to certain key phrases and commands from its owner and other IRC
|
|
participants. Popular features that people include in their bots are
|
|
auto-opping of themselves and friends, deop protection for them
|
|
(when someone deops them, the bot reops them), responding to certain
|
|
words people say with cute responses, and the like. This manual will
|
|
show you how to do all these things, and I hope it will spur you on
|
|
to make bots that do even more. This manual only covers the basics, but
|
|
bots can do MUCH more.
|
|
|
|
Mechanics of a bot
|
|
------------------
|
|
A bot appears as a seperate person on IRC, even though it is
|
|
really just a script. Your bot will have the same system address
|
|
as you, and will run as a background task in your account. Bots
|
|
can leave IRC when you do automatically and change channels with
|
|
you. They can even be made to stay on IRC after you logout,
|
|
24-hrs/day, if so desired.
|
|
|
|
A bot is just a collection of mostly /on commands (with some
|
|
others thrown in sometimes) that is stored in a simple ASCII text
|
|
file. This file can be loaded into IRCII in several ways. Since
|
|
I assume most of you want your bot to run in the background and cause
|
|
a minimum amount of hassle to you, I will show you the method I use
|
|
to run my bot. This method has many advantages. But first, lets
|
|
get into some actual bot code!
|
|
|
|
Common commands in a bot file
|
|
-----------------------------
|
|
The first thing you'll want to have in your bot file is a
|
|
nickname for your bot. Usually, bot nicknames end in "bot" or "serv"
|
|
or "srv". You should make your bot's nick end in one of these three
|
|
ways so as to not make people think it's a person. BalooBot, my bot,
|
|
is a good example. When people see that kind of ending, they know he's
|
|
just a program. To specify a nickname, put this in your bot file:
|
|
|
|
/nick whatever
|
|
|
|
Remember, just use any text editor to make your bot file, as it is
|
|
only an ASCII text file.
|
|
Next you should set exec_protection to off, so that your bot can
|
|
operate properly, turn the display off, and turn the beep off by doing
|
|
this:
|
|
|
|
/set exec_protection off
|
|
/set display off
|
|
/set beep off
|
|
|
|
Simple, eh? Now we get to the good part - actually writing
|
|
the key phrases and responses!!! Many things can be done with a
|
|
bot, and here are a few:
|
|
|
|
/ON PUBLIC - RESPONDING TO KEY PHRASES
|
|
--------------------------------------
|
|
By using /on public commands, your bot can be made to respond to
|
|
"key phrases" that anyone on the channel says. Wildcards, such as *,
|
|
can be used, and case does not matter. The first form of the command
|
|
responds to a key phrase only when the bot is specifically spoken to:
|
|
|
|
/on public "* baloobot* hello*" / ==== Hi there, $0! ====
|
|
/on public "* hello* baloobot*" / ==== Hi there, $0! ====
|
|
|
|
This line will respond with "==== Hi there, Fred! ====" if
|
|
someone named Fred says "baloobot hello" or "hello baloobot". This
|
|
type of public will ONLY respond when someone specifically addresses
|
|
the bot by name. Another kind of /on public is this kind:
|
|
|
|
/on public "* spam*" / ==== SPAM, SPAM, SPAM, SPAMMITY SPAM! ====
|
|
|
|
...which will output the phrase whenever the word "spam" is heard
|
|
from anyone at any time. BE WARNED, however, that most people do not
|
|
take kindly to this kind of /on public statement, and will usually
|
|
kick your bot if he keeps it up. By making the bot only respond when
|
|
addressed, you can make sure that it doesn't get people annoyed.
|
|
See the listing of BalooBot after this document for more ideas.
|
|
|
|
/ON MSG - RESPONDING TO MESSAGES
|
|
--------------------------------
|
|
/on msg commands allow your bot to respond to /msg messages that
|
|
people send to it. The format is similar to /on public :
|
|
|
|
/on msg "* help*" /exec -msg $0 cat HelpFile.txt
|
|
|
|
...will, when someone types "/msg BalooBot help", msg back to
|
|
that person the contents of the file HelpFile.txt in the current dir.
|
|
Bascially, anything that can be done with /on publics can also be
|
|
done with /on msgs, the two commands simply respond to different
|
|
kinds of input. BalooBot's listing at the end of this document
|
|
includes several /on msg commands, mostly for owner control.
|
|
|
|
AUTO-OPS and AUTO-REOPS
|
|
------------------------
|
|
Auto-ops can be incorporated into your bot, which will make
|
|
him op you or any of your friends automatically and instantly upon /join
|
|
of the channel the bot is on (assuming he is opped). Auto-reops
|
|
automatically reop you or friends when someone tries to deop you/them.
|
|
Here is an example from BalooBot:
|
|
|
|
/on join BalooBear /mode $C +o BalooBear; ==== BALOOBEAR!! ====
|
|
/on mode "* * *-O BalooBear" /mode $C +o BalooBear
|
|
|
|
The first line auto-ops BalooBear upon joining the channel
|
|
the bot is on (notice how $C represents the channel name). The second
|
|
line reops BalooBear immediately if somebody deops him. See the
|
|
listing of BalooBot for more examples. Also note how a semicolon (;)
|
|
is used to separate multiple commands on the same line.
|
|
|
|
SECURE (LOGIN-ID) BASED AUTO-OP
|
|
-------------------------------
|
|
The previous auto-op commands will auto-op anyone with the right
|
|
nickname. On small channels this is usually no problem, but on large,
|
|
well-known channels (such as #hottub, which is BalooBot's home), this
|
|
can become a problem, as delinquents can take someone else's nick, get
|
|
auto-opped by the bot (who think's its that person of that nick), and
|
|
mass-kick everyone off the channel :(.... A way to avoid this is by
|
|
using secure auto-opping that is based on login-id rather than just
|
|
nickname. Here's how: put this line once in your botfile, near
|
|
the top:
|
|
|
|
/on join * /who $0
|
|
|
|
...then for each person you want to auto-op, put in one of
|
|
these:
|
|
|
|
/on who "* * * jlynch wilkes1.wilkes.edu *" /mode $C +o $1
|
|
|
|
Make sure to leave out the @ in the system address.
|
|
Incidentially, the above one is just an example, but it would be
|
|
nice to add to your bot (after all, I wrote this helpfile :)
|
|
|
|
KICK PROTECTION (AUTO-REJOIN-ON-KICK)
|
|
-------------------------------------
|
|
Add something like this to make your bot kick-proof:
|
|
|
|
/on raw_irc "*KICK * * BalooBot*" /msg BalooBot rejoin
|
|
/on msg "BalooBot rejoin" /join #channel
|
|
|
|
BTW, you can't just do a /on raw_irc kick /join, because all
|
|
operations after the raw_irc are carried out JUST BEFORE you are
|
|
kicked... so having the bot msg itself to rejoin is a neccessary,
|
|
if kludgy, extra step. But hey... it works! :)
|
|
|
|
Of course, someone can always ban your bot, then kick him.
|
|
To get around this, simply put your bot on a non-2.7 server, with
|
|
the /serv command. Non-2.7 servers ignore bans, and essentially
|
|
make your bot ban-proof. Along with the next section on kill-
|
|
proofness, these things will make it so that NO ONE on IRC, and I
|
|
do mean NO ONE, will be able to get your bot off a channel in
|
|
any way (KICK doesn't work, ban doesn't either, not even KILL!).
|
|
Except possibly by making the channel invite-only, but on most
|
|
big public-channels like #hottub, invite-only is almost never used.
|
|
|
|
KILL-PROOFNESS
|
|
--------------
|
|
One simple line will make your bot kill-proof (instant
|
|
reconnect upon kill):
|
|
|
|
/on disconnect * /serv servername
|
|
|
|
...where you substitute your server name (for example,
|
|
fairhope.andrew.cmu.edu, a good non-2.7 server) for the word
|
|
"servername".
|
|
|
|
OWNER COMMANDS
|
|
--------------
|
|
These commands use /on public statements, but can only be
|
|
activated by the owner of the bot, not by anyone else. The key is
|
|
to include the owner's name as part of the statement:
|
|
|
|
/on public "BalooBear bbot boot*" /kick $C $3
|
|
|
|
...will kick the person after the word "boot" off the channel.
|
|
Note that all BalooBear has to type is "bbot boot nick" to kick
|
|
that person, the "BalooBear" part of the /on public is only used
|
|
to make sure that the command is from BalooBear; someone else trying
|
|
to use the "bbot boot" command will get no response.
|
|
BalooBot also includes /on msg owner commands, for when the
|
|
owner is not on the same channel as the bot.
|
|
|
|
JOIN-ON-INVITE
|
|
--------------
|
|
This command will make the bot join any channel its owner
|
|
/invites it to (make sure to put your nick in place of "BalooBear")
|
|
|
|
/on invite "BalooBear" /join $1
|
|
|
|
SWITCH SERVERS
|
|
--------------
|
|
This is a special owner command that causes the bot to switch
|
|
to whatever server you tell it to:
|
|
|
|
/on public "BalooBear BBot serv*" /serv $3
|
|
/on msg "BalooBear serv *" /serv $2
|
|
|
|
so when BalooBear types "bbot serv lyman.pppl.gov" or
|
|
"/msg BalooBot serv lyman.pppl.gov", BalooBot will switch to the
|
|
lyman server.
|
|
|
|
EXIT-WITH-OWNER
|
|
---------------
|
|
This command will cause your bot to exit the IRC system when
|
|
you do, automatically. Note that if you want a bot to be on all
|
|
the time, do not use this command, you must kill the bot process
|
|
from the shell to stop it.
|
|
|
|
/on channel_signoff "* BalooBear" /exit
|
|
|
|
STARTING YOUR BOT
|
|
-----------------
|
|
OK, so you've written your bot, and now you want to try him out.
|
|
Here's how, assuming you have a C-shell-based UNIX system (commands
|
|
may vary for other shells):
|
|
|
|
1. From the shell prompt, simply type:
|
|
|
|
irc -b -l botfile
|
|
|
|
...where you replace the full pathname of the IRCII client
|
|
on your machine for the word 'irc', and the name of the ASCII text
|
|
file containing your bot for the word 'botfile'.
|
|
This will run your bot in the background, put up some stuff
|
|
on the screen you should ignore, and then, after you hit return a
|
|
few times, return your shell prompt to you. The bot is now running
|
|
as a background process that will continue indefinitely until you
|
|
kill it, even after you logout.
|
|
|
|
2. Now just join IRC yourself, take the nickname that your
|
|
bot recognizes as its master's... and have fun!
|
|
|
|
3. If you ever want to kill the bot for any reason (to start
|
|
up an improved version, for example), just do a "ps -x" from the
|
|
shell prompt, note the PID number of the bot process, and from the
|
|
shell type "kill -9 pidnumber", replacing the PID number for the
|
|
word "pidnumber".
|
|
|
|
CONCLUDING NOTE
|
|
---------------
|
|
Keep in mind that MUCH more can be done with bots, so much more that
|
|
we have literally only covered the proverbial "tip of the iceberg" here.
|
|
So go ahead, and get your hands dirty... If you have any questions,
|
|
I'm on IRC under "BalooBear", you can talk to me or leave a msgserv
|
|
for me, or E-mail me at jlynch@wilkes1.wilkes.edu
|
|
_
|
|
/\\_\_.-----.___ _.._
|
|
/ _ _ \// \
|
|
BalooBear / / \ y-- |
|
|
John Lynch | /\ /\ \ __/
|
|
jlynch@wilkes1.wilkes.edu ___________| _*/__*/_ \_
|
|
/ \\ +----. ____ \_
|
|
------------------------- \ || \__/ / / \
|
|
+---+/ / / /\\
|
|
High Byte Software \ \ / / _/
|
|
91 Hillside Street '-+----_______---- / -- \
|
|
Wilkes-Barre, PA, USA \___________--' \
|
|
18702 / \
|
|
/ \
|
|
|
|
|
|
================= LISTING OF BALOOBOT AS OF 4/9/92 ====================
|
|
|
|
|
|
/comment *** BalooBot V3.7, BalooBear's IRC bot ***
|
|
/comment *** now running off Fizzy's account ***
|
|
/comment *** jointly commanded/owned by Fizzy/BalooBear ***
|
|
|
|
/comment *** Now with system-id checks (for auto-opping) ***
|
|
/comment *** Also with kick protection (auto-rejoin on kick) ***
|
|
/comment *** And kill-protection (instant auto-reconnect on kill) ***
|
|
/comment *** running off a 2.6 server for ban protection ***
|
|
|
|
/serv fairhope.andrew.cmu.edu
|
|
|
|
/nick BalooBot
|
|
/set novice off
|
|
/set display off
|
|
/set exec_protection off
|
|
/set beep off
|
|
/join #hottub
|
|
/say ==== Hi everyone! ====
|
|
/on join * /who $0
|
|
|
|
/comment ******************** PUBLICS ****************************
|
|
|
|
/on mode "* * *+O BalooBot*" /msg $0 ==== Thanks tons, $0!! ====
|
|
/on public "* hello* BalooBot" / ==== Hi there, $0!! ====
|
|
/on public "* BalooBot* hi*" / ==== Hello, $0!!! ====
|
|
/on public "* BalooBot* hello" / ==== Greetings, $0!! ====
|
|
/on public "* hi* BalooBot*" / ==== What's up, $0 ?!! ====
|
|
/on public "* baloobot* thank*" / ==== No problemo, $0 ====
|
|
/on public "* thank* baloobot*" / ==== Anytime, $0 ====
|
|
/on public "* thanx* baloobot*" / ==== Don't mention it, $0!!! ====
|
|
/on public "* baloobot* thanx*" / ==== Glad to help, $0!!! ====
|
|
/on public "* baloobot* spam*" / ==== SPAM, SPAM, SPAM, SPAM, SPAMMITY SPAM!! ====
|
|
/on public "* baloobot* amiga*" / ==== Commodore Amiga - Best PC on Earth!! ====
|
|
/on public "* baloobot* commodore*" / ==== Commodore : maker of the legendary AMIGA! ====
|
|
/on public "* baloobot* parrot*" / ==== "That parrot is NOT dead.. he's resting!" ====
|
|
/on public "* baloobot* grail*" / ==== "Grail? We've already got one!" ====
|
|
/on public "* baloobot* sir robin*" / ==== "He is brave Sir Robin, brave Sir Robin" ====
|
|
/on public "* baloobot* larch*" / ==== "AND NOW... THE LARCH" ====
|
|
/on public "* baloobot* camelot*" / ==== "It's only a model!" ====
|
|
/on public "* baloobot* floyd*" / ==== PINK FLOYD RULES! ====
|
|
/on public "* baloobot* how* is* life*" / ==== Life sucks, as usual, $0 ====
|
|
/on public "* baloobot* eat* me*" / ==== $0: I'd rather not :P ====
|
|
/on public "* baloobot* who* made* you*" / ==== BalooBear did, of course! ====
|
|
/on public "* baloobot* who* created* you*" / ==== BalooBear made me! ====
|
|
/on public "* baloobot* who* is* your* master*" / ==== My master is BalooBear! I obey him faithfully! ====
|
|
/on public "* baloobot* self*destruct*" / ==== BLAM!!!!!!! ====
|
|
/on public "* baloobot* who* is* BalooBear*" / ==== BalooBear is the bear from the Disney ====; ==== film, "The Jungle Book". And he is my master! ====
|
|
/on public "* baloobot* me* beer*" / ==== Throws a cold brewski to $0 ====
|
|
/on public "* baloobot* where* you* live*" / ==== I live on IRC, silly! :) ====
|
|
/on public "* baloobot* die*" / ==== DIE??? I AM IMMORTAL!!!! :) ====
|
|
/on public "* baloobot* sex*" / ==== *blushes* Sorry, bots can't have sex, $0 ====
|
|
/on public "* baloobot* suck*" / ==== $0, vulgarity is a crutch for the inarticulate ====
|
|
/on public "* baloobot* go* hell*" / ==== No, I think YOU should go to hell, $0!!! :) ====
|
|
/on public "* baloobot* fuck*" / ==== Watch the language, $0!!! :) ====
|
|
/on public "* baloobot* shit*" / ==== Watch the language, $0, or I'll ====; ==== get the FCC after you! :) ====
|
|
/on public "* baloobot* shut*up*" / ==== I'll shut up if you don't egg me on!! ====
|
|
|
|
/comment ******************** HELP! *********************************
|
|
|
|
/on public "* baloobot* help*" /msg $0 ==== HELP?? Call 911 !! ====
|
|
/on public "* bbot* help*" /msg $0 ==== HELP?? Call 911 !! ====
|
|
/on msg "* help*" /msg $0 ==== HELP?? Call 911 !! ====
|
|
|
|
/comment ******************* KICK / KILL PROTECTION ********************
|
|
|
|
/on raw_irc "*KICK * * BalooBot*" /msg BalooBot rejoin
|
|
/on msg "BalooBot rejoin" /join #hottub
|
|
|
|
/on disconnect * /serv fairhope.andrew.cmu.edu
|
|
|
|
/comment ******************** AUTO RE-OPS *************************
|
|
/comment *** inactive until I can figure out how to secure them ***
|
|
/comment *** from jerks who take other ppl's nicks to get opped ***
|
|
|
|
/comment /on mode "* * *-O BalooBear*" / ==== NEVER DEOP MY MASTER, $0!!! ====;/mode $C +o BalooBear
|
|
/comment /on mode "* * *-O Fizzy*" / ==== LEAVE MY CO-OWNER ALONE, $0!!! ====;/mode $C +o Fizzy
|
|
/comment /on mode "* * *-O RontuWolf*" / ==== NEVER DEOP MY MASTER, $0!!! ====;/mode $C +o BalooBear
|
|
/comment /on mode "* * *-O Dankari*" /mode $C +o Dankari
|
|
/comment /on mode "* * *-O Zorg*" / ==== HEY!! LEAVE ZORG ALONE!! *reops Zorg* ====;/mode $C +o Zorg
|
|
/comment /on mode "* * *-O Christina*" / ==== LEAVE HER ALONE!!! *reops Christina* ====;/mode $C +o Christina
|
|
/comment /on mode "* * *-O kodiak*" / ==== LEAVE MY BEAR BUDDY ALONE!!! ====;/mode $C +o kodiak
|
|
/comment /on mode "* * *-O DreadLord*" / ==== DON'T MESS WITH DREADLORD!! *reops him* ====;/mode $C +o DreadLord
|
|
/comment /on mode "* * *-O ce_nedra*" / ==== HEY!! LEAVE CE_NEDRA ALONE!! *reops* ====;/mode $C +o ce_nedra
|
|
/comment /on mode "* * *-O snick*" / ==== HEY!! LEAVE SNICK ALONE!! *reops* ====;/mode $C +o snick
|
|
/comment /on mode "* * *-O rags*" / ==== LEAVE RAGS ALONE!!! *reops him* ====;/mode $C +o rags
|
|
/comment /on mode "* * *-O stale*" / ==== LEAVE STALE ALONE!! *reops* ====;/mode $C +o Stale
|
|
/comment /on mode "* * *-O HotTubSrv*" / ==== LEAVE HOTTUBSRV ALONE!! ====;/mode $C +o HotTubSrv
|
|
/comment /on mode "* * *-O Nap*" / ==== LEAVE NAP ALONE!! ====;/mode $C +o Nap
|
|
|
|
/comment ******** COMMANDS FOR BALOOBEAR / FIZZY *****************
|
|
|
|
/on msg "BalooBear op*" /mode $C +o $2
|
|
/on msg "BalooBear deop*" /mode $C -o $2
|
|
/on msg "BalooBear boot*" /kick $C $2
|
|
/on msg "BalooBear later" /say ==== BYE ALL!!! ====;/exit LATER_ALL!
|
|
/on msg "BalooBear serv*" /serv $2
|
|
/on msg "BalooBear join*" /join $2
|
|
/on msg "BalooBear leave*" /leave $2
|
|
/on msg "BalooBear nick*" /nick $2
|
|
/on msg "BalooBear ban*" /kick $C $2;/mode $C +b $2!*@*
|
|
|
|
/on msg "Fizzy op*" /mode $C +o $2
|
|
/on msg "Fizzy deop*" /mode $C -o $2
|
|
/on msg "Fizzy boot*" /kick $C $2
|
|
/on msg "Fizzy later" /say ==== BYE ALL!!! ====;/exit LATER_ALL!
|
|
/on msg "Fizzy serv*" /serv $2
|
|
/on msg "Fizzy join*" /join $2
|
|
/on msg "Fizzy leave*" /leave $2
|
|
/on msg "Fizzy nick*" /nick $2
|
|
/on msg "Fizzy ban*" /kick $C $2;/mode $C +b $2!*@*
|
|
|
|
|
|
/comment ********************** THE END ************************
|
|
/comment ****** BalooBot V3.7, a BalooBear production :) *******
|
|
|
|
|
|
|
|
'''---```---^^^^^^-----#-----~~~~~----'''------~~~~-----````~~~---------=\ /=
|
|
.sig (n): a piece of mail with a fool at one : Ravi Narayan, CS, WPI (0)
|
|
end and flames at the other. (C). : DoD #540 - SuzukiGS500E H
|
|
o _ _ _ _ : _ _ H
|
|
_/\_> =| |========| |=========| |=========| |=========| |=========| |=======
|
|
0,> /0,=|w|,,=====,|,|.,===,,==| |,,===.,==|.|..======w| |..,,.====| |====,,=
|
|
|
|
|