Cinni's Furcadia Corner
So You Want To Make A Bot!
I noticed there was a lack of modern guides regarding bots in Furcadia, and unless you already know how to code it can be very difficult to figure it out. I am not a programmer myself but I wanted to share what I've learned so it can help others starting out! Please note that bots must abide by Furcadia rules. For more info, see here.
Silver Monkey
Silver Monkey is probably the easiest way to start making bots, since it uses a language called Monkeyspeak which is made to resemble Dragonspeak. To start, go to the github releases page and install version 2.19.650.503. Create a new bot file and save it, then uninstall that version of Silver Monkey and install the latest 3.0.084.0613 version and open the newly created .bini file (the newer UI doesn't work for creating new bot files which is why you create one with an older build). From there you can go to Tools > Edit Monkey Speak.
Here are just a few commands you can get the bot to do:
- *set message
(0:21) When anyone whispers anything with {setmsg} in it,
(1:0) and the triggering furre is the Bot Controller,
(5:211) set Variable %message to the Message the bot last received.
(5:122) chop off the beginning of variable %message, removing the first 7 characters of it.
(5:10) say {%message} (Furcadia commands or normal speech).
for ex. you can whisper the bot "setmsg hello world!" to make it say "hello world!"
I am still figuring out what's capable with this program and have noticed some lines that don't seem to work - but have figured out some work-arounds. For example:
- (5:619) Move the bot in this sequence {...} (one, sw, three, se, seven, nw, nine, or ne). - using this line, I haven't gotten the bot to move. Instead, I referenced furcadia's movement commands and made the bot say the corresponding movement command instead of using line 5:619
- (0:11) When anyone says {...}, OR (0:12) When anyone says anything with {...} in it, - I can get the bot to recognize when anyone says anything, but not specified text.
Sometimes when launching the client the bot doesn't seem to respond to commands, usually restarting Silver Monkey works for me.
Kiwibot
Kiwibot is a skeleton script that you can build upon if you know python. I don't know really know python but I've started to tinker with it and have gotten basic commands to work. To start (assuming you are using windows), go to the "Code" button on the github page and download the zip. Edit the bot.conf file (you can edit this in notepad) and change the account settings. I recommend saving the folder in your C:/Users/yourname/ directory and then launch the Command Prompt program that comes with windows. Type "cd kiwi-bot-main" and press enter to change the directory to the new folder, then "python kiwibot.py" to run the script. The bot works without having the Furcadia client open and will run as long as you have the command prompt open. To edit the script itself, right click the kiwibot file and open in any text editor (I use notepad++).
By default the bot accepts these whisper commands if you are the bot controller:
- cmd:quit (this disconnects the bot from furcadia)
- say:text (replace text with what you want the bot to say. this doesn't work for :emotes or `commands due to the space it adds before the text)
- move:m 1 OR move:sit etc. (m 1 refers to walking SW, it also accepts m 3, m 7, and m 9. you can also make it stand, sit, or lie, but I haven't figured out rotating.)
Auto-summoning and joining furres still needs work, but this is what I've managed to do:
- Make bot auto-join the bot controller:
Scroll until you find the comment that reads "# SUMMONING - would need to figure out to format the owner name appropriately; this could also be hardcoded." I haven't figured out how to format the owner name either, but you can hard code it to make the bot always accept summons by you. remove the # characters on the next three lines to un-comment the script and replace owner_name with your name. This is how it looks for me:
please note python is space sensitive, reference the code underneath it for spacing.summoned = re.compile(r'\(<font color=\'query\'><name shortname=\'cinni\'>cinni<\/name> asks you to join their company.*') if summoned.match(msg): sendMsg(socket, 'join')
- Make bot auto-summon furres:
This still needs work (I gotta learn regex lmao) because if a furre (who isn't the bot controller) tries to `summon the bot, the bot will instead auto-request that furre to join them. However, the bot will auto-summon the furre if they request a `join.
you can place this underneath the previously mentioned auto-join the bot controller code.joined = re.compile(r'\(<font color=\'query\'>') if joined.match(msg): sendMsg(socket, 'summon')