|
|
Bot of the Month
Courtesy of Andras
Tourists Guardian Angel!
Hmmm.. one would ask why do tourists needs a Guardian Angel?
Several reasons and I mention a few here:
- First of all their property is hunted by some citizens and some tourists, so anything they build is vanishing fast.
- They only know about features citizens have only by the word of mouth - they can't try them..
- Some worlds wants to protect tourists builds because it helps to their diversity and atmosphere,
and last but not least
- The more tourists sign up as citizen the better AW will be:)
Sooo - what do this bot has to do to accomplish the goals above?
1, Protect tourists objects against vandalism, deletion.
2, Add telegram/join/invite features to tourists - at least inworld or
within the network of the GuardBots (Short name for the Guardian Angel).
3, Add such features doesn't exist within the standard browser (like
seed object, copy/paste full range of builds, etc.) to tease them for
signing up
4, Provide the same "Privilege" password idea for them like the browser has.
Those features explicitly created for tourists but what the world
owner/caretaker will get in exchange to have tourists building in their
world?
Very detailed control over what can be done/built within the world like:
Enable coronas usage,
Restrict corona size,
Enable "create sound", "create picture", "create URL" (this one is
controllable by the world's option but it limits the use of that
command to caretakers).
Enable the "update=" command for TV like objects, etc.
Restrict (slow down) excessive building behavior.
Very detailed reports about who did what :
Report Visitors enter/leave,
Report "picture, URL, sound, corona, update=, URL" usage
Report if someone tries to delete someone else's property
Report if someone changes his/her name
Report if someone in a watched IP range enters,
Report if someone does excessive building/deleting (too many objects in a short time affected)
Those are more flexible restrictions than the world server can handle.
How does the bot operates?
The bot communicates with the users through whispers to reduce the chat traffic for others.
Extensive help is available through whispers.. To dump a full help file
on a user in the chat window is not acceptable, so the help is tiered
to several levels and targeted the proper audience (tourists, citizens,
WorldKeepers and BotControllers)
Each tourists who want to build in the covered area should apply for a
password (which is generated by the bot to avoid "week" passwords
usually made up by human being) once. Every time they enter the
world(s) covered by a GuardBot they have to provide the password for
identification purpose. I couldn't use the user's IP address because it
can change nor the Computer ID because it is not accessible by the bot,
another reason I picked this method is that there can be multiple users
on the same computer who wants to build separately. During the
password generation time the bot assigns a "privilege" password to the
tourist too, so they can team-up for a common building project.
Tourists can register an email address with the bot, so if they forget
their password, the bot can email it to them.
When a new object added to the world server, the bot checks if it
encroaches the nearby objects (it has a full encroachment
implementation and even the rotate and move commands are taking account
in the encroachment logic). If the object is not violating any
restriction mentioned above and not encroaching, then the object is
built and assigned to the builder's privilege owner (if one doesn't use
the privilege feature, it is of course the builder itself). This method
protects the builds based on the same concept the browser does with the
citizens. If someone deletes other's property, the bot rebuilds the
object and issues the usual BI message to the guilty one).
There is a telegram option where tourists (and citizens) can send short
messages to each other. Right now the message is only delivered if the
recipient is inworld but I'm working on a "central server" solution.
The message length is limited to about 250 characters (the length of
the whisper message can't exceed that size).
Visitors can join or invite each other by whispers (tourists and citizens alike).
The privacy options are implemented for the features above - one can block tgs, have the join/invite confirmed, etc.
There are 4 different user level from the bot's viewpoint:
- Tourists (main target of the bot, most protection)
- Citizens (some limited bot access, like tg, join)
- WorldKeepers (caretakers in the bot's terminology - can get the reports, have the ability to delete tourists objects, etc)
- BotControllers (the owner of the bot and a few assigned co-owners.
They can control how the bot behaves, who can be a caretaker, can erase
a single tourist's builds with a simple command or simply wipe out all
old tourist builds from the world)
Each of them have different commands and help messages of course.
Each GuardBot can communicate with a central password server, so the
tourists can use the same password in different world the bot is
running. This server provides the incoming tourist's password and email
address for the bot and the bot sends the new passwords/email addresses
back to the central server. I plan to enhance this server to provide
the inter-world telegramming and join/invite actions.
If the bot stops for any reason and restarted - there will be objects
which are not designated to any tourists (they build during the bot was
off). To overcome that problem, there is an option that any tourists
can claim those objects as their own builds by simply selecting them
(if this feature is enabled in the bot settings). I know it is not the
"perfect" solution but give me a better one :)
How this bot does all this job alone?
The program spawns several bots to monitor the desired
area. Each bot can cover 400x400 meter range (a P20 world size). Due to
the general audience I targeted (not everyone can have CT rights in a
world) and the instability in the Global Mode I implemented the
individual bots for this purpose. There is one bot which can run as a
Global Mode bot to deliver the Building Inspector messages though in
normal mode those messages are delivered as whispers.
The bot records each tourists property and other vital info in its own database and saves it regularly to the hard drive.
The covered area is queried at the startup time and matched with the
tourists database, marking all tourists builds which has no owner in
the database "unowned". It resynchronizes it's password database with
the central password server.
After all those initial phase the bots starts to watch every event
within the world and act according to it's settings. Almost all SDK
feature is used in this case.
There were some speed consideration when I created the bot so I
optimized it for execution speed. The world database is kept fully in
memory, all the visitors data is in the memory - actually nothing is
referenced from the hard disk, except occasional feature changes the
caretakers/botcontrollers initialize. Several frequently called module
is rewritten totally in Assembly language (one prominent example is a
string compare routine whish is 4-7 times faster than the fastest
library module I have). There are independent threads for the database
saving to the hard disk, so it won't interrupt the bot's operation, so
the password server communication.
How much resources do I need for this bot?
The bot is memory hungry! The maximum area you can cover with it is a
P160 world (81 bots!!) For that size the bot will consume about
150MBytes of memory. The P100 world settings consumes about 40MBytes of
memory.
The network connection is critical - the closer to the world server -
the faster the bot response, though I did not get complaints running
the bot in Hungary while the server was in the USA. Network bandwidth
usage is relatively low - I think the bot will run happily on a 56K
connection with 10-15 concurrent visitors.
CPU doesn't have to be fast - 300 MHz PII is sufficient thanks to the optimization.
Plans for the future:
Enhance the password server to provide the inter-world telegramming and join/invite actions.
Contact list for tourists.
More details: https://www.andras.net/guardbot.html
Credits:
My sincere thanks to Ryan who
is the father of this idea. He asked me to help to solve some problems
in AWNewbie - a tourist building world - and the result is this bot.
Without his help, ideas and extensive testing the bot wouldn't be here
today! He created an excellent web help for the users too (I'm a know
lazy programmer who never creates help files).
Thanks to Matt888, Elyk and C P for their ideas and testing.
Thanks to Jetta Lewis who let me plant this bot in America to enable tourist builds there.
And thanks to all the tourists who are using the bot .
| |